ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
70 lines (61 loc) • 6.77 kB
JavaScript
'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=