UNPKG

ember-legacy-class-transform

Version:
175 lines (136 loc) 16.3 kB
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } import { PropertyReference } from './references/descriptors'; import RootReference from './references/root'; import { DictSet, dict } from '@glimmer/util'; import { VOLATILE_TAG } from '@glimmer/reference'; var NOOP_DESTROY = { destroy: function () {} }; var ConstPath = function () { function ConstPath(parent, _property) { _classCallCheck(this, ConstPath); this.tag = VOLATILE_TAG; this.parent = parent; } ConstPath.prototype.chain = function chain() { return NOOP_DESTROY; }; ConstPath.prototype.notify = function notify() {}; ConstPath.prototype.value = function value() { return this.parent[this.property]; }; ConstPath.prototype.get = function get(prop) { return new ConstPath(this.parent[this.property], prop); }; return ConstPath; }(); var ConstRoot = function () { function ConstRoot(value) { _classCallCheck(this, ConstRoot); this.tag = VOLATILE_TAG; this.inner = value; } ConstRoot.prototype.update = function update(inner) { this.inner = inner; }; ConstRoot.prototype.chain = function chain() { return NOOP_DESTROY; }; ConstRoot.prototype.notify = function notify() {}; ConstRoot.prototype.value = function value() { return this.inner; }; ConstRoot.prototype.referenceFromParts = function referenceFromParts(_parts) { throw new Error("Not implemented"); }; ConstRoot.prototype.chainFor = function chainFor(_prop) { throw new Error("Not implemented"); }; ConstRoot.prototype.get = function get(prop) { return new ConstPath(this.inner, prop); }; return ConstRoot; }(); var ConstMeta /*implements IMeta*/ = function () { function ConstMeta(object) { _classCallCheck(this, ConstMeta); this.object = object; } ConstMeta.prototype.root = function root() { return new ConstRoot(this.object); }; return ConstMeta; }(); export var CLASS_META = "df8be4c8-4e89-44e2-a8f9-550c8dacdca7"; var hasOwnProperty = Object.hasOwnProperty; var Meta = function () { function Meta(object, _ref) { var RootReferenceFactory = _ref.RootReferenceFactory, DefaultPathReferenceFactory = _ref.DefaultPathReferenceFactory; _classCallCheck(this, Meta); this.references = null; this.slots = null; this.referenceTypes = null; this.propertyMetadata = null; this.object = object; this.RootReferenceFactory = RootReferenceFactory || RootReference; this.DefaultPathReferenceFactory = DefaultPathReferenceFactory || PropertyReference; } Meta.for = function _for(obj) { if (obj === null || obj === undefined) return new Meta(obj, {}); if (hasOwnProperty.call(obj, '_meta') && obj._meta) return obj._meta; if (!Object.isExtensible(obj)) return new ConstMeta(obj); var MetaToUse = Meta; if (obj.constructor && obj.constructor[CLASS_META]) { var classMeta = obj.constructor[CLASS_META]; MetaToUse = classMeta.InstanceMetaConstructor; } else if (obj[CLASS_META]) { MetaToUse = obj[CLASS_META].InstanceMetaConstructor; } return obj._meta = new MetaToUse(obj, {}); }; Meta.exists = function exists(obj) { return typeof obj === 'object' && obj._meta; }; Meta.metadataForProperty = function metadataForProperty(_key) { return null; }; Meta.prototype.addReference = function addReference(property, reference) { var refs = this.references = this.references || dict(); var set = refs[property] = refs[property] || new DictSet(); set.add(reference); }; Meta.prototype.addReferenceTypeFor = function addReferenceTypeFor(property, type) { this.referenceTypes = this.referenceTypes || dict(); this.referenceTypes[property] = type; }; Meta.prototype.referenceTypeFor = function referenceTypeFor(property) { if (!this.referenceTypes) return PropertyReference; return this.referenceTypes[property] || PropertyReference; }; Meta.prototype.removeReference = function removeReference(property, reference) { if (!this.references) return; var set = this.references[property]; set.delete(reference); }; Meta.prototype.getReferenceTypes = function getReferenceTypes() { this.referenceTypes = this.referenceTypes || dict(); return this.referenceTypes; }; Meta.prototype.referencesFor = function referencesFor(property) { if (!this.references) return null; return this.references[property]; }; Meta.prototype.getSlots = function getSlots() { return this.slots = this.slots || dict(); }; Meta.prototype.root = function root() { return this.rootCache = this.rootCache || new this.RootReferenceFactory(this.object); }; return Meta; }(); export default Meta; export function metaFor(obj) { return Meta.for(obj); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tZXRhLmpzIl0sIm5hbWVzIjpbIlByb3BlcnR5UmVmZXJlbmNlIiwiUm9vdFJlZmVyZW5jZSIsIkRpY3RTZXQiLCJkaWN0IiwiVk9MQVRJTEVfVEFHIiwiTk9PUF9ERVNUUk9ZIiwiZGVzdHJveSIsIkNvbnN0UGF0aCIsInBhcmVudCIsIl9wcm9wZXJ0eSIsInRhZyIsImNoYWluIiwibm90aWZ5IiwidmFsdWUiLCJwcm9wZXJ0eSIsImdldCIsInByb3AiLCJDb25zdFJvb3QiLCJpbm5lciIsInVwZGF0ZSIsInJlZmVyZW5jZUZyb21QYXJ0cyIsIl9wYXJ0cyIsIkVycm9yIiwiY2hhaW5Gb3IiLCJfcHJvcCIsIkNvbnN0TWV0YSIsIm9iamVjdCIsInJvb3QiLCJDTEFTU19NRVRBIiwiaGFzT3duUHJvcGVydHkiLCJPYmplY3QiLCJNZXRhIiwiUm9vdFJlZmVyZW5jZUZhY3RvcnkiLCJEZWZhdWx0UGF0aFJlZmVyZW5jZUZhY3RvcnkiLCJyZWZlcmVuY2VzIiwic2xvdHMiLCJyZWZlcmVuY2VUeXBlcyIsInByb3BlcnR5TWV0YWRhdGEiLCJmb3IiLCJvYmoiLCJ1bmRlZmluZWQiLCJjYWxsIiwiX21ldGEiLCJpc0V4dGVuc2libGUiLCJNZXRhVG9Vc2UiLCJjb25zdHJ1Y3RvciIsImNsYXNzTWV0YSIsIkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yIiwiZXhpc3RzIiwibWV0YWRhdGFGb3JQcm9wZXJ0eSIsIl9rZXkiLCJhZGRSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJyZWZzIiwic2V0IiwiYWRkIiwiYWRkUmVmZXJlbmNlVHlwZUZvciIsInR5cGUiLCJyZWZlcmVuY2VUeXBlRm9yIiwicmVtb3ZlUmVmZXJlbmNlIiwiZGVsZXRlIiwiZ2V0UmVmZXJlbmNlVHlwZXMiLCJyZWZlcmVuY2VzRm9yIiwiZ2V0U2xvdHMiLCJyb290Q2FjaGUiLCJtZXRhRm9yIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLGlCQUFULFFBQWtDLDBCQUFsQztBQUNBLE9BQU9D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QnRCLFFBQXBCLEtBQWlDZCxpQkFBeEM7QUFDSCxLOzttQkFDRDJELGUsNEJBQWdCN0MsUSxFQUFVc0MsUyxFQUFXO0FBQ2pDLFlBQUksQ0FBQyxLQUFLbEIsVUFBVixFQUFzQjtBQUN0QixZQUFJb0IsTUFBTSxLQUFLcEIsVUFBTCxDQUFnQnBCLFFBQWhCLENBQVY7QUFDQXdDLFlBQUlNLE1BQUosQ0FBV1IsU0FBWDtBQUNILEs7O21CQUNEUyxpQixnQ0FBb0I7QUFDaEIsYUFBS3pCLGNBQUwsR0FBc0IsS0FBS0EsY0FBTCxJQUF1QmpDLE1BQTdDO0FBQ0EsZUFBTyxLQUFLaUMsY0FBWjtBQUNILEs7O21CQUNEMEIsYSwwQkFBY2hELFEsRUFBVTtBQUNwQixZQUFJLENBQUMsS0FBS29CLFVBQVYsRUFBc0IsT0FBTyxJQUFQO0FBQ3RCLGVBQU8sS0FBS0EsVUFBTCxDQUFnQnBCLFFBQWhCLENBQVA7QUFDSCxLOzttQkFDRGlELFEsdUJBQVc7QUFDUCxlQUFPLEtBQUs1QixLQUFMLEdBQWEsS0FBS0EsS0FBTCxJQUFjaEMsTUFBbEM7QUFDSCxLOzttQkFDRHdCLEksbUJBQU87QUFDSCxlQUFPLEtBQUtxQyxTQUFMLEdBQWlCLEtBQUtBLFNBQUwsSUFBa0IsSUFBSSxLQUFLaEMsb0JBQVQsQ0FBOEIsS0FBS04sTUFBbkMsQ0FBMUM7QUFDSCxLOzs7OztBQUVMLGVBQWVLLElBQWY7QUFDQSxPQUFPLFNBQVNrQyxPQUFULENBQWlCMUIsR0FBakIsRUFBc0I7QUFDekIsV0FBT1IsS0FBS08sR0FBTCxDQUFTQyxHQUFULENBQVA7QUFDSCIsImZpbGUiOiJsaWIvbWV0YS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5UmVmZXJlbmNlIH0gZnJvbSAnLi9yZWZlcmVuY2VzL2Rlc2NyaXB0b3JzJztcbmltcG9ydCBSb290UmVmZXJlbmNlIGZyb20gJy4vcmVmZXJlbmNlcy9yb290JztcbmltcG9ydCB7IERpY3RTZXQsIGRpY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFZPTEFUSUxFX1RBRyB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5jb25zdCBOT09QX0RFU1RST1kgPSB7IGRlc3Ryb3koKSB7fSB9O1xuY2xhc3MgQ29uc3RQYXRoIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIF9wcm9wZXJ0eSkge1xuICAgICAgICB0aGlzLnRhZyA9IFZPTEFUSUxFX1RBRztcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGNoYWluKCkge1xuICAgICAgICByZXR1cm4gTk9PUF9ERVNUUk9ZO1xuICAgIH1cbiAgICBub3RpZnkoKSB7fVxuICAgIHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRbdGhpcy5wcm9wZXJ0eV07XG4gICAgfVxuICAgIGdldChwcm9wKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29uc3RQYXRoKHRoaXMucGFyZW50W3RoaXMucHJvcGVydHldLCBwcm9wKTtcbiAgICB9XG59XG5jbGFzcyBDb25zdFJvb3Qge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gVk9MQVRJTEVfVEFHO1xuICAgICAgICB0aGlzLmlubmVyID0gdmFsdWU7XG4gICAgfVxuICAgIHVwZGF0ZShpbm5lcikge1xuICAgICAgICB0aGlzLmlubmVyID0gaW5uZXI7XG4gICAgfVxuICAgIGNoYWluKCkge1xuICAgICAgICByZXR1cm4gTk9PUF9ERVNUUk9ZO1xuICAgIH1cbiAgICBub3RpZnkoKSB7fVxuICAgIHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lcjtcbiAgICB9XG4gICAgcmVmZXJlbmNlRnJvbVBhcnRzKF9wYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGNoYWluRm9yKF9wcm9wKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG4gICAgZ2V0KHByb3ApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb25zdFBhdGgodGhpcy5pbm5lciwgcHJvcCk7XG4gICAgfVxufVxuY2xhc3MgQ29uc3RNZXRhIC8qaW1wbGVtZW50cyBJTWV0YSovIHtcbiAgICBjb25zdHJ1Y3RvcihvYmplY3QpIHtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgfVxuICAgIHJvb3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29uc3RSb290KHRoaXMub2JqZWN0KTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgQ0xBU1NfTUVUQSA9IFwiZGY4YmU0YzgtNGU4OS00NGUyLWE4ZjktNTUwYzhkYWNkY2E3XCI7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbmNsYXNzIE1ldGEge1xuICAgIGNvbnN0cnVjdG9yKG9iamVjdCwgeyBSb290UmVmZXJlbmNlRmFjdG9yeSwgRGVmYXVsdFBhdGhSZWZlcmVuY2VGYWN0b3J5IH0pIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gbnVsbDtcbiAgICAgICAgdGhpcy5zbG90cyA9IG51bGw7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlVHlwZXMgPSBudWxsO1xuICAgICAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcbiAgICAgICAgdGhpcy5Sb290UmVmZXJlbmNlRmFjdG9yeSA9IFJvb3RSZWZlcmVuY2VGYWN0b3J5IHx8IFJvb3RSZWZlcmVuY2U7XG4gICAgICAgIHRoaXMuRGVmYXVsdFBhdGhSZWZlcmVuY2VGYWN0b3J5ID0gRGVmYXVsdFBhdGhSZWZlcmVuY2VGYWN0b3J5IHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgIH1cbiAgICBzdGF0aWMgZm9yKG9iaikge1xuICAgICAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IE1ldGEob2JqLCB7fSk7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ19tZXRhJykgJiYgb2JqLl9tZXRhKSByZXR1cm4gb2JqLl9tZXRhO1xuICAgICAgICBpZiAoIU9iamVjdC5pc0V4dGVuc2libGUob2JqKSkgcmV0dXJuIG5ldyBDb25zdE1ldGEob2JqKTtcbiAgICAgICAgbGV0IE1ldGFUb1VzZSA9IE1ldGE7XG4gICAgICAgIGlmIChvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yW0NMQVNTX01FVEFdKSB7XG4gICAgICAgICAgICBsZXQgY2xhc3NNZXRhID0gb2JqLmNvbnN0cnVjdG9yW0NMQVNTX01FVEFdO1xuICAgICAgICAgICAgTWV0YVRvVXNlID0gY2xhc3NNZXRhLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yO1xuICAgICAgICB9IGVsc2UgaWYgKG9ialtDTEFTU19NRVRBXSkge1xuICAgICAgICAgICAgTWV0YVRvVXNlID0gb2JqW0NMQVNTX01FVEFdLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmouX21ldGEgPSBuZXcgTWV0YVRvVXNlKG9iaiwge30pO1xuICAgIH1cbiAgICBzdGF0aWMgZXhpc3RzKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqLl9tZXRhO1xuICAgIH1cbiAgICBzdGF0aWMgbWV0YWRhdGFGb3JQcm9wZXJ0eShfa2V5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBhZGRSZWZlcmVuY2UocHJvcGVydHksIHJlZmVyZW5jZSkge1xuICAgICAgICBsZXQgcmVmcyA9IHRoaXMucmVmZXJlbmNlcyA9IHRoaXMucmVmZXJlbmNlcyB8fCBkaWN0KCk7XG4gICAgICAgIGxldCBzZXQgPSByZWZzW3Byb3BlcnR5XSA9IHJlZnNbcHJvcGVydHldIHx8IG5ldyBEaWN0U2V0KCk7XG4gICAgICAgIHNldC5hZGQocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgYWRkUmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eSwgdHlwZSkge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gdGhpcy5yZWZlcmVuY2VUeXBlcyB8fCBkaWN0KCk7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldID0gdHlwZTtcbiAgICB9XG4gICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eSkge1xuICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlVHlwZXMpIHJldHVybiBQcm9wZXJ0eVJlZmVyZW5jZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldIHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgIH1cbiAgICByZW1vdmVSZWZlcmVuY2UocHJvcGVydHksIHJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlcykgcmV0dXJuO1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5yZWZlcmVuY2VzW3Byb3BlcnR5XTtcbiAgICAgICAgc2V0LmRlbGV0ZShyZWZlcmVuY2UpO1xuICAgIH1cbiAgICBnZXRSZWZlcmVuY2VUeXBlcygpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VUeXBlcyA9IHRoaXMucmVmZXJlbmNlVHlwZXMgfHwgZGljdCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICB9XG4gICAgcmVmZXJlbmNlc0Zvcihwcm9wZXJ0eSkge1xuICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlcykgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZXNbcHJvcGVydHldO1xuICAgIH1cbiAgICBnZXRTbG90cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdHMgPSB0aGlzLnNsb3RzIHx8IGRpY3QoKTtcbiAgICB9XG4gICAgcm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdENhY2hlID0gdGhpcy5yb290Q2FjaGUgfHwgbmV3IHRoaXMuUm9vdFJlZmVyZW5jZUZhY3RvcnkodGhpcy5vYmplY3QpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1ldGE7XG5leHBvcnQgZnVuY3Rpb24gbWV0YUZvcihvYmopIHtcbiAgICByZXR1cm4gTWV0YS5mb3Iob2JqKTtcbn0iXX0=