UNPKG

ember-legacy-class-transform

Version:
70 lines (61 loc) 6.77 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.PathReference = undefined; var _utils = require('../utils'); var _util = require('@glimmer/util'); var _meta = require('../meta'); var _meta2 = _interopRequireDefault(_meta); var _descriptors = require('./descriptors'); var _reference = require('@glimmer/reference'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class PathReference { constructor(parent, property) { this.cache = _utils.EMPTY_CACHE; this.inner = null; this.chains = null; this.lastParentValue = _utils.EMPTY_CACHE; this._guid = 0; this.tag = _reference.VOLATILE_TAG; this.parent = parent; this.property = property; } value() { let { lastParentValue, property, inner } = this; let parentValue = this._parentValue(); if (parentValue === null || parentValue === undefined) { return this.cache = undefined; } if (lastParentValue === parentValue) { inner = this.inner; } else { let ReferenceType = typeof parentValue === 'object' ? _meta2.default.for(parentValue).referenceTypeFor(property) : _descriptors.PropertyReference; inner = this.inner = new ReferenceType(parentValue, property, this); } // if (typeof parentValue === 'object') { // Meta.for(parentValue).addReference(property, this); // } return this.cache = inner.value(); } get(prop) { let chains = this._getChains(); if (prop in chains) return chains[prop]; return chains[prop] = new PathReference(this, prop); } label() { return '[reference Direct]'; } _getChains() { if (this.chains) return this.chains; return this.chains = (0, _util.dict)(); } _parentValue() { let parent = this.parent.value(); this.lastParentValue = parent; return parent; } } exports.default = PathReference; exports.PathReference = PathReference; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZWZlcmVuY2VzL3BhdGguanMiXSwibmFtZXMiOlsiUGF0aFJlZmVyZW5jZSIsImNvbnN0cnVjdG9yIiwicGFyZW50IiwicHJvcGVydHkiLCJjYWNoZSIsImlubmVyIiwiY2hhaW5zIiwibGFzdFBhcmVudFZhbHVlIiwiX2d1aWQiLCJ0YWciLCJ2YWx1ZSIsInBhcmVudFZhbHVlIiwiX3BhcmVudFZhbHVlIiwidW5kZWZpbmVkIiwiUmVmZXJlbmNlVHlwZSIsImZvciIsInJlZmVyZW5jZVR5cGVGb3IiLCJnZXQiLCJwcm9wIiwiX2dldENoYWlucyIsImxhYmVsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNlLE1BQU1BLGFBQU4sQ0FBb0I7QUFDL0JDLGdCQUFZQyxNQUFaLEVBQW9CQyxRQUFwQixFQUE4QjtBQUMxQixhQUFLQyxLQUFMO0FBQ0EsYUFBS0MsS0FBTCxHQUFhLElBQWI7QUFDQSxhQUFLQyxNQUFMLEdBQWMsSUFBZDtBQUNBLGFBQUtDLGVBQUw7QUFDQSxhQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUNBLGFBQUtDLEdBQUw7QUFDQSxhQUFLUCxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxhQUFLQyxRQUFMLEdBQWdCQSxRQUFoQjtBQUNIO0FBQ0RPLFlBQVE7QUFDSixZQUFJLEVBQUVILGVBQUYsRUFBbUJKLFFBQW5CLEVBQTZCRSxLQUE3QixLQUF1QyxJQUEzQztBQUNBLFlBQUlNLGNBQWMsS0FBS0MsWUFBTCxFQUFsQjtBQUNBLFlBQUlELGdCQUFnQixJQUFoQixJQUF3QkEsZ0JBQWdCRSxTQUE1QyxFQUF1RDtBQUNuRCxtQkFBTyxLQUFLVCxLQUFMLEdBQWFTLFNBQXBCO0FBQ0g7QUFDRCxZQUFJTixvQkFBb0JJLFdBQXhCLEVBQXFDO0FBQ2pDTixvQkFBUSxLQUFLQSxLQUFiO0FBQ0gsU0FGRCxNQUVPO0FBQ0gsZ0JBQUlTLGdCQUFnQixPQUFPSCxXQUFQLEtBQXVCLFFBQXZCLEdBQWtDLGVBQUtJLEdBQUwsQ0FBU0osV0FBVCxFQUFzQkssZ0JBQXRCLENBQXVDYixRQUF2QyxDQUFsQyxpQ0FBcEI7QUFDQUUsb0JBQVEsS0FBS0EsS0FBTCxHQUFhLElBQUlTLGFBQUosQ0FBa0JILFdBQWxCLEVBQStCUixRQUEvQixFQUF5QyxJQUF6QyxDQUFyQjtBQUNIO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsZUFBTyxLQUFLQyxLQUFMLEdBQWFDLE1BQU1LLEtBQU4sRUFBcEI7QUFDSDtBQUNETyxRQUFJQyxJQUFKLEVBQVU7QUFDTixZQUFJWixTQUFTLEtBQUthLFVBQUwsRUFBYjtBQUNBLFlBQUlELFFBQVFaLE1BQVosRUFBb0IsT0FBT0EsT0FBT1ksSUFBUCxDQUFQO0FBQ3BCLGVBQU9aLE9BQU9ZLElBQVAsSUFBZSxJQUFJbEIsYUFBSixDQUFrQixJQUFsQixFQUF3QmtCLElBQXhCLENBQXRCO0FBQ0g7QUFDREUsWUFBUTtBQUNKLGVBQU8sb0JBQVA7QUFDSDtBQUNERCxpQkFBYTtBQUNULFlBQUksS0FBS2IsTUFBVCxFQUFpQixPQUFPLEtBQUtBLE1BQVo7QUFDakIsZUFBTyxLQUFLQSxNQUFMLEdBQWMsaUJBQXJCO0FBQ0g7QUFDRE0sbUJBQWU7QUFDWCxZQUFJVixTQUFTLEtBQUtBLE1BQUwsQ0FBWVEsS0FBWixFQUFiO0FBQ0EsYUFBS0gsZUFBTCxHQUF1QkwsTUFBdkI7QUFDQSxlQUFPQSxNQUFQO0FBQ0g7QUE1QzhCO2tCQUFkRixhO1FBOENaQSxhLEdBQUFBLGEiLCJmaWxlIjoibGliL3JlZmVyZW5jZXMvcGF0aC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZX0NBQ0hFIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZGljdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuaW1wb3J0IE1ldGEgZnJvbSAnLi4vbWV0YSc7XG5pbXBvcnQgeyBQcm9wZXJ0eVJlZmVyZW5jZSB9IGZyb20gJy4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHsgVk9MQVRJTEVfVEFHIH0gZnJvbSAnQGdsaW1tZXIvcmVmZXJlbmNlJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhdGhSZWZlcmVuY2Uge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgcHJvcGVydHkpIHtcbiAgICAgICAgdGhpcy5jYWNoZSA9IEVNUFRZX0NBQ0hFO1xuICAgICAgICB0aGlzLmlubmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaGFpbnMgPSBudWxsO1xuICAgICAgICB0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9IEVNUFRZX0NBQ0hFO1xuICAgICAgICB0aGlzLl9ndWlkID0gMDtcbiAgICAgICAgdGhpcy50YWcgPSBWT0xBVElMRV9UQUc7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgfVxuICAgIHZhbHVlKCkge1xuICAgICAgICBsZXQgeyBsYXN0UGFyZW50VmFsdWUsIHByb3BlcnR5LCBpbm5lciB9ID0gdGhpcztcbiAgICAgICAgbGV0IHBhcmVudFZhbHVlID0gdGhpcy5fcGFyZW50VmFsdWUoKTtcbiAgICAgICAgaWYgKHBhcmVudFZhbHVlID09PSBudWxsIHx8IHBhcmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0UGFyZW50VmFsdWUgPT09IHBhcmVudFZhbHVlKSB7XG4gICAgICAgICAgICBpbm5lciA9IHRoaXMuaW5uZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgUmVmZXJlbmNlVHlwZSA9IHR5cGVvZiBwYXJlbnRWYWx1ZSA9PT0gJ29iamVjdCcgPyBNZXRhLmZvcihwYXJlbnRWYWx1ZSkucmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eSkgOiBQcm9wZXJ0eVJlZmVyZW5jZTtcbiAgICAgICAgICAgIGlubmVyID0gdGhpcy5pbm5lciA9IG5ldyBSZWZlcmVuY2VUeXBlKHBhcmVudFZhbHVlLCBwcm9wZXJ0eSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKHR5cGVvZiBwYXJlbnRWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gICBNZXRhLmZvcihwYXJlbnRWYWx1ZSkuYWRkUmVmZXJlbmNlKHByb3BlcnR5LCB0aGlzKTtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZSA9IGlubmVyLnZhbHVlKCk7XG4gICAgfVxuICAgIGdldChwcm9wKSB7XG4gICAgICAgIGxldCBjaGFpbnMgPSB0aGlzLl9nZXRDaGFpbnMoKTtcbiAgICAgICAgaWYgKHByb3AgaW4gY2hhaW5zKSByZXR1cm4gY2hhaW5zW3Byb3BdO1xuICAgICAgICByZXR1cm4gY2hhaW5zW3Byb3BdID0gbmV3IFBhdGhSZWZlcmVuY2UodGhpcywgcHJvcCk7XG4gICAgfVxuICAgIGxhYmVsKCkge1xuICAgICAgICByZXR1cm4gJ1tyZWZlcmVuY2UgRGlyZWN0XSc7XG4gICAgfVxuICAgIF9nZXRDaGFpbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoYWlucykgcmV0dXJuIHRoaXMuY2hhaW5zO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFpbnMgPSBkaWN0KCk7XG4gICAgfVxuICAgIF9wYXJlbnRWYWx1ZSgpIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMucGFyZW50LnZhbHVlKCk7XG4gICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gcGFyZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cbn1cbmV4cG9ydCB7IFBhdGhSZWZlcmVuY2UgfTsiXX0=