UNPKG

@greenmice/ngx-cesium

Version:
64 lines 10.2 kB
import { Injectable } from '@angular/core'; import { SmartAssigner } from '../smart-assigner/smart-assigner.service'; import * as i0 from "@angular/core"; import * as i1 from "ngx-cesium-parser"; import * as i2 from "../json-mapper/json-mapper.service"; export class CesiumProperties { constructor(_parser, _jsonMapper) { this._parser = _parser; this._jsonMapper = _jsonMapper; this._assignersCache = new Map(); this._evaluatorsCache = new Map(); } _compile(expression, withCache = true) { const cesiumDesc = {}; const propsMap = new Map(); const resultMap = this._jsonMapper.map(expression); resultMap.forEach((resultExpression, prop) => propsMap.set(prop, { expression: resultExpression, get: this._parser.eval(resultExpression) })); propsMap.forEach((value, prop) => { if (withCache) { cesiumDesc[prop || 'undefined'] = `cache.get(\`${value.expression}\`, () => propsMap.get('${prop}').get(context))`; } else { cesiumDesc[prop || 'undefined'] = `propsMap.get('${prop}').get(context)`; } }); const fnBody = `return ${JSON.stringify(cesiumDesc).replace(/"/g, '')};`; const getFn = new Function('propsMap', 'cache', 'context', fnBody); return function evaluateCesiumProps(cache, context) { return getFn(propsMap, cache, context); }; } _build(expression) { const props = Array.from(this._jsonMapper.map(expression).keys()); const smartAssigner = SmartAssigner.create(props); return function assignCesiumProps(oldVal, newVal) { return smartAssigner(oldVal, newVal); }; } createEvaluator(expression, withCache = true, newEvaluator = false) { if (!newEvaluator && this._evaluatorsCache.has(expression)) { return this._evaluatorsCache.get(expression); } const evaluatorFn = this._compile(expression, withCache); this._evaluatorsCache.set(expression, evaluatorFn); return evaluatorFn; } createAssigner(expression) { if (this._assignersCache.has(expression)) { return this._assignersCache.get(expression); } const assignFn = this._build(expression); this._assignersCache.set(expression, assignFn); return assignFn; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CesiumProperties, deps: [{ token: i1.Parse }, { token: i2.JsonMapper }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CesiumProperties }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CesiumProperties, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.Parse }, { type: i2.JsonMapper }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VzaXVtLXByb3BlcnRpZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2VzaXVtL3NyYy9saWIvYW5ndWxhci1jZXNpdW0vc2VydmljZXMvY2VzaXVtLXByb3BlcnRpZXMvY2VzaXVtLXByb3BlcnRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQUd6RSxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQ1UsT0FBYyxFQUNkLFdBQXVCO1FBRHZCLFlBQU8sR0FBUCxPQUFPLENBQU87UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUx6QixvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFzRCxDQUFDO1FBQ2hGLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUFnRSxDQUFDO0lBTW5HLENBQUM7SUFFRCxRQUFRLENBQUMsVUFBa0IsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUMzQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWlELENBQUM7UUFFMUUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbkQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDL0QsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDekMsQ0FBQyxDQUFDLENBQUM7UUFFSixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQy9CLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsVUFBVSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsR0FBRyxlQUFlLEtBQUssQ0FBQyxVQUFVLDJCQUEyQixJQUFJLGtCQUFrQixDQUFDO1lBQ3JILENBQUM7aUJBQU0sQ0FBQztnQkFDTixVQUFVLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDekUsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbkUsT0FBTyxTQUFTLG1CQUFtQixDQUFDLEtBQXVCLEVBQUUsT0FBZTtZQUMxRSxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBa0I7UUFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEQsT0FBTyxTQUFTLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxNQUFjO1lBQzlELE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQWtCLEVBQUUsU0FBUyxHQUFHLElBQUksRUFBRSxZQUFZLEdBQUcsS0FBSztRQUN4RSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBa0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7OEdBbEVVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSnNvbk1hcHBlciB9IGZyb20gJy4uL2pzb24tbWFwcGVyL2pzb24tbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFyc2UgfSBmcm9tICduZ3gtY2VzaXVtLXBhcnNlcic7XG5pbXBvcnQgeyBDb21wdXRhdGlvbkNhY2hlIH0gZnJvbSAnLi4vY29tcHV0YXRpb24tY2FjaGUvY29tcHV0YXRpb24tY2FjaGUuc2VydmljZSc7XG5pbXBvcnQgeyBTbWFydEFzc2lnbmVyIH0gZnJvbSAnLi4vc21hcnQtYXNzaWduZXIvc21hcnQtYXNzaWduZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDZXNpdW1Qcm9wZXJ0aWVzIHtcbiAgcHJpdmF0ZSBfYXNzaWduZXJzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgKG9sZFZhbDogT2JqZWN0LCBuZXdWYWw6IE9iamVjdCkgPT4gT2JqZWN0PigpO1xuICBwcml2YXRlIF9ldmFsdWF0b3JzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgKGNhY2hlOiBDb21wdXRhdGlvbkNhY2hlLCBjb250ZXh0OiBPYmplY3QpID0+IE9iamVjdD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9wYXJzZXI6IFBhcnNlLFxuICAgIHByaXZhdGUgX2pzb25NYXBwZXI6IEpzb25NYXBwZXJcbiAgKSB7XG4gIH1cblxuICBfY29tcGlsZShleHByZXNzaW9uOiBzdHJpbmcsIHdpdGhDYWNoZSA9IHRydWUpOiAoY2FjaGU6IENvbXB1dGF0aW9uQ2FjaGUsIGNvbnRleHQ6IE9iamVjdCkgPT4gT2JqZWN0IHtcbiAgICBjb25zdCBjZXNpdW1EZXNjID0ge307XG4gICAgY29uc3QgcHJvcHNNYXAgPSBuZXcgTWFwPHN0cmluZywgeyBleHByZXNzaW9uOiBzdHJpbmcsIGdldDogRnVuY3Rpb24gfT4oKTtcblxuICAgIGNvbnN0IHJlc3VsdE1hcCA9IHRoaXMuX2pzb25NYXBwZXIubWFwKGV4cHJlc3Npb24pO1xuXG4gICAgcmVzdWx0TWFwLmZvckVhY2goKHJlc3VsdEV4cHJlc3Npb24sIHByb3ApID0+IHByb3BzTWFwLnNldChwcm9wLCB7XG4gICAgICBleHByZXNzaW9uOiByZXN1bHRFeHByZXNzaW9uLFxuICAgICAgZ2V0OiB0aGlzLl9wYXJzZXIuZXZhbChyZXN1bHRFeHByZXNzaW9uKVxuICAgIH0pKTtcblxuICAgIHByb3BzTWFwLmZvckVhY2goKHZhbHVlLCBwcm9wKSA9PiB7XG4gICAgICBpZiAod2l0aENhY2hlKSB7XG4gICAgICAgIGNlc2l1bURlc2NbcHJvcCB8fCAndW5kZWZpbmVkJ10gPSBgY2FjaGUuZ2V0KFxcYCR7dmFsdWUuZXhwcmVzc2lvbn1cXGAsICgpID0+IHByb3BzTWFwLmdldCgnJHtwcm9wfScpLmdldChjb250ZXh0KSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VzaXVtRGVzY1twcm9wIHx8ICd1bmRlZmluZWQnXSA9IGBwcm9wc01hcC5nZXQoJyR7cHJvcH0nKS5nZXQoY29udGV4dClgO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZm5Cb2R5ID0gYHJldHVybiAke0pTT04uc3RyaW5naWZ5KGNlc2l1bURlc2MpLnJlcGxhY2UoL1wiL2csICcnKX07YDtcbiAgICBjb25zdCBnZXRGbiA9IG5ldyBGdW5jdGlvbigncHJvcHNNYXAnLCAnY2FjaGUnLCAnY29udGV4dCcsIGZuQm9keSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbHVhdGVDZXNpdW1Qcm9wcyhjYWNoZTogQ29tcHV0YXRpb25DYWNoZSwgY29udGV4dDogT2JqZWN0KTogT2JqZWN0IHtcbiAgICAgIHJldHVybiBnZXRGbihwcm9wc01hcCwgY2FjaGUsIGNvbnRleHQpO1xuICAgIH07XG4gIH1cblxuICBfYnVpbGQoZXhwcmVzc2lvbjogc3RyaW5nKTogKG9sZFZhbDogT2JqZWN0LCBuZXdWYWw6IE9iamVjdCkgPT4gT2JqZWN0IHtcbiAgICBjb25zdCBwcm9wcyA9IEFycmF5LmZyb20odGhpcy5fanNvbk1hcHBlci5tYXAoZXhwcmVzc2lvbikua2V5cygpKTtcbiAgICBjb25zdCBzbWFydEFzc2lnbmVyID0gU21hcnRBc3NpZ25lci5jcmVhdGUocHJvcHMpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGFzc2lnbkNlc2l1bVByb3BzKG9sZFZhbDogT2JqZWN0LCBuZXdWYWw6IE9iamVjdCkge1xuICAgICAgcmV0dXJuIHNtYXJ0QXNzaWduZXIob2xkVmFsLCBuZXdWYWwpO1xuICAgIH07XG4gIH1cblxuICBjcmVhdGVFdmFsdWF0b3IoZXhwcmVzc2lvbjogc3RyaW5nLCB3aXRoQ2FjaGUgPSB0cnVlLCBuZXdFdmFsdWF0b3IgPSBmYWxzZSk6IChjYWNoZTogQ29tcHV0YXRpb25DYWNoZSwgY29udGV4dDogT2JqZWN0KSA9PiBPYmplY3Qge1xuICAgIGlmICghbmV3RXZhbHVhdG9yICYmIHRoaXMuX2V2YWx1YXRvcnNDYWNoZS5oYXMoZXhwcmVzc2lvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLl9ldmFsdWF0b3JzQ2FjaGUuZ2V0KGV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIGNvbnN0IGV2YWx1YXRvckZuID0gdGhpcy5fY29tcGlsZShleHByZXNzaW9uLCB3aXRoQ2FjaGUpO1xuICAgIHRoaXMuX2V2YWx1YXRvcnNDYWNoZS5zZXQoZXhwcmVzc2lvbiwgZXZhbHVhdG9yRm4pO1xuXG4gICAgcmV0dXJuIGV2YWx1YXRvckZuO1xuICB9XG5cbiAgY3JlYXRlQXNzaWduZXIoZXhwcmVzc2lvbjogc3RyaW5nKTogKG9sZFZhbDogT2JqZWN0LCBuZXdWYWw6IE9iamVjdCkgPT4gT2JqZWN0IHtcbiAgICBpZiAodGhpcy5fYXNzaWduZXJzQ2FjaGUuaGFzKGV4cHJlc3Npb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYXNzaWduZXJzQ2FjaGUuZ2V0KGV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc2lnbkZuID0gdGhpcy5fYnVpbGQoZXhwcmVzc2lvbik7XG4gICAgdGhpcy5fYXNzaWduZXJzQ2FjaGUuc2V0KGV4cHJlc3Npb24sIGFzc2lnbkZuKTtcblxuICAgIHJldHVybiBhc3NpZ25GbjtcbiAgfVxufVxuIl19