ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
89 lines (70 loc) • 7.6 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 }; }
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