UNPKG

ember-legacy-class-transform

Version:
1,106 lines (912 loc) 41.3 kB
define('@glimmer/object', ['exports', '@glimmer/object-reference', '@glimmer/util'], function (exports, _glimmer_objectReference, _glimmer_util) { 'use strict'; var HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/; var checkHasSuper = function () { var sourceAvailable = function () { return this; }.toString().indexOf('return this') > -1; if (sourceAvailable) { return function checkHasSuper(func) { return HAS_SUPER_PATTERN.test(func.toString()); }; } return function checkHasSuper() { return true; }; }(); function ROOT() {} ROOT.__hasSuper = false; function _defaults$1(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 _possibleConstructorReturn$1(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$1(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$1(subClass, superClass); } function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var isArray$1 = Array.isArray; var BLUEPRINT = "8d97cf5f-db9e-48d8-a6b2-7a75b7170805"; var Descriptor = function Descriptor() { _classCallCheck$1(this, Descriptor); this["5d90f84f-908e-4a42-9749-3d0f523c262c"] = true; }; var Blueprint = function Blueprint() { _classCallCheck$1(this, Blueprint); this["8d97cf5f-db9e-48d8-a6b2-7a75b7170805"] = true; }; var Mixin = function () { function Mixin(extensions, mixins) { var _dependencies; _classCallCheck$1(this, Mixin); this.extensions = null; this.concatenatedProperties = []; this.mergedProperties = []; this.dependencies = []; this.reopen(extensions); (_dependencies = this.dependencies).push.apply(_dependencies, mixins); } Mixin.create = function create() { for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) { args[_key2] = arguments[_key2]; } var extensions = args[args.length - 1]; if (args.length === 0) { return new this({}, []); } else if (extensions instanceof Mixin) { return new this({}, args); } else { var deps = args.slice(0, -1).map(toMixin); return new this(extensions, deps); } }; Mixin.mixins = function mixins(obj) { if (typeof obj !== 'object' || obj === null) return []; var meta = ClassMeta.for(obj); if (!meta) return []; return meta.getAppliedMixins(); }; Mixin.prototype.detect = function detect(obj) { if (typeof obj !== 'object' || obj === null) return false; if (obj instanceof Mixin) { return obj.dependencies.indexOf(this) !== -1; } var meta = ClassMeta.for(obj); return !!meta && meta.hasAppliedMixin(this); }; Mixin.prototype.reopen = function reopen(extensions) { if (this.extensions) { this.dependencies.push(toMixin(this.extensions)); } if (typeof extensions === 'object' && 'concatenatedProperties' in extensions) { var concat = void 0; var rawConcat = extensions.concatenatedProperties; if (isArray$1(rawConcat)) { concat = rawConcat.slice(); } else if (rawConcat === null || rawConcat === undefined) { concat = []; } else { concat = [rawConcat]; } delete extensions.concatenatedProperties; this.concatenatedProperties = concat; } if (typeof extensions === 'object' && 'mergedProperties' in extensions) { var merged = void 0; var rawMerged = extensions.mergedProperties; if (isArray$1(rawMerged)) { merged = rawMerged.slice(); } else if (rawMerged === null || rawMerged === undefined) { merged = []; } else { merged = [rawMerged]; } delete extensions.mergedProperties; this.mergedProperties = merged; } var normalized = Object.keys(extensions).reduce(function (obj, key) { var value = extensions[key]; switch (typeof value) { case 'function': obj[key] = new MethodBlueprint({ value: value }); break; case 'object': if (value && BLUEPRINT in value) { obj[key] = value; break; } /* falls through */ default: obj[key] = new DataBlueprint({ value: value }); } return obj; }, _glimmer_util.dict()); this.extensions = _glimmer_util.dict(); _glimmer_util.assign(this.extensions, turbocharge(normalized)); }; Mixin.prototype.apply = function apply(target) { var meta = target[_glimmer_objectReference.CLASS_META] = target[_glimmer_objectReference.CLASS_META] || new ClassMeta(); this.dependencies.forEach(function (m) { return m.apply(target); }); this.mergeProperties(target, target, meta); meta.addMixin(this); meta.seal(); meta.reseal(target); return target; }; Mixin.prototype.extendPrototype = function extendPrototype(Original) { Original.prototype = Object.create(Original.prototype); this.dependencies.forEach(function (m) { return m.extendPrototype(Original); }); this.extendPrototypeOnto(Original, Original); }; Mixin.prototype.extendPrototypeOnto = function extendPrototypeOnto(Subclass, Parent) { this.dependencies.forEach(function (m) { return m.extendPrototypeOnto(Subclass, Parent); }); this.mergeProperties(Subclass.prototype, Parent.prototype, Subclass[_glimmer_objectReference.CLASS_META]); Subclass[_glimmer_objectReference.CLASS_META].addMixin(this); }; Mixin.prototype.extendStatic = function extendStatic(Target) { this.dependencies.forEach(function (m) { return m.extendStatic(Target); }); this.mergeProperties(Target, Object.getPrototypeOf(Target), Target[_glimmer_objectReference.CLASS_META][_glimmer_objectReference.CLASS_META]); Target[_glimmer_objectReference.CLASS_META].addStaticMixin(this); }; Mixin.prototype.mergeProperties = function mergeProperties(target, parent, meta) { var _this = this; if (meta.hasAppliedMixin(this)) return; meta.addAppliedMixin(this); this.mergedProperties.forEach(function (k) { return meta.addMergedProperty(k, parent[k]); }); this.concatenatedProperties.forEach(function (k) { return meta.addConcatenatedProperty(k, []); }); new ValueDescriptor({ value: meta.getConcatenatedProperties() }).define(target, 'concatenatedProperties'); new ValueDescriptor({ value: meta.getMergedProperties() }).define(target, 'mergedProperties'); Object.keys(this.extensions).forEach(function (key) { var extension = _this.extensions[key]; var desc = extension.descriptor(target, key, meta); desc.define(target, key, parent); }); new ValueDescriptor({ value: ROOT }).define(target, '_super'); }; return Mixin; }(); function extend(Parent) { var Super = Parent; var Subclass = function (_Super) { _inherits$1(Subclass, _Super); function Subclass() { _classCallCheck$1(this, Subclass); return _possibleConstructorReturn$1(this, _Super.apply(this, arguments)); } return Subclass; }(Super); Subclass[_glimmer_objectReference.CLASS_META] = InstanceMeta.fromParent(Parent[_glimmer_objectReference.CLASS_META]); for (var _len2 = arguments.length, extensions = Array(_len2 > 1 ? _len2 - 1 : 0), _key3 = 1; _key3 < _len2; _key3++) { extensions[_key3 - 1] = arguments[_key3]; } var mixins = extensions.map(toMixin); Parent[_glimmer_objectReference.CLASS_META].addSubclass(Subclass); mixins.forEach(function (m) { return Subclass[_glimmer_objectReference.CLASS_META].addMixin(m); }); ClassMeta.applyAllMixins(Subclass, Parent); return Subclass; } function relinkSubclasses(Parent) { Parent[_glimmer_objectReference.CLASS_META].getSubclasses().forEach(function (Subclass) { Subclass[_glimmer_objectReference.CLASS_META].reset(Parent[_glimmer_objectReference.CLASS_META]); Subclass.prototype = Object.create(Parent.prototype); ClassMeta.applyAllMixins(Subclass, Parent); // recurse into sub-subclasses relinkSubclasses(Subclass); }); } function toMixin(extension) { if (extension instanceof Mixin) return extension;else return new Mixin(extension, []); } var ValueDescriptor = function (_Descriptor) { _inherits$1(ValueDescriptor, _Descriptor); function ValueDescriptor(_ref) { var _ref$enumerable = _ref.enumerable, enumerable = _ref$enumerable === undefined ? true : _ref$enumerable, _ref$configurable = _ref.configurable, configurable = _ref$configurable === undefined ? true : _ref$configurable, _ref$writable = _ref.writable, writable = _ref$writable === undefined ? true : _ref$writable, value = _ref.value; _classCallCheck$1(this, ValueDescriptor); var _this3 = _possibleConstructorReturn$1(this, _Descriptor.call(this)); _this3.enumerable = enumerable; _this3.configurable = configurable; _this3.writable = writable; _this3.value = value; return _this3; } ValueDescriptor.prototype.define = function define(target, key, _home) { Object.defineProperty(target, key, { enumerable: this.enumerable, configurable: this.configurable, writable: this.writable, value: this.value }); }; return ValueDescriptor; }(Descriptor); var DataBlueprint = function (_Blueprint) { _inherits$1(DataBlueprint, _Blueprint); function DataBlueprint(_ref2) { var _ref2$enumerable = _ref2.enumerable, enumerable = _ref2$enumerable === undefined ? true : _ref2$enumerable, _ref2$configurable = _ref2.configurable, configurable = _ref2$configurable === undefined ? true : _ref2$configurable, _ref2$writable = _ref2.writable, writable = _ref2$writable === undefined ? true : _ref2$writable, value = _ref2.value; _classCallCheck$1(this, DataBlueprint); var _this4 = _possibleConstructorReturn$1(this, _Blueprint.call(this)); _this4.enumerable = enumerable; _this4.configurable = configurable; _this4.value = value; _this4.writable = writable; return _this4; } DataBlueprint.prototype.descriptor = function descriptor(_target, key, classMeta) { var enumerable = this.enumerable, configurable = this.configurable, writable = this.writable, value = this.value; if (classMeta.hasConcatenatedProperty(key)) { classMeta.addConcatenatedProperty(key, value); value = classMeta.getConcatenatedProperty(key); } else if (classMeta.hasMergedProperty(key)) { classMeta.addMergedProperty(key, value); value = classMeta.getMergedProperty(key); } return new ValueDescriptor({ enumerable: enumerable, configurable: configurable, writable: writable, value: value }); }; return DataBlueprint; }(Blueprint); var AccessorBlueprint = function (_Blueprint2) { _inherits$1(AccessorBlueprint, _Blueprint2); function AccessorBlueprint(_ref3) { var _ref3$enumerable = _ref3.enumerable, enumerable = _ref3$enumerable === undefined ? true : _ref3$enumerable, _ref3$configurable = _ref3.configurable, configurable = _ref3$configurable === undefined ? true : _ref3$configurable, get = _ref3.get, set = _ref3.set; _classCallCheck$1(this, AccessorBlueprint); var _this5 = _possibleConstructorReturn$1(this, _Blueprint2.call(this)); _this5.enumerable = enumerable; _this5.configurable = configurable; _this5.get = get; _this5.set = set; return _this5; } AccessorBlueprint.prototype.descriptor = function descriptor(_target, _key, _classMeta) { return new ValueDescriptor({ enumerable: this.enumerable, configurable: this.configurable, get: this.get, set: this.set }); }; return AccessorBlueprint; }(Blueprint); var MethodDescriptor = function (_ValueDescriptor) { _inherits$1(MethodDescriptor, _ValueDescriptor); function MethodDescriptor() { _classCallCheck$1(this, MethodDescriptor); return _possibleConstructorReturn$1(this, _ValueDescriptor.apply(this, arguments)); } MethodDescriptor.prototype.define = function define(target, key, home) { this.value = wrapMethod(home, key, this.value); _ValueDescriptor.prototype.define.call(this, target, key, home); }; return MethodDescriptor; }(ValueDescriptor); var MethodBlueprint = function (_DataBlueprint) { _inherits$1(MethodBlueprint, _DataBlueprint); function MethodBlueprint() { _classCallCheck$1(this, MethodBlueprint); return _possibleConstructorReturn$1(this, _DataBlueprint.apply(this, arguments)); } MethodBlueprint.prototype.descriptor = function descriptor(target, key, classMeta) { var desc = _DataBlueprint.prototype.descriptor.call(this, target, key, classMeta); return new MethodDescriptor(desc); }; return MethodBlueprint; }(DataBlueprint); function wrapMethod(home, methodName, original) { if (!(methodName in home)) return maybeWrap(original); var superMethod = home[methodName]; var func = function () { for (var _len3 = arguments.length, args = Array(_len3), _key4 = 0; _key4 < _len3; _key4++) { args[_key4] = arguments[_key4]; } if (!this) return original.apply(this, args); var lastSuper = this._super; this._super = superMethod; try { return original.apply(this, args); } finally { this._super = lastSuper; } }; func.__wrapped = true; return func; } function maybeWrap(original) { if ('__wrapped' in original) return original; return function () { for (var _len4 = arguments.length, args = Array(_len4), _key5 = 0; _key5 < _len4; _key5++) { args[_key5] = arguments[_key5]; } if (!this) return original.apply(this, args); var lastSuper = this._super; this._super = ROOT; try { return original.apply(this, args); } finally { this._super = lastSuper; } }; } 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); } var isArray = Array.isArray; var EMPTY_CACHE = function EMPTY_CACHE() {}; var CLASS_META$1 = "df8be4c8-4e89-44e2-a8f9-550c8dacdca7"; function turbocharge(obj) { // function Dummy() {} // Dummy.prototype = obj; return obj; } var SealedMeta = function (_Meta) { _inherits(SealedMeta, _Meta); function SealedMeta() { _classCallCheck(this, SealedMeta); return _possibleConstructorReturn(this, _Meta.apply(this, arguments)); } SealedMeta.prototype.addReferenceTypeFor = function addReferenceTypeFor() { throw new Error("Cannot modify reference types on a sealed meta"); }; return SealedMeta; }(_glimmer_objectReference.Meta); var ClassMeta = function () { function ClassMeta() { _classCallCheck(this, ClassMeta); this.referenceTypes = _glimmer_util.dict(); this.propertyMetadata = _glimmer_util.dict(); this.concatenatedProperties = _glimmer_util.dict(); this.hasConcatenatedProperties = false; this.mergedProperties = _glimmer_util.dict(); this.hasMergedProperties = false; this.mixins = []; this.appliedMixins = []; this.staticMixins = []; this.subclasses = []; this.slots = []; this.InstanceMetaConstructor = null; } ClassMeta.fromParent = function fromParent(parent) { var meta = new this(); meta.reset(parent); return meta; }; ClassMeta.for = function _for(object) { if (CLASS_META$1 in object) return object[CLASS_META$1];else if (object.constructor) return object.constructor[CLASS_META$1] || null;else return null; }; ClassMeta.prototype.init = function init(object, attrs) { if (typeof attrs !== 'object' || attrs === null) return; if (this.hasConcatenatedProperties) { var concatProps = this.concatenatedProperties; for (var prop in concatProps) { if (prop in attrs) { var concat = concatProps[prop].slice(); object[prop] = concat.concat(attrs[prop]); } } } if (this.hasMergedProperties) { var mergedProps = this.mergedProperties; for (var _prop in mergedProps) { if (_prop in attrs) { var merged = _glimmer_util.assign({}, mergedProps[_prop]); object[_prop] = _glimmer_util.assign(merged, attrs[_prop]); } } } }; ClassMeta.prototype.addStaticMixin = function addStaticMixin(mixin) { this.staticMixins.push(mixin); }; ClassMeta.prototype.addMixin = function addMixin(mixin) { this.mixins.push(mixin); }; ClassMeta.prototype.getStaticMixins = function getStaticMixins() { return this.staticMixins; }; ClassMeta.prototype.getMixins = function getMixins() { return this.mixins; }; ClassMeta.prototype.addAppliedMixin = function addAppliedMixin(mixin) { this.appliedMixins.push(mixin); }; ClassMeta.prototype.hasAppliedMixin = function hasAppliedMixin(mixin) { return this.appliedMixins.indexOf(mixin) !== -1; }; ClassMeta.prototype.getAppliedMixins = function getAppliedMixins() { return this.appliedMixins; }; ClassMeta.prototype.hasStaticMixin = function hasStaticMixin(mixin) { return this.staticMixins.indexOf(mixin) !== -1; }; ClassMeta.applyAllMixins = function applyAllMixins(Subclass, Parent) { Subclass[CLASS_META$1].getMixins().forEach(function (m) { return m.extendPrototypeOnto(Subclass, Parent); }); Subclass[CLASS_META$1].getStaticMixins().forEach(function (m) { return m.extendStatic(Subclass); }); Subclass[CLASS_META$1].seal(); }; ClassMeta.prototype.addSubclass = function addSubclass(constructor) { this.subclasses.push(constructor); }; ClassMeta.prototype.getSubclasses = function getSubclasses() { return this.subclasses; }; ClassMeta.prototype.addPropertyMetadata = function addPropertyMetadata(property, value) { this.propertyMetadata[property] = value; }; ClassMeta.prototype.metadataForProperty = function metadataForProperty(property) { return this.propertyMetadata[property]; }; ClassMeta.prototype.addReferenceTypeFor = function addReferenceTypeFor(property, type) { this.referenceTypes[property] = type; }; ClassMeta.prototype.addSlotFor = function addSlotFor(property) { this.slots.push(property); }; ClassMeta.prototype.hasConcatenatedProperty = function hasConcatenatedProperty(property) { if (!this.hasConcatenatedProperties) return false; return property in this.concatenatedProperties; }; ClassMeta.prototype.getConcatenatedProperty = function getConcatenatedProperty(property) { return this.concatenatedProperties[property]; }; ClassMeta.prototype.getConcatenatedProperties = function getConcatenatedProperties() { return Object.keys(this.concatenatedProperties); }; ClassMeta.prototype.addConcatenatedProperty = function addConcatenatedProperty(property, value) { this.hasConcatenatedProperties = true; if (property in this.concatenatedProperties) { var val = this.concatenatedProperties[property].concat(value); this.concatenatedProperties[property] = val; } else { this.concatenatedProperties[property] = value; } }; ClassMeta.prototype.hasMergedProperty = function hasMergedProperty(property) { if (!this.hasMergedProperties) return false; return property in this.mergedProperties; }; ClassMeta.prototype.getMergedProperty = function getMergedProperty(property) { return this.mergedProperties[property]; }; ClassMeta.prototype.getMergedProperties = function getMergedProperties() { return Object.keys(this.mergedProperties); }; ClassMeta.prototype.addMergedProperty = function addMergedProperty(property, value) { this.hasMergedProperties = true; if (isArray(value)) { throw new Error('You passed in `' + JSON.stringify(value) + '` as the value for `foo` but `foo` cannot be an Array'); } if (property in this.mergedProperties && this.mergedProperties[property] && value) { this.mergedProperties[property] = mergeMergedProperties(value, this.mergedProperties[property]); } else { value = value === null ? value : value || {}; this.mergedProperties[property] = value; } }; ClassMeta.prototype.getReferenceTypes = function getReferenceTypes() { return this.referenceTypes; }; ClassMeta.prototype.getPropertyMetadata = function getPropertyMetadata() { return this.propertyMetadata; }; ClassMeta.prototype.reset = function reset(parent) { this.referenceTypes = _glimmer_util.dict(); this.propertyMetadata = _glimmer_util.dict(); this.concatenatedProperties = _glimmer_util.dict(); this.mergedProperties = _glimmer_util.dict(); if (parent) { this.hasConcatenatedProperties = parent.hasConcatenatedProperties; for (var prop in parent.concatenatedProperties) { this.concatenatedProperties[prop] = parent.concatenatedProperties[prop].slice(); } this.hasMergedProperties = parent.hasMergedProperties; for (var _prop2 in parent.mergedProperties) { this.mergedProperties[_prop2] = _glimmer_util.assign({}, parent.mergedProperties[_prop2]); } _glimmer_util.assign(this.referenceTypes, parent.referenceTypes); _glimmer_util.assign(this.propertyMetadata, parent.propertyMetadata); } }; ClassMeta.prototype.reseal = function reseal(obj) { var meta = _glimmer_objectReference.Meta.for(obj); var fresh = new this.InstanceMetaConstructor(obj, {}); var referenceTypes = meta.getReferenceTypes(); var slots = meta.getSlots(); turbocharge(_glimmer_util.assign(referenceTypes, this.referenceTypes)); turbocharge(_glimmer_util.assign(slots, fresh.getSlots())); }; ClassMeta.prototype.seal = function seal() { var referenceTypes = turbocharge(_glimmer_util.assign({}, this.referenceTypes)); turbocharge(this.concatenatedProperties); turbocharge(this.mergedProperties); if (!this.hasMergedProperties && !this.hasConcatenatedProperties) { this.init = function () {}; } var slots = this.slots; var Slots = function Slots() { var _this2 = this; _classCallCheck(this, Slots); slots.forEach(function (name) { _this2[name] = EMPTY_CACHE; }); }; this.InstanceMetaConstructor = function (_SealedMeta) { _inherits(_class, _SealedMeta); function _class() { _classCallCheck(this, _class); var _this3 = _possibleConstructorReturn(this, _SealedMeta.apply(this, arguments)); _this3.slots = new Slots(); _this3.referenceTypes = referenceTypes; return _this3; } _class.prototype.getReferenceTypes = function getReferenceTypes() { return this.referenceTypes; }; _class.prototype.referenceTypeFor = function referenceTypeFor(property) { return this.referenceTypes[property] || _glimmer_objectReference.PropertyReference; }; _class.prototype.getSlots = function getSlots() { return this.slots; }; return _class; }(SealedMeta); turbocharge(this); }; return ClassMeta; }(); function mergeMergedProperties(attrs, parent) { var merged = _glimmer_util.assign({}, parent); for (var prop in attrs) { if (prop in parent && typeof parent[prop] === 'function' && typeof attrs[prop] === 'function') { var wrapped = wrapMethod(parent, prop, attrs[prop]); merged[prop] = wrapped; } else { merged[prop] = attrs[prop]; } } return merged; } var InstanceMeta = function (_ClassMeta) { _inherits(InstanceMeta, _ClassMeta); function InstanceMeta() { _classCallCheck(this, InstanceMeta); var _this4 = _possibleConstructorReturn(this, _ClassMeta.apply(this, arguments)); _this4["df8be4c8-4e89-44e2-a8f9-550c8dacdca7"] = ClassMeta.fromParent(null); return _this4; } InstanceMeta.fromParent = function fromParent(parent) { return _ClassMeta.fromParent.call(this, parent); }; InstanceMeta.prototype.reset = function reset(parent) { _ClassMeta.prototype.reset.call(this, parent); if (parent) this[CLASS_META$1].reset(parent[CLASS_META$1]); }; InstanceMeta.prototype.seal = function seal() { _ClassMeta.prototype.seal.call(this); this[CLASS_META$1].seal(); }; return InstanceMeta; }(ClassMeta); var GlimmerObject = function () { function GlimmerObject(attrs) { _classCallCheck(this, GlimmerObject); this._super = ROOT; this._meta = null; if (attrs) _glimmer_util.assign(this, attrs); this.constructor[CLASS_META$1].init(this, attrs || null); this._super = ROOT; _glimmer_util.initializeGuid(this); this.init(); } GlimmerObject.extend = function extend$$1() { for (var _len = arguments.length, extensions = Array(_len), _key = 0; _key < _len; _key++) { extensions[_key] = arguments[_key]; } return extend.apply(undefined, [this].concat(extensions)); }; GlimmerObject.create = function create(attrs) { return new this(attrs); }; GlimmerObject.reopen = function reopen(extensions) { toMixin(extensions).extendPrototype(this); this[CLASS_META$1].seal(); relinkSubclasses(this); }; GlimmerObject.reopenClass = function reopenClass(extensions) { toMixin(extensions).extendStatic(this); this[CLASS_META$1].seal(); }; GlimmerObject.metaForProperty = function metaForProperty(property) { var value = this[CLASS_META$1].metadataForProperty(property); if (!value) throw new Error('metaForProperty() could not find a computed property with key \'' + property + '\'.'); return value; }; GlimmerObject.eachComputedProperty = function eachComputedProperty(callback) { var metadata = this[CLASS_META$1].getPropertyMetadata(); if (!metadata) return; for (var prop in metadata) { callback(prop, metadata[prop]); } }; GlimmerObject.prototype.init = function init() {}; GlimmerObject.prototype.get = function get(key) { return this[key]; }; GlimmerObject.prototype.set = function set(key, value) { this[key] = value; }; GlimmerObject.prototype.setProperties = function setProperties(attrs) { _glimmer_util.assign(this, attrs); }; GlimmerObject.prototype.destroy = function destroy() {}; return GlimmerObject; }(); GlimmerObject["df8be4c8-4e89-44e2-a8f9-550c8dacdca7"] = InstanceMeta.fromParent(null); GlimmerObject.isClass = true; function _defaults$2(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$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn$2(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$2(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$2(subClass, superClass); } var ComputedBlueprint = function (_Blueprint) { _inherits$2(ComputedBlueprint, _Blueprint); function ComputedBlueprint(accessor) { var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; _classCallCheck$2(this, ComputedBlueprint); var _this = _possibleConstructorReturn$2(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, _glimmer_objectReference.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$2(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 (_glimmer_objectReference.Meta.exists(this)) { var slot = _glimmer_objectReference.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 = _glimmer_objectReference.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 = _glimmer_objectReference.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; } 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"); } } function observer() {} function _defaults$3(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$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn$3(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$3(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$3(subClass, superClass); } var AliasMethodDescriptor = function (_Descriptor) { _inherits$3(AliasMethodDescriptor, _Descriptor); function AliasMethodDescriptor(name) { _classCallCheck$3(this, AliasMethodDescriptor); var _this = _possibleConstructorReturn$3(this, _Descriptor.call(this)); _this.name = name; return _this; } AliasMethodDescriptor.prototype.define = function define(target, key, _home) { var name = this.name; Object.defineProperty(target, key, { enumerable: true, configurable: true, get: function () { return this[name]; } }); }; return AliasMethodDescriptor; }(Descriptor); var AliasMethodBlueprint = function (_Blueprint) { _inherits$3(AliasMethodBlueprint, _Blueprint); function AliasMethodBlueprint(name) { _classCallCheck$3(this, AliasMethodBlueprint); var _this2 = _possibleConstructorReturn$3(this, _Blueprint.call(this)); _this2.name = name; return _this2; } AliasMethodBlueprint.prototype.descriptor = function descriptor(_target, _key, _meta) { return new AliasMethodDescriptor(this.name); }; return AliasMethodBlueprint; }(Blueprint); function aliasMethod(name) { return new AliasMethodBlueprint(name); } var AliasBlueprint = function (_ComputedBlueprint) { _inherits$3(AliasBlueprint, _ComputedBlueprint); function AliasBlueprint(name) { _classCallCheck$3(this, AliasBlueprint); var parent = name.slice(0, -1); var last = name[name.length - 1]; var get = function () { return name.reduce(function (obj, n) { return obj[n]; }, this); }; var set = function (value) { var p = parent.reduce(function (obj, n) { return obj[n]; }, this); p[last] = value; }; var _this3 = _possibleConstructorReturn$3(this, _ComputedBlueprint.call(this, { get: get, set: set }, [name])); _this3.name = name; return _this3; } AliasBlueprint.prototype.descriptor = function descriptor(target, key, meta) { if (this.name[0] === key) throw new Error('Setting alias \'' + key + '\' on self'); return _ComputedBlueprint.prototype.descriptor.call(this, target, key, meta); }; return AliasBlueprint; }(ComputedBlueprint); function alias(name) { return new AliasBlueprint(name.split('.')); } exports['default'] = GlimmerObject; exports.ClassMeta = ClassMeta; exports.InstanceMeta = InstanceMeta; exports.computed = computed; exports.observer = observer; exports.Mixin = Mixin; exports.Blueprint = Blueprint; exports.toMixin = toMixin; exports.aliasMethod = aliasMethod; exports.alias = alias; Object.defineProperty(exports, '__esModule', { value: true }); });