ngxs-synchronizers 1.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/decorators/sync-state.js → esm2020/decorators/sync-state.mjs} +1 -1
- package/esm2020/module.mjs +19 -0
- package/esm2020/ngxs-synchronizers.mjs +5 -0
- package/esm2020/state-selector.mjs +221 -0
- package/esm2020/sync-store.mjs +32 -0
- package/esm2020/synchronizer/state-synchronizer.mjs +36 -0
- package/esm2020/synchronizer/synchronizer-dictionary.mjs +26 -0
- package/fesm2015/ngxs-synchronizers.mjs +428 -0
- package/fesm2015/ngxs-synchronizers.mjs.map +1 -0
- package/{fesm2015/ngxs-synchronizers.js → fesm2020/ngxs-synchronizers.mjs} +40 -32
- package/fesm2020/ngxs-synchronizers.mjs.map +1 -0
- package/module.d.ts +4 -0
- package/package.json +23 -11
- package/state-selector.d.ts +2 -2
- package/sync-store.d.ts +3 -0
- package/synchronizer/synchronizer-dictionary.d.ts +1 -1
- package/bundles/ngxs-synchronizers.umd.js +0 -797
- package/bundles/ngxs-synchronizers.umd.js.map +0 -1
- package/esm2015/module.js +0 -12
- package/esm2015/ngxs-synchronizers.js +0 -6
- package/esm2015/state-selector.js +0 -221
- package/esm2015/sync-store.js +0 -32
- package/esm2015/synchronizer/state-synchronizer.js +0 -33
- package/esm2015/synchronizer/synchronizer-dictionary.js +0 -27
- package/fesm2015/ngxs-synchronizers.js.map +0 -1
- package/ngxs-synchronizers.d.ts +0 -5
- package/ngxs-synchronizers.metadata.json +0 -1
- /package/{esm2015/decorators/sync-class.js → esm2020/decorators/sync-class.mjs} +0 -0
- /package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- /package/{esm2015/synchronizer/collection-synchronizer.js → esm2020/synchronizer/collection-synchronizer.mjs} +0 -0
- /package/{esm2015/synchronizer/property-synchronizer.js → esm2020/synchronizer/property-synchronizer.mjs} +0 -0
- /package/{esm2015/synchronizer/synchronizer.js → esm2020/synchronizer/synchronizer.mjs} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ngxs-synchronizers.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/decorators/sync-class.ts","../../src/decorators/sync-state.ts","../../src/synchronizer/synchronizer-dictionary.ts","../../src/state-selector.ts","../../src/sync-store.ts","../../src/module.ts","../../src/synchronizer/state-synchronizer.ts","../../src/ngxs-synchronizers.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import { Type as ClassType } from \"@angular/core\";\nimport { SynchronizerDictionary } from \"../synchronizer/synchronizer-dictionary\";\n\nconst NGXS_SYNCHRONIZERS_METADATA_KEY = Symbol(\"$NGXS_SYNCHRONIZERS_METADATA\");\nconst PARENT_REF_KEY = Symbol(\"$PARENT_REF\");\nconst SYNC_STORE_OPTIONS_KEY = Symbol(\"$SYNC_STORE_OPTIONS\");\n\n// From NGXS - Not exposed publicly\ninterface StoreOptions<T> {\n name: string;\n defaults?: T;\n children?: any[];\n}\n\ninterface Metadata<T> {\n [SYNC_STORE_OPTIONS_KEY]: SyncStoreOptions<T>;\n [PARENT_REF_KEY]?: any;\n}\n\nexport interface SyncStoreOptions<T> extends StoreOptions<T> {\n synchronizers?: SynchronizerDictionary<T>;\n}\n\nexport interface SyncClass<T> extends ClassType<any> {\n [NGXS_SYNCHRONIZERS_METADATA_KEY]?: Metadata<T>;\n}\n\nexport namespace SyncClass {\n\n export function getStoreOptions<T>($class: SyncClass<T>): SyncStoreOptions<T> {\n return metadata<T>($class)[SYNC_STORE_OPTIONS_KEY];\n }\n\n export function setStoreOptions<T>($class: SyncClass<T>, options: SyncStoreOptions<T>): void {\n metadata<T>($class)[SYNC_STORE_OPTIONS_KEY] = options;\n }\n\n export function resolveParent<T>($class: SyncClass<T>): SyncClass<unknown> {\n return metadata<T>($class)[PARENT_REF_KEY];\n }\n\n export function resolveParents<T>($class: SyncClass<T>): SyncClass<unknown>[] {\n const parent = resolveParent($class);\n return parent ? [parent, ...resolveParents(parent)] : [];\n }\n\n export function setParent<T>($childClass: SyncClass<unknown>, $parentClass: SyncClass<T>): void {\n metadata<T>($childClass)[PARENT_REF_KEY] = $parentClass;\n }\n\n function metadata<T>(stateRef: any): Metadata<T> {\n const descriptor = Object.getOwnPropertyDescriptor(stateRef, NGXS_SYNCHRONIZERS_METADATA_KEY);\n\n if (!descriptor) {\n Object.defineProperty(stateRef, NGXS_SYNCHRONIZERS_METADATA_KEY, {\n configurable: false,\n enumerable: false,\n value: {}\n });\n\n return metadata<T>(stateRef);\n }\n\n return descriptor.value;\n }\n}\n","import { Action, State, StateContext } from \"@ngxs/store\";\nimport { SyncClass, SyncStoreOptions } from \"./sync-class\";\n\nexport function SyncState<T>(options: SyncStoreOptions<T>): ClassDecorator {\n\n return function(constructor: SyncClass<T>) {\n // Record the store options\n SyncClass.setStoreOptions<T>(constructor, options);\n\n // Bootstrap the actions for the store\n SyncState.UpdateAction.bootstrapClass(constructor);\n\n // Record the parent store class for any child stores\n if (options.children) {\n options.children.forEach(child => SyncClass.setParent(child, constructor));\n }\n\n // Apply the @State() decorator to the class\n State<T>(options)(constructor);\n } as any;\n}\n\nexport namespace SyncState {\n\n export class UpdateAction<StateT, PropertyT extends keyof StateT> {\n public static readonly type: string;\n\n constructor(\n public readonly property: PropertyT,\n public readonly payload: StateT[PropertyT]\n ) {}\n }\n\n export namespace UpdateAction {\n\n interface Type<StateT, PropertyT extends keyof StateT> {\n type: string;\n\n new(property: PropertyT, payload: StateT[PropertyT]): UpdateAction<StateT, PropertyT>;\n }\n\n const UPDATE_ACTION_FN_KEY = Symbol(\"$UPDATE_ACTION_FN\");\n const updateActions = new Map<SyncClass<any>, Type<any, any>>();\n\n export function bootstrapClass<StateT>($class: SyncClass<StateT>): void {\n // Add the update action function to the class\n Object.defineProperty($class.prototype, UPDATE_ACTION_FN_KEY, {\n configurable: false,\n enumerable: true,\n value<PropertyT extends keyof StateT>(\n context: StateContext<StateT>,\n { property, payload }: SyncState.UpdateAction<StateT, PropertyT>\n ) {\n if (context.getState() === undefined || context.getState() === null) {\n context.setState({ [property]: payload } as any);\n } else {\n context.patchState({ [property]: payload } as any);\n }\n }\n });\n\n // Apply the @Action() decorator to the new function\n Action(Type<StateT>($class))(\n $class.prototype,\n UPDATE_ACTION_FN_KEY,\n Object.getOwnPropertyDescriptor($class.prototype, UPDATE_ACTION_FN_KEY)\n );\n }\n\n export function Type<StateT, PropertyT extends keyof StateT = keyof StateT>(\n $class: SyncClass<StateT>\n ): Type<StateT, PropertyT> {\n if (!updateActions.has($class)) {\n const opts = SyncClass.getStoreOptions($class);\n updateActions.set($class, class extends UpdateAction<StateT, PropertyT> {\n public static readonly type: string = `[${opts.name} sync] Update field`;\n });\n }\n\n return updateActions.get($class);\n }\n }\n}\n","import { Injector, Type } from \"@angular/core\";\nimport { CollectionSynchronizer } from \"./collection-synchronizer\";\nimport { PropertySynchronizer } from \"./property-synchronizer\";\nimport { Synchronizer } from \"./synchronizer\";\n\nexport type SynchronizerDictionary<T> = {\n [P in keyof T]?: Type<PropertySynchronizer<T, P>>;\n} | Type<CollectionSynchronizer<T>>;\n\nexport namespace SynchronizerDictionary {\n\n export function keys<T>(dict: SynchronizerDictionary<T>): Array<keyof T> {\n return isCollectionSynchronizer(dict) ? [] : Object.keys(dict || {}) as Array<keyof T>;\n }\n\n export function isCollectionSynchronizer<T>(\n dict: SynchronizerDictionary<T>\n ): dict is Type<CollectionSynchronizer<T>> {\n return typeof (dict as Type<CollectionSynchronizer<T>>)?.prototype?.read === \"function\";\n }\n\n export function resolveSynchronizer<T>(\n dict: SynchronizerDictionary<T>,\n propKey: keyof T\n ): Type<Synchronizer<T, keyof T, unknown, unknown>> {\n return isCollectionSynchronizer(dict) ? dict : dict[propKey];\n }\n\n export function resolveSynchronizerInstance<T>(\n injector: Injector,\n dict: SynchronizerDictionary<T>,\n propKey: keyof T\n ): Synchronizer<T, keyof T, unknown, unknown> {\n const synchronizerDef = resolveSynchronizer(dict, propKey);\n\n if (!!synchronizerDef) {\n return injector.get(synchronizerDef);\n } else {\n throw new Error(`A Synchronizer has not been defined for property '${propKey}.`);\n }\n }\n}\n","\nimport { BehaviorSubject, EMPTY, forkJoin, merge, Observable, of, throwError, zip } from \"rxjs\";\nimport { catchError, distinctUntilChanged, filter, map, mergeMap, publishReplay, refCount, take, tap } from \"rxjs/operators\";\nimport { SyncClass } from \"./decorators/sync-class\";\nimport { SyncState } from \"./decorators/sync-state\";\nimport { SyncStore } from \"./sync-store\";\nimport { Synchronizer } from \"./synchronizer/synchronizer\";\nimport { SynchronizerDictionary } from \"./synchronizer/synchronizer-dictionary\";\n\ntype PendingStateRequestDictionary<T> = {\n [P in keyof T]?: Observable<T>;\n};\n\nexport class StateSelector<T> {\n\n public readonly synchronizers = SyncClass.getStoreOptions(this.stateClass).synchronizers;\n\n private readonly injector = this.store.injector;\n private readonly pendingRequests$ = new BehaviorSubject<PendingStateRequestDictionary<T>>({});\n\n constructor(\n private store: SyncStore,\n private stateClass: SyncClass<T>,\n private state$: Observable<T | undefined>\n ) {}\n\n public dispatch<PropT extends keyof T>(propertyName: PropT, value: T[PropT]): Observable<T> {\n const PropUpdateAction = SyncState.UpdateAction.Type<T, PropT>(this.stateClass);\n\n return this.store.dispatch(new PropUpdateAction(propertyName, value));\n }\n\n public property<PropT extends keyof T>(propertyName: PropT): Observable<T[PropT] | undefined> {\n return this.state$.pipe(map((state: T) => state?.[propertyName]));\n }\n\n public properties(): Observable<T> {\n return this.state$;\n }\n\n public definedProperty<PropT extends keyof T>(propertyName: PropT): Observable<T[PropT]> {\n return this.property<PropT>(propertyName).pipe(\n filter<T[PropT]>(value => value !== null && value !== undefined)\n );\n }\n\n public isSyncingProperty(propertyName: keyof T): Observable<boolean> {\n return this.getPropertyUpdater(propertyName).pipe(\n map(Boolean),\n distinctUntilChanged()\n );\n }\n\n public onPropertySyncing<PropT extends keyof T>(propertyName: PropT): Observable<PropT> {\n return this.isSyncingProperty(propertyName).pipe(\n filter(Boolean),\n map(() => propertyName),\n );\n }\n\n public onPropertySynced<PropT extends keyof T>(propertyName: PropT): Observable<PropT> {\n return this.isSyncingProperty(propertyName).pipe(\n filter(updating => !updating),\n map(() => propertyName)\n );\n }\n\n public onEveryPropertySyncing(...propertyNames: Array<keyof T>): Observable<Array<keyof T>> {\n return zip(...propertyNames.map(propertyName => this.onPropertySyncing(propertyName)));\n }\n\n public onEveryPropertySynced(...propertyNames: Array<keyof T>): Observable<Array<keyof T>> {\n return zip(...propertyNames.map(propertyName => this.onPropertySynced(propertyName)));\n }\n\n public onSomePropertySyncing(...propertyNames: Array<keyof T>): Observable<keyof T> {\n return merge(...propertyNames.map(propertyName => this.onPropertySyncing(propertyName)));\n }\n\n public onSomePropertySynced(...propertyNames: Array<keyof T>): Observable<keyof T> {\n return merge(...propertyNames.map(propertyName => this.onPropertySynced(propertyName)));\n }\n\n public require<RequestParamsT = never>(\n propertyNames: keyof T | Array<keyof T>,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T> {\n if (Array.isArray(propertyNames)) {\n return this.requireAll<RequestParamsT>(propertyNames, options);\n } else {\n return this.requireOne<keyof T, RequestParamsT>(propertyNames, options);\n }\n }\n\n public requireProperty<PropT extends keyof T, RequestParamsT = never>(\n propertyName: PropT,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T[PropT]> {\n return this.requireOne<PropT, RequestParamsT>(propertyName, options).pipe(map(session => session[propertyName]));\n }\n\n public sync<RequestParamsT = never>(\n propertyNames: keyof T | Array<keyof T>,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T> {\n if (Array.isArray(propertyNames)) {\n return this.syncAll<RequestParamsT>(propertyNames, options);\n } else {\n return this.syncOne<keyof T, RequestParamsT>(propertyNames, options);\n }\n }\n\n public syncProperty<PropT extends keyof T, RequestParamsT = never>(\n propertyName: PropT,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T[PropT]> {\n return this.syncOne<PropT, RequestParamsT>(propertyName, options).pipe(map(session => session[propertyName]));\n }\n\n public export<RequestParamsT = never>(\n propertyNames: keyof T | Array<keyof T>,\n options?: Synchronizer.WriteOptions<RequestParamsT>\n ): Observable<any> {\n if (Array.isArray(propertyNames)) {\n return this.exportAll<RequestParamsT>(propertyNames, options);\n } else {\n return this.exportOne<keyof T, RequestParamsT>(propertyNames, options);\n }\n }\n\n private requireOne<PropT extends keyof T, RequestParamsT = never>(\n propertyName: PropT,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T> {\n return this.state$.pipe(\n take(1),\n mergeMap(state => {\n if (state?.[propertyName] !== undefined && state?.[propertyName] !== null) {\n return of(state);\n } else {\n return this.sync<RequestParamsT>(propertyName, options);\n }\n })\n );\n }\n\n private requireAll<RequestParamsT = never>(\n propertyNames: Array<keyof T>,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T> {\n if (propertyNames.length === 0) {\n return this.state$.pipe(take(1));\n } else {\n const errors: any[] = [];\n return forkJoin(propertyNames.map(propertyName => {\n return this.requireOne<keyof T, RequestParamsT>(propertyName, options).pipe(\n catchError((error) => {\n errors.push(error);\n return of(undefined);\n })\n );\n })).pipe(\n mergeMap(() => {\n if (errors.length === 0) {\n return this.state$.pipe(take(1));\n } else {\n return throwError(errors);\n }\n })\n );\n }\n }\n\n private syncOne<PropT extends keyof T, RequestParamsT = never>(\n propertyName: PropT,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T> {\n options = options || {};\n const errorPrefix = \"[NGXS-Synchronizers] Cannot sync state:\";\n\n let synchronizer: Synchronizer<T, PropT, RequestParamsT, never>;\n try {\n synchronizer = this.resolveSynchronizer(propertyName);\n } catch (error) {\n return throwError(error);\n }\n\n // Check for cached values/pending requests only if this isn't a dependent requestor\n if (!synchronizer.proxy) {\n if (options.clearStore) {\n // TODO-Synchronize on this?\n this.dispatch(propertyName, undefined).subscribe();\n }\n\n if (synchronizer.requiredProperties && synchronizer.requiredProperties.some(requiredPropertyName => requiredPropertyName === propertyName)) {\n return throwError(`${errorPrefix} Synchronizer for \"${propertyName}\" requires a reference to itself.`);\n }\n }\n\n return this.pendingRequests$.pipe(\n take(1),\n mergeMap((pendingRequests) => {\n let pendingRequest$ = pendingRequests[propertyName];\n\n if (pendingRequest$ && !options.clearStore) {\n // Use the existing request if this value is currently being requested\n return pendingRequest$;\n } else {\n // First request any required fields needed to fetch the propertyName\n if (synchronizer.proxy) {\n pendingRequest$ = this.syncAll<RequestParamsT>(synchronizer.requiredProperties, options);\n } else {\n pendingRequest$ = this.requireAll<RequestParamsT>(synchronizer.requiredProperties || []);\n }\n\n // Then fetch the propertyName\n pendingRequest$ = pendingRequest$.pipe(\n mergeMap((requiredDetails: any) => synchronizer.read(requiredDetails, { propertyName, ...options })),\n mergeMap((value: any) => this.dispatch(propertyName, value)), // Update the store value\n catchError((error) => {\n this.clearPropertyUpdater(propertyName, pendingRequest$);\n return throwError(error);\n }),\n tap(() => this.clearPropertyUpdater(propertyName, pendingRequest$)), // Remove the pending request\n mergeMap(() => this.state$.pipe(take(1))), // Get the newly updated state\n publishReplay(1),\n refCount()\n );\n\n this.pendingRequests$.next(Object.assign(pendingRequests, { [propertyName]: pendingRequest$ }));\n return pendingRequest$;\n }\n })\n );\n }\n\n private syncAll<RequestParamsT = never>(\n propertyNames: Array<keyof T>,\n options?: Synchronizer.ReadOptions<RequestParamsT>\n ): Observable<T> {\n options = options || {};\n\n if (propertyNames.length === 0) {\n return this.state$.pipe(take(1));\n }\n\n // Update each required propertyName\n const errors: any[] = [];\n return forkJoin(propertyNames.map(name => this.sync<RequestParamsT>(name, options).pipe(\n catchError((error) => {\n errors.push(error);\n return of(undefined);\n })))).pipe(\n mergeMap(() => {\n if (errors.length === 0) {\n return this.state$.pipe(take(1));\n } else {\n return throwError(`Error syncing properties: ${errors.join(\", \")}`);\n }\n })\n );\n }\n\n private exportOne<PropT extends keyof T, RequestParamsT = never>(\n propertyName: PropT,\n options?: Synchronizer.WriteOptions<RequestParamsT>\n ): Observable<any> {\n options = options || {};\n const errorPrefix = \"[NGXS-Synchronizers] Cannot export state:\";\n\n let synchronizer: Synchronizer<T, PropT, never, RequestParamsT>;\n try {\n synchronizer = this.resolveSynchronizer(propertyName);\n } catch (error) {\n return throwError(error);\n }\n\n if (!synchronizer.write) {\n return throwError(`${errorPrefix} Synchronizer for \"${propertyName}\" doesn't have a write method defined.`);\n }\n\n // Write the latest data in the store\n return this.property(propertyName).pipe(\n take(1),\n mergeMap(data => synchronizer.write(data, { propertyName, ...options })),\n publishReplay(1),\n refCount()\n );\n }\n\n private exportAll<RequestParamsT = never>(\n propertyNames: Array<keyof T>,\n options?: Synchronizer.WriteOptions<RequestParamsT>\n ): Observable<any> {\n options = options || {};\n\n if (propertyNames.length === 0) {\n return EMPTY;\n }\n\n // Update each required propertyName\n const errors: any[] = [];\n return forkJoin(propertyNames.map(name => this.export<RequestParamsT>(name, options).pipe(\n catchError((error) => {\n errors.push(error);\n return of(undefined);\n })))).pipe(\n mergeMap((results) => {\n if (errors.length === 0) {\n return of(results);\n } else {\n return throwError(`Error exporting properties: ${errors.join(\", \")}`);\n }\n })\n );\n }\n\n private getPropertyUpdater(propertyName: keyof T): Observable<Observable<T> | undefined> {\n return this.pendingRequests$.pipe(map(pendingRequests => pendingRequests[propertyName]));\n }\n\n private clearPropertyUpdater(propertyName: keyof T, request: Observable<T>): void {\n this.pendingRequests$.pipe(\n take(1),\n filter(pendingRequests => pendingRequests[propertyName] === request)\n ).subscribe(pendingRequests => this.pendingRequests$.next(Object.assign(pendingRequests, { [propertyName]: undefined })));\n }\n\n private resolveSynchronizer<PropT extends keyof T, RequestParamsT>(propertyName: PropT): Synchronizer<T, PropT, RequestParamsT, RequestParamsT> {\n return SynchronizerDictionary.resolveSynchronizerInstance(\n this.injector,\n this.synchronizers,\n propertyName\n ) as Synchronizer<T, PropT, never, RequestParamsT>;\n }\n}\n","import { Injectable, Injector } from \"@angular/core\";\nimport { Store } from \"@ngxs/store\";\nimport { SyncClass } from \"./decorators/sync-class\";\nimport { StateSelector } from \"./state-selector\";\n\ninterface InternalStore {\n _stateStream: any;\n _internalStateOperations: any;\n _config: any;\n _internalExecutionStrategy: any;\n _stateFactory: any;\n}\n\n@Injectable()\nexport class SyncStore extends Store {\n\n public readonly injector: Injector;\n private readonly _selectorMap: Map<SyncClass<any>, StateSelector<any>>;\n\n constructor(injector: Injector, store: Store) {\n const internalStore: InternalStore = store as any;\n\n super(\n internalStore._stateStream,\n internalStore._internalStateOperations,\n internalStore._config,\n internalStore._internalExecutionStrategy,\n internalStore._stateFactory,\n undefined\n );\n\n this.injector = injector;\n this._selectorMap = new Map();\n }\n\n public state<T>(syncState: SyncClass<T>): StateSelector<T> {\n // If the selector hasn't been created for this state class yet, create it\n if (!this._selectorMap.has(syncState)) {\n const statePath: SyncClass<unknown>[] = [...SyncClass.resolveParents(syncState).reverse(), syncState];\n const state$ = this.select<T>(state => statePath.reduce((parentState, childState) => {\n return parentState[SyncClass.getStoreOptions(childState).name];\n }, state));\n\n // Record each state selector to keep pending requests in sync between state() calls\n this._selectorMap.set(syncState, new StateSelector<T>(this, syncState, state$));\n }\n\n return this._selectorMap.get(syncState);\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { SyncStore } from \"./sync-store\";\n\n@NgModule({\n providers: [\n SyncStore\n ]\n})\nexport class NgxsSyncModule {}\n","import { Injector } from \"@angular/core\";\nimport { forkJoin, Observable, of } from \"rxjs\";\nimport { map, switchMap, take } from \"rxjs/operators\";\nimport { SyncClass } from \"../decorators/sync-class\";\nimport { StateSelector } from \"../state-selector\";\nimport { SyncStore } from \"../sync-store\";\nimport { PropertySynchronizer } from \"./property-synchronizer\";\nimport { SynchronizerDictionary } from \"./synchronizer-dictionary\";\n\nexport abstract class StateSynchronizer<\n T,\n PropKey extends keyof T,\n ReadParamsT = never,\n WriteParamsT = never\n> implements PropertySynchronizer<T, PropKey, ReadParamsT, WriteParamsT> {\n\n constructor(\n private readonly injector: Injector,\n private readonly propertyState: SyncClass<T[PropKey]>\n ) {}\n\n public read(\n _requiredDetails: Partial<T>,\n _options: PropertySynchronizer.ReadOptions<T, PropKey, ReadParamsT>\n ): Observable<T[PropKey]> {\n const syncStore = this.injector.get(SyncStore);\n const stateSelector = syncStore.state<T[PropKey]>(this.propertyState);\n\n // Sync each property in the sub-store that has a synchronizer\n return this.readSubset(SynchronizerDictionary.keys(stateSelector.synchronizers)) as Observable<T[PropKey]>;\n }\n\n protected readSubset(properties: Array<keyof T[PropKey]>): Observable<T[PropKey]> {\n const syncStore = this.injector.get(SyncStore);\n const stateSelector = syncStore.state<T[PropKey]>(this.propertyState);\n\n // Sync each property in the sub-store that has a synchronizer and combine with the current store's data\n return this.readProperties(stateSelector, properties).pipe(\n map(results => Object.assign({}, ...results)),\n switchMap(newProperties => stateSelector.properties().pipe(take(1), map(originalProperties => ({\n ...originalProperties,\n ...newProperties\n }))))\n );\n }\n\n private readProperties(\n stateSelector: StateSelector<T[PropKey]>,\n keys: Array<keyof T[PropKey]>\n ): Observable<Partial<T[PropKey]>[]> {\n // Sync each property in the dictionary\n return keys.length > 0\n ? forkJoin(keys.map((propKey) => this.readProperty(stateSelector, propKey)))\n : of([]);\n }\n\n private readProperty<SubPropT extends keyof T[PropKey]>(\n stateSelector: StateSelector<T[PropKey]>,\n propKey: SubPropT\n ): Observable<Partial<T[PropKey]>> {\n // Use `syncProperty` to invoke the synchronizer for this property\n return stateSelector.syncProperty<SubPropT>(propKey).pipe(map(result => ({ [propKey]: result }) as any));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SyncClass as ɵa} from './decorators/sync-class';"],"names":["SyncClass","State","Action","SynchronizerDictionary","BehaviorSubject","map","filter","distinctUntilChanged","zip","merge","take","mergeMap","of","forkJoin","catchError","throwError","tap","publishReplay","refCount","EMPTY","Store","Injectable","Injector","NgModule","switchMap"],"mappings":"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"}
|
package/esm2015/module.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { NgModule } from "@angular/core";
|
|
2
|
-
import { SyncStore } from "./sync-store";
|
|
3
|
-
export class NgxsSyncModule {
|
|
4
|
-
}
|
|
5
|
-
NgxsSyncModule.decorators = [
|
|
6
|
-
{ type: NgModule, args: [{
|
|
7
|
-
providers: [
|
|
8
|
-
SyncStore
|
|
9
|
-
]
|
|
10
|
-
},] }
|
|
11
|
-
];
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPekMsTUFBTSxPQUFPLGNBQWM7OztZQUwxQixRQUFRLFNBQUM7Z0JBQ04sU0FBUyxFQUFFO29CQUNQLFNBQVM7aUJBQ1o7YUFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN5bmNTdG9yZSB9IGZyb20gXCIuL3N5bmMtc3RvcmVcIjtcblxuQE5nTW9kdWxlKHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgU3luY1N0b3JlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hzU3luY01vZHVsZSB7fVxuIl19
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
export { SyncClass as ɵa } from './decorators/sync-class';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4cy1zeW5jaHJvbml6ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25neHMtc3luY2hyb25pemVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDO0FBRXhCLE9BQU8sRUFBQyxTQUFTLElBQUksRUFBRSxFQUFDLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQge1N5bmNDbGFzcyBhcyDJtWF9IGZyb20gJy4vZGVjb3JhdG9ycy9zeW5jLWNsYXNzJzsiXX0=
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
import { BehaviorSubject, EMPTY, forkJoin, merge, of, throwError, zip } from "rxjs";
|
|
2
|
-
import { catchError, distinctUntilChanged, filter, map, mergeMap, publishReplay, refCount, take, tap } from "rxjs/operators";
|
|
3
|
-
import { SyncClass } from "./decorators/sync-class";
|
|
4
|
-
import { SyncState } from "./decorators/sync-state";
|
|
5
|
-
import { SynchronizerDictionary } from "./synchronizer/synchronizer-dictionary";
|
|
6
|
-
export class StateSelector {
|
|
7
|
-
constructor(store, stateClass, state$) {
|
|
8
|
-
this.store = store;
|
|
9
|
-
this.stateClass = stateClass;
|
|
10
|
-
this.state$ = state$;
|
|
11
|
-
this.synchronizers = SyncClass.getStoreOptions(this.stateClass).synchronizers;
|
|
12
|
-
this.injector = this.store.injector;
|
|
13
|
-
this.pendingRequests$ = new BehaviorSubject({});
|
|
14
|
-
}
|
|
15
|
-
dispatch(propertyName, value) {
|
|
16
|
-
const PropUpdateAction = SyncState.UpdateAction.Type(this.stateClass);
|
|
17
|
-
return this.store.dispatch(new PropUpdateAction(propertyName, value));
|
|
18
|
-
}
|
|
19
|
-
property(propertyName) {
|
|
20
|
-
return this.state$.pipe(map((state) => state === null || state === void 0 ? void 0 : state[propertyName]));
|
|
21
|
-
}
|
|
22
|
-
properties() {
|
|
23
|
-
return this.state$;
|
|
24
|
-
}
|
|
25
|
-
definedProperty(propertyName) {
|
|
26
|
-
return this.property(propertyName).pipe(filter(value => value !== null && value !== undefined));
|
|
27
|
-
}
|
|
28
|
-
isSyncingProperty(propertyName) {
|
|
29
|
-
return this.getPropertyUpdater(propertyName).pipe(map(Boolean), distinctUntilChanged());
|
|
30
|
-
}
|
|
31
|
-
onPropertySyncing(propertyName) {
|
|
32
|
-
return this.isSyncingProperty(propertyName).pipe(filter(Boolean), map(() => propertyName));
|
|
33
|
-
}
|
|
34
|
-
onPropertySynced(propertyName) {
|
|
35
|
-
return this.isSyncingProperty(propertyName).pipe(filter(updating => !updating), map(() => propertyName));
|
|
36
|
-
}
|
|
37
|
-
onEveryPropertySyncing(...propertyNames) {
|
|
38
|
-
return zip(...propertyNames.map(propertyName => this.onPropertySyncing(propertyName)));
|
|
39
|
-
}
|
|
40
|
-
onEveryPropertySynced(...propertyNames) {
|
|
41
|
-
return zip(...propertyNames.map(propertyName => this.onPropertySynced(propertyName)));
|
|
42
|
-
}
|
|
43
|
-
onSomePropertySyncing(...propertyNames) {
|
|
44
|
-
return merge(...propertyNames.map(propertyName => this.onPropertySyncing(propertyName)));
|
|
45
|
-
}
|
|
46
|
-
onSomePropertySynced(...propertyNames) {
|
|
47
|
-
return merge(...propertyNames.map(propertyName => this.onPropertySynced(propertyName)));
|
|
48
|
-
}
|
|
49
|
-
require(propertyNames, options) {
|
|
50
|
-
if (Array.isArray(propertyNames)) {
|
|
51
|
-
return this.requireAll(propertyNames, options);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return this.requireOne(propertyNames, options);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
requireProperty(propertyName, options) {
|
|
58
|
-
return this.requireOne(propertyName, options).pipe(map(session => session[propertyName]));
|
|
59
|
-
}
|
|
60
|
-
sync(propertyNames, options) {
|
|
61
|
-
if (Array.isArray(propertyNames)) {
|
|
62
|
-
return this.syncAll(propertyNames, options);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
return this.syncOne(propertyNames, options);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
syncProperty(propertyName, options) {
|
|
69
|
-
return this.syncOne(propertyName, options).pipe(map(session => session[propertyName]));
|
|
70
|
-
}
|
|
71
|
-
export(propertyNames, options) {
|
|
72
|
-
if (Array.isArray(propertyNames)) {
|
|
73
|
-
return this.exportAll(propertyNames, options);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
return this.exportOne(propertyNames, options);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
requireOne(propertyName, options) {
|
|
80
|
-
return this.state$.pipe(take(1), mergeMap(state => {
|
|
81
|
-
if ((state === null || state === void 0 ? void 0 : state[propertyName]) !== undefined && (state === null || state === void 0 ? void 0 : state[propertyName]) !== null) {
|
|
82
|
-
return of(state);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
return this.sync(propertyName, options);
|
|
86
|
-
}
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
requireAll(propertyNames, options) {
|
|
90
|
-
if (propertyNames.length === 0) {
|
|
91
|
-
return this.state$.pipe(take(1));
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
const errors = [];
|
|
95
|
-
return forkJoin(propertyNames.map(propertyName => {
|
|
96
|
-
return this.requireOne(propertyName, options).pipe(catchError((error) => {
|
|
97
|
-
errors.push(error);
|
|
98
|
-
return of(undefined);
|
|
99
|
-
}));
|
|
100
|
-
})).pipe(mergeMap(() => {
|
|
101
|
-
if (errors.length === 0) {
|
|
102
|
-
return this.state$.pipe(take(1));
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
return throwError(errors);
|
|
106
|
-
}
|
|
107
|
-
}));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
syncOne(propertyName, options) {
|
|
111
|
-
options = options || {};
|
|
112
|
-
const errorPrefix = "[NGXS-Synchronizers] Cannot sync state:";
|
|
113
|
-
let synchronizer;
|
|
114
|
-
try {
|
|
115
|
-
synchronizer = this.resolveSynchronizer(propertyName);
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
return throwError(error);
|
|
119
|
-
}
|
|
120
|
-
// Check for cached values/pending requests only if this isn't a dependent requestor
|
|
121
|
-
if (!synchronizer.proxy) {
|
|
122
|
-
if (options.clearStore) {
|
|
123
|
-
// TODO-Synchronize on this?
|
|
124
|
-
this.dispatch(propertyName, undefined).subscribe();
|
|
125
|
-
}
|
|
126
|
-
if (synchronizer.requiredProperties && synchronizer.requiredProperties.some(requiredPropertyName => requiredPropertyName === propertyName)) {
|
|
127
|
-
return throwError(`${errorPrefix} Synchronizer for "${propertyName}" requires a reference to itself.`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return this.pendingRequests$.pipe(take(1), mergeMap((pendingRequests) => {
|
|
131
|
-
let pendingRequest$ = pendingRequests[propertyName];
|
|
132
|
-
if (pendingRequest$ && !options.clearStore) {
|
|
133
|
-
// Use the existing request if this value is currently being requested
|
|
134
|
-
return pendingRequest$;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
// First request any required fields needed to fetch the propertyName
|
|
138
|
-
if (synchronizer.proxy) {
|
|
139
|
-
pendingRequest$ = this.syncAll(synchronizer.requiredProperties, options);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
pendingRequest$ = this.requireAll(synchronizer.requiredProperties || []);
|
|
143
|
-
}
|
|
144
|
-
// Then fetch the propertyName
|
|
145
|
-
pendingRequest$ = pendingRequest$.pipe(mergeMap((requiredDetails) => synchronizer.read(requiredDetails, Object.assign({ propertyName }, options))), mergeMap((value) => this.dispatch(propertyName, value)), // Update the store value
|
|
146
|
-
catchError((error) => {
|
|
147
|
-
this.clearPropertyUpdater(propertyName, pendingRequest$);
|
|
148
|
-
return throwError(error);
|
|
149
|
-
}), tap(() => this.clearPropertyUpdater(propertyName, pendingRequest$)), // Remove the pending request
|
|
150
|
-
mergeMap(() => this.state$.pipe(take(1))), // Get the newly updated state
|
|
151
|
-
publishReplay(1), refCount());
|
|
152
|
-
this.pendingRequests$.next(Object.assign(pendingRequests, { [propertyName]: pendingRequest$ }));
|
|
153
|
-
return pendingRequest$;
|
|
154
|
-
}
|
|
155
|
-
}));
|
|
156
|
-
}
|
|
157
|
-
syncAll(propertyNames, options) {
|
|
158
|
-
options = options || {};
|
|
159
|
-
if (propertyNames.length === 0) {
|
|
160
|
-
return this.state$.pipe(take(1));
|
|
161
|
-
}
|
|
162
|
-
// Update each required propertyName
|
|
163
|
-
const errors = [];
|
|
164
|
-
return forkJoin(propertyNames.map(name => this.sync(name, options).pipe(catchError((error) => {
|
|
165
|
-
errors.push(error);
|
|
166
|
-
return of(undefined);
|
|
167
|
-
})))).pipe(mergeMap(() => {
|
|
168
|
-
if (errors.length === 0) {
|
|
169
|
-
return this.state$.pipe(take(1));
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
return throwError(`Error syncing properties: ${errors.join(", ")}`);
|
|
173
|
-
}
|
|
174
|
-
}));
|
|
175
|
-
}
|
|
176
|
-
exportOne(propertyName, options) {
|
|
177
|
-
options = options || {};
|
|
178
|
-
const errorPrefix = "[NGXS-Synchronizers] Cannot export state:";
|
|
179
|
-
let synchronizer;
|
|
180
|
-
try {
|
|
181
|
-
synchronizer = this.resolveSynchronizer(propertyName);
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
return throwError(error);
|
|
185
|
-
}
|
|
186
|
-
if (!synchronizer.write) {
|
|
187
|
-
return throwError(`${errorPrefix} Synchronizer for "${propertyName}" doesn't have a write method defined.`);
|
|
188
|
-
}
|
|
189
|
-
// Write the latest data in the store
|
|
190
|
-
return this.property(propertyName).pipe(take(1), mergeMap(data => synchronizer.write(data, Object.assign({ propertyName }, options))), publishReplay(1), refCount());
|
|
191
|
-
}
|
|
192
|
-
exportAll(propertyNames, options) {
|
|
193
|
-
options = options || {};
|
|
194
|
-
if (propertyNames.length === 0) {
|
|
195
|
-
return EMPTY;
|
|
196
|
-
}
|
|
197
|
-
// Update each required propertyName
|
|
198
|
-
const errors = [];
|
|
199
|
-
return forkJoin(propertyNames.map(name => this.export(name, options).pipe(catchError((error) => {
|
|
200
|
-
errors.push(error);
|
|
201
|
-
return of(undefined);
|
|
202
|
-
})))).pipe(mergeMap((results) => {
|
|
203
|
-
if (errors.length === 0) {
|
|
204
|
-
return of(results);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
return throwError(`Error exporting properties: ${errors.join(", ")}`);
|
|
208
|
-
}
|
|
209
|
-
}));
|
|
210
|
-
}
|
|
211
|
-
getPropertyUpdater(propertyName) {
|
|
212
|
-
return this.pendingRequests$.pipe(map(pendingRequests => pendingRequests[propertyName]));
|
|
213
|
-
}
|
|
214
|
-
clearPropertyUpdater(propertyName, request) {
|
|
215
|
-
this.pendingRequests$.pipe(take(1), filter(pendingRequests => pendingRequests[propertyName] === request)).subscribe(pendingRequests => this.pendingRequests$.next(Object.assign(pendingRequests, { [propertyName]: undefined })));
|
|
216
|
-
}
|
|
217
|
-
resolveSynchronizer(propertyName) {
|
|
218
|
-
return SynchronizerDictionary.resolveSynchronizerInstance(this.injector, this.synchronizers, propertyName);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtc2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhdGUtc2VsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFNaEYsTUFBTSxPQUFPLGFBQWE7SUFPdEIsWUFDWSxLQUFnQixFQUNoQixVQUF3QixFQUN4QixNQUFpQztRQUZqQyxVQUFLLEdBQUwsS0FBSyxDQUFXO1FBQ2hCLGVBQVUsR0FBVixVQUFVLENBQWM7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7UUFSN0Isa0JBQWEsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFFeEUsYUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFtQyxFQUFFLENBQUMsQ0FBQztJQU0zRixDQUFDO0lBRUcsUUFBUSxDQUF3QixZQUFtQixFQUFFLEtBQWU7UUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBVyxJQUFJLENBQUMsVUFBVSxDQUFD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QUM7SUFFTyxtQkFBbUIsQ0FBd0MsWUFBbUI7UUFDbEYsT0FBTyxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FDckQsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsYUFBYSxFQUNsQixZQUFZLENBQ2tDLENBQUM7SUFDdkQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBmb3JrSm9pbiwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yLCB6aXAgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgcHVibGlzaFJlcGxheSwgcmVmQ291bnQsIHRha2UsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgU3luY0NsYXNzIH0gZnJvbSBcIi4vZGVjb3JhdG9ycy9zeW5jLWNsYXNzXCI7XG5pbXBvcnQgeyBTeW5jU3RhdGUgfSBmcm9tIFwiLi9kZWNvcmF0b3JzL3N5bmMtc3RhdGVcIjtcbmltcG9ydCB7IFN5bmNTdG9yZSB9IGZyb20gXCIuL3N5bmMtc3RvcmVcIjtcbmltcG9ydCB7IFN5bmNocm9uaXplciB9IGZyb20gXCIuL3N5bmNocm9uaXplci9zeW5jaHJvbml6ZXJcIjtcbmltcG9ydCB7IFN5bmNocm9uaXplckRpY3Rpb25hcnkgfSBmcm9tIFwiLi9zeW5jaHJvbml6ZXIvc3luY2hyb25pemVyLWRpY3Rpb25hcnlcIjtcblxudHlwZSBQZW5kaW5nU3RhdGVSZXF1ZXN0RGljdGlvbmFyeTxUPiA9IHtcbiAgICBbUCBpbiBrZXlvZiBUXT86IE9ic2VydmFibGU8VD47XG59O1xuXG5leHBvcnQgY2xhc3MgU3RhdGVTZWxlY3RvcjxUPiB7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3luY2hyb25pemVycyA9IFN5bmNDbGFzcy5nZXRTdG9yZU9wdGlvbnModGhpcy5zdGF0ZUNsYXNzKS5zeW5jaHJvbml6ZXJzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IHRoaXMuc3RvcmUuaW5qZWN0b3I7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nUmVxdWVzdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQZW5kaW5nU3RhdGVSZXF1ZXN0RGljdGlvbmFyeTxUPj4oe30pO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc3RvcmU6IFN5bmNTdG9yZSxcbiAgICAgICAgcHJpdmF0ZSBzdGF0ZUNsYXNzOiBTeW5jQ2xhc3M8VD4sXG4gICAgICAgIHByaXZhdGUgc3RhdGUkOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+XG4gICAgKSB7fVxuXG4gICAgcHVibGljIGRpc3BhdGNoPFByb3BUIGV4dGVuZHMga2V5b2YgVD4ocHJvcGVydHlOYW1lOiBQcm9wVCwgdmFsdWU6IFRbUHJvcFRdKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IFByb3BVcGRhdGVBY3Rpb24gPSBTeW5jU3RhdGUuVXBkYXRlQWN0aW9uLlR5cGU8VCwgUHJvcFQ+KHRoaXMuc3RhdGVDbGFzcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFByb3BVcGRhdGVBY3Rpb24ocHJvcGVydHlOYW1lLCB2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcm9wZXJ0eTxQcm9wVCBleHRlbmRzIGtleW9mIFQ+KHByb3BlcnR5TmFtZTogUHJvcFQpOiBPYnNlcnZhYmxlPFRbUHJvcFRdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKG1hcCgoc3RhdGU6IFQpID0+IHN0YXRlPy5bcHJvcGVydHlOYW1lXSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcm9wZXJ0aWVzKCk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQ7XG4gICAgfVxuXG4gICAgcHVibGljIGRlZmluZWRQcm9wZXJ0eTxQcm9wVCBleHRlbmRzIGtleW9mIFQ+KHByb3BlcnR5TmFtZTogUHJvcFQpOiBPYnNlcnZhYmxlPFRbUHJvcFRdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5PFByb3BUPihwcm9wZXJ0eU5hbWUpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXI8VFtQcm9wVF0+KHZhbHVlID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzU3luY2luZ1Byb3BlcnR5KHByb3BlcnR5TmFtZToga2V5b2YgVCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVVwZGF0ZXIocHJvcGVydHlOYW1lKS5waXBlKFxuICAgICAgICAgICAgbWFwKEJvb2xlYW4pLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByb3BlcnR5U3luY2luZzxQcm9wVCBleHRlbmRzIGtleW9mIFQ+KHByb3BlcnR5TmFtZTogUHJvcFQpOiBPYnNlcnZhYmxlPFByb3BUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3luY2luZ1Byb3BlcnR5KHByb3BlcnR5TmFtZSkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBwcm9wZXJ0eU5hbWUpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByb3BlcnR5U3luY2VkPFByb3BUIGV4dGVuZHMga2V5b2YgVD4ocHJvcGVydHlOYW1lOiBQcm9wVCk6IE9ic2VydmFibGU8UHJvcFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTeW5jaW5nUHJvcGVydHkocHJvcGVydHlOYW1lKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKHVwZGF0aW5nID0+ICF1cGRhdGluZyksXG4gICAgICAgICAgICBtYXAoKCkgPT4gcHJvcGVydHlOYW1lKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkV2ZXJ5UHJvcGVydHlTeW5jaW5nKC4uLnByb3BlcnR5TmFtZXM6IEFycmF5PGtleW9mIFQ+KTogT2JzZXJ2YWJsZTxBcnJheTxrZXlvZiBUPj4ge1xuICAgICAgICByZXR1cm4gemlwKC4uLnByb3BlcnR5TmFtZXMubWFwKHByb3BlcnR5TmFtZSA9PiB0aGlzLm9uUHJvcGVydHlTeW5jaW5nKHByb3BlcnR5TmFtZSkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FdmVyeVByb3BlcnR5U3luY2VkKC4uLnByb3BlcnR5TmFtZXM6IEFycmF5PGtleW9mIFQ+KTogT2JzZXJ2YWJsZTxBcnJheTxrZXlvZiBUPj4ge1xuICAgICAgICByZXR1cm4gemlwKC4uLnByb3BlcnR5TmFtZXMubWFwKHByb3BlcnR5TmFtZSA9PiB0aGlzLm9uUHJvcGVydHlTeW5jZWQocHJvcGVydHlOYW1lKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNvbWVQcm9wZXJ0eVN5bmNpbmcoLi4ucHJvcGVydHlOYW1lczogQXJyYXk8a2V5b2YgVD4pOiBPYnNlcnZhYmxlPGtleW9mIFQ+IHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnByb3BlcnR5TmFtZXMubWFwKHByb3BlcnR5TmFtZSA9PiB0aGlzLm9uUHJvcGVydHlTeW5jaW5nKHByb3BlcnR5TmFtZSkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Tb21lUHJvcGVydHlTeW5jZWQoLi4ucHJvcGVydHlOYW1lczogQXJyYXk8a2V5b2YgVD4pOiBPYnNlcnZhYmxlPGtleW9mIFQ+IHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnByb3BlcnR5TmFtZXMubWFwKHByb3BlcnR5TmFtZSA9PiB0aGlzLm9uUHJvcGVydHlTeW5jZWQocHJvcGVydHlOYW1lKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXF1aXJlPFJlcXVlc3RQYXJhbXNUID0gbmV2ZXI+KFxuICAgICAgICBwcm9wZXJ0eU5hbWVzOiBrZXlvZiBUIHwgQXJyYXk8a2V5b2YgVD4sXG4gICAgICAgIG9wdGlvbnM/OiBTeW5jaHJvbml6ZXIuUmVhZE9wdGlvbnM8UmVxdWVzdFBhcmFtc1Q+XG4gICAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5TmFtZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlQWxsPFJlcXVlc3RQYXJhbXNUPihwcm9wZXJ0eU5hbWVzLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVPbmU8a2V5b2YgVCwgUmVxdWVzdFBhcmFtc1Q+KHByb3BlcnR5TmFtZXMsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlcXVpcmVQcm9wZXJ0eTxQcm9wVCBleHRlbmRzIGtleW9mIFQsIFJlcXVlc3RQYXJhbXNUID0gbmV2ZXI+KFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IFByb3BULFxuICAgICAgICBvcHRpb25zPzogU3luY2hyb25pemVyLlJlYWRPcHRpb25zPFJlcXVlc3RQYXJhbXNUPlxuICAgICk6IE9ic2VydmFibGU8VFtQcm9wVF0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZU9uZTxQcm9wVCwgUmVxdWVzdFBhcmFtc1Q+KHByb3BlcnR5TmFtZSwgb3B0aW9ucykucGlwZShtYXAoc2Vzc2lvbiA9PiBzZXNzaW9uW3Byb3BlcnR5TmFtZV0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3luYzxSZXF1ZXN0UGFyYW1zVCA9IG5ldmVyPihcbiAgICAgICAgcHJvcGVydHlOYW1lczoga2V5b2YgVCB8IEFycmF5PGtleW9mIFQ+LFxuICAgICAgICBvcHRpb25zPzogU3luY2hyb25pemVyLlJlYWRPcHRpb25zPFJlcXVlc3RQYXJhbXNUPlxuICAgICk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eU5hbWVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3luY0FsbDxSZXF1ZXN0UGFyYW1zVD4ocHJvcGVydHlOYW1lcywgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeW5jT25lPGtleW9mIFQsIFJlcXVlc3RQYXJhbXNUPihwcm9wZXJ0eU5hbWVzLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzeW5jUHJvcGVydHk8UHJvcFQgZXh0ZW5kcyBrZXlvZiBULCBSZXF1ZXN0UGFyYW1zVCA9IG5ldmVyPihcbiAgICAgICAgcHJvcGVydHlOYW1lOiBQcm9wVCxcbiAgICAgICAgb3B0aW9ucz86IFN5bmNocm9uaXplci5SZWFkT3B0aW9uczxSZXF1ZXN0UGFyYW1zVD5cbiAgICApOiBPYnNlcnZhYmxlPFRbUHJvcFRdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNPbmU8UHJvcFQsIFJlcXVlc3RQYXJhbXNUPihwcm9wZXJ0eU5hbWUsIG9wdGlvbnMpLnBpcGUobWFwKHNlc3Npb24gPT4gc2Vzc2lvbltwcm9wZXJ0eU5hbWVdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydDxSZXF1ZXN0UGFyYW1zVCA9IG5ldmVyPihcbiAgICAgICAgcHJvcGVydHlOYW1lczoga2V5b2YgVCB8IEFycmF5PGtleW9mIFQ+LFxuICAgICAgICBvcHRpb25zPzogU3luY2hyb25pemVyLldyaXRlT3B0aW9uczxSZXF1ZXN0UGFyYW1zVD5cbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wZXJ0eU5hbWVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWxsPFJlcXVlc3RQYXJhbXNUPihwcm9wZXJ0eU5hbWVzLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cG9ydE9uZTxrZXlvZiBULCBSZXF1ZXN0UGFyYW1zVD4ocHJvcGVydHlOYW1lcywgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcXVpcmVPbmU8UHJvcFQgZXh0ZW5kcyBrZXlvZiBULCBSZXF1ZXN0UGFyYW1zVCA9IG5ldmVyPihcbiAgICAgICAgcHJvcGVydHlOYW1lOiBQcm9wVCxcbiAgICAgICAgb3B0aW9ucz86IFN5bmNocm9uaXplci5SZWFkT3B0aW9uczxSZXF1ZXN0UGFyYW1zVD5cbiAgICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgbWVyZ2VNYXAoc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZT8uW3Byb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCAmJiBzdGF0ZT8uW3Byb3BlcnR5TmFtZV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zeW5jPFJlcXVlc3RQYXJhbXNUPihwcm9wZXJ0eU5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXF1aXJlQWxsPFJlcXVlc3RQYXJhbXNUID0gbmV2ZXI+KFxuICAgICAgICBwcm9wZXJ0eU5hbWVzOiBBcnJheTxrZXlvZiBUPixcbiAgICAgICAgb3B0aW9ucz86IFN5bmNocm9uaXplci5SZWFkT3B0aW9uczxSZXF1ZXN0UGFyYW1zVD5cbiAgICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yczogYW55W10gPSBbXTtcbiAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbihwcm9wZXJ0eU5hbWVzLm1hcChwcm9wZXJ0eU5hbWUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVPbmU8a2V5b2YgVCwgUmVxdWVzdFBhcmFtc1Q+KHByb3BlcnR5TmFtZSwgb3B0aW9ucykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSkucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9ycyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3luY09uZTxQcm9wVCBleHRlbmRzIGtleW9mIFQsIFJlcXVlc3RQYXJhbXNUID0gbmV2ZXI+KFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IFByb3BULFxuICAgICAgICBvcHRpb25zPzogU3luY2hyb25pemVyLlJlYWRPcHRpb25zPFJlcXVlc3RQYXJhbXNUPlxuICAgICk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgZXJyb3JQcmVmaXggPSBcIltOR1hTLVN5bmNocm9uaXplcnNdIENhbm5vdCBzeW5jIHN0YXRlOlwiO1xuXG4gICAgICAgIGxldCBzeW5jaHJvbml6ZXI6IFN5bmNocm9uaXplcjxULCBQcm9wVCwgUmVxdWVzdFBhcmFtc1QsIG5ldmVyPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN5bmNocm9uaXplciA9IHRoaXMucmVzb2x2ZVN5bmNocm9uaXplcihwcm9wZXJ0eU5hbWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNhY2hlZCB2YWx1ZXMvcGVuZGluZyByZXF1ZXN0cyBvbmx5IGlmIHRoaXMgaXNuJ3QgYSBkZXBlbmRlbnQgcmVxdWVzdG9yXG4gICAgICAgIGlmICghc3luY2hyb25pemVyLnByb3h5KSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jbGVhclN0b3JlKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETy1TeW5jaHJvbml6ZSBvbiB0aGlzP1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2gocHJvcGVydHlOYW1lLCB1bmRlZmluZWQpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3luY2hyb25pemVyLnJlcXVpcmVkUHJvcGVydGllcyAmJiBzeW5jaHJvbml6ZXIucmVxdWlyZWRQcm9wZXJ0aWVzLnNvbWUocmVxdWlyZWRQcm9wZXJ0eU5hbWUgPT4gcmVxdWlyZWRQcm9wZXJ0eU5hbWUgPT09IHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihgJHtlcnJvclByZWZpeH0gU3luY2hyb25pemVyIGZvciBcIiR7cHJvcGVydHlOYW1lfVwiIHJlcXVpcmVzIGEgcmVmZXJlbmNlIHRvIGl0c2VsZi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdSZXF1ZXN0cyQucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtZXJnZU1hcCgocGVuZGluZ1JlcXVlc3RzKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHBlbmRpbmdSZXF1ZXN0JCA9IHBlbmRpbmdSZXF1ZXN0c1twcm9wZXJ0eU5hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0JCAmJiAhb3B0aW9ucy5jbGVhclN0b3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgZXhpc3RpbmcgcmVxdWVzdCBpZiB0aGlzIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyByZXF1ZXN0ZWRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdSZXF1ZXN0JDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCByZXF1ZXN0IGFueSByZXF1aXJlZCBmaWVsZHMgbmVlZGVkIHRvIGZldGNoIHRoZSBwcm9wZXJ0eU5hbWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNocm9uaXplci5wcm94eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3QkID0gdGhpcy5zeW5jQWxsPFJlcXVlc3RQYXJhbXNUPihzeW5jaHJvbml6ZXIucmVxdWlyZWRQcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0JCA9IHRoaXMucmVxdWlyZUFsbDxSZXF1ZXN0UGFyYW1zVD4oc3luY2hyb25pemVyLnJlcXVpcmVkUHJvcGVydGllcyB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIGZldGNoIHRoZSBwcm9wZXJ0eU5hbWVcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3QkID0gcGVuZGluZ1JlcXVlc3QkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZU1hcCgocmVxdWlyZWREZXRhaWxzOiBhbnkpID0+IHN5bmNocm9uaXplci5yZWFkKHJlcXVpcmVkRGV0YWlscywgeyBwcm9wZXJ0eU5hbWUsIC4uLm9wdGlvbnMgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlOiBhbnkpID0+IHRoaXMuZGlzcGF0Y2gocHJvcGVydHlOYW1lLCB2YWx1ZSkpLCAvLyBVcGRhdGUgdGhlIHN0b3JlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJQcm9wZXJ0eVVwZGF0ZXIocHJvcGVydHlOYW1lLCBwZW5kaW5nUmVxdWVzdCQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJQcm9wZXJ0eVVwZGF0ZXIocHJvcGVydHlOYW1lLCBwZW5kaW5nUmVxdWVzdCQpKSwgLy8gUmVtb3ZlIHRoZSBwZW5kaW5nIHJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuc3RhdGUkLnBpcGUodGFrZSgxKSkpLCAvLyBHZXQgdGhlIG5ld2x5IHVwZGF0ZWQgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxpc2hSZXBsYXkoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZDb3VudCgpXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMkLm5leHQoT2JqZWN0LmFzc2lnbihwZW5kaW5nUmVxdWVzdHMsIHsgW3Byb3BlcnR5TmFtZV06IHBlbmRpbmdSZXF1ZXN0JCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwZW5kaW5nUmVxdWVzdCQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNBbGw8UmVxdWVzdFBhcmFtc1QgPSBuZXZlcj4oXG4gICAgICAgIHByb3BlcnR5TmFtZXM6IEFycmF5PGtleW9mIFQ+LFxuICAgICAgICBvcHRpb25zPzogU3luY2hyb25pemVyLlJlYWRPcHRpb25zPFJlcXVlc3RQYXJhbXNUPlxuICAgICk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICBpZiAocHJvcGVydHlOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKHRha2UoMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGVhY2ggcmVxdWlyZWQgcHJvcGVydHlOYW1lXG4gICAgICAgIGNvbnN0IGVycm9yczogYW55W10gPSBbXTtcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHByb3BlcnR5TmFtZXMubWFwKG5hbWUgPT4gdGhpcy5zeW5jPFJlcXVlc3RQYXJhbXNUPihuYW1lLCBvcHRpb25zKS5waXBlKFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9KSkpKS5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKHRha2UoMSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoYEVycm9yIHN5bmNpbmcgcHJvcGVydGllczogJHtlcnJvcnMuam9pbihcIiwgXCIpfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBvcnRPbmU8UHJvcFQgZXh0ZW5kcyBrZXlvZiBULCBSZXF1ZXN0UGFyYW1zVCA9IG5ldmVyPihcbiAgICAgICAgcHJvcGVydHlOYW1lOiBQcm9wVCxcbiAgICAgICAgb3B0aW9ucz86IFN5bmNocm9uaXplci5Xcml0ZU9wdGlvbnM8UmVxdWVzdFBhcmFtc1Q+XG4gICAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIGNvbnN0IGVycm9yUHJlZml4ID0gXCJbTkdYUy1TeW5jaHJvbml6ZXJzXSBDYW5ub3QgZXhwb3J0IHN0YXRlOlwiO1xuXG4gICAgICAgIGxldCBzeW5jaHJvbml6ZXI6IFN5bmNocm9uaXplcjxULCBQcm9wVCwgbmV2ZXIsIFJlcXVlc3RQYXJhbXNUPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN5bmNocm9uaXplciA9IHRoaXMucmVzb2x2ZVN5bmNocm9uaXplcihwcm9wZXJ0eU5hbWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzeW5jaHJvbml6ZXIud3JpdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGAke2Vycm9yUHJlZml4fSBTeW5jaHJvbml6ZXIgZm9yIFwiJHtwcm9wZXJ0eU5hbWV9XCIgZG9lc24ndCBoYXZlIGEgd3JpdGUgbWV0aG9kIGRlZmluZWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXcml0ZSB0aGUgbGF0ZXN0IGRhdGEgaW4gdGhlIHN0b3JlXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5KHByb3BlcnR5TmFtZSkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBtZXJnZU1hcChkYXRhID0+IHN5bmNocm9uaXplci53cml0ZShkYXRhLCB7IHByb3BlcnR5TmFtZSwgLi4ub3B0aW9ucyB9KSksXG4gICAgICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLFxuICAgICAgICAgICAgcmVmQ291bnQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwb3J0QWxsPFJlcXVlc3RQYXJhbXNUID0gbmV2ZXI+KFxuICAgICAgICBwcm9wZXJ0eU5hbWVzOiBBcnJheTxrZXlvZiBUPixcbiAgICAgICAgb3B0aW9ucz86IFN5bmNocm9uaXplci5Xcml0ZU9wdGlvbnM8UmVxdWVzdFBhcmFtc1Q+XG4gICAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKHByb3BlcnR5TmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgZWFjaCByZXF1aXJlZCBwcm9wZXJ0eU5hbWVcbiAgICAgICAgY29uc3QgZXJyb3JzOiBhbnlbXSA9IFtdO1xuICAgICAgICByZXR1cm4gZm9ya0pvaW4ocHJvcGVydHlOYW1lcy5tYXAobmFtZSA9PiB0aGlzLmV4cG9ydDxSZXF1ZXN0UGFyYW1zVD4obmFtZSwgb3B0aW9ucykucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSkpKSkucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgocmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoYEVycm9yIGV4cG9ydGluZyBwcm9wZXJ0aWVzOiAke2Vycm9ycy5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb3BlcnR5VXBkYXRlcihwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiBPYnNlcnZhYmxlPE9ic2VydmFibGU8VD4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1JlcXVlc3RzJC5waXBlKG1hcChwZW5kaW5nUmVxdWVzdHMgPT4gcGVuZGluZ1JlcXVlc3RzW3Byb3BlcnR5TmFtZV0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyUHJvcGVydHlVcGRhdGVyKHByb3BlcnR5TmFtZToga2V5b2YgVCwgcmVxdWVzdDogT2JzZXJ2YWJsZTxUPik6IHZvaWQge1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyQucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBmaWx0ZXIocGVuZGluZ1JlcXVlc3RzID0+IHBlbmRpbmdSZXF1ZXN0c1twcm9wZXJ0eU5hbWVdID09PSByZXF1ZXN0KVxuICAgICAgICApLnN1YnNjcmliZShwZW5kaW5nUmVxdWVzdHMgPT4gdGhpcy5wZW5kaW5nUmVxdWVzdHMkLm5leHQoT2JqZWN0LmFzc2lnbihwZW5kaW5nUmVxdWVzdHMsIHsgW3Byb3BlcnR5TmFtZV06IHVuZGVmaW5lZCB9KSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVN5bmNocm9uaXplcjxQcm9wVCBleHRlbmRzIGtleW9mIFQsIFJlcXVlc3RQYXJhbXNUPihwcm9wZXJ0eU5hbWU6IFByb3BUKTogU3luY2hyb25pemVyPFQsIFByb3BULCBSZXF1ZXN0UGFyYW1zVCwgUmVxdWVzdFBhcmFtc1Q+IHtcbiAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplckRpY3Rpb25hcnkucmVzb2x2ZVN5bmNocm9uaXplckluc3RhbmNlKFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgIHRoaXMuc3luY2hyb25pemVycyxcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZVxuICAgICAgICApIGFzIFN5bmNocm9uaXplcjxULCBQcm9wVCwgbmV2ZXIsIFJlcXVlc3RQYXJhbXNUPjtcbiAgICB9XG59XG4iXX0=
|
package/esm2015/sync-store.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Injectable, Injector } from "@angular/core";
|
|
2
|
-
import { Store } from "@ngxs/store";
|
|
3
|
-
import { SyncClass } from "./decorators/sync-class";
|
|
4
|
-
import { StateSelector } from "./state-selector";
|
|
5
|
-
export class SyncStore extends Store {
|
|
6
|
-
constructor(injector, store) {
|
|
7
|
-
const internalStore = store;
|
|
8
|
-
super(internalStore._stateStream, internalStore._internalStateOperations, internalStore._config, internalStore._internalExecutionStrategy, internalStore._stateFactory, undefined);
|
|
9
|
-
this.injector = injector;
|
|
10
|
-
this._selectorMap = new Map();
|
|
11
|
-
}
|
|
12
|
-
state(syncState) {
|
|
13
|
-
// If the selector hasn't been created for this state class yet, create it
|
|
14
|
-
if (!this._selectorMap.has(syncState)) {
|
|
15
|
-
const statePath = [...SyncClass.resolveParents(syncState).reverse(), syncState];
|
|
16
|
-
const state$ = this.select(state => statePath.reduce((parentState, childState) => {
|
|
17
|
-
return parentState[SyncClass.getStoreOptions(childState).name];
|
|
18
|
-
}, state));
|
|
19
|
-
// Record each state selector to keep pending requests in sync between state() calls
|
|
20
|
-
this._selectorMap.set(syncState, new StateSelector(this, syncState, state$));
|
|
21
|
-
}
|
|
22
|
-
return this._selectorMap.get(syncState);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
SyncStore.decorators = [
|
|
26
|
-
{ type: Injectable }
|
|
27
|
-
];
|
|
28
|
-
SyncStore.ctorParameters = () => [
|
|
29
|
-
{ type: Injector },
|
|
30
|
-
{ type: Store }
|
|
31
|
-
];
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVdqRCxNQUFNLE9BQU8sU0FBVSxTQUFRLEtBQUs7SUFLaEMsWUFBWSxRQUFrQixFQUFFLEtBQVk7UUFDeEMsTUFBTSxhQUFhLEdBQWtCLEtBQVksQ0FBQztRQUVsRCxLQUFLLENBQ0QsYUFBYSxDQUFDLFlBQVksRUFDMUIsYUFBYSxDQUFDLHdCQUF3QixFQUN0QyxhQUFhLENBQUMsT0FBTyxFQUNyQixhQUFhLENBQUMsMEJBQTBCLEVBQ3hDLGFBQWEsQ0FBQyxhQUFhLEVBQzNCLFNBQVMsQ0FDWixDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxLQUFLLENBQUksU0FBdUI7UUFDbkMsMEVBQTBFO1FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNuQyxNQUFNLFNBQVMsR0FBeUIsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEcsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUU7Z0JBQ2hGLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFWCxvRkFBb0Y7WUFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksYUFBYSxDQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNuRjtRQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7O1lBbkNKLFVBQVU7OztZQWJVLFFBQVE7WUFDcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3hzL3N0b3JlXCI7XG5pbXBvcnQgeyBTeW5jQ2xhc3MgfSBmcm9tIFwiLi9kZWNvcmF0b3JzL3N5bmMtY2xhc3NcIjtcbmltcG9ydCB7IFN0YXRlU2VsZWN0b3IgfSBmcm9tIFwiLi9zdGF0ZS1zZWxlY3RvclwiO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxTdG9yZSB7XG4gICAgX3N0YXRlU3RyZWFtOiBhbnk7XG4gICAgX2ludGVybmFsU3RhdGVPcGVyYXRpb25zOiBhbnk7XG4gICAgX2NvbmZpZzogYW55O1xuICAgIF9pbnRlcm5hbEV4ZWN1dGlvblN0cmF0ZWd5OiBhbnk7XG4gICAgX3N0YXRlRmFjdG9yeTogYW55O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU3luY1N0b3JlIGV4dGVuZHMgU3RvcmUge1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rvck1hcDogTWFwPFN5bmNDbGFzczxhbnk+LCBTdGF0ZVNlbGVjdG9yPGFueT4+O1xuXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLCBzdG9yZTogU3RvcmUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxTdG9yZTogSW50ZXJuYWxTdG9yZSA9IHN0b3JlIGFzIGFueTtcblxuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIGludGVybmFsU3RvcmUuX3N0YXRlU3RyZWFtLFxuICAgICAgICAgICAgaW50ZXJuYWxTdG9yZS5faW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnMsXG4gICAgICAgICAgICBpbnRlcm5hbFN0b3JlLl9jb25maWcsXG4gICAgICAgICAgICBpbnRlcm5hbFN0b3JlLl9pbnRlcm5hbEV4ZWN1dGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgaW50ZXJuYWxTdG9yZS5fc3RhdGVGYWN0b3J5LFxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLl9zZWxlY3Rvck1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGU8VD4oc3luY1N0YXRlOiBTeW5jQ2xhc3M8VD4pOiBTdGF0ZVNlbGVjdG9yPFQ+IHtcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdG9yIGhhc24ndCBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgc3RhdGUgY2xhc3MgeWV0LCBjcmVhdGUgaXRcbiAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3Rvck1hcC5oYXMoc3luY1N0YXRlKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVQYXRoOiBTeW5jQ2xhc3M8dW5rbm93bj5bXSA9IFsuLi5TeW5jQ2xhc3MucmVzb2x2ZVBhcmVudHMoc3luY1N0YXRlKS5yZXZlcnNlKCksIHN5bmNTdGF0ZV07XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSQgPSB0aGlzLnNlbGVjdDxUPihzdGF0ZSA9PiBzdGF0ZVBhdGgucmVkdWNlKChwYXJlbnRTdGF0ZSwgY2hpbGRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRTdGF0ZVtTeW5jQ2xhc3MuZ2V0U3RvcmVPcHRpb25zKGNoaWxkU3RhdGUpLm5hbWVdO1xuICAgICAgICAgICAgfSwgc3RhdGUpKTtcblxuICAgICAgICAgICAgLy8gUmVjb3JkIGVhY2ggc3RhdGUgc2VsZWN0b3IgdG8ga2VlcCBwZW5kaW5nIHJlcXVlc3RzIGluIHN5bmMgYmV0d2VlbiBzdGF0ZSgpIGNhbGxzXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rvck1hcC5zZXQoc3luY1N0YXRlLCBuZXcgU3RhdGVTZWxlY3RvcjxUPih0aGlzLCBzeW5jU3RhdGUsIHN0YXRlJCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdG9yTWFwLmdldChzeW5jU3RhdGUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { forkJoin, of } from "rxjs";
|
|
2
|
-
import { map, switchMap, take } from "rxjs/operators";
|
|
3
|
-
import { SyncStore } from "../sync-store";
|
|
4
|
-
import { SynchronizerDictionary } from "./synchronizer-dictionary";
|
|
5
|
-
export class StateSynchronizer {
|
|
6
|
-
constructor(injector, propertyState) {
|
|
7
|
-
this.injector = injector;
|
|
8
|
-
this.propertyState = propertyState;
|
|
9
|
-
}
|
|
10
|
-
read(_requiredDetails, _options) {
|
|
11
|
-
const syncStore = this.injector.get(SyncStore);
|
|
12
|
-
const stateSelector = syncStore.state(this.propertyState);
|
|
13
|
-
// Sync each property in the sub-store that has a synchronizer
|
|
14
|
-
return this.readSubset(SynchronizerDictionary.keys(stateSelector.synchronizers));
|
|
15
|
-
}
|
|
16
|
-
readSubset(properties) {
|
|
17
|
-
const syncStore = this.injector.get(SyncStore);
|
|
18
|
-
const stateSelector = syncStore.state(this.propertyState);
|
|
19
|
-
// Sync each property in the sub-store that has a synchronizer and combine with the current store's data
|
|
20
|
-
return this.readProperties(stateSelector, properties).pipe(map(results => Object.assign({}, ...results)), switchMap(newProperties => stateSelector.properties().pipe(take(1), map(originalProperties => (Object.assign(Object.assign({}, originalProperties), newProperties))))));
|
|
21
|
-
}
|
|
22
|
-
readProperties(stateSelector, keys) {
|
|
23
|
-
// Sync each property in the dictionary
|
|
24
|
-
return keys.length > 0
|
|
25
|
-
? forkJoin(keys.map((propKey) => this.readProperty(stateSelector, propKey)))
|
|
26
|
-
: of([]);
|
|
27
|
-
}
|
|
28
|
-
readProperty(stateSelector, propKey) {
|
|
29
|
-
// Use `syncProperty` to invoke the synchronizer for this property
|
|
30
|
-
return stateSelector.syncProperty(propKey).pipe(map(result => ({ [propKey]: result })));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtc3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmNocm9uaXplci9zdGF0ZS1zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRSxNQUFNLE9BQWdCLGlCQUFpQjtJQU9uQyxZQUNxQixRQUFrQixFQUNsQixhQUFvQztRQURwQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUF1QjtJQUN0RCxDQUFDO0lBRUcsSUFBSSxDQUNQLGdCQUE0QixFQUM1QixRQUFtRTtRQUVuRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0RSw4REFBOEQ7UUFDOUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQTJCLENBQUM7SUFDL0csQ0FBQztJQUVTLFVBQVUsQ0FBQyxVQUFtQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0RSx3R0FBd0c7UUFDeEcsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQ3RELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFDN0MsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxpQ0FDdkYsa0JBQWtCLEdBQ2xCLGFBQWEsRUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO0lBQ04sQ0FBQztJQUVPLGNBQWMsQ0FDbEIsYUFBd0MsRUFDeEMsSUFBNkI7UUFFN0IsdUNBQXVDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM1RSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxZQUFZLENBQ2hCLGFBQXdDLEVBQ3hDLE9BQWlCO1FBRWpCLGtFQUFrRTtRQUNsRSxPQUFPLGFBQWEsQ0FBQyxZQUFZLENBQVcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzdHLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgU3luY0NsYXNzIH0gZnJvbSBcIi4uL2RlY29yYXRvcnMvc3luYy1jbGFzc1wiO1xuaW1wb3J0IHsgU3RhdGVTZWxlY3RvciB9IGZyb20gXCIuLi9zdGF0ZS1zZWxlY3RvclwiO1xuaW1wb3J0IHsgU3luY1N0b3JlIH0gZnJvbSBcIi4uL3N5bmMtc3RvcmVcIjtcbmltcG9ydCB7IFByb3BlcnR5U3luY2hyb25pemVyIH0gZnJvbSBcIi4vcHJvcGVydHktc3luY2hyb25pemVyXCI7XG5pbXBvcnQgeyBTeW5jaHJvbml6ZXJEaWN0aW9uYXJ5IH0gZnJvbSBcIi4vc3luY2hyb25pemVyLWRpY3Rpb25hcnlcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YXRlU3luY2hyb25pemVyPFxuICAgIFQsXG4gICAgUHJvcEtleSBleHRlbmRzIGtleW9mIFQsXG4gICAgUmVhZFBhcmFtc1QgPSBuZXZlcixcbiAgICBXcml0ZVBhcmFtc1QgPSBuZXZlclxuPiBpbXBsZW1lbnRzIFByb3BlcnR5U3luY2hyb25pemVyPFQsIFByb3BLZXksIFJlYWRQYXJhbXNULCBXcml0ZVBhcmFtc1Q+IHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eVN0YXRlOiBTeW5jQ2xhc3M8VFtQcm9wS2V5XT5cbiAgICApIHt9XG5cbiAgICBwdWJsaWMgcmVhZChcbiAgICAgICAgX3JlcXVpcmVkRGV0YWlsczogUGFydGlhbDxUPixcbiAgICAgICAgX29wdGlvbnM6IFByb3BlcnR5U3luY2hyb25pemVyLlJlYWRPcHRpb25zPFQsIFByb3BLZXksIFJlYWRQYXJhbXNUPlxuICAgICk6IE9ic2VydmFibGU8VFtQcm9wS2V5XT4ge1xuICAgICAgICBjb25zdCBzeW5jU3RvcmUgPSB0aGlzLmluamVjdG9yLmdldChTeW5jU3RvcmUpO1xuICAgICAgICBjb25zdCBzdGF0ZVNlbGVjdG9yID0gc3luY1N0b3JlLnN0YXRlPFRbUHJvcEtleV0+KHRoaXMucHJvcGVydHlTdGF0ZSk7XG5cbiAgICAgICAgLy8gU3luYyBlYWNoIHByb3BlcnR5IGluIHRoZSBzdWItc3RvcmUgdGhhdCBoYXMgYSBzeW5jaHJvbml6ZXJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFN1YnNldChTeW5jaHJvbml6ZXJEaWN0aW9uYXJ5LmtleXMoc3RhdGVTZWxlY3Rvci5zeW5jaHJvbml6ZXJzKSkgYXMgT2JzZXJ2YWJsZTxUW1Byb3BLZXldPjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVhZFN1YnNldChwcm9wZXJ0aWVzOiBBcnJheTxrZXlvZiBUW1Byb3BLZXldPik6IE9ic2VydmFibGU8VFtQcm9wS2V5XT4ge1xuICAgICAgICBjb25zdCBzeW5jU3RvcmUgPSB0aGlzLmluamVjdG9yLmdldChTeW5jU3RvcmUpO1xuICAgICAgICBjb25zdCBzdGF0ZVNlbGVjdG9yID0gc3luY1N0b3JlLnN0YXRlPFRbUHJvcEtleV0+KHRoaXMucHJvcGVydHlTdGF0ZSk7XG5cbiAgICAgICAgLy8gU3luYyBlYWNoIHByb3BlcnR5IGluIHRoZSBzdWItc3RvcmUgdGhhdCBoYXMgYSBzeW5jaHJvbml6ZXIgYW5kIGNvbWJpbmUgd2l0aCB0aGUgY3VycmVudCBzdG9yZSdzIGRhdGFcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFByb3BlcnRpZXMoc3RhdGVTZWxlY3RvciwgcHJvcGVydGllcykucGlwZShcbiAgICAgICAgICAgIG1hcChyZXN1bHRzID0+IE9iamVjdC5hc3NpZ24oe30sIC4uLnJlc3VsdHMpKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChuZXdQcm9wZXJ0aWVzID0+IHN0YXRlU2VsZWN0b3IucHJvcGVydGllcygpLnBpcGUodGFrZSgxKSwgbWFwKG9yaWdpbmFsUHJvcGVydGllcyA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLm9yaWdpbmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAuLi5uZXdQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9KSkpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZFByb3BlcnRpZXMoXG4gICAgICAgIHN0YXRlU2VsZWN0b3I6IFN0YXRlU2VsZWN0b3I8VFtQcm9wS2V5XT4sXG4gICAgICAgIGtleXM6IEFycmF5PGtleW9mIFRbUHJvcEtleV0+XG4gICAgKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPFRbUHJvcEtleV0+W10+IHtcbiAgICAgICAgLy8gU3luYyBlYWNoIHByb3BlcnR5IGluIHRoZSBkaWN0aW9uYXJ5XG4gICAgICAgIHJldHVybiBrZXlzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gZm9ya0pvaW4oa2V5cy5tYXAoKHByb3BLZXkpID0+IHRoaXMucmVhZFByb3BlcnR5KHN0YXRlU2VsZWN0b3IsIHByb3BLZXkpKSlcbiAgICAgICAgICAgIDogb2YoW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZFByb3BlcnR5PFN1YlByb3BUIGV4dGVuZHMga2V5b2YgVFtQcm9wS2V5XT4oXG4gICAgICAgIHN0YXRlU2VsZWN0b3I6IFN0YXRlU2VsZWN0b3I8VFtQcm9wS2V5XT4sXG4gICAgICAgIHByb3BLZXk6IFN1YlByb3BUXG4gICAgKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPFRbUHJvcEtleV0+PiB7XG4gICAgICAgIC8vIFVzZSBgc3luY1Byb3BlcnR5YCB0byBpbnZva2UgdGhlIHN5bmNocm9uaXplciBmb3IgdGhpcyBwcm9wZXJ0eVxuICAgICAgICByZXR1cm4gc3RhdGVTZWxlY3Rvci5zeW5jUHJvcGVydHk8U3ViUHJvcFQ+KHByb3BLZXkpLnBpcGUobWFwKHJlc3VsdCA9PiAoeyBbcHJvcEtleV06IHJlc3VsdCB9KSBhcyBhbnkpKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export var SynchronizerDictionary;
|
|
2
|
-
(function (SynchronizerDictionary) {
|
|
3
|
-
function keys(dict) {
|
|
4
|
-
return isCollectionSynchronizer(dict) ? [] : Object.keys(dict || {});
|
|
5
|
-
}
|
|
6
|
-
SynchronizerDictionary.keys = keys;
|
|
7
|
-
function isCollectionSynchronizer(dict) {
|
|
8
|
-
var _a, _b;
|
|
9
|
-
return typeof ((_b = (_a = dict) === null || _a === void 0 ? void 0 : _a.prototype) === null || _b === void 0 ? void 0 : _b.read) === "function";
|
|
10
|
-
}
|
|
11
|
-
SynchronizerDictionary.isCollectionSynchronizer = isCollectionSynchronizer;
|
|
12
|
-
function resolveSynchronizer(dict, propKey) {
|
|
13
|
-
return isCollectionSynchronizer(dict) ? dict : dict[propKey];
|
|
14
|
-
}
|
|
15
|
-
SynchronizerDictionary.resolveSynchronizer = resolveSynchronizer;
|
|
16
|
-
function resolveSynchronizerInstance(injector, dict, propKey) {
|
|
17
|
-
const synchronizerDef = resolveSynchronizer(dict, propKey);
|
|
18
|
-
if (!!synchronizerDef) {
|
|
19
|
-
return injector.get(synchronizerDef);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
throw new Error(`A Synchronizer has not been defined for property '${propKey}.`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
SynchronizerDictionary.resolveSynchronizerInstance = resolveSynchronizerInstance;
|
|
26
|
-
})(SynchronizerDictionary || (SynchronizerDictionary = {}));
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2hyb25pemVyLWRpY3Rpb25hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luY2hyb25pemVyL3N5bmNocm9uaXplci1kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE1BQU0sS0FBVyxzQkFBc0IsQ0FnQ3RDO0FBaENELFdBQWlCLHNCQUFzQjtJQUVuQyxTQUFnQixJQUFJLENBQUksSUFBK0I7UUFDbkQsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQW1CLENBQUM7SUFDM0YsQ0FBQztJQUZlLDJCQUFJLE9BRW5CLENBQUE7SUFFRCxTQUFnQix3QkFBd0IsQ0FDcEMsSUFBK0I7O1FBRS9CLE9BQU8sT0FBTyxDQUFBLE1BQUEsTUFBQyxJQUF3QywwQ0FBRSxTQUFTLDBDQUFFLElBQUksQ0FBQSxLQUFLLFVBQVUsQ0FBQztJQUM1RixDQUFDO0lBSmUsK0NBQXdCLDJCQUl2QyxDQUFBO0lBRUQsU0FBZ0IsbUJBQW1CLENBQy9CLElBQStCLEVBQy9CLE9BQWdCO1FBRWhCLE9BQU8sd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFMZSwwQ0FBbUIsc0JBS2xDLENBQUE7SUFFRCxTQUFnQiwyQkFBMkIsQ0FDdkMsUUFBa0IsRUFDbEIsSUFBK0IsRUFDL0IsT0FBZ0I7UUFFaEIsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRTtZQUNuQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDeEM7YUFBTTtZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDcEY7SUFDTCxDQUFDO0lBWmUsa0RBQTJCLDhCQVkxQyxDQUFBO0FBQ0wsQ0FBQyxFQWhDZ0Isc0JBQXNCLEtBQXRCLHNCQUFzQixRQWdDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uU3luY2hyb25pemVyIH0gZnJvbSBcIi4vY29sbGVjdGlvbi1zeW5jaHJvbml6ZXJcIjtcbmltcG9ydCB7IFByb3BlcnR5U3luY2hyb25pemVyIH0gZnJvbSBcIi4vcHJvcGVydHktc3luY2hyb25pemVyXCI7XG5pbXBvcnQgeyBTeW5jaHJvbml6ZXIgfSBmcm9tIFwiLi9zeW5jaHJvbml6ZXJcIjtcblxuZXhwb3J0IHR5cGUgU3luY2hyb25pemVyRGljdGlvbmFyeTxUPiA9IHtcbiAgICBbUCBpbiBrZXlvZiBUXT86IFR5cGU8UHJvcGVydHlTeW5jaHJvbml6ZXI8VCwgUD4+O1xufSB8IFR5cGU8Q29sbGVjdGlvblN5bmNocm9uaXplcjxUPj47XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3luY2hyb25pemVyRGljdGlvbmFyeSB7XG5cbiAgICBleHBvcnQgZnVuY3Rpb24ga2V5czxUPihkaWN0OiBTeW5jaHJvbml6ZXJEaWN0aW9uYXJ5PFQ+KTogQXJyYXk8a2V5b2YgVD4ge1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uU3luY2hyb25pemVyKGRpY3QpID8gW10gOiBPYmplY3Qua2V5cyhkaWN0IHx8IHt9KSBhcyBBcnJheTxrZXlvZiBUPjtcbiAgICB9XG5cbiAgICBleHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uU3luY2hyb25pemVyPFQ+KFxuICAgICAgICBkaWN0OiBTeW5jaHJvbml6ZXJEaWN0aW9uYXJ5PFQ+XG4gICAgKTogZGljdCBpcyBUeXBlPENvbGxlY3Rpb25TeW5jaHJvbml6ZXI8VD4+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiAoZGljdCBhcyBUeXBlPENvbGxlY3Rpb25TeW5jaHJvbml6ZXI8VD4+KT8ucHJvdG90eXBlPy5yZWFkID09PSBcImZ1bmN0aW9uXCI7XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTeW5jaHJvbml6ZXI8VD4oXG4gICAgICAgIGRpY3Q6IFN5bmNocm9uaXplckRpY3Rpb25hcnk8VD4sXG4gICAgICAgIHByb3BLZXk6IGtleW9mIFRcbiAgICApOiBUeXBlPFN5bmNocm9uaXplcjxULCBrZXlvZiBULCB1bmtub3duLCB1bmtub3duPj4ge1xuICAgICAgICByZXR1cm4gaXNDb2xsZWN0aW9uU3luY2hyb25pemVyKGRpY3QpID8gZGljdCA6IGRpY3RbcHJvcEtleV07XG4gICAgfVxuXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTeW5jaHJvbml6ZXJJbnN0YW5jZTxUPihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBkaWN0OiBTeW5jaHJvbml6ZXJEaWN0aW9uYXJ5PFQ+LFxuICAgICAgICBwcm9wS2V5OiBrZXlvZiBUXG4gICAgKTogU3luY2hyb25pemVyPFQsIGtleW9mIFQsIHVua25vd24sIHVua25vd24+IHtcbiAgICAgICAgY29uc3Qgc3luY2hyb25pemVyRGVmID0gcmVzb2x2ZVN5bmNocm9uaXplcihkaWN0LCBwcm9wS2V5KTtcblxuICAgICAgICBpZiAoISFzeW5jaHJvbml6ZXJEZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmplY3Rvci5nZXQoc3luY2hyb25pemVyRGVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQSBTeW5jaHJvbml6ZXIgaGFzIG5vdCBiZWVuIGRlZmluZWQgZm9yIHByb3BlcnR5ICcke3Byb3BLZXl9LmApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|