UNPKG

angular-cesium

Version:
65 lines 9.98 kB
import { Injectable } from '@angular/core'; import { JsonMapper } from '../json-mapper/json-mapper.service'; import { Parse } from 'angular2parse'; import { SmartAssigner } from '../smart-assigner/smart-assigner.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; } } CesiumProperties.decorators = [ { type: Injectable } ]; CesiumProperties.ctorParameters = () => [ { type: Parse }, { type: JsonMapper } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VzaXVtLXByb3BlcnRpZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2VzaXVtL3NyYy9saWIvYW5ndWxhci1jZXNpdW0vc2VydmljZXMvY2VzaXVtLXByb3BlcnRpZXMvY2VzaXVtLXByb3BlcnRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUl6RSxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQW9CLE9BQWMsRUFDZCxXQUF1QjtRQUR2QixZQUFPLEdBQVAsT0FBTyxDQUFPO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFKbkMsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBc0QsQ0FBQztRQUNoRixxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBZ0UsQ0FBQztJQUluRyxDQUFDO0lBRUQsUUFBUSxDQUFDLFVBQWtCLEVBQUUsU0FBUyxHQUFHLElBQUk7UUFDM0MsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFpRCxDQUFDO1FBRTFFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRW5ELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQy9ELFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUosUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvQixJQUFJLFNBQVMsRUFBRTtnQkFDYixVQUFVLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLGVBQWUsS0FBSyxDQUFDLFVBQVUsMkJBQTJCLElBQUksa0JBQWtCLENBQUM7YUFDcEg7aUJBQU07Z0JBQ0wsVUFBVSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQzthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsVUFBVSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRSxPQUFPLFNBQVMsbUJBQW1CLENBQUMsS0FBdUIsRUFBRSxPQUFlO1lBQzFFLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFrQjtRQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRCxPQUFPLFNBQVMsaUJBQWlCLENBQUMsTUFBYyxFQUFFLE1BQWM7WUFDOUQsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsVUFBa0IsRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFFLFlBQVksR0FBRyxLQUFLO1FBQ3hFLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMxRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVuRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQWtCO1FBQy9CLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3QztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7OztZQWpFRixVQUFVOzs7WUFKRixLQUFLO1lBREwsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSnNvbk1hcHBlciB9IGZyb20gJy4uL2pzb24tbWFwcGVyL2pzb24tbWFwcGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYXJzZSB9IGZyb20gJ2FuZ3VsYXIycGFyc2UnO1xyXG5pbXBvcnQgeyBTbWFydEFzc2lnbmVyIH0gZnJvbSAnLi4vc21hcnQtYXNzaWduZXIvc21hcnQtYXNzaWduZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXB1dGF0aW9uQ2FjaGUgfSBmcm9tICcuLi9jb21wdXRhdGlvbi1jYWNoZS9jb21wdXRhdGlvbi1jYWNoZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENlc2l1bVByb3BlcnRpZXMge1xyXG4gIHByaXZhdGUgX2Fzc2lnbmVyc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChvbGRWYWw6IE9iamVjdCwgbmV3VmFsOiBPYmplY3QpID0+IE9iamVjdD4oKTtcclxuICBwcml2YXRlIF9ldmFsdWF0b3JzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgKGNhY2hlOiBDb21wdXRhdGlvbkNhY2hlLCBjb250ZXh0OiBPYmplY3QpID0+IE9iamVjdD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcGFyc2VyOiBQYXJzZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIF9qc29uTWFwcGVyOiBKc29uTWFwcGVyKSB7XHJcbiAgfVxyXG5cclxuICBfY29tcGlsZShleHByZXNzaW9uOiBzdHJpbmcsIHdpdGhDYWNoZSA9IHRydWUpOiAoY2FjaGU6IENvbXB1dGF0aW9uQ2FjaGUsIGNvbnRleHQ6IE9iamVjdCkgPT4gT2JqZWN0IHtcclxuICAgIGNvbnN0IGNlc2l1bURlc2MgPSB7fTtcclxuICAgIGNvbnN0IHByb3BzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHsgZXhwcmVzc2lvbjogc3RyaW5nLCBnZXQ6IEZ1bmN0aW9uIH0+KCk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0TWFwID0gdGhpcy5fanNvbk1hcHBlci5tYXAoZXhwcmVzc2lvbik7XHJcblxyXG4gICAgcmVzdWx0TWFwLmZvckVhY2goKHJlc3VsdEV4cHJlc3Npb24sIHByb3ApID0+IHByb3BzTWFwLnNldChwcm9wLCB7XHJcbiAgICAgIGV4cHJlc3Npb246IHJlc3VsdEV4cHJlc3Npb24sXHJcbiAgICAgIGdldDogdGhpcy5fcGFyc2VyLmV2YWwocmVzdWx0RXhwcmVzc2lvbilcclxuICAgIH0pKTtcclxuXHJcbiAgICBwcm9wc01hcC5mb3JFYWNoKCh2YWx1ZSwgcHJvcCkgPT4ge1xyXG4gICAgICBpZiAod2l0aENhY2hlKSB7XHJcbiAgICAgICAgY2VzaXVtRGVzY1twcm9wIHx8ICd1bmRlZmluZWQnXSA9IGBjYWNoZS5nZXQoXFxgJHt2YWx1ZS5leHByZXNzaW9ufVxcYCwgKCkgPT4gcHJvcHNNYXAuZ2V0KCcke3Byb3B9JykuZ2V0KGNvbnRleHQpKWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2VzaXVtRGVzY1twcm9wIHx8ICd1bmRlZmluZWQnXSA9IGBwcm9wc01hcC5nZXQoJyR7cHJvcH0nKS5nZXQoY29udGV4dClgO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmbkJvZHkgPSBgcmV0dXJuICR7SlNPTi5zdHJpbmdpZnkoY2VzaXVtRGVzYykucmVwbGFjZSgvXCIvZywgJycpfTtgO1xyXG4gICAgY29uc3QgZ2V0Rm4gPSBuZXcgRnVuY3Rpb24oJ3Byb3BzTWFwJywgJ2NhY2hlJywgJ2NvbnRleHQnLCBmbkJvZHkpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiBldmFsdWF0ZUNlc2l1bVByb3BzKGNhY2hlOiBDb21wdXRhdGlvbkNhY2hlLCBjb250ZXh0OiBPYmplY3QpOiBPYmplY3Qge1xyXG4gICAgICByZXR1cm4gZ2V0Rm4ocHJvcHNNYXAsIGNhY2hlLCBjb250ZXh0KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBfYnVpbGQoZXhwcmVzc2lvbjogc3RyaW5nKTogKG9sZFZhbDogT2JqZWN0LCBuZXdWYWw6IE9iamVjdCkgPT4gT2JqZWN0IHtcclxuICAgIGNvbnN0IHByb3BzID0gQXJyYXkuZnJvbSh0aGlzLl9qc29uTWFwcGVyLm1hcChleHByZXNzaW9uKS5rZXlzKCkpO1xyXG4gICAgY29uc3Qgc21hcnRBc3NpZ25lciA9IFNtYXJ0QXNzaWduZXIuY3JlYXRlKHByb3BzKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gYXNzaWduQ2VzaXVtUHJvcHMob2xkVmFsOiBPYmplY3QsIG5ld1ZhbDogT2JqZWN0KSB7XHJcbiAgICAgIHJldHVybiBzbWFydEFzc2lnbmVyKG9sZFZhbCwgbmV3VmFsKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjcmVhdGVFdmFsdWF0b3IoZXhwcmVzc2lvbjogc3RyaW5nLCB3aXRoQ2FjaGUgPSB0cnVlLCBuZXdFdmFsdWF0b3IgPSBmYWxzZSk6IChjYWNoZTogQ29tcHV0YXRpb25DYWNoZSwgY29udGV4dDogT2JqZWN0KSA9PiBPYmplY3Qge1xyXG4gICAgaWYgKCFuZXdFdmFsdWF0b3IgJiYgdGhpcy5fZXZhbHVhdG9yc0NhY2hlLmhhcyhleHByZXNzaW9uKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fZXZhbHVhdG9yc0NhY2hlLmdldChleHByZXNzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBldmFsdWF0b3JGbiA9IHRoaXMuX2NvbXBpbGUoZXhwcmVzc2lvbiwgd2l0aENhY2hlKTtcclxuICAgIHRoaXMuX2V2YWx1YXRvcnNDYWNoZS5zZXQoZXhwcmVzc2lvbiwgZXZhbHVhdG9yRm4pO1xyXG5cclxuICAgIHJldHVybiBldmFsdWF0b3JGbjtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFzc2lnbmVyKGV4cHJlc3Npb246IHN0cmluZyk6IChvbGRWYWw6IE9iamVjdCwgbmV3VmFsOiBPYmplY3QpID0+IE9iamVjdCB7XHJcbiAgICBpZiAodGhpcy5fYXNzaWduZXJzQ2FjaGUuaGFzKGV4cHJlc3Npb24pKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hc3NpZ25lcnNDYWNoZS5nZXQoZXhwcmVzc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXNzaWduRm4gPSB0aGlzLl9idWlsZChleHByZXNzaW9uKTtcclxuICAgIHRoaXMuX2Fzc2lnbmVyc0NhY2hlLnNldChleHByZXNzaW9uLCBhc3NpZ25Gbik7XHJcblxyXG4gICAgcmV0dXJuIGFzc2lnbkZuO1xyXG4gIH1cclxufVxyXG4iXX0=