UNPKG

vuex-tstore

Version:

Provides a low-overhead TypeScript wrapper around Vuex that can trigger compilation errors and IntelliSense tips.

114 lines 18.2 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Store = void 0; const vuex_1 = require("vuex"); const actions_1 = require("./actions"); const getters_1 = require("./getters"); const mutations_1 = require("./mutations"); const state_1 = require("./state"); /** * Creates a type-aware wrapper around a Vuex store. * * This class generates type-aware bindings to a wrapped Vuex store in order to * expose typing information to the store consumer via a series of Generics * which reference the configuration object. This means that this Store wrapper * enables IntelliSense (VSCode), Linters, and the TypeScript Compiler to be * able to validate that code is actually using the store correctly. * * ```typescript * import Store from 'vuex-tstore'; * * const options = { * state: () => ({ title: "Hello, world!" }), * getters: { * title: (state) => state.title * }, * mutations: { * resetTitle: (state) => { state.title = ''; }, * setTitle: (state, payload: { title: string }) => { state.title = title; } * }, * actions: { * resetTitle: async (context) => context.commit('resetTitle'), * setTitle: (context, payload: { title: string }) => { * setTimeout(() => context.commit('setTitle', payload), 1000); * } * } * }; * * const store = new Store(options); * * store.getters.title; // "Hello, world!" * store.mutations.resetTitle(); // "" * store.mutations.setTitle({ title: "foo" }); // "foo" * * store.actions.resetTitle(); * store.actions.setTitle({ title: "bar" }); * ``` */ class Store { constructor(options, store = new vuex_1.Store(options), name = "") { const opts = options || {}; this.store = store; this.actions = actions_1.wrapActions(name, this.store, opts.actions || {}); this.getters = getters_1.wrapGetters(name, this.store, opts.getters || {}); this.modules = wrapModules(name, this.store, opts.modules || {}); this.state = state_1.wrapState(name, this.store); this.mutations = mutations_1.wrapMutations(name, this.store, opts.mutations || {}); } commit(type, payload, options) { return this.store.commit(type, payload, options); } dispatch(type, payload, options) { return __awaiter(this, void 0, void 0, function* () { return this.store.dispatch(type, payload, options); }); } registerModule(path, module, options) { // This cast is just to pass the linter. Vuex wasn't built for TypeScript. return this.store.registerModule(path, module, options); } unregisterModule(path) { // This cast is just to pass the linter. Vuex wasn't built for TypeScript. return this.store.unregisterModule(path); } hotUpdate(options) { return this.store.hotUpdate(options); } subscribe(fn) { return this.store.subscribe(fn); } subscribeAction(fn) { return this.store.subscribeAction(fn); } watch(getter, cb, options) { return this.store.watch(getter, cb, options); } } exports.Store = Store; /** * Creates a dictionary of modules. * * @param parent The name of the parent module. * @param store The store to wrap. * @param modules The list of modules to process. */ function wrapModules(parent, store, modules) { return Object.entries(modules).reduce((mods, [key, options]) => { const name = options.namespaced ? `${parent}${parent === "" ? "" : "/"}${key}` : ""; return Object.defineProperty(mods, key, { value: new Store(options, store, name), }); }, {}); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJzdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSwrQkFjYztBQUNkLHVDQUF3RDtBQUN4RCx1Q0FBc0U7QUFDdEUsMkNBQThEO0FBQzlELG1DQUE0QztBQWE1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFhLEtBQUs7SUEwRmhCLFlBQ0UsT0FBNEMsRUFDNUMsS0FBSyxHQUFHLElBQUksWUFBUyxDQUFDLE9BQU8sQ0FBQyxFQUM5QixJQUFJLEdBQUcsRUFBRTtRQUVULE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxxQkFBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLE9BQU8sR0FBRyxxQkFBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsS0FBSyxHQUFHLGlCQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLHlCQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQVksRUFBRSxPQUFhLEVBQUUsT0FBdUI7UUFDaEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFWSxRQUFRLENBQ25CLElBQVksRUFDWixPQUFhLEVBQ2IsT0FBeUI7O1lBRXpCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRCxDQUFDO0tBQUE7SUFFTSxjQUFjLENBQ25CLElBQXVCLEVBQ3ZCLE1BQTZCLEVBQzdCLE9BQXVCO1FBRXZCLDBFQUEwRTtRQUMxRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLGdCQUFnQixDQUFDLElBQXVCO1FBQzdDLDBFQUEwRTtRQUMxRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBYyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLFNBQVMsQ0FBQyxPQUtoQjtRQUNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLFNBQVMsQ0FDZCxFQUEyQztRQUUzQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxlQUFlLENBQ3BCLEVBQXlDO1FBRXpDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLEtBQUssQ0FNVixNQUFpQixFQUFFLEVBQVMsRUFBRSxPQUFzQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBaktELHNCQWlLQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsV0FBVyxDQU1sQixNQUFjLEVBQ2QsS0FBNEIsRUFDNUIsT0FBaUI7SUFFakIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1FBQzdELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVO1lBQzdCLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7WUFDOUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FDZCxPQUE2QyxFQUM3QyxLQUFLLEVBQ0wsSUFBSSxDQUNMO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUFFLEVBQUUsQ0FBZ0IsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2F0Y2hPcHRpb25zIH0gZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uUGF5bG9hZCxcbiAgQWN0aW9uVHJlZSxcbiAgQ29tbWl0T3B0aW9ucyxcbiAgRGlzcGF0Y2hPcHRpb25zLFxuICBHZXR0ZXJUcmVlLFxuICBNb2R1bGUsXG4gIE1vZHVsZU9wdGlvbnMsXG4gIE1vZHVsZVRyZWUsXG4gIE11dGF0aW9uUGF5bG9hZCxcbiAgTXV0YXRpb25UcmVlLFxuICBTdG9yZSBhcyBWdWV4U3RvcmUsXG4gIFN0b3JlT3B0aW9ucyxcbiAgU3Vic2NyaWJlQWN0aW9uT3B0aW9ucyxcbn0gZnJvbSBcInZ1ZXhcIjtcbmltcG9ydCB7IHdyYXBBY3Rpb25zLCBXcmFwcGVkQWN0aW9ucyB9IGZyb20gXCIuL2FjdGlvbnNcIjtcbmltcG9ydCB7IEdldEFjY2Vzc29ycywgd3JhcEdldHRlcnMsIFdyYXBwZWRHZXR0ZXJzIH0gZnJvbSBcIi4vZ2V0dGVyc1wiO1xuaW1wb3J0IHsgd3JhcE11dGF0aW9ucywgV3JhcHBlZE11dGF0aW9ucyB9IGZyb20gXCIuL211dGF0aW9uc1wiO1xuaW1wb3J0IHsgd3JhcFN0YXRlLCBUU3RhdGUgfSBmcm9tIFwiLi9zdGF0ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBzdGF0ZT86IG9iamVjdDtcbiAgZ2V0dGVycz86IG9iamVjdDtcbiAgbXV0YXRpb25zPzogb2JqZWN0O1xuICBhY3Rpb25zPzogb2JqZWN0O1xuICBuYW1lc3BhY2VkPzogYm9vbGVhbjtcbiAgbW9kdWxlcz86IHtcbiAgICBba2V5OiBzdHJpbmddOiBPcHRpb25zO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0eXBlLWF3YXJlIHdyYXBwZXIgYXJvdW5kIGEgVnVleCBzdG9yZS5cbiAqXG4gKiBUaGlzIGNsYXNzIGdlbmVyYXRlcyB0eXBlLWF3YXJlIGJpbmRpbmdzIHRvIGEgd3JhcHBlZCBWdWV4IHN0b3JlIGluIG9yZGVyIHRvXG4gKiBleHBvc2UgdHlwaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBzdG9yZSBjb25zdW1lciB2aWEgYSBzZXJpZXMgb2YgR2VuZXJpY3NcbiAqIHdoaWNoIHJlZmVyZW5jZSB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QuIFRoaXMgbWVhbnMgdGhhdCB0aGlzIFN0b3JlIHdyYXBwZXJcbiAqIGVuYWJsZXMgSW50ZWxsaVNlbnNlIChWU0NvZGUpLCBMaW50ZXJzLCBhbmQgdGhlIFR5cGVTY3JpcHQgQ29tcGlsZXIgdG8gYmVcbiAqIGFibGUgdG8gdmFsaWRhdGUgdGhhdCBjb2RlIGlzIGFjdHVhbGx5IHVzaW5nIHRoZSBzdG9yZSBjb3JyZWN0bHkuXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IFN0b3JlIGZyb20gJ3Z1ZXgtdHN0b3JlJztcbiAqXG4gKiBjb25zdCBvcHRpb25zID0ge1xuICogICBzdGF0ZTogKCkgPT4gKHsgdGl0bGU6IFwiSGVsbG8sIHdvcmxkIVwiIH0pLFxuICogICBnZXR0ZXJzOiB7XG4gKiAgICAgdGl0bGU6IChzdGF0ZSkgPT4gc3RhdGUudGl0bGVcbiAqICAgfSxcbiAqICAgbXV0YXRpb25zOiB7XG4gKiAgICAgcmVzZXRUaXRsZTogKHN0YXRlKSA9PiB7IHN0YXRlLnRpdGxlID0gJyc7IH0sXG4gKiAgICAgc2V0VGl0bGU6IChzdGF0ZSwgcGF5bG9hZDogeyB0aXRsZTogc3RyaW5nIH0pID0+IHsgc3RhdGUudGl0bGUgPSB0aXRsZTsgfVxuICogICB9LFxuICogICBhY3Rpb25zOiB7XG4gKiAgICAgcmVzZXRUaXRsZTogYXN5bmMgKGNvbnRleHQpID0+IGNvbnRleHQuY29tbWl0KCdyZXNldFRpdGxlJyksXG4gKiAgICAgc2V0VGl0bGU6IChjb250ZXh0LCBwYXlsb2FkOiB7IHRpdGxlOiBzdHJpbmcgfSkgPT4ge1xuICogICAgICAgc2V0VGltZW91dCgoKSA9PiBjb250ZXh0LmNvbW1pdCgnc2V0VGl0bGUnLCBwYXlsb2FkKSwgMTAwMCk7XG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICpcbiAqIGNvbnN0IHN0b3JlID0gbmV3IFN0b3JlKG9wdGlvbnMpO1xuICpcbiAqIHN0b3JlLmdldHRlcnMudGl0bGU7IC8vIFwiSGVsbG8sIHdvcmxkIVwiXG4gKiBzdG9yZS5tdXRhdGlvbnMucmVzZXRUaXRsZSgpOyAvLyBcIlwiXG4gKiBzdG9yZS5tdXRhdGlvbnMuc2V0VGl0bGUoeyB0aXRsZTogXCJmb29cIiB9KTsgLy8gXCJmb29cIlxuICpcbiAqIHN0b3JlLmFjdGlvbnMucmVzZXRUaXRsZSgpO1xuICogc3RvcmUuYWN0aW9ucy5zZXRUaXRsZSh7IHRpdGxlOiBcImJhclwiIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yZTxcbiAgVE1vZHVsZVN0YXRlLFxuICBUUm9vdFN0YXRlLFxuICBUT3B0aW9ucyBleHRlbmRzIE9wdGlvbnMsXG4gIFRXcmFwcGVkTXV0YXRpb25zID0gV3JhcHBlZE11dGF0aW9uczxcbiAgICBUT3B0aW9ucyBleHRlbmRzIHsgbXV0YXRpb25zPzogaW5mZXIgVCB9ID8gVCA6IHVuZGVmaW5lZFxuICA+LFxuICBUV3JhcHBlZEFjdGlvbnMgPSBXcmFwcGVkQWN0aW9uczxcbiAgICBUT3B0aW9ucyBleHRlbmRzIHsgYWN0aW9ucz86IGluZmVyIFQgfSA/IFQgOiB1bmRlZmluZWRcbiAgPixcbiAgVFdyYXBwZWRHZXR0ZXJzID0gV3JhcHBlZEdldHRlcnM8XG4gICAgR2V0QWNjZXNzb3JzPFxuICAgICAgVE1vZHVsZVN0YXRlLFxuICAgICAgVFJvb3RTdGF0ZSxcbiAgICAgIFRPcHRpb25zIGV4dGVuZHMgeyBnZXR0ZXJzPzogaW5mZXIgVCB9ID8gVCA6IHVuZGVmaW5lZFxuICAgID5cbiAgPixcbiAgVE1vZHVsZUxpc3QgPSBNb2R1bGVMaXN0PFxuICAgIFRNb2R1bGVTdGF0ZSxcbiAgICBUUm9vdFN0YXRlLFxuICAgIFRPcHRpb25zIGV4dGVuZHMgeyBtb2R1bGVzPzogaW5mZXIgVCB9ID8gVCA6IHVuZGVmaW5lZFxuICA+XG4+IHtcbiAgLyoqXG4gICAqIFJlYWQtb25seSBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSBnZXR0ZXJzIGZvciB0aGlzIHN0b3JlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdldHRlcnM6IFJlYWRvbmx5PFRXcmFwcGVkR2V0dGVycz47XG5cbiAgLyoqXG4gICAqIFJlYWQtb25seSBwcm9wZXJ0eSB0aGF0IGhvbGRzIHJlZmVyZW5jZXMgdG8gdGhlIHN0b3JlIHN0YXRlLlxuICAgKi9cblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGU6IFJlYWRvbmx5PFRTdGF0ZTxUT3B0aW9uc1tcInN0YXRlXCJdPj47XG5cbiAgLyoqXG4gICAqIFJlYWQtb25seSBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSBtdXRhdGlvbnMgZm9yIHRoaXMgc3RvcmUuXG4gICAqXG4gICAqIEV2ZXJ5IHdyYXBwZWQgbW9kdWxlIGNhbiBiZSBleGVjdXRlZCB3aXRoIGFuIGF0dGFjaGVkIGZ1bmN0aW9uLCBhbmQgY29tZXNcbiAgICogd2l0aCB0d28gb3B0aW9ucyB0aGF0IG1heSBiZSBleGVjdXRlZCBmcm9tIHRoZSB3cmFwcGVyOlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHdyYXBwZXIubXV0YXRpb25zLm15TXV0YXRpb24ocGF5bG9hZCk7XG4gICAqIHdyYXBwZXIubXV0YXRpb25zLm15TXV0YXRpb24ubGlzdGVuKChwYXlsb2FkKSA9PiB7XG4gICAqICAgLy8gRG8gdGhpbmdzIGFmdGVyIHRoZSBtdXRhdGlvbiBpcyBleGVjdXRlZC5cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG11dGF0aW9uczogUmVhZG9ubHk8VFdyYXBwZWRNdXRhdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBSZWFkLW9ubHkgcHJvcGVydHkgdGhhdCBob2xkcyB0aGUgYWN0aW9ucyBmb3IgdGhpcyBzdG9yZS5cbiAgICpcbiAgICogRXZlcnkgd3JhcHBlZCBhY3Rpb24gY2FuIGJlIGV4ZWN1dGVkIHdpdGggYW4gYXR0YWNoZWQgZnVuY3Rpb24sIGFuZCBjb21lc1xuICAgKiB3aXRoIHR3byBvcHRpb25zIHRoYXQgbWF5IGJlIGV4ZWN1dGVkIGZyb20gdGhlIHdyYXBwZXI6XG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogd3JhcHBlci5hY3Rpb25zLm15QWN0aW9uKHBheWxvYWQpO1xuICAgKiB3cmFwcGVyLmFjdGlvbnMubXlBY3Rpb24uYmVmb3JlKChwYXlsb2FkKSA9PiB7XG4gICAqICAgLy8gRG8gdGhpbmdzIGJlZm9yZSB0aGUgYWN0aW9uIGlzIGV4ZWN1dGVkLlxuICAgKiB9KTtcbiAgICogd3JhcHBlci5hY3Rpb25zLm15QWN0aW9uLmFmdGVyKChwYXlsb2FkKSA9PiB7XG4gICAqICAgLy8gRG8gdGhpbmdzIGFmdGVyIHRoZSBhY3Rpb24gaXMgZXhlY3V0ZWQuXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY3Rpb25zOiBSZWFkb25seTxUV3JhcHBlZEFjdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBSZWFkLW9ubHkgcHJvcGVydHkgdGhhdCBob2xkcyB0aGUgbW9kdWxlcyBmb3IgdGhpcyBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2R1bGVzOiBUTW9kdWxlTGlzdDtcblxuICAvKipcbiAgICogUmVhZC1vbmx5IHJlZmVyZW5jZSB0byB0aGUgVnVleCBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdG9yZTogUmVhZG9ubHk8VnVleFN0b3JlPFRSb290U3RhdGU+PjtcblxuICAvKipcbiAgICogSW5zdGFudGlhdGVzIGEgbmV3IHdyYXBwZXIuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgVnVleCBTdG9yZS5cbiAgICogQHBhcmFtIHN0b3JlIEEgcHJlLWV4aXN0aW5nIHN0b3JlIHRvIHdyYXAuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBtb2R1bGUgbmFtZSB0byB1c2UgZm9yIHRoaXMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IFRPcHRpb25zICYgU3RvcmVPcHRpb25zPFRSb290U3RhdGU+KTtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogVE9wdGlvbnMgJiBTdG9yZU9wdGlvbnM8VFJvb3RTdGF0ZT4sXG4gICAgc3RvcmU6IFZ1ZXhTdG9yZTxUUm9vdFN0YXRlPixcbiAgICBuYW1lOiBzdHJpbmdcbiAgKTtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogVE9wdGlvbnMgJiBTdG9yZU9wdGlvbnM8VFJvb3RTdGF0ZT4sXG4gICAgc3RvcmUgPSBuZXcgVnVleFN0b3JlKG9wdGlvbnMpLFxuICAgIG5hbWUgPSBcIlwiXG4gICkge1xuICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIHRoaXMuYWN0aW9ucyA9IHdyYXBBY3Rpb25zKG5hbWUsIHRoaXMuc3RvcmUsIG9wdHMuYWN0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5nZXR0ZXJzID0gd3JhcEdldHRlcnMobmFtZSwgdGhpcy5zdG9yZSwgb3B0cy5nZXR0ZXJzIHx8IHt9KTtcbiAgICB0aGlzLm1vZHVsZXMgPSB3cmFwTW9kdWxlcyhuYW1lLCB0aGlzLnN0b3JlLCBvcHRzLm1vZHVsZXMgfHwge30pO1xuICAgIHRoaXMuc3RhdGUgPSB3cmFwU3RhdGUobmFtZSwgdGhpcy5zdG9yZSk7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB3cmFwTXV0YXRpb25zKG5hbWUsIHRoaXMuc3RvcmUsIG9wdHMubXV0YXRpb25zIHx8IHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb21taXQodHlwZTogc3RyaW5nLCBwYXlsb2FkPzogYW55LCBvcHRpb25zPzogQ29tbWl0T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmNvbW1pdCh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNwYXRjaChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcGF5bG9hZD86IGFueSxcbiAgICBvcHRpb25zPzogRGlzcGF0Y2hPcHRpb25zXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZGlzcGF0Y2godHlwZSwgcGF5bG9hZCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJNb2R1bGU8VD4oXG4gICAgcGF0aDogc3RyaW5nW10gfCBzdHJpbmcsXG4gICAgbW9kdWxlOiBNb2R1bGU8VCwgVFJvb3RTdGF0ZT4sXG4gICAgb3B0aW9ucz86IE1vZHVsZU9wdGlvbnNcbiAgKTogdm9pZCB7XG4gICAgLy8gVGhpcyBjYXN0IGlzIGp1c3QgdG8gcGFzcyB0aGUgbGludGVyLiBWdWV4IHdhc24ndCBidWlsdCBmb3IgVHlwZVNjcmlwdC5cbiAgICByZXR1cm4gdGhpcy5zdG9yZS5yZWdpc3Rlck1vZHVsZShwYXRoIGFzIHN0cmluZywgbW9kdWxlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyB1bnJlZ2lzdGVyTW9kdWxlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgLy8gVGhpcyBjYXN0IGlzIGp1c3QgdG8gcGFzcyB0aGUgbGludGVyLiBWdWV4IHdhc24ndCBidWlsdCBmb3IgVHlwZVNjcmlwdC5cbiAgICByZXR1cm4gdGhpcy5zdG9yZS51bnJlZ2lzdGVyTW9kdWxlKHBhdGggYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHB1YmxpYyBob3RVcGRhdGUob3B0aW9uczoge1xuICAgIGFjdGlvbnM/OiBBY3Rpb25UcmVlPFRSb290U3RhdGUsIFRSb290U3RhdGU+O1xuICAgIG11dGF0aW9ucz86IE11dGF0aW9uVHJlZTxUUm9vdFN0YXRlPjtcbiAgICBnZXR0ZXJzPzogR2V0dGVyVHJlZTxUUm9vdFN0YXRlLCBUUm9vdFN0YXRlPjtcbiAgICBtb2R1bGVzPzogTW9kdWxlVHJlZTxUUm9vdFN0YXRlPjtcbiAgfSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLmhvdFVwZGF0ZShvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmU8UCBleHRlbmRzIE11dGF0aW9uUGF5bG9hZD4oXG4gICAgZm46IChtdXRhdGlvbjogUCwgc3RhdGU6IFRSb290U3RhdGUpID0+IGFueVxuICApOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZUFjdGlvbjxQIGV4dGVuZHMgQWN0aW9uUGF5bG9hZD4oXG4gICAgZm46IFN1YnNjcmliZUFjdGlvbk9wdGlvbnM8UCwgVFJvb3RTdGF0ZT5cbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc3Vic2NyaWJlQWN0aW9uKGZuKTtcbiAgfVxuXG4gIHB1YmxpYyB3YXRjaDxcbiAgICBUR2V0dGVyRm4gZXh0ZW5kcyAoc3RhdGU6IFRSb290U3RhdGUsIGdldHRlcnM6IFRXcmFwcGVkR2V0dGVycykgPT4gYW55LFxuICAgIFRDYkZuIGV4dGVuZHMgKFxuICAgICAgdmFsdWU6IFJldHVyblR5cGU8VEdldHRlckZuPixcbiAgICAgIG9sZFZhbHVlOiBSZXR1cm5UeXBlPFRHZXR0ZXJGbj5cbiAgICApID0+IHZvaWRcbiAgPihnZXR0ZXI6IFRHZXR0ZXJGbiwgY2I6IFRDYkZuLCBvcHRpb25zPzogV2F0Y2hPcHRpb25zKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUud2F0Y2goZ2V0dGVyLCBjYiwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGljdGlvbmFyeSBvZiBtb2R1bGVzLlxuICpcbiAqIEBwYXJhbSBwYXJlbnQgVGhlIG5hbWUgb2YgdGhlIHBhcmVudCBtb2R1bGUuXG4gKiBAcGFyYW0gc3RvcmUgVGhlIHN0b3JlIHRvIHdyYXAuXG4gKiBAcGFyYW0gbW9kdWxlcyBUaGUgbGlzdCBvZiBtb2R1bGVzIHRvIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHdyYXBNb2R1bGVzPFxuICBUTW9kdWxlU3RhdGUsXG4gIFRSb290U3RhdGUsXG4gIFRNb2R1bGVzIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBPcHRpb25zIH0sXG4gIFRNb2R1bGVMaXN0ID0gTW9kdWxlTGlzdDxUTW9kdWxlU3RhdGUsIFRSb290U3RhdGUsIFRNb2R1bGVzPlxuPihcbiAgcGFyZW50OiBzdHJpbmcsXG4gIHN0b3JlOiBWdWV4U3RvcmU8VFJvb3RTdGF0ZT4sXG4gIG1vZHVsZXM6IFRNb2R1bGVzXG4pOiBUTW9kdWxlTGlzdCB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhtb2R1bGVzKS5yZWR1Y2UoKG1vZHMsIFtrZXksIG9wdGlvbnNdKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbnMubmFtZXNwYWNlZFxuICAgICAgPyBgJHtwYXJlbnR9JHtwYXJlbnQgPT09IFwiXCIgPyBcIlwiIDogXCIvXCJ9JHtrZXl9YFxuICAgICAgOiBcIlwiO1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kcywga2V5LCB7XG4gICAgICB2YWx1ZTogbmV3IFN0b3JlKFxuICAgICAgICBvcHRpb25zIGFzIE9wdGlvbnMgJiBTdG9yZU9wdGlvbnM8VFJvb3RTdGF0ZT4sXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBuYW1lXG4gICAgICApLFxuICAgIH0pO1xuICB9LCB7fSkgYXMgVE1vZHVsZUxpc3Q7XG59XG5cbnR5cGUgTW9kdWxlTGlzdDxcbiAgVE1vZHVsZVN0YXRlLFxuICBUUm9vdFN0YXRlLFxuICBUTW9kdWxlcyBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogT3B0aW9ucyB9XG4+ID0geyBba2V5IGluIGtleW9mIFRNb2R1bGVzXTogU3RvcmU8VE1vZHVsZVN0YXRlLCBUUm9vdFN0YXRlLCBUTW9kdWxlc1trZXldPiB9O1xuIl19