UNPKG

ember-legacy-class-transform

Version:
63 lines (59 loc) 6.4 kB
'use strict'; 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