ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
63 lines (59 loc) • 6.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.aliasMethod = aliasMethod;
exports.alias = alias;
var _mixin = require('./mixin');
var _computed = require('./computed');
class AliasMethodDescriptor extends _mixin.Descriptor {
constructor(name) {
super();
this.name = name;
}
define(target, key, _home) {
let name = this.name;
Object.defineProperty(target, key, {
enumerable: true,
configurable: true,
get() {
return this[name];
}
});
}
}
class AliasMethodBlueprint extends _mixin.Blueprint {
constructor(name) {
super();
this.name = name;
}
descriptor(_target, _key, _meta) {
return new AliasMethodDescriptor(this.name);
}
}
function aliasMethod(name) {
return new AliasMethodBlueprint(name);
}
class AliasBlueprint extends _computed.ComputedBlueprint {
constructor(name) {
let parent = name.slice(0, -1);
let last = name[name.length - 1];
let get = function () {
return name.reduce((obj, n) => obj[n], this);
};
let set = function (value) {
let p = parent.reduce((obj, n) => obj[n], this);
p[last] = value;
};
super({ get, set }, [name]);
this.name = name;
}
descriptor(target, key, meta) {
if (this.name[0] === key) throw new Error(`Setting alias '${key}' on self`);
return super.descriptor(target, key, meta);
}
}
function alias(name) {
return new AliasBlueprint(name.split('.'));
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kZXNjcmlwdG9ycy5qcyJdLCJuYW1lcyI6WyJhbGlhc01ldGhvZCIsImFsaWFzIiwiQWxpYXNNZXRob2REZXNjcmlwdG9yIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZGVmaW5lIiwidGFyZ2V0Iiwia2V5IiwiX2hvbWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJnZXQiLCJBbGlhc01ldGhvZEJsdWVwcmludCIsImRlc2NyaXB0b3IiLCJfdGFyZ2V0IiwiX2tleSIsIl9tZXRhIiwiQWxpYXNCbHVlcHJpbnQiLCJwYXJlbnQiLCJzbGljZSIsImxhc3QiLCJsZW5ndGgiLCJyZWR1Y2UiLCJvYmoiLCJuIiwic2V0IiwidmFsdWUiLCJwIiwibWV0YSIsIkVycm9yIiwic3BsaXQiXSwibWFwcGluZ3MiOiI7Ozs7O1FBMkJnQkEsVyxHQUFBQSxXO1FBc0JBQyxLLEdBQUFBLEs7O0FBakRoQjs7QUFDQTs7QUFDQSxNQUFNQyxxQkFBTiwyQkFBK0M7QUFDM0NDLGdCQUFZQyxJQUFaLEVBQWtCO0FBQ2Q7QUFDQSxhQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDSDtBQUNEQyxXQUFPQyxNQUFQLEVBQWVDLEdBQWYsRUFBb0JDLEtBQXBCLEVBQTJCO0FBQ3ZCLFlBQUlKLE9BQU8sS0FBS0EsSUFBaEI7QUFDQUssZUFBT0MsY0FBUCxDQUFzQkosTUFBdEIsRUFBOEJDLEdBQTlCLEVBQW1DO0FBQy9CSSx3QkFBWSxJQURtQjtBQUUvQkMsMEJBQWMsSUFGaUI7QUFHL0JDLGtCQUFNO0FBQ0YsdUJBQU8sS0FBS1QsSUFBTCxDQUFQO0FBQ0g7QUFMOEIsU0FBbkM7QUFPSDtBQWQwQztBQWdCL0MsTUFBTVUsb0JBQU4sMEJBQTZDO0FBQ3pDWCxnQkFBWUMsSUFBWixFQUFrQjtBQUNkO0FBQ0EsYUFBS0EsSUFBTCxHQUFZQSxJQUFaO0FBQ0g7QUFDRFcsZUFBV0MsT0FBWCxFQUFvQkMsSUFBcEIsRUFBMEJDLEtBQTFCLEVBQWlDO0FBQzdCLGVBQU8sSUFBSWhCLHFCQUFKLENBQTBCLEtBQUtFLElBQS9CLENBQVA7QUFDSDtBQVB3QztBQVN0QyxTQUFTSixXQUFULENBQXFCSSxJQUFyQixFQUEyQjtBQUM5QixXQUFPLElBQUlVLG9CQUFKLENBQXlCVixJQUF6QixDQUFQO0FBQ0g7QUFDRCxNQUFNZSxjQUFOLHFDQUErQztBQUMzQ2hCLGdCQUFZQyxJQUFaLEVBQWtCO0FBQ2QsWUFBSWdCLFNBQVNoQixLQUFLaUIsS0FBTCxDQUFXLENBQVgsRUFBYyxDQUFDLENBQWYsQ0FBYjtBQUNBLFlBQUlDLE9BQU9sQixLQUFLQSxLQUFLbUIsTUFBTCxHQUFjLENBQW5CLENBQVg7QUFDQSxZQUFJVixNQUFNLFlBQVk7QUFDbEIsbUJBQU9ULEtBQUtvQixNQUFMLENBQVksQ0FBQ0MsR0FBRCxFQUFNQyxDQUFOLEtBQVlELElBQUlDLENBQUosQ0FBeEIsRUFBZ0MsSUFBaEMsQ0FBUDtBQUNILFNBRkQ7QUFHQSxZQUFJQyxNQUFNLFVBQVVDLEtBQVYsRUFBaUI7QUFDdkIsZ0JBQUlDLElBQUlULE9BQU9JLE1BQVAsQ0FBYyxDQUFDQyxHQUFELEVBQU1DLENBQU4sS0FBWUQsSUFBSUMsQ0FBSixDQUExQixFQUFrQyxJQUFsQyxDQUFSO0FBQ0FHLGNBQUVQLElBQUYsSUFBVU0sS0FBVjtBQUNILFNBSEQ7QUFJQSxjQUFNLEVBQUVmLEdBQUYsRUFBT2MsR0FBUCxFQUFOLEVBQW9CLENBQUN2QixJQUFELENBQXBCO0FBQ0EsYUFBS0EsSUFBTCxHQUFZQSxJQUFaO0FBQ0g7QUFDRFcsZUFBV1QsTUFBWCxFQUFtQkMsR0FBbkIsRUFBd0J1QixJQUF4QixFQUE4QjtBQUMxQixZQUFJLEtBQUsxQixJQUFMLENBQVUsQ0FBVixNQUFpQkcsR0FBckIsRUFBMEIsTUFBTSxJQUFJd0IsS0FBSixDQUFXLGtCQUFpQnhCLEdBQUksV0FBaEMsQ0FBTjtBQUMxQixlQUFPLE1BQU1RLFVBQU4sQ0FBaUJULE1BQWpCLEVBQXlCQyxHQUF6QixFQUE4QnVCLElBQTlCLENBQVA7QUFDSDtBQWpCMEM7QUFtQnhDLFNBQVM3QixLQUFULENBQWVHLElBQWYsRUFBcUI7QUFDeEIsV0FBTyxJQUFJZSxjQUFKLENBQW1CZixLQUFLNEIsS0FBTCxDQUFXLEdBQVgsQ0FBbkIsQ0FBUDtBQUNIIiwiZmlsZSI6ImxpYi9kZXNjcmlwdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJsdWVwcmludCwgRGVzY3JpcHRvciB9IGZyb20gJy4vbWl4aW4nO1xuaW1wb3J0IHsgQ29tcHV0ZWRCbHVlcHJpbnQgfSBmcm9tICcuL2NvbXB1dGVkJztcbmNsYXNzIEFsaWFzTWV0aG9kRGVzY3JpcHRvciBleHRlbmRzIERlc2NyaXB0b3Ige1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB9XG4gICAgZGVmaW5lKHRhcmdldCwga2V5LCBfaG9tZSkge1xuICAgICAgICBsZXQgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBBbGlhc01ldGhvZEJsdWVwcmludCBleHRlbmRzIEJsdWVwcmludCB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cbiAgICBkZXNjcmlwdG9yKF90YXJnZXQsIF9rZXksIF9tZXRhKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNNZXRob2REZXNjcmlwdG9yKHRoaXMubmFtZSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzTWV0aG9kKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IEFsaWFzTWV0aG9kQmx1ZXByaW50KG5hbWUpO1xufVxuY2xhc3MgQWxpYXNCbHVlcHJpbnQgZXh0ZW5kcyBDb21wdXRlZEJsdWVwcmludCB7XG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICBsZXQgcGFyZW50ID0gbmFtZS5zbGljZSgwLCAtMSk7XG4gICAgICAgIGxldCBsYXN0ID0gbmFtZVtuYW1lLmxlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWUucmVkdWNlKChvYmosIG4pID0+IG9ialtuXSwgdGhpcyk7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBwID0gcGFyZW50LnJlZHVjZSgob2JqLCBuKSA9PiBvYmpbbl0sIHRoaXMpO1xuICAgICAgICAgICAgcFtsYXN0XSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBzdXBlcih7IGdldCwgc2V0IH0sIFtuYW1lXSk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGRlc2NyaXB0b3IodGFyZ2V0LCBrZXksIG1ldGEpIHtcbiAgICAgICAgaWYgKHRoaXMubmFtZVswXSA9PT0ga2V5KSB0aHJvdyBuZXcgRXJyb3IoYFNldHRpbmcgYWxpYXMgJyR7a2V5fScgb24gc2VsZmApO1xuICAgICAgICByZXR1cm4gc3VwZXIuZGVzY3JpcHRvcih0YXJnZXQsIGtleSwgbWV0YSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IEFsaWFzQmx1ZXByaW50KG5hbWUuc3BsaXQoJy4nKSk7XG59Il19