ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
181 lines (159 loc) • 18.6 kB
JavaScript
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
import { ComputedReferenceBlueprint, Meta } from '@glimmer/object-reference';
import { EMPTY_CACHE } from './object';
import { Blueprint } from './mixin';
export var ComputedBlueprint = function (_Blueprint) {
_inherits(ComputedBlueprint, _Blueprint);
function ComputedBlueprint(accessor) {
var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
_classCallCheck(this, ComputedBlueprint);
var _this = _possibleConstructorReturn(this, _Blueprint.call(this));
_this.metadata = {};
_this.accessor = accessor;
_this.deps = deps;
return _this;
}
ComputedBlueprint.prototype.descriptor = function descriptor(_target, key, classMeta) {
classMeta.addReferenceTypeFor(key, ComputedReferenceBlueprint(key, this.deps));
classMeta.addPropertyMetadata(key, this.metadata);
classMeta.addSlotFor(key);
return new Computed(this.accessor);
};
ComputedBlueprint.prototype.property = function property() {
for (var _len = arguments.length, paths = Array(_len), _key = 0; _key < _len; _key++) {
paths[_key] = arguments[_key];
}
this.deps = paths.map(function (d) {
return d.split('.');
});
return this;
};
ComputedBlueprint.prototype.meta = function meta(object) {
this.metadata = object;
return this;
};
ComputedBlueprint.prototype.volatile = function volatile() {
return this;
};
return ComputedBlueprint;
}(Blueprint);
var Computed = function () {
function Computed(accessor) {
_classCallCheck(this, Computed);
this["5d90f84f-908e-4a42-9749-3d0f523c262c"] = true;
this.accessor = accessor;
}
Computed.prototype.define = function define(prototype, key, home) {
Object.defineProperty(prototype, key, wrapAccessor(home, key, this.accessor));
};
return Computed;
}();
function wrapAccessor(home, accessorName, _desc) {
var superDesc = getPropertyDescriptor(home, accessorName);
var originalGet = void 0;
var originalSet = void 0;
var desc = {
enumerable: true,
configurable: true
};
var get = _desc.get;
if (get && get.length > 0) {
originalGet = function () {
return get.call(this, accessorName);
};
} else {
originalGet = _desc.get;
}
var set = _desc.set;
if (set && set.length > 1) {
originalSet = function (value) {
return set.call(this, accessorName, value);
};
} else {
originalSet = _desc.set;
}
var cacheGet = function () {
if (Meta.exists(this)) {
var slot = Meta.for(this).getSlots()[accessorName];
if (slot !== EMPTY_CACHE) return slot;
}
return originalGet.call(this);
};
var cacheSet = void 0;
if (originalSet) {
cacheSet = function (value) {
var meta = Meta.for(this);
var slots = meta.getSlots();
var ret = originalSet.call(this, value);
if (ret !== undefined) {
slots[accessorName] = ret;
}
};
} else {
cacheSet = function (value) {
var meta = Meta.for(this);
var slots = meta.getSlots();
if (value !== undefined) slots[accessorName] = value;
};
}
if (!superDesc || 'value' in superDesc) {
desc.get = cacheGet;
desc.set = cacheSet;
return desc;
}
desc.get = function () {
var lastSuper = this._super;
this._super = function () {
return superDesc.get.call(this);
};
try {
return cacheGet.call(this);
} finally {
this._super = lastSuper;
}
};
desc.set = function (val) {
var lastSuper = this._super;
this._super = function () {
return superDesc.set.call(this, val);
};
try {
return cacheSet.call(this, val);
} finally {
this._super = lastSuper;
}
};
return desc;
}
function getPropertyDescriptor(subject, name) {
var pd = Object.getOwnPropertyDescriptor(subject, name);
var proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
}
export function computed() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var last = args.pop();
var deps = args;
if (typeof last === 'function') {
var _ref;
return (_ref = new ComputedBlueprint({
get: last
})).property.apply(_ref, deps);
} else if (typeof last === 'object') {
var _ref2;
return (_ref2 = new ComputedBlueprint(last)).property.apply(_ref2, deps);
} else {
throw new TypeError("computed expects a function or an object as last argument");
}
}
export function observer() {}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21wdXRlZC5qcyJdLCJuYW1lcyI6WyJDb21wdXRlZFJlZmVyZW5jZUJsdWVwcmludCIsIk1ldGEiLCJFTVBUWV9DQUNIRSIsIkJsdWVwcmludCIsIkNvbXB1dGVkQmx1ZXByaW50IiwiYWNjZXNzb3IiLCJkZXBzIiwibWV0YWRhdGEiLCJkZXNjcmlwdG9yIiwiX3RhcmdldCIsImtleSIsImNsYXNzTWV0YSIsImFkZFJlZmVyZW5jZVR5cGVGb3IiLCJhZGRQcm9wZXJ0eU1ldGFkYXRhIiwiYWRkU2xvdEZvciIsIkNvbXB1dGVkIiwicHJvcGVydHkiLCJwYXRocyIsIm1hcCIsImQiLCJzcGxpdCIsIm1ldGEiLCJvYmplY3QiLCJ2b2xhdGlsZSIsImRlZmluZSIsInByb3RvdHlwZSIsImhvbWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIndyYXBBY2Nlc3NvciIsImFjY2Vzc29yTmFtZSIsIl9kZXNjIiwic3VwZXJEZXNjIiwiZ2V0UHJvcGVydHlEZXNjcmlwdG9yIiwib3JpZ2luYWxHZXQiLCJvcmlnaW5hbFNldCIsImRlc2MiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwiZ2V0IiwibGVuZ3RoIiwiY2FsbCIsInNldCIsInZhbHVlIiwiY2FjaGVHZXQiLCJleGlzdHMiLCJzbG90IiwiZm9yIiwiZ2V0U2xvdHMiLCJjYWNoZVNldCIsInNsb3RzIiwicmV0IiwidW5kZWZpbmVkIiwibGFzdFN1cGVyIiwiX3N1cGVyIiwidmFsIiwic3ViamVjdCIsIm5hbWUiLCJwZCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInByb3RvIiwiZ2V0UHJvdG90eXBlT2YiLCJjb21wdXRlZCIsImFyZ3MiLCJsYXN0IiwicG9wIiwiVHlwZUVycm9yIiwib2JzZXJ2ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsU0FBU0EsMEJBQVQsRUFBcUNDLElBQXJDLFFBQWlELDJCQUFqRDtBQUNBLFNBQVNDLFdBQVQsUUFBNEIsVUFBNUI7QUFDQSxTQUFT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LE9BQU9DLElBQVAsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFBQTs7QUFDNUIsZUFBTyxZQUFJNUQsaUJBQUosQ0FBc0I7QUFDekJtQyxpQkFBS3lCO0FBRG9CLFNBQXRCLEdBRUpoRCxRQUZJLGFBRVFWLElBRlIsQ0FBUDtBQUdILEtBSkQsTUFJTyxJQUFJLE9BQU8wRCxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQUE7O0FBQ2pDLGVBQU8sYUFBSTVELGlCQUFKLENBQXNCNEQsSUFBdEIsR0FBNEJoRCxRQUE1QixjQUF3Q1YsSUFBeEMsQ0FBUDtBQUNILEtBRk0sTUFFQTtBQUNILGNBQU0sSUFBSTRELFNBQUosQ0FBYywyREFBZCxDQUFOO0FBQ0g7QUFDSjtBQUNELE9BQU8sU0FBU0MsUUFBVCxHQUE0QixDQUFFIiwiZmlsZSI6ImxpYi9jb21wdXRlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXB1dGVkUmVmZXJlbmNlQmx1ZXByaW50LCBNZXRhIH0gZnJvbSAnQGdsaW1tZXIvb2JqZWN0LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBFTVBUWV9DQUNIRSB9IGZyb20gJy4vb2JqZWN0JztcbmltcG9ydCB7IEJsdWVwcmludCB9IGZyb20gJy4vbWl4aW4nO1xuZXhwb3J0IGNsYXNzIENvbXB1dGVkQmx1ZXByaW50IGV4dGVuZHMgQmx1ZXByaW50IHtcbiAgICBjb25zdHJ1Y3RvcihhY2Nlc3NvciwgZGVwcyA9IFtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvciA9IGFjY2Vzc29yO1xuICAgICAgICB0aGlzLmRlcHMgPSBkZXBzO1xuICAgIH1cbiAgICBkZXNjcmlwdG9yKF90YXJnZXQsIGtleSwgY2xhc3NNZXRhKSB7XG4gICAgICAgIGNsYXNzTWV0YS5hZGRSZWZlcmVuY2VUeXBlRm9yKGtleSwgQ29tcHV0ZWRSZWZlcmVuY2VCbHVlcHJpbnQoa2V5LCB0aGlzLmRlcHMpKTtcbiAgICAgICAgY2xhc3NNZXRhLmFkZFByb3BlcnR5TWV0YWRhdGEoa2V5LCB0aGlzLm1ldGFkYXRhKTtcbiAgICAgICAgY2xhc3NNZXRhLmFkZFNsb3RGb3Ioa2V5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wdXRlZCh0aGlzLmFjY2Vzc29yKTtcbiAgICB9XG4gICAgcHJvcGVydHkoLi4ucGF0aHMpIHtcbiAgICAgICAgdGhpcy5kZXBzID0gcGF0aHMubWFwKGQgPT4gZC5zcGxpdCgnLicpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG1ldGEob2JqZWN0KSB7XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBvYmplY3Q7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB2b2xhdGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuY2xhc3MgQ29tcHV0ZWQge1xuICAgIGNvbnN0cnVjdG9yKGFjY2Vzc29yKSB7XG4gICAgICAgIHRoaXNbXCI1ZDkwZjg0Zi05MDhlLTRhNDItOTc0OS0zZDBmNTIzYzI2MmNcIl0gPSB0cnVlO1xuICAgICAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgfVxuICAgIGRlZmluZShwcm90b3R5cGUsIGtleSwgaG9tZSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBrZXksIHdyYXBBY2Nlc3Nvcihob21lLCBrZXksIHRoaXMuYWNjZXNzb3IpKTtcbiAgICB9XG59XG5mdW5jdGlvbiB3cmFwQWNjZXNzb3IoaG9tZSwgYWNjZXNzb3JOYW1lLCBfZGVzYykge1xuICAgIGxldCBzdXBlckRlc2MgPSBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoaG9tZSwgYWNjZXNzb3JOYW1lKTtcbiAgICBsZXQgb3JpZ2luYWxHZXQ7XG4gICAgbGV0IG9yaWdpbmFsU2V0O1xuICAgIGxldCBkZXNjID0ge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9O1xuICAgIGxldCBnZXQgPSBfZGVzYy5nZXQ7XG4gICAgaWYgKGdldCAmJiBnZXQubGVuZ3RoID4gMCkge1xuICAgICAgICBvcmlnaW5hbEdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9yaWdpbmFsR2V0ID0gX2Rlc2MuZ2V0O1xuICAgIH1cbiAgICBsZXQgc2V0ID0gX2Rlc2Muc2V0O1xuICAgIGlmIChzZXQgJiYgc2V0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgb3JpZ2luYWxTZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXQuY2FsbCh0aGlzLCBhY2Nlc3Nvck5hbWUsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5hbFNldCA9IF9kZXNjLnNldDtcbiAgICB9XG4gICAgbGV0IGNhY2hlR2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoTWV0YS5leGlzdHModGhpcykpIHtcbiAgICAgICAgICAgIGxldCBzbG90ID0gTWV0YS5mb3IodGhpcykuZ2V0U2xvdHMoKVthY2Nlc3Nvck5hbWVdO1xuICAgICAgICAgICAgaWYgKHNsb3QgIT09IEVNUFRZX0NBQ0hFKSByZXR1cm4gc2xvdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxHZXQuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIGxldCBjYWNoZVNldDtcbiAgICBpZiAob3JpZ2luYWxTZXQpIHtcbiAgICAgICAgY2FjaGVTZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBtZXRhID0gTWV0YS5mb3IodGhpcyk7XG4gICAgICAgICAgICBsZXQgc2xvdHMgPSBtZXRhLmdldFNsb3RzKCk7XG4gICAgICAgICAgICBsZXQgcmV0ID0gb3JpZ2luYWxTZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzbG90c1thY2Nlc3Nvck5hbWVdID0gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlU2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgbWV0YSA9IE1ldGEuZm9yKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHNsb3RzID0gbWV0YS5nZXRTbG90cygpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHNsb3RzW2FjY2Vzc29yTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFzdXBlckRlc2MgfHwgJ3ZhbHVlJyBpbiBzdXBlckRlc2MpIHtcbiAgICAgICAgZGVzYy5nZXQgPSBjYWNoZUdldDtcbiAgICAgICAgZGVzYy5zZXQgPSBjYWNoZVNldDtcbiAgICAgICAgcmV0dXJuIGRlc2M7XG4gICAgfVxuICAgIGRlc2MuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyRGVzYy5nZXQuY2FsbCh0aGlzKTtcbiAgICAgICAgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZUdldC5jYWxsKHRoaXMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fc3VwZXIgPSBsYXN0U3VwZXI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRlc2Muc2V0ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBsZXQgbGFzdFN1cGVyID0gdGhpcy5fc3VwZXI7XG4gICAgICAgIHRoaXMuX3N1cGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyRGVzYy5zZXQuY2FsbCh0aGlzLCB2YWwpO1xuICAgICAgICB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlU2V0LmNhbGwodGhpcywgdmFsKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuX3N1cGVyID0gbGFzdFN1cGVyO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gZGVzYztcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0LCBuYW1lKSB7XG4gICAgbGV0IHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzdWJqZWN0LCBuYW1lKTtcbiAgICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCk7XG4gICAgd2hpbGUgKHR5cGVvZiBwZCA9PT0gJ3VuZGVmaW5lZCcgJiYgcHJvdG8gIT09IG51bGwpIHtcbiAgICAgICAgcGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBuYW1lKTtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICAgIH1cbiAgICByZXR1cm4gcGQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWQoLi4uYXJncykge1xuICAgIGxldCBsYXN0ID0gYXJncy5wb3AoKTtcbiAgICBsZXQgZGVwcyA9IGFyZ3M7XG4gICAgaWYgKHR5cGVvZiBsYXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQoe1xuICAgICAgICAgICAgZ2V0OiBsYXN0XG4gICAgICAgIH0pLnByb3BlcnR5KC4uLmRlcHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGxhc3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcHV0ZWRCbHVlcHJpbnQobGFzdCkucHJvcGVydHkoLi4uZGVwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvbXB1dGVkIGV4cGVjdHMgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QgYXMgbGFzdCBhcmd1bWVudFwiKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZXIoLi4uX2FyZ3MpIHt9Il19