UNPKG

@schoolbelle/common

Version:

Demo library to showcase Angular packaging format

314 lines (309 loc) 25.9 kB
import { fromJS } from 'immutable'; import { get, isEqual, set, unset, forEach } from 'lodash'; import { BehaviorSubject } from 'rxjs'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ class ObjectChangeChildTracker { /** * @param {?=} root * @param {?=} pathsFromRoot */ constructor(root = undefined, pathsFromRoot = []) { this.contentUpdateEvent = new BehaviorSubject([null, null]); this.root = root; this.pathsFromRoot = pathsFromRoot; } /** * @return {?} */ get onContentUpdate() { return this.contentUpdateEvent.asObservable(); } /** * @return {?} */ get Immutable() { return this.root ? this.root.Immutable.getIn(this.pathsFromRoot) : undefined; } /** * @return {?} */ val() { return this.get([]); } /** * @return {?} */ get isChanged() { return (this.to && (typeof this.to === 'object' && Object.keys(this.to).length !== 0)); } /** * @return {?} */ get origin() { return get(this.root.origin, this.pathsFromRoot); } /** * @return {?} */ get to() { return get(this.root.to, this.pathsFromRoot); } /** * @return {?} */ get from() { return get(this.root.from, this.pathsFromRoot); } /** * @return {?} */ get parent() { return this.root.child(this.pathsFromRoot.slice(0, -1)); } /** * @param {?} paths * @return {?} */ child(paths) { return this.root.child(this.pathsFromRoot.concat(paths)); } /** * @return {?} */ empty() { this.set([], null); } /** * @param {?} paths * @return {?} */ get(paths) { paths = this.pathsFromRoot.concat(paths); return this.root.get(paths); } /** * @param {?} paths * @param {?} value * @return {?} */ set(paths, value) { paths = this.pathsFromRoot.concat(paths); this.root.set(paths, value); } /** * @return {?} */ destroy() { this.root.destroyChild(this.pathsFromRoot); } } class ObjectChangeTracker { constructor() { this.contentUpdateEvent = new BehaviorSubject(null); this.data = fromJS({}); this.origin = {}; this.to = {}; this.from = {}; this.children = new Map(); } /** * @return {?} */ get onContentUpdate() { return this.contentUpdateEvent.asObservable(); } /** * @return {?} */ get Immutable() { return this.data; } /** * @return {?} */ val() { return this.data.toJS(); } /** * @return {?} */ get isChanged() { return (Object.keys(this.to).length !== 0 || Object.keys(this.from).length !== 0); } /** * @param {?} origin * @return {?} */ load(origin) { this.data = fromJS(origin); this.origin = Object.assign({}, origin); this.to = {}; this.from = {}; Array.from(this.children.keys()) .sort((a, b) => { if (a.length > b.length) return 1; else if (a.length < b.length) return -1; else return 0; }) .forEach(key => { let /** @type {?} */ childRef = this.children.get(key); if (childRef) childRef.contentUpdateEvent.next([childRef.to, childRef.from]); }); this.contentUpdateEvent.next([this.to, this.from]); } /** * @return {?} */ empty() { this.data = fromJS({}); this.origin = Object.assign({}); this.to = {}; this.from = {}; Array.from(this.children.keys()) .sort((a, b) => { if (a.length > b.length) return 1; else if (a.length < b.length) return -1; else return 0; }) .forEach(key => { let /** @type {?} */ childRef = this.children.get(key); if (childRef) childRef.contentUpdateEvent.next([childRef.to, childRef.from]); }); this.contentUpdateEvent.next([this.to, this.from]); } /** * @return {?} */ backToOrigin() { this.data = fromJS(this.origin); this.to = {}; this.from = {}; Array.from(this.children.keys()) .sort((a, b) => { if (a.length > b.length) return 1; else if (a.length < b.length) return -1; else return 0; }) .forEach(key => { let /** @type {?} */ childRef = this.children.get(key); if (childRef) childRef.contentUpdateEvent.next([childRef.to, childRef.from]); }); this.contentUpdateEvent.next([this.to, this.from]); } /** * @param {?} paths * @return {?} */ get(paths) { let /** @type {?} */ found = this.data.getIn(paths); if (found && typeof found === 'object') found = found.toJS(); return found; } /** * @param {?} paths * @param {?} v_n * @return {?} */ set(paths, v_n) { let /** @type {?} */ v_o = this.get(paths); if (v_o === v_n) return false; let /** @type {?} */ v_origin = get(this.origin, paths); if (!isEqual(v_origin, v_n)) { set(this.to, paths, typeof v_n === 'object' ? Object.assign({}, v_n) : v_n); set(this.from, paths, v_origin); } else { unset(this.to, paths); unset(this.from, paths); } this.clean(this.to); this.clean(this.from); if (v_n && typeof v_n === 'object') v_n = fromJS(v_n); if (v_n === null) { this.data = this.data.removeIn(paths); } else { this.data = this.data.setIn(paths, v_n); } paths.forEach((path, index) => { let /** @type {?} */ childRef = this.children.get(paths.slice(0, paths.length - index).join('/')); if (childRef) childRef.contentUpdateEvent.next([childRef.to, childRef.from]); }); this.contentUpdateEvent.next([this.to, this.from]); return true; } /** * @param {?} el * @return {?} */ clean(el) { if (el && typeof el === 'object') { forEach(el, (val, key) => { if (val && typeof val === 'object') { this.clean(val); if (Object.keys(val).length === 0) delete el[key]; } else if (val === undefined || val === null) { delete el[key]; } }); } } /** * @param {?} paths * @return {?} */ child(paths) { if (paths.length === 0) { return this; } else { let /** @type {?} */ childRef = this.children.get(paths.join('/')); if (!childRef) { childRef = new ObjectChangeChildTracker(this, paths); this.children.set(paths.join('/'), childRef); } return childRef; } } /** * @param {?} paths * @return {?} */ destroyChild(paths) { this.children.delete(paths.join('/')); } } /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ export { ObjectChangeChildTracker, ObjectChangeTracker }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nob29sYmVsbGUtY29tbW9uLXNlcnZpY2VzLW9iamVjdC1jaGFuZ2UtdHJhY2tlci5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHNjaG9vbGJlbGxlL2NvbW1vbi9zZXJ2aWNlcy9vYmplY3QtY2hhbmdlLXRyYWNrZXIvb2JqZWN0LWNoYW5nZS10cmFja2VyLnNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgSW1tdXRhYmxlIGZyb20gJ2ltbXV0YWJsZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIE9iamVjdENoYW5nZUNoaWxkVHJhY2tlciB7XG4gIHB1YmxpYyByb290OiBPYmplY3RDaGFuZ2VUcmFja2VyO1xuICBwdWJsaWMgcGF0aHNGcm9tUm9vdDogQXJyYXk8YW55PjtcbiAgcHVibGljIGNvbnRlbnRVcGRhdGVFdmVudCA9IG5ldyBCZWhhdmlvclN1YmplY3QoW251bGwsIG51bGxdKTtcbiAgZ2V0IG9uQ29udGVudFVwZGF0ZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRVcGRhdGVFdmVudC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihcbiAgICByb290OiBPYmplY3RDaGFuZ2VUcmFja2VyID0gdW5kZWZpbmVkLFxuICAgIHBhdGhzRnJvbVJvb3Q6IEFycmF5PHN0cmluZz4gPSBbXVxuICApIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucGF0aHNGcm9tUm9vdCA9IHBhdGhzRnJvbVJvb3Q7XG4gIH1cbiAgZ2V0IEltbXV0YWJsZSgpOiBJbW11dGFibGUuTWFwPGFueSwgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm9vdFxuICAgICAgPyB0aGlzLnJvb3QuSW1tdXRhYmxlLmdldEluKHRoaXMucGF0aHNGcm9tUm9vdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyB2YWwoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoW10pO1xuICB9XG4gIGdldCBpc0NoYW5nZWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG8gJiZcbiAgICAgICh0eXBlb2YgdGhpcy50byA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModGhpcy50bykubGVuZ3RoICE9PSAwKVxuICAgICk7XG4gIH1cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yb290Lm9yaWdpbiwgdGhpcy5wYXRoc0Zyb21Sb290KTtcbiAgfVxuICBnZXQgdG8oKSB7XG4gICAgcmV0dXJuIF8uZ2V0KHRoaXMucm9vdC50bywgdGhpcy5wYXRoc0Zyb21Sb290KTtcbiAgfVxuICBnZXQgZnJvbSgpIHtcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yb290LmZyb20sIHRoaXMucGF0aHNGcm9tUm9vdCk7XG4gIH1cbiAgZ2V0IHBhcmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290LmNoaWxkKHRoaXMucGF0aHNGcm9tUm9vdC5zbGljZSgwLCAtMSkpO1xuICB9XG5cbiAgcHVibGljIGNoaWxkKHBhdGhzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdC5jaGlsZCh0aGlzLnBhdGhzRnJvbVJvb3QuY29uY2F0KHBhdGhzKSk7XG4gIH1cblxuICBwdWJsaWMgZW1wdHkoKSB7XG4gICAgdGhpcy5zZXQoW10sIG51bGwpO1xuICB9XG4gIHB1YmxpYyBnZXQocGF0aHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBwYXRocyA9IHRoaXMucGF0aHNGcm9tUm9vdC5jb25jYXQocGF0aHMpO1xuICAgIHJldHVybiB0aGlzLnJvb3QuZ2V0KHBhdGhzKTtcbiAgfVxuICBwdWJsaWMgc2V0KHBhdGhzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZSkge1xuICAgIHBhdGhzID0gdGhpcy5wYXRoc0Zyb21Sb290LmNvbmNhdChwYXRocyk7XG4gICAgdGhpcy5yb290LnNldChwYXRocywgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIHRoaXMucm9vdC5kZXN0cm95Q2hpbGQodGhpcy5wYXRoc0Zyb21Sb290KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0Q2hhbmdlVHJhY2tlciB7XG4gIHByb3RlY3RlZCBjb250ZW50VXBkYXRlRXZlbnQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBudWxsXG4gICk7XG4gIGdldCBvbkNvbnRlbnRVcGRhdGUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50VXBkYXRlRXZlbnQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRhdGE6IEltbXV0YWJsZS5NYXA8YW55LCBhbnk+ID0gSW1tdXRhYmxlLmZyb21KUyh7fSk7XG4gIHB1YmxpYyBvcmlnaW46IGFueSA9IHt9O1xuICBwdWJsaWMgdG86IGFueSA9IHt9O1xuICBwdWJsaWMgZnJvbTogYW55ID0ge307XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGdldCBJbW11dGFibGUoKTogSW1tdXRhYmxlLk1hcDxhbnksIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cbiAgcHVibGljIHZhbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGEudG9KUygpO1xuICB9XG4gIGdldCBpc0NoYW5nZWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudG8pLmxlbmd0aCAhPT0gMCB8fCBPYmplY3Qua2V5cyh0aGlzLmZyb20pLmxlbmd0aCAhPT0gMFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbG9hZChvcmlnaW4pIHtcbiAgICB0aGlzLmRhdGEgPSBJbW11dGFibGUuZnJvbUpTKG9yaWdpbik7XG4gICAgdGhpcy5vcmlnaW4gPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW4pO1xuICAgIHRoaXMudG8gPSB7fTtcbiAgICB0aGlzLmZyb20gPSB7fTtcbiAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4ua2V5cygpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gYi5sZW5ndGgpIHJldHVybiAxO1xuICAgICAgICBlbHNlIGlmIChhLmxlbmd0aCA8IGIubGVuZ3RoKSByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgcmV0dXJuIDA7XG4gICAgICB9KVxuICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IGNoaWxkUmVmID0gdGhpcy5jaGlsZHJlbi5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGNoaWxkUmVmKVxuICAgICAgICAgIGNoaWxkUmVmLmNvbnRlbnRVcGRhdGVFdmVudC5uZXh0KFtjaGlsZFJlZi50bywgY2hpbGRSZWYuZnJvbV0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5jb250ZW50VXBkYXRlRXZlbnQubmV4dChbdGhpcy50bywgdGhpcy5mcm9tXSk7XG4gIH1cbiAgcHVibGljIGVtcHR5KCkge1xuICAgIHRoaXMuZGF0YSA9IEltbXV0YWJsZS5mcm9tSlMoe30pO1xuICAgIHRoaXMub3JpZ2luID0gT2JqZWN0LmFzc2lnbih7fSk7XG4gICAgdGhpcy50byA9IHt9O1xuICAgIHRoaXMuZnJvbSA9IHt9O1xuICAgIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbi5rZXlzKCkpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYS5sZW5ndGggPiBiLmxlbmd0aCkgcmV0dXJuIDE7XG4gICAgICAgIGVsc2UgaWYgKGEubGVuZ3RoIDwgYi5sZW5ndGgpIHJldHVybiAtMTtcbiAgICAgICAgZWxzZSByZXR1cm4gMDtcbiAgICAgIH0pXG4gICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBsZXQgY2hpbGRSZWYgPSB0aGlzLmNoaWxkcmVuLmdldChrZXkpO1xuICAgICAgICBpZiAoY2hpbGRSZWYpXG4gICAgICAgICAgY2hpbGRSZWYuY29udGVudFVwZGF0ZUV2ZW50Lm5leHQoW2NoaWxkUmVmLnRvLCBjaGlsZFJlZi5mcm9tXSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmNvbnRlbnRVcGRhdGVFdmVudC5uZXh0KFt0aGlzLnRvLCB0aGlzLmZyb21dKTtcbiAgfVxuICBwdWJsaWMgYmFja1RvT3JpZ2luKCkge1xuICAgIHRoaXMuZGF0YSA9IEltbXV0YWJsZS5mcm9tSlModGhpcy5vcmlnaW4pO1xuICAgIHRoaXMudG8gPSB7fTtcbiAgICB0aGlzLmZyb20gPSB7fTtcbiAgICBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4ua2V5cygpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gYi5sZW5ndGgpIHJldHVybiAxO1xuICAgICAgICBlbHNlIGlmIChhLmxlbmd0aCA8IGIubGVuZ3RoKSByZXR1cm4gLTE7XG4gICAgICAgIGVsc2UgcmV0dXJuIDA7XG4gICAgICB9KVxuICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IGNoaWxkUmVmID0gdGhpcy5jaGlsZHJlbi5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGNoaWxkUmVmKVxuICAgICAgICAgIGNoaWxkUmVmLmNvbnRlbnRVcGRhdGVFdmVudC5uZXh0KFtjaGlsZFJlZi50bywgY2hpbGRSZWYuZnJvbV0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5jb250ZW50VXBkYXRlRXZlbnQubmV4dChbdGhpcy50bywgdGhpcy5mcm9tXSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KHBhdGhzOiBBcnJheTxzdHJpbmc+KTogYW55IHtcbiAgICBsZXQgZm91bmQgPSB0aGlzLmRhdGEuZ2V0SW4ocGF0aHMpO1xuICAgIGlmIChmb3VuZCAmJiB0eXBlb2YgZm91bmQgPT09ICdvYmplY3QnKSBmb3VuZCA9IGZvdW5kLnRvSlMoKTtcbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cbiAgcHVibGljIHNldChwYXRoczogQXJyYXk8c3RyaW5nPiwgdl9uOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdl9vID0gdGhpcy5nZXQocGF0aHMpO1xuICAgIGlmICh2X28gPT09IHZfbikgcmV0dXJuIGZhbHNlO1xuXG4gICAgbGV0IHZfb3JpZ2luID0gXy5nZXQodGhpcy5vcmlnaW4sIHBhdGhzKTtcbiAgICBpZiAoIV8uaXNFcXVhbCh2X29yaWdpbiwgdl9uKSkge1xuICAgICAgXy5zZXQoXG4gICAgICAgIHRoaXMudG8sXG4gICAgICAgIHBhdGhzLFxuICAgICAgICB0eXBlb2Ygdl9uID09PSAnb2JqZWN0JyA/IE9iamVjdC5hc3NpZ24oe30sIHZfbikgOiB2X25cbiAgICAgICk7XG4gICAgICBfLnNldCh0aGlzLmZyb20sIHBhdGhzLCB2X29yaWdpbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIF8udW5zZXQodGhpcy50bywgcGF0aHMpO1xuICAgICAgXy51bnNldCh0aGlzLmZyb20sIHBhdGhzKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhbih0aGlzLnRvKTtcbiAgICB0aGlzLmNsZWFuKHRoaXMuZnJvbSk7XG4gICAgaWYgKHZfbiAmJiB0eXBlb2Ygdl9uID09PSAnb2JqZWN0Jykgdl9uID0gSW1tdXRhYmxlLmZyb21KUyh2X24pO1xuICAgIGlmICh2X24gPT09IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5yZW1vdmVJbihwYXRocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zZXRJbihwYXRocywgdl9uKTtcbiAgICB9XG4gICAgcGF0aHMuZm9yRWFjaCgocGF0aCwgaW5kZXgpID0+IHtcbiAgICAgIGxldCBjaGlsZFJlZiA9IHRoaXMuY2hpbGRyZW4uZ2V0KFxuICAgICAgICBwYXRocy5zbGljZSgwLCBwYXRocy5sZW5ndGggLSBpbmRleCkuam9pbignLycpXG4gICAgICApO1xuICAgICAgaWYgKGNoaWxkUmVmKVxuICAgICAgICBjaGlsZFJlZi5jb250ZW50VXBkYXRlRXZlbnQubmV4dChbY2hpbGRSZWYudG8sIGNoaWxkUmVmLmZyb21dKTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRlbnRVcGRhdGVFdmVudC5uZXh0KFt0aGlzLnRvLCB0aGlzLmZyb21dKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGNsZWFuKGVsKSB7XG4gICAgaWYgKGVsICYmIHR5cGVvZiBlbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIF8uZm9yRWFjaChlbCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLmNsZWFuKHZhbCk7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09PSAwKSBkZWxldGUgZWxba2V5XTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICBkZWxldGUgZWxba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBPYmplY3RDaGFuZ2VDaGlsZFRyYWNrZXI+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgY2hpbGQoXG4gICAgcGF0aHM6IEFycmF5PHN0cmluZz5cbiAgKTogT2JqZWN0Q2hhbmdlQ2hpbGRUcmFja2VyIHwgT2JqZWN0Q2hhbmdlVHJhY2tlciB7XG4gICAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjaGlsZFJlZiA9IHRoaXMuY2hpbGRyZW4uZ2V0KHBhdGhzLmpvaW4oJy8nKSk7XG4gICAgICBpZiAoIWNoaWxkUmVmKSB7XG4gICAgICAgIGNoaWxkUmVmID0gbmV3IE9iamVjdENoYW5nZUNoaWxkVHJhY2tlcih0aGlzLCBwYXRocyk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KHBhdGhzLmpvaW4oJy8nKSwgY2hpbGRSZWYpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNoaWxkUmVmO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZGVzdHJveUNoaWxkKHBhdGhzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5jaGlsZHJlbi5kZWxldGUocGF0aHMuam9pbignLycpKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl8uZ2V0IiwiSW1tdXRhYmxlLmZyb21KUyIsIl8uaXNFcXVhbCIsIl8uc2V0IiwiXy51bnNldCIsIl8uZm9yRWFjaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7Ozs7SUFXRSxZQUNFLE9BQTRCLFNBQVMsRUFDckMsZ0JBQStCLEVBQUU7a0NBTlAsSUFBSSxlQUFlLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFRM0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7S0FDcEM7Ozs7SUFURCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDL0M7Ozs7SUFRRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJO2NBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7Y0FDN0MsU0FBUyxDQUFDO0tBQ2Y7Ozs7SUFDTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7OztJQUV0QixJQUFJLFNBQVM7UUFDWCxRQUNFLElBQUksQ0FBQyxFQUFFO2FBQ04sT0FBTyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQ2xFO0tBQ0g7Ozs7SUFDRCxJQUFJLE1B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