UNPKG

ember-legacy-class-transform

Version:
195 lines (148 loc) 16.3 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.CLASS_META = undefined; exports.metaFor = metaFor; var _descriptors = require('./references/descriptors'); var _root = require('./references/root'); var _root2 = _interopRequireDefault(_root); var _util = require('@glimmer/util'); 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 NOOP_DESTROY = { destroy: function () {} }; var ConstPath = function () { function ConstPath(parent, _property) { _classCallCheck(this, ConstPath); this.tag = _reference.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 = _reference.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; }(); var CLASS_META = exports.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 || _root2.default; this.DefaultPathReferenceFactory = DefaultPathReferenceFactory || _descriptors.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 || (0, _util.dict)(); var set = refs[property] = refs[property] || new _util.DictSet(); set.add(reference); }; Meta.prototype.addReferenceTypeFor = function addReferenceTypeFor(property, type) { this.referenceTypes = this.referenceTypes || (0, _util.dict)(); this.referenceTypes[property] = type; }; Meta.prototype.referenceTypeFor = function referenceTypeFor(property) { if (!this.referenceTypes) return _descriptors.PropertyReference; return this.referenceTypes[property] || _descriptors.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 || (0, _util.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 || (0, _util.dict)(); }; Meta.prototype.root = function root() { return this.rootCache = this.rootCache || new this.RootReferenceFactory(this.object); }; return Meta; }(); exports.default = Meta; function metaFor(obj) { return Meta.for(obj); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tZXRhLmpzIl0sIm5hbWVzIjpbIlByb3BlcnR5UmVmZXJlbmNlIiwiUm9vdFJlZmVyZW5jZSIsIkRpY3RTZXQiLCJkaWN0IiwiVk9MQVRJTEVfVEFHIiwiTk9PUF9ERVNUUk9ZIiwiZGVzdHJveSIsIkNvbnN0UGF0aCIsInBhcmVudCIsIl9wcm9wZXJ0eSIsInRhZyIsImNoYWluIiwibm90aWZ5IiwidmFsdWUiLCJwcm9wZXJ0eSIsImdldCIsInByb3AiLCJDb25zdFJvb3QiLCJpbm5lciIsInVwZGF0ZSIsInJlZmVyZW5jZUZyb21QYXJ0cyIsIl9wYXJ0cyIsIkVycm9yIiwiY2hhaW5Gb3IiLCJfcHJvcCIsIkNvbnN0TWV0YSIsIm9iamVjdCIsInJvb3QiLCJDTEFTU19NRVRBIiwiaGFzT3duUHJvcGVydHkiLCJPYmplY3QiLCJNZXRhIiwiUm9vdFJlZmVyZW5jZUZhY3RvcnkiLCJEZWZhdWx0UGF0aFJlZmVyZW5jZUZhY3RvcnkiLCJyZWZlcmVuY2VzIiwic2xvdHMiLCJyZWZlcmVuY2VUeXBlcyIsInByb3BlcnR5TWV0YWRhdGEiLCJmb3IiLCJvYmoiLCJ1bmRlZmluZWQiLCJjYWxsIiwiX21ldGEiLCJpc0V4dGVuc2libGUiLCJNZXRhVG9Vc2UiLCJjb25zdHJ1Y3RvciIsImNsYXNzTWV0YSIsIkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yIiwiZXhpc3RzIiwibWV0YWRhdGFGb3JQcm9wZXJ0eSIsIl9rZXkiLCJhZGRSZWZlcmVuY2UiLCJyZWZlcmVuY2UiLCJyZWZzIiwic2V0IiwiYWRkIiwiYWRkUmVmZXJlbmNlVHlwZUZvciIsInR5cGUiLCJyZWZlcmVuY2VUeXBlRm9yIiwicmVtb3ZlUmVmZXJlbmNlIiwiZGVsZXRlIiwiZ2V0UmVmZXJlbmNlVHlwZXMiLCJyZWZlcmVuY2VzRm9yIiwiZ2V0U2xvdHMiLCJyb290Q2FjaGUiLCJtZXRhRm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7UUF1SE8sQUFBUzs7QUF2SGhCLEFBQVMsQUFBeUI7O0FBQ2xD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Q2Y7QTs7bUIsQUFDRCx1Q0FBYyxBLFVBQVUsQUFDcEI7WUFBSSxDQUFDLEtBQUwsQUFBVSxZQUFZLE9BQUEsQUFBTyxBQUM3QjtlQUFPLEtBQUEsQUFBSyxXQUFaLEFBQU8sQUFBZ0IsQUFDMUI7QTs7bUJBQ0QsQSwrQkFBVyxBQUNQO2VBQU8sS0FBQSxBQUFLLFFBQVEsS0FBQSxBQUFLLFNBQXpCLEFBQWtDLEFBQ3JDO0E7O21CQUNELEEsdUJBQU8sQUFDSDtlQUFPLEtBQUEsQUFBSyxZQUFZLEtBQUEsQUFBSyxhQUFhLElBQUksS0FBSixBQUFTLHFCQUFxQixLQUF4RSxBQUEwQyxBQUFtQyxBQUNoRjtBOzs7QUFFTDs7a0JBQUEsQUFBZSxBQUNmO0FBQU8saUJBQUEsQUFBaUIsS0FBSyxBQUN6QjtXQUFPLEtBQUEsQUFBSyxJQUFaLEFBQU8sQUFBUyxBQUNuQiIsImZpbGUiOiJsaWIvbWV0YS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5UmVmZXJlbmNlIH0gZnJvbSAnLi9yZWZlcmVuY2VzL2Rlc2NyaXB0b3JzJztcbmltcG9ydCBSb290UmVmZXJlbmNlIGZyb20gJy4vcmVmZXJlbmNlcy9yb290JztcbmltcG9ydCB7IERpY3RTZXQsIGRpY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcbmltcG9ydCB7IFZPTEFUSUxFX1RBRyB9IGZyb20gJ0BnbGltbWVyL3JlZmVyZW5jZSc7XG5jb25zdCBOT09QX0RFU1RST1kgPSB7IGRlc3Ryb3koKSB7fSB9O1xuY2xhc3MgQ29uc3RQYXRoIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIF9wcm9wZXJ0eSkge1xuICAgICAgICB0aGlzLnRhZyA9IFZPTEFUSUxFX1RBRztcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGNoYWluKCkge1xuICAgICAgICByZXR1cm4gTk9PUF9ERVNUUk9ZO1xuICAgIH1cbiAgICBub3RpZnkoKSB7fVxuICAgIHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRbdGhpcy5wcm9wZXJ0eV07XG4gICAgfVxuICAgIGdldChwcm9wKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29uc3RQYXRoKHRoaXMucGFyZW50W3RoaXMucHJvcGVydHldLCBwcm9wKTtcbiAgICB9XG59XG5jbGFzcyBDb25zdFJvb3Qge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGFnID0gVk9MQVRJTEVfVEFHO1xuICAgICAgICB0aGlzLmlubmVyID0gdmFsdWU7XG4gICAgfVxuICAgIHVwZGF0ZShpbm5lcikge1xuICAgICAgICB0aGlzLmlubmVyID0gaW5uZXI7XG4gICAgfVxuICAgIGNoYWluKCkge1xuICAgICAgICByZXR1cm4gTk9PUF9ERVNUUk9ZO1xuICAgIH1cbiAgICBub3RpZnkoKSB7fVxuICAgIHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lcjtcbiAgICB9XG4gICAgcmVmZXJlbmNlRnJvbVBhcnRzKF9wYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuICAgIGNoYWluRm9yKF9wcm9wKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG4gICAgZ2V0KHByb3ApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb25zdFBhdGgodGhpcy5pbm5lciwgcHJvcCk7XG4gICAgfVxufVxuY2xhc3MgQ29uc3RNZXRhIC8qaW1wbGVtZW50cyBJTWV0YSovIHtcbiAgICBjb25zdHJ1Y3RvcihvYmplY3QpIHtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgfVxuICAgIHJvb3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29uc3RSb290KHRoaXMub2JqZWN0KTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgQ0xBU1NfTUVUQSA9IFwiZGY4YmU0YzgtNGU4OS00NGUyLWE4ZjktNTUwYzhkYWNkY2E3XCI7XG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5oYXNPd25Qcm9wZXJ0eTtcbmNsYXNzIE1ldGEge1xuICAgIGNvbnN0cnVjdG9yKG9iamVjdCwgeyBSb290UmVmZXJlbmNlRmFjdG9yeSwgRGVmYXVsdFBhdGhSZWZlcmVuY2VGYWN0b3J5IH0pIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gbnVsbDtcbiAgICAgICAgdGhpcy5zbG90cyA9IG51bGw7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlVHlwZXMgPSBudWxsO1xuICAgICAgICB0aGlzLnByb3BlcnR5TWV0YWRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcbiAgICAgICAgdGhpcy5Sb290UmVmZXJlbmNlRmFjdG9yeSA9IFJvb3RSZWZlcmVuY2VGYWN0b3J5IHx8IFJvb3RSZWZlcmVuY2U7XG4gICAgICAgIHRoaXMuRGVmYXVsdFBhdGhSZWZlcmVuY2VGYWN0b3J5ID0gRGVmYXVsdFBhdGhSZWZlcmVuY2VGYWN0b3J5IHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgIH1cbiAgICBzdGF0aWMgZm9yKG9iaikge1xuICAgICAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IE1ldGEob2JqLCB7fSk7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ19tZXRhJykgJiYgb2JqLl9tZXRhKSByZXR1cm4gb2JqLl9tZXRhO1xuICAgICAgICBpZiAoIU9iamVjdC5pc0V4dGVuc2libGUob2JqKSkgcmV0dXJuIG5ldyBDb25zdE1ldGEob2JqKTtcbiAgICAgICAgbGV0IE1ldGFUb1VzZSA9IE1ldGE7XG4gICAgICAgIGlmIChvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yW0NMQVNTX01FVEFdKSB7XG4gICAgICAgICAgICBsZXQgY2xhc3NNZXRhID0gb2JqLmNvbnN0cnVjdG9yW0NMQVNTX01FVEFdO1xuICAgICAgICAgICAgTWV0YVRvVXNlID0gY2xhc3NNZXRhLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yO1xuICAgICAgICB9IGVsc2UgaWYgKG9ialtDTEFTU19NRVRBXSkge1xuICAgICAgICAgICAgTWV0YVRvVXNlID0gb2JqW0NMQVNTX01FVEFdLkluc3RhbmNlTWV0YUNvbnN0cnVjdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmouX21ldGEgPSBuZXcgTWV0YVRvVXNlKG9iaiwge30pO1xuICAgIH1cbiAgICBzdGF0aWMgZXhpc3RzKG9iaikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqLl9tZXRhO1xuICAgIH1cbiAgICBzdGF0aWMgbWV0YWRhdGFGb3JQcm9wZXJ0eShfa2V5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBhZGRSZWZlcmVuY2UocHJvcGVydHksIHJlZmVyZW5jZSkge1xuICAgICAgICBsZXQgcmVmcyA9IHRoaXMucmVmZXJlbmNlcyA9IHRoaXMucmVmZXJlbmNlcyB8fCBkaWN0KCk7XG4gICAgICAgIGxldCBzZXQgPSByZWZzW3Byb3BlcnR5XSA9IHJlZnNbcHJvcGVydHldIHx8IG5ldyBEaWN0U2V0KCk7XG4gICAgICAgIHNldC5hZGQocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgYWRkUmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eSwgdHlwZSkge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZVR5cGVzID0gdGhpcy5yZWZlcmVuY2VUeXBlcyB8fCBkaWN0KCk7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldID0gdHlwZTtcbiAgICB9XG4gICAgcmVmZXJlbmNlVHlwZUZvcihwcm9wZXJ0eSkge1xuICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlVHlwZXMpIHJldHVybiBQcm9wZXJ0eVJlZmVyZW5jZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlVHlwZXNbcHJvcGVydHldIHx8IFByb3BlcnR5UmVmZXJlbmNlO1xuICAgIH1cbiAgICByZW1vdmVSZWZlcmVuY2UocHJvcGVydHksIHJlZmVyZW5jZSkge1xuICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlcykgcmV0dXJuO1xuICAgICAgICBsZXQgc2V0ID0gdGhpcy5yZWZlcmVuY2VzW3Byb3BlcnR5XTtcbiAgICAgICAgc2V0LmRlbGV0ZShyZWZlcmVuY2UpO1xuICAgIH1cbiAgICBnZXRSZWZlcmVuY2VUeXBlcygpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2VUeXBlcyA9IHRoaXMucmVmZXJlbmNlVHlwZXMgfHwgZGljdCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VUeXBlcztcbiAgICB9XG4gICAgcmVmZXJlbmNlc0Zvcihwcm9wZXJ0eSkge1xuICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlcykgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZXNbcHJvcGVydHldO1xuICAgIH1cbiAgICBnZXRTbG90cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xvdHMgPSB0aGlzLnNsb3RzIHx8IGRpY3QoKTtcbiAgICB9XG4gICAgcm9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdENhY2hlID0gdGhpcy5yb290Q2FjaGUgfHwgbmV3IHRoaXMuUm9vdFJlZmVyZW5jZUZhY3RvcnkodGhpcy5vYmplY3QpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IE1ldGE7XG5leHBvcnQgZnVuY3Rpb24gbWV0YUZvcihvYmopIHtcbiAgICByZXR1cm4gTWV0YS5mb3Iob2JqKTtcbn0iXX0=