UNPKG

ember-legacy-class-transform

Version:
89 lines (70 loc) 7.6 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 }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var PathReference = function () { function PathReference(parent, property) { _classCallCheck(this, PathReference); 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; } PathReference.prototype.value = function value() { var lastParentValue = this.lastParentValue, property = this.property, inner = this.inner; var parentValue = this._parentValue(); if (parentValue === null || parentValue === undefined) { return this.cache = undefined; } if (lastParentValue === parentValue) { inner = this.inner; } else { var 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(); }; PathReference.prototype.get = function get(prop) { var chains = this._getChains(); if (prop in chains) return chains[prop]; return chains[prop] = new PathReference(this, prop); }; PathReference.prototype.label = function label() { return '[reference Direct]'; }; PathReference.prototype._getChains = function _getChains() { if (this.chains) return this.chains; return this.chains = (0, _util.dict)(); }; PathReference.prototype._parentValue = function _parentValue() { var parent = this.parent.value(); this.lastParentValue = parent; return parent; }; return PathReference; }(); exports.default = PathReference; exports.PathReference = PathReference; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9yZWZlcmVuY2VzL3BhdGguanMiXSwibmFtZXMiOlsiRU1QVFlfQ0FDSEUiLCJkaWN0IiwiTWV0YSIsIlByb3BlcnR5UmVmZXJlbmNlIiwiVk9MQVRJTEVfVEFHIiwiUGF0aFJlZmVyZW5jZSIsInBhcmVudCIsInByb3BlcnR5IiwiY2FjaGUiLCJpbm5lciIsImNoYWlucyIsImxhc3RQYXJlbnRWYWx1ZSIsIl9ndWlkIiwidGFnIiwidmFsdWUiLCJwYXJlbnRWYWx1ZSIsIl9wYXJlbnRWYWx1ZSIsInVuZGVmaW5lZCIsIlJlZmVyZW5jZVR5cGUiLCJmb3IiLCJyZWZlcmVuY2VUeXBlRm9yIiwiZ2V0IiwicHJvcCIsIl9nZXRDaGFpbnMiLCJsYWJlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQVMsQUFBVCxBQUE0QixBQUE1Qjs7QUFDQSxBQUFTLEFBQVQsQUFBcUIsQUFBckI7O0FBQ0EsQUFBTyxBQUFQLEFBQWlCLEFBQWpCOzs7O0FBQ0EsQUFBUyxBQUFULEFBQWtDLEFBQWxDOztBQUNBLEFBQVMsQUFBVCxBQUE2QixBQUE3Qjs7Ozs7Ozs7OztJQUNxQixBLDRCQUNqQjsyQkFBWSxBQUFaLFFBQW9CLEFBQXBCLFVBQThCOzhCQUMxQjs7YUFBSyxBQUFMLEFBQWEsQUFBYixBQUNBO2FBQUssQUFBTCxRQUFhLEFBQWIsQUFDQTthQUFLLEFBQUwsU0FBYyxBQUFkLEFBQ0E7YUFBSyxBQUFMLEFBQXVCLEFBQXZCLEFBQ0E7YUFBSyxBQUFMLFFBQWEsQUFBYixBQUNBO2FBQUssQUFBTCxBQUFXLEFBQVgsQUFDQTthQUFLLEFBQUwsU0FBYyxBQUFkLEFBQ0E7YUFBSyxBQUFMLFdBQWdCLEFBQWhCLEFBQ0g7Ozs0QkFDRCxBLHlCQUFRO1lBQ0UsQUFERixrQkFDdUMsQUFEdkMsS0FDRSxBQURGO1lBQ21CLEFBRG5CLFdBQ3VDLEFBRHZDLEtBQ21CLEFBRG5CO1lBQzZCLEFBRDdCLFFBQ3VDLEFBRHZDLEtBQzZCLEFBRDdCLEFBRUo7O1lBQUksY0FBYyxLQUFLLEFBQUwsQUFBbEIsQUFDQTtZQUFJLGdCQUFnQixBQUFoQixRQUF3QixnQkFBZ0IsQUFBNUMsV0FBdUQsQUFDbkQ7bUJBQU8sS0FBSyxBQUFMLFFBQWEsQUFBcEIsQUFDSDtBQUNEO1lBQUksb0JBQW9CLEFBQXhCLGFBQXFDLEFBQ2pDO29CQUFRLEtBQUssQUFBYixBQUNIO0FBRkQsZUFFTyxBQUNIO2dCQUFJLGdCQUFnQixPQUFPLEFBQVAsZ0JBQXVCLEFBQXZCLFdBQWtDLGVBQUssQUFBTCxJQUFTLEFBQVQsYUFBc0IsQUFBdEIsaUJBQXVDLEFBQXZDLEFBQWxDLEFBQXFGLEFBQXpHLEFBQ0E7b0JBQVEsS0FBSyxBQUFMLFFBQWEsSUFBSSxBQUFKLGNBQWtCLEFBQWxCLGFBQStCLEFBQS9CLFVBQXlDLEFBQXpDLEFBQXJCLEFBQ0g7QUFDRDtBQUNBO0FBQ0E7QUFDQTtlQUFPLEtBQUssQUFBTCxRQUFhLE1BQU0sQUFBTixBQUFwQixBQUNIO0E7OzRCQUNELEEsbUJBQUksQSxNQUFNLEFBQ047WUFBSSxTQUFTLEtBQUssQUFBTCxBQUFiLEFBQ0E7WUFBSSxRQUFRLEFBQVosUUFBb0IsT0FBTyxPQUFPLEFBQVAsQUFBUCxBQUNwQjtlQUFPLE9BQU8sQUFBUCxRQUFlLElBQUksQUFBSixjQUFrQixBQUFsQixNQUF3QixBQUF4QixBQUF0QixBQUNIO0E7OzRCQUNELEEseUJBQVEsQUFDSjtlQUFPLEFBQVAsQUFDSDtBOzs0QkFDRCxBLG1DQUFhLEFBQ1Q7WUFBSSxLQUFLLEFBQVQsUUFBaUIsT0FBTyxLQUFLLEFBQVosQUFDakI7ZUFBTyxLQUFLLEFBQUwsU0FBYyxBQUFyQixBQUNIO0E7OzRCQUNELEEsdUNBQWUsQUFDWDtZQUFJLFNBQVMsS0FBSyxBQUFMLE9BQVksQUFBWixBQUFiLEFBQ0E7YUFBSyxBQUFMLGtCQUF1QixBQUF2QixBQUNBO2VBQU8sQUFBUCxBQUNIO0E7Ozs7O2tCQTVDZ0IsQSxBQThDckI7UUFBUyxBQUFUIiwiZmlsZSI6ImxpYi9yZWZlcmVuY2VzL3BhdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTVBUWV9DQUNIRSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGRpY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCBNZXRhIGZyb20gJy4uL21ldGEnO1xuaW1wb3J0IHsgUHJvcGVydHlSZWZlcmVuY2UgfSBmcm9tICcuL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7IFZPTEFUSUxFX1RBRyB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXRoUmVmZXJlbmNlIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHByb3BlcnR5KSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgdGhpcy5pbm5lciA9IG51bGw7XG4gICAgICAgIHRoaXMuY2hhaW5zID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0UGFyZW50VmFsdWUgPSBFTVBUWV9DQUNIRTtcbiAgICAgICAgdGhpcy5fZ3VpZCA9IDA7XG4gICAgICAgIHRoaXMudGFnID0gVk9MQVRJTEVfVEFHO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIH1cbiAgICB2YWx1ZSgpIHtcbiAgICAgICAgbGV0IHsgbGFzdFBhcmVudFZhbHVlLCBwcm9wZXJ0eSwgaW5uZXIgfSA9IHRoaXM7XG4gICAgICAgIGxldCBwYXJlbnRWYWx1ZSA9IHRoaXMuX3BhcmVudFZhbHVlKCk7XG4gICAgICAgIGlmIChwYXJlbnRWYWx1ZSA9PT0gbnVsbCB8fCBwYXJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFBhcmVudFZhbHVlID09PSBwYXJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgaW5uZXIgPSB0aGlzLmlubmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IFJlZmVyZW5jZVR5cGUgPSB0eXBlb2YgcGFyZW50VmFsdWUgPT09ICdvYmplY3QnID8gTWV0YS5mb3IocGFyZW50VmFsdWUpLnJlZmVyZW5jZVR5cGVGb3IocHJvcGVydHkpIDogUHJvcGVydHlSZWZlcmVuY2U7XG4gICAgICAgICAgICBpbm5lciA9IHRoaXMuaW5uZXIgPSBuZXcgUmVmZXJlbmNlVHlwZShwYXJlbnRWYWx1ZSwgcHJvcGVydHksIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmICh0eXBlb2YgcGFyZW50VmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vICAgTWV0YS5mb3IocGFyZW50VmFsdWUpLmFkZFJlZmVyZW5jZShwcm9wZXJ0eSwgdGhpcyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGUgPSBpbm5lci52YWx1ZSgpO1xuICAgIH1cbiAgICBnZXQocHJvcCkge1xuICAgICAgICBsZXQgY2hhaW5zID0gdGhpcy5fZ2V0Q2hhaW5zKCk7XG4gICAgICAgIGlmIChwcm9wIGluIGNoYWlucykgcmV0dXJuIGNoYWluc1twcm9wXTtcbiAgICAgICAgcmV0dXJuIGNoYWluc1twcm9wXSA9IG5ldyBQYXRoUmVmZXJlbmNlKHRoaXMsIHByb3ApO1xuICAgIH1cbiAgICBsYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuICdbcmVmZXJlbmNlIERpcmVjdF0nO1xuICAgIH1cbiAgICBfZ2V0Q2hhaW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jaGFpbnMpIHJldHVybiB0aGlzLmNoYWlucztcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhaW5zID0gZGljdCgpO1xuICAgIH1cbiAgICBfcGFyZW50VmFsdWUoKSB7XG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnBhcmVudC52YWx1ZSgpO1xuICAgICAgICB0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG59XG5leHBvcnQgeyBQYXRoUmVmZXJlbmNlIH07Il19