UNPKG

@activejs/core

Version:

Pragmatic, Reactive State Management for JavaScript Apps

199 lines 21.5 kB
/** * @internal please do not use. */ export const UniqueIdsAndLocationIdMap = {}; /** * @internal please do not use. */ const FrozenObj = Object.freeze({}); /** * The Global configuration for all ActiveJS constructs, Units, Systems, Action and Cluster. * * See {@link https://docs.activejs.dev/guides/configuration} for more details. * * @category 4. Utility */ export class Configuration { // tslint:enable:variable-name /** * The default Storage API being used for storing the values of persistent Units. * * @default `localStorage` */ static get storage() { return Configuration._storage || localStorage; } /** * Global ActiveJS environment configurations options. */ static get ENVIRONMENT() { if (this.isDevMode()) { return Configuration._ENVIRONMENT; } return Object.freeze({}); } /** * Configuration options applied to all the Actions. {@link Action} */ static get ACTION() { return Configuration._ACTION; } /** * Configuration options applied to all the Clusters. {@link Cluster} */ static get CLUSTER() { return Configuration._CLUSTER; } /** * Configuration options applied to all the Units. {@link Unit} */ static get UNITS() { return Configuration._UNITS; } /** * Configuration options applied to all the BoolUnits. {@link BoolUnit} */ static get BOOL_UNIT() { return Configuration._BOOL_UNIT; } /** * Configuration options applied to all the NumUnits. {@link NumUnit} */ static get NUM_UNIT() { return Configuration._NUM_UNIT; } /** * Configuration options applied to all the StringUnits. {@link StringUnit} */ static get STRING_UNIT() { return Configuration._STRING_UNIT; } /** * Configuration options applied to all the ListUnits. {@link ListUnit} */ static get LIST_UNIT() { return Configuration._LIST_UNIT; } /** * Configuration options applied to all the DictUnits. {@link DictUnit} */ static get DICT_UNIT() { return Configuration._DICT_UNIT; } /** * Configuration options applied to all the GenericUnits. {@link GenericUnit} */ static get GENERIC_UNIT() { return Configuration._GENERIC_UNIT; } /** * Configuration options applied to all the AsyncSystems. {@link AsyncSystem} */ static get ASYNC_SYSTEM() { return Configuration._ASYNC_SYSTEM; } /** * Sets and overrides default configurations. \ * These configurations can still be overridden at the time of instantiation. * * It should only be called once in the whole app. * Calling it second time doesn't merge the new configuration, * it simply rewrites it. * * However, the defaults are not affected by this behavior, \ * they have to be overridden specifically every time. * * @param config The configuration options. */ static set(config) { const { storage, ENVIRONMENT, ACTION, UNITS, CLUSTER, BOOL_UNIT, NUM_UNIT, STRING_UNIT, LIST_UNIT, DICT_UNIT, GENERIC_UNIT, ASYNC_SYSTEM, } = Object.assign({}, config); Configuration._storage = storage; Configuration._ENVIRONMENT = Object.freeze(Object.assign({}, ENVIRONMENT)); Configuration._ACTION = Object.freeze(Object.assign({}, ACTION)); Configuration._CLUSTER = Object.freeze(Object.assign({}, CLUSTER)); Configuration._UNITS = Object.freeze(Object.assign({}, UNITS)); Configuration._BOOL_UNIT = Object.freeze(Object.assign({}, BOOL_UNIT)); Configuration._NUM_UNIT = Object.freeze(Object.assign({}, NUM_UNIT)); Configuration._STRING_UNIT = Object.freeze(Object.assign({}, STRING_UNIT)); Configuration._LIST_UNIT = Object.freeze(Object.assign({}, LIST_UNIT)); Configuration._DICT_UNIT = Object.freeze(Object.assign({}, DICT_UNIT)); Configuration._GENERIC_UNIT = Object.freeze(Object.assign({}, GENERIC_UNIT)); Configuration._ASYNC_SYSTEM = Object.freeze(Object.assign(Object.assign({}, ASYNC_SYSTEM), { UNITS: Object.assign({}, ASYNC_SYSTEM === null || ASYNC_SYSTEM === void 0 ? void 0 : ASYNC_SYSTEM.UNITS), QUERY_UNIT: Object.assign({}, ASYNC_SYSTEM === null || ASYNC_SYSTEM === void 0 ? void 0 : ASYNC_SYSTEM.QUERY_UNIT), DATA_UNIT: Object.assign({}, ASYNC_SYSTEM === null || ASYNC_SYSTEM === void 0 ? void 0 : ASYNC_SYSTEM.DATA_UNIT), ERROR_UNIT: Object.assign({}, ASYNC_SYSTEM === null || ASYNC_SYSTEM === void 0 ? void 0 : ASYNC_SYSTEM.ERROR_UNIT), PENDING_UNIT: Object.assign({}, ASYNC_SYSTEM === null || ASYNC_SYSTEM === void 0 ? void 0 : ASYNC_SYSTEM.PENDING_UNIT) })); if (Configuration.ENVIRONMENT.checkUniqueId === true) { Object.keys(UniqueIdsAndLocationIdMap).forEach(k => { delete UniqueIdsAndLocationIdMap[k]; }); } } /** * Resets all global configurations to their default/empty state. \ * It doesn't affect any currently existing instances, it's only applicable to the instances created after this. */ static reset() { Configuration.set(null); } /** * It sets the {@link ENVIRONMENT} to it's default configuration, \ * i.e: it turns off all the checks declared in {@link ENVIRONMENT} and \ * also, disables the extra logs. */ static enableProdMode() { this._isDevMode = false; } /** * To check whether the production mode has been enabled or not. */ static isDevMode() { return this._isDevMode; } } // tslint:disable:variable-name /** * @internal please do not use. */ Configuration._isDevMode = true; /** * @internal please do not use. */ Configuration._ENVIRONMENT = FrozenObj; /** * @internal please do not use. */ Configuration._ACTION = FrozenObj; /** * @internal please do not use. */ Configuration._CLUSTER = FrozenObj; /** * @internal please do not use. */ Configuration._UNITS = FrozenObj; /** * @internal please do not use. */ Configuration._BOOL_UNIT = FrozenObj; /** * @internal please do not use. */ Configuration._NUM_UNIT = FrozenObj; /** * @internal please do not use. */ Configuration._STRING_UNIT = FrozenObj; /** * @internal please do not use. */ Configuration._LIST_UNIT = FrozenObj; /** * @internal please do not use. */ Configuration._DICT_UNIT = FrozenObj; /** * @internal please do not use. */ Configuration._GENERIC_UNIT = FrozenObj; /** * @internal please do not use. */ Configuration._ASYNC_SYSTEM = FrozenObj; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9hY3RpdmVqcy9hY3RpdmVqcy9wYWNrYWdlcy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUEyQixFQUFFLENBQUM7QUFDcEU7O0dBRUc7QUFDSCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBd0R4Qiw4QkFBOEI7SUFFOUI7Ozs7T0FJRztJQUNILE1BQU0sS0FBSyxPQUFPO1FBQ2hCLE9BQU8sYUFBYSxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxLQUFLLFdBQVc7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsT0FBTyxhQUFhLENBQUMsWUFBWSxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sS0FBSyxNQUFNO1FBQ2YsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sS0FBSyxPQUFPO1FBQ2hCLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLEtBQUssS0FBSztRQUNkLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLEtBQUssU0FBUztRQUNsQixPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxLQUFL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SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsS0FBSztRQUNWLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsY0FBYztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDOztBQWhPRCwrQkFBK0I7QUFFL0I7O0dBRUc7QUFDWSx3QkFBVSxHQUFHLElBQUksQ0FBQztBQUtqQzs7R0FFRztBQUNZLDBCQUFZLEdBQXNCLFNBQVMsQ0FBQztBQUMzRDs7R0FFRztBQUNZLHFCQUFPLEdBQXVCLFNBQVMsQ0FBQztBQUN2RDs7R0FFRztBQUNZLHNCQUFRLEdBQXdCLFNBQVMsQ0FBQztBQUN6RDs7R0FFRztBQUNZLG9CQUFNLEdBQTBCLFNBQVMsQ0FBQztBQUN6RDs7R0FFRztBQUNZLHdCQUFVLEdBQThCLFNBQVMsQ0FBQztBQUNqRTs7R0FFRztBQUNZLHVCQUFTLEdBQTZCLFNBQVMsQ0FBQztBQUMvRDs7R0FFRztBQUNZLDBCQUFZLEdBQTZCLFNBQVMsQ0FBQztBQUNsRTs7R0FFRztBQUNZLHdCQUFVLEdBQTRCLFNBQVMsQ0FBQztBQUMvRDs7R0FFRztBQUNZLHdCQUFVLEdBQXFDLFNBQVMsQ0FBQztBQUN4RTs7R0FFRztBQUNZLDJCQUFhLEdBQTBCLFNBQVMsQ0FBQztBQUNoRTs7R0FFRztBQUNZLDJCQUFhLEdBQTRCLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpY3RWYWx1ZSxcbiAgRW52aXJvbm1lbnRDb25maWcsXG4gIEdsb2JhbEFjdGlvbkNvbmZpZyxcbiAgR2xvYmFsQXN5bmNTeXN0ZW1Db25maWcsXG4gIEdsb2JhbENsdXN0ZXJDb25maWcsXG4gIEdsb2JhbENvbmZpZyxcbiAgR2xvYmFsVW5pdENvbmZpZyxcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Q2x1c3Rlcn0gZnJvbSAnLi9jbHVzdGVyJztcbmltcG9ydCB7QWN0aW9ufSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQge0RpY3RVbml0fSBmcm9tICcuL2RpY3QtdW5pdCc7XG5pbXBvcnQge0xpc3RVbml0fSBmcm9tICcuL2xpc3QtdW5pdCc7XG5pbXBvcnQge1N0cmluZ1VuaXR9IGZyb20gJy4vc3RyaW5nLXVuaXQnO1xuaW1wb3J0IHtOdW1Vbml0fSBmcm9tICcuL251bS11bml0JztcbmltcG9ydCB7Qm9vbFVuaXR9IGZyb20gJy4vYm9vbC11bml0JztcbmltcG9ydCB7R2VuZXJpY1VuaXR9IGZyb20gJy4vZ2VuZXJpYy11bml0JztcbmltcG9ydCB7QXN5bmNTeXN0ZW19IGZyb20gJy4vYXN5bmMtc3lzdGVtJztcblxuLyoqXG4gKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gKi9cbmV4cG9ydCBjb25zdCBVbmlxdWVJZHNBbmRMb2NhdGlvbklkTWFwOiB7W2lkOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4vKipcbiAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAqL1xuY29uc3QgRnJvemVuT2JqID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbi8qKlxuICogVGhlIEdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBhbGwgQWN0aXZlSlMgY29uc3RydWN0cywgVW5pdHMsIFN5c3RlbXMsIEFjdGlvbiBhbmQgQ2x1c3Rlci5cbiAqXG4gKiBTZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5hY3RpdmVqcy5kZXYvZ3VpZGVzL2NvbmZpZ3VyYXRpb259IGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQGNhdGVnb3J5IDQuIFV0aWxpdHlcbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb24ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZTp2YXJpYWJsZS1uYW1lXG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9pc0Rldk1vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX3N0b3JhZ2U6IFN0b3JhZ2U7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfRU5WSVJPTk1FTlQ6IEVudmlyb25tZW50Q29uZmlnID0gRnJvemVuT2JqO1xuICAvKipcbiAgICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX0FDVElPTjogR2xvYmFsQWN0aW9uQ29uZmlnID0gRnJvemVuT2JqO1xuICAvKipcbiAgICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX0NMVVNURVI6IEdsb2JhbENsdXN0ZXJDb25maWcgPSBGcm96ZW5PYmo7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfVU5JVFM6IEdsb2JhbFVuaXRDb25maWc8YW55PiA9IEZyb3plbk9iajtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9CT09MX1VOSVQ6IEdsb2JhbFVuaXRDb25maWc8Ym9vbGVhbj4gPSBGcm96ZW5PYmo7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfTlVNX1VOSVQ6IEdsb2JhbFVuaXRDb25maWc8bnVtYmVyPiA9IEZyb3plbk9iajtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9TVFJJTkdfVU5JVDogR2xvYmFsVW5pdENvbmZpZzxzdHJpbmc+ID0gRnJvemVuT2JqO1xuICAvKipcbiAgICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX0xJU1RfVU5JVDogR2xvYmFsVW5pdENvbmZpZzxhbnlbXT4gPSBGcm96ZW5PYmo7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfRElDVF9VTklUOiBHbG9iYWxVbml0Q29uZmlnPERpY3RWYWx1ZTxhbnk+PiA9IEZyb3plbk9iajtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9HRU5FUklDX1VOSVQ6IEdsb2JhbFVuaXRDb25maWc8YW55PiA9IEZyb3plbk9iajtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9BU1lOQ19TWVNURU06IEdsb2JhbEFzeW5jU3lzdGVtQ29uZmlnID0gRnJvemVuT2JqO1xuXG4gIC8vIHRzbGludDplbmFibGU6dmFyaWFibGUtbmFtZVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBTdG9yYWdlIEFQSSBiZWluZyB1c2VkIGZvciBzdG9yaW5nIHRoZSB2YWx1ZXMgb2YgcGVyc2lzdGVudCBVbml0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGxvY2FsU3RvcmFnZWBcbiAgICovXG4gIHN0YXRpYyBnZXQgc3RvcmFnZSgpOiBSZWFkb25seTxTdG9yYWdlPiB7XG4gICAgcmV0dXJuIENvbmZpZ3VyYXRpb24uX3N0b3JhZ2UgfHwgbG9jYWxTdG9yYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBBY3RpdmVKUyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucyBvcHRpb25zLlxuICAgKi9cbiAgc3RhdGljIGdldCBFTlZJUk9OTUVOVCgpOiBSZWFkb25seTxFbnZpcm9ubWVudENvbmZpZz4ge1xuICAgIGlmICh0aGlzLmlzRGV2TW9kZSgpKSB7XG4gICAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5fRU5WSVJPTk1FTlQ7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXBwbGllZCB0byBhbGwgdGhlIEFjdGlvbnMuIHtAbGluayBBY3Rpb259XG4gICAqL1xuICBzdGF0aWMgZ2V0IEFDVElPTigpOiBSZWFkb25seTxHbG9iYWxBY3Rpb25Db25maWc+IHtcbiAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5fQUNUSU9OO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCB0aGUgQ2x1c3RlcnMuIHtAbGluayBDbHVzdGVyfVxuICAgKi9cbiAgc3RhdGljIGdldCBDTFVTVEVSKCk6IFJlYWRvbmx5PEdsb2JhbENsdXN0ZXJDb25maWc+IHtcbiAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5fQ0xVU1RFUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXBwbGllZCB0byBhbGwgdGhlIFVuaXRzLiB7QGxpbmsgVW5pdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgVU5JVFMoKTogUmVhZG9ubHk8R2xvYmFsVW5pdENvbmZpZzxhbnk+PiB7XG4gICAgcmV0dXJuIENvbmZpZ3VyYXRpb24uX1VOSVRTO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCB0aGUgQm9vbFVuaXRzLiB7QGxpbmsgQm9vbFVuaXR9XG4gICAqL1xuICBzdGF0aWMgZ2V0IEJPT0xfVU5JVCgpOiBSZWFkb25seTxHbG9iYWxVbml0Q29uZmlnPGJvb2xlYW4+PiB7XG4gICAgcmV0dXJuIENvbmZpZ3VyYXRpb24uX0JPT0xfVU5JVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXBwbGllZCB0byBhbGwgdGhlIE51bVVuaXRzLiB7QGxpbmsgTnVtVW5pdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgTlVNX1VOSVQoKTogUmVhZG9ubHk8R2xvYmFsVW5pdENvbmZpZzxudW1iZXI+PiB7XG4gICAgcmV0dXJuIENvbmZpZ3VyYXRpb24uX05VTV9VTklUO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCB0aGUgU3RyaW5nVW5pdHMuIHtAbGluayBTdHJpbmdVbml0fVxuICAgKi9cbiAgc3RhdGljIGdldCBTVFJJTkdfVU5JVCgpOiBSZWFkb25seTxHbG9iYWxVbml0Q29uZmlnPHN0cmluZz4+IHtcbiAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5fU1RSSU5HX1VOSVQ7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGFwcGxpZWQgdG8gYWxsIHRoZSBMaXN0VW5pdHMuIHtAbGluayBMaXN0VW5pdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgTElTVF9VTklUKCk6IFJlYWRvbmx5PEdsb2JhbFVuaXRDb25maWc8YW55W10+PiB7XG4gICAgcmV0dXJuIENvbmZpZ3VyYXRpb24uX0xJU1RfVU5JVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXBwbGllZCB0byBhbGwgdGhlIERpY3RVbml0cy4ge0BsaW5rIERpY3RVbml0fVxuICAgKi9cbiAgc3RhdGljIGdldCBESUNUX1VOSVQoKTogUmVhZG9ubHk8R2xvYmFsVW5pdENvbmZpZzxEaWN0VmFsdWU8YW55Pj4+IHtcbiAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5fRElDVF9VTklUO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCB0aGUgR2VuZXJpY1VuaXRzLiB7QGxpbmsgR2VuZXJpY1VuaXR9XG4gICAqL1xuICBzdGF0aWMgZ2V0IEdFTkVSSUNfVU5JVCgpOiBSZWFkb25seTxHbG9iYWxVbml0Q29uZmlnPGFueT4+IHtcbiAgICByZXR1cm4gQ29uZmlndXJhdGlvbi5fR0VORVJJQ19VTklUO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCB0aGUgQXN5bmNTeXN0ZW1zLiB7QGxpbmsgQXN5bmNTeXN0ZW19XG4gICAqL1xuICBzdGF0aWMgZ2V0IEFTWU5DX1NZU1RFTSgpOiBSZWFkb25seTxHbG9iYWxBc3luY1N5c3RlbUNvbmZpZz4ge1xuICAgIHJldHVybiBDb25maWd1cmF0aW9uLl9BU1lOQ19TWVNURU07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbmQgb3ZlcnJpZGVzIGRlZmF1bHQgY29uZmlndXJhdGlvbnMuIFxcXG4gICAqIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGNhbiBzdGlsbCBiZSBvdmVycmlkZGVuIGF0IHRoZSB0aW1lIG9mIGluc3RhbnRpYXRpb24uXG4gICAqXG4gICAqIEl0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIGluIHRoZSB3aG9sZSBhcHAuXG4gICAqIENhbGxpbmcgaXQgc2Vjb25kIHRpbWUgZG9lc24ndCBtZXJnZSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24sXG4gICAqIGl0IHNpbXBseSByZXdyaXRlcyBpdC5cbiAgICpcbiAgICogSG93ZXZlciwgdGhlIGRlZmF1bHRzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhpcyBiZWhhdmlvciwgXFxcbiAgICogdGhleSBoYXZlIHRvIGJlIG92ZXJyaWRkZW4gc3BlY2lmaWNhbGx5IGV2ZXJ5IHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICovXG4gIHN0YXRpYyBzZXQoY29uZmlnOiBHbG9iYWxDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBzdG9yYWdlLFxuICAgICAgRU5WSVJPTk1FTlQsXG4gICAgICBBQ1RJT04sXG4gICAgICBVTklUUyxcbiAgICAgIENMVVNURVIsXG4gICAgICBCT09MX1VOSVQsXG4gICAgICBOVU1fVU5JVCxcbiAgICAgIFNUUklOR19VTklULFxuICAgICAgTElTVF9VTklULFxuICAgICAgRElDVF9VTklULFxuICAgICAgR0VORVJJQ19VTklULFxuICAgICAgQVNZTkNfU1lTVEVNLFxuICAgIH06IEdsb2JhbENvbmZpZyA9IHsuLi5jb25maWd9O1xuXG4gICAgQ29uZmlndXJhdGlvbi5fc3RvcmFnZSA9IHN0b3JhZ2U7XG4gICAgQ29uZmlndXJhdGlvbi5fRU5WSVJPTk1FTlQgPSBPYmplY3QuZnJlZXplKHsuLi5FTlZJUk9OTUVOVH0pO1xuICAgIENvbmZpZ3VyYXRpb24uX0FDVElPTiA9IE9iamVjdC5mcmVlemUoey4uLkFDVElPTn0pO1xuICAgIENvbmZpZ3VyYXRpb24uX0NMVVNURVIgPSBPYmplY3QuZnJlZXplKHsuLi5DTFVTVEVSfSk7XG4gICAgQ29uZmlndXJhdGlvbi5fVU5JVFMgPSBPYmplY3QuZnJlZXplKHsuLi5VTklUU30pO1xuICAgIENvbmZpZ3VyYXRpb24uX0JPT0xfVU5JVCA9IE9iamVjdC5mcmVlemUoey4uLkJPT0xfVU5JVH0pO1xuICAgIENvbmZpZ3VyYXRpb24uX05VTV9VTklUID0gT2JqZWN0LmZyZWV6ZSh7Li4uTlVNX1VOSVR9KTtcbiAgICBDb25maWd1cmF0aW9uLl9TVFJJTkdfVU5JVCA9IE9iamVjdC5mcmVlemUoey4uLlNUUklOR19VTklUfSk7XG4gICAgQ29uZmlndXJhdGlvbi5fTElTVF9VTklUID0gT2JqZWN0LmZyZWV6ZSh7Li4uTElTVF9VTklUfSk7XG4gICAgQ29uZmlndXJhdGlvbi5fRElDVF9VTklUID0gT2JqZWN0LmZyZWV6ZSh7Li4uRElDVF9VTklUfSk7XG4gICAgQ29uZmlndXJhdGlvbi5fR0VORVJJQ19VTklUID0gT2JqZWN0LmZyZWV6ZSh7Li4uR0VORVJJQ19VTklUfSk7XG4gICAgQ29uZmlndXJhdGlvbi5fQVNZTkNfU1lTVEVNID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAuLi5BU1lOQ19TWVNURU0sXG4gICAgICBVTklUUzogey4uLkFTWU5DX1NZU1RFTT8uVU5JVFN9LFxuICAgICAgUVVFUllfVU5JVDogey4uLkFTWU5DX1NZU1RFTT8uUVVFUllfVU5JVH0sXG4gICAgICBEQVRBX1VOSVQ6IHsuLi5BU1lOQ19TWVNURU0/LkRBVEFfVU5JVH0sXG4gICAgICBFUlJPUl9VTklUOiB7Li4uQVNZTkNfU1lTVEVNPy5FUlJPUl9VTklUfSxcbiAgICAgIFBFTkRJTkdfVU5JVDogey4uLkFTWU5DX1NZU1RFTT8uUEVORElOR19VTklUfSxcbiAgICB9KTtcblxuICAgIGlmIChDb25maWd1cmF0aW9uLkVOVklST05NRU5ULmNoZWNrVW5pcXVlSWQgPT09IHRydWUpIHtcbiAgICAgIE9iamVjdC5rZXlzKFVuaXF1ZUlkc0FuZExvY2F0aW9uSWRNYXApLmZvckVhY2goayA9PiB7XG4gICAgICAgIGRlbGV0ZSBVbmlxdWVJZHNBbmRMb2NhdGlvbklkTWFwW2tdO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbGwgZ2xvYmFsIGNvbmZpZ3VyYXRpb25zIHRvIHRoZWlyIGRlZmF1bHQvZW1wdHkgc3RhdGUuIFxcXG4gICAqIEl0IGRvZXNuJ3QgYWZmZWN0IGFueSBjdXJyZW50bHkgZXhpc3RpbmcgaW5zdGFuY2VzLCBpdCdzIG9ubHkgYXBwbGljYWJsZSB0byB0aGUgaW5zdGFuY2VzIGNyZWF0ZWQgYWZ0ZXIgdGhpcy5cbiAgICovXG4gIHN0YXRpYyByZXNldCgpOiB2b2lkIHtcbiAgICBDb25maWd1cmF0aW9uLnNldChudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBzZXRzIHRoZSB7QGxpbmsgRU5WSVJPTk1FTlR9IHRvIGl0J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBcXFxuICAgKiBpLmU6IGl0IHR1cm5zIG9mZiBhbGwgdGhlIGNoZWNrcyBkZWNsYXJlZCBpbiB7QGxpbmsgRU5WSVJPTk1FTlR9IGFuZCBcXFxuICAgKiBhbHNvLCBkaXNhYmxlcyB0aGUgZXh0cmEgbG9ncy5cbiAgICovXG4gIHN0YXRpYyBlbmFibGVQcm9kTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0Rldk1vZGUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBjaGVjayB3aGV0aGVyIHRoZSBwcm9kdWN0aW9uIG1vZGUgaGFzIGJlZW4gZW5hYmxlZCBvciBub3QuXG4gICAqL1xuICBzdGF0aWMgaXNEZXZNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rldk1vZGU7XG4gIH1cbn1cbiJdfQ==