@ember-data/model 5.5.0-alpha.20 → 5.5.0-alpha.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/-private.js CHANGED
@@ -1,3 +1,3 @@
1
- export { a as attr, b as belongsTo, h as hasMany } from "./has-many-DT3JBYYG.js";
2
- export { E as Errors, L as LEGACY_SUPPORT, M as Model, P as PromiseBelongsTo, a as PromiseManyArray, l as lookupLegacySupport } from "./model-rk3atPqV.js";
1
+ export { a as attr, b as belongsTo, h as hasMany } from "./has-many-CwEZBhUG.js";
2
+ export { E as Errors, L as LEGACY_SUPPORT, M as Model, P as PromiseBelongsTo, a as PromiseManyArray, l as lookupLegacySupport } from "./model-B9PHp6Pe.js";
3
3
  export { RelatedCollection as ManyArray } from '@ember-data/store/-private';
@@ -1,7 +1,7 @@
1
1
  import { computed } from '@ember/object';
2
2
  import { recordIdentifierFor } from '@ember-data/store';
3
3
  import { peekCache } from '@ember-data/store/-private';
4
- import { j as isElementDescriptor, n as normalizeModelName, l as lookupLegacySupport } from "./model-rk3atPqV.js";
4
+ import { j as isElementDescriptor, n as normalizeModelName, l as lookupLegacySupport } from "./model-B9PHp6Pe.js";
5
5
  import { macroCondition, getGlobalConfig } from '@embroider/macros';
6
6
  import { warn, deprecate } from '@ember/debug';
7
7
  import { RecordStore } from '@warp-drive/core-types/symbols';
@@ -236,6 +236,14 @@ function _belongsTo(type, options) {
236
236
  return support.getBelongsTo(key);
237
237
  },
238
238
  set(key, value) {
239
+ macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
240
+ if (!test) {
241
+ throw new Error(`Cannot set belongsTo relationship ${key} on a destroyed record`);
242
+ }
243
+ })(!this.isDestroying && !this.isDestroyed) : {};
244
+ if (this.isDestroying || this.isDestroyed) {
245
+ return null;
246
+ }
239
247
  const support = lookupLegacySupport(this);
240
248
  if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
241
249
  if (['currentState'].includes(key)) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"has-many-CwEZBhUG.js","sources":["../src/-private/attr.ts","../src/-private/belongs-to.ts","../src/-private/has-many.ts"],"sourcesContent":["/**\n @module @ember-data/model\n*/\nimport { computed } from '@ember/object';\n\nimport { recordIdentifierFor } from '@ember-data/store';\nimport { peekCache } from '@ember-data/store/-private';\nimport { DEBUG } from '@warp-drive/build-config/env';\nimport { assert } from '@warp-drive/build-config/macros';\nimport type { ArrayValue, ObjectValue, PrimitiveValue, Value } from '@warp-drive/core-types/json/raw';\nimport type { TransformName } from '@warp-drive/core-types/symbols';\n\nimport type { Model } from './model';\nimport type { DecoratorPropertyDescriptor } from './util';\nimport { isElementDescriptor } from './util';\n\n/**\n * Options provided to the attr decorator are\n * supplied to the associated transform. Any\n * key-value pair is valid; however, it is highly\n * recommended to only use statically defined values\n * that could be serialized to JSON.\n *\n * If no transform is provided, the only valid\n * option is `defaultValue`.\n *\n * Examples:\n *\n * ```ts\n * class User extends Model {\n * @attr('string', { defaultValue: 'Anonymous' }) name;\n * @attr('date', { defaultValue: () => new Date() }) createdAt;\n * @attr({ defaultValue: () => ({}) }) preferences;\n * @attr('boolean') hasVerifiedEmail;\n * @attr address;\n * }\n *\n * @class NOTATHING\n * @typedoc\n */\nexport type AttrOptions<DV = PrimitiveValue | object | unknown[]> = {\n /**\n * The default value for this attribute.\n *\n * Default values can be provided as a value or a function that will be\n * executed to generate the default value.\n *\n * Default values *should not* be stateful (object, arrays, etc.) as\n * they will be shared across all instances of the record.\n *\n * @typedoc\n */\n defaultValue?: DV extends PrimitiveValue ? DV : () => DV;\n};\n\nfunction _attr(type?: string | AttrOptions, options?: AttrOptions) {\n if (typeof type === 'object') {\n options = type;\n type = undefined;\n } else {\n options = options || {};\n }\n\n const meta = {\n type: type,\n kind: 'attribute',\n isAttribute: true,\n options: options,\n key: null,\n };\n\n return computed({\n get(this: Model, key: string) {\n if (DEBUG) {\n if (['currentState'].includes(key)) {\n throw new Error(\n `'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your attr on ${this.constructor.toString()}`\n );\n }\n }\n if (this.isDestroyed || this.isDestroying) {\n return;\n }\n return peekCache(this).getAttr(recordIdentifierFor(this), key);\n },\n set(this: Model, key: string, value: Value) {\n if (DEBUG) {\n if (['currentState'].includes(key)) {\n throw new Error(\n `'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your attr on ${this.constructor.toString()}`\n );\n }\n }\n const identifier = recordIdentifierFor(this);\n assert(\n `Attempted to set '${key}' on the deleted record ${identifier.type}:${identifier.id} (${identifier.lid})`,\n !this.currentState.isDeleted\n );\n const cache = peekCache(this);\n\n const currentValue = cache.getAttr(identifier, key);\n if (currentValue !== value) {\n cache.setAttr(identifier, key, value);\n\n if (!this.isValid) {\n const { errors } = this;\n\n if (errors.get(key)) {\n errors.remove(key);\n this.currentState.cleanErrorRequests();\n }\n }\n }\n\n return value;\n },\n }).meta(meta);\n}\n\n// NOTE: Usage of Explicit ANY\n// -------------------------------------------------------------------\n// any is required here because we are the maximal not the minimal\n// subset of options allowed. If we used unknown, object, or\n// Record<string, unknown> we would get type errors when we try to\n// assert against a more specific implementation with precise options.\n// -------------------------------------------------------------------\n\ntype LooseTransformInstance<V, Raw, Name extends string> = {\n /**\n * value type must match the return type of the deserialize method\n *\n * @typedoc\n */\n // see note on Explicit ANY above\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n serialize: (value: V, options: any) => Raw;\n /**\n * defaultValue type must match the return type of the deserialize method\n *\n * @typedoc\n */\n // see note on Explicit ANY above\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n deserialize: (value: Raw, options: any) => V;\n\n [TransformName]: Name;\n};\nexport type TransformHasType = { [TransformName]: string };\n\nexport type TypedTransformInstance<V, T extends string> =\n | LooseTransformInstance<V, string, T>\n | LooseTransformInstance<V, number, T>\n | LooseTransformInstance<V, boolean, T>\n | LooseTransformInstance<V, null, T>\n | LooseTransformInstance<V, ObjectValue, T>\n | LooseTransformInstance<V, ArrayValue, T>\n | LooseTransformInstance<V, string | null, T>\n | LooseTransformInstance<V, number | null, T>\n | LooseTransformInstance<V, boolean | null, T>\n | LooseTransformInstance<V, ObjectValue | null, T>\n | LooseTransformInstance<V, ArrayValue | null, T>;\n\n// see note on Explicit ANY above\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type GetMaybeDeserializeValue<T> = T extends { deserialize: (...args: any[]) => unknown }\n ? ReturnType<T['deserialize']>\n : never;\n\nexport type TypeFromInstance<T> = T extends TransformHasType ? T[typeof TransformName] : never;\nexport type ExtractOptions<T extends TypedTransformInstance<GetMaybeDeserializeValue<T>, TypeFromInstance<T>>> =\n Parameters<T['deserialize']>[1] & Parameters<T['serialize']>[1] & AttrOptions<ReturnType<T['deserialize']>>;\nexport type OptionsFromInstance<T> =\n TypeFromInstance<T> extends never\n ? never\n : GetMaybeDeserializeValue<T> extends never\n ? never\n : T extends TypedTransformInstance<GetMaybeDeserializeValue<T>, TypeFromInstance<T>>\n ? Parameters<T['deserialize']>[1] & Parameters<T['serialize']>[1] & AttrOptions<ReturnType<T['deserialize']>>\n : never;\n\n/**\n * The return type of `void` is a lie to appease TypeScript. The actual return type\n * is a descriptor, but typescript incorrectly insists that decorator functions return\n * `void` or `any`.\n *\n * @typedoc\n */\nexport type DataDecorator = (target: object, key: string, desc?: DecoratorPropertyDescriptor) => void;\n\n/**\n `attr` defines an attribute on a [Model](/ember-data/release/classes/Model).\n By default, attributes are passed through as-is, however you can specify an\n optional type to have the value automatically transformed.\n EmberData ships with four basic transform types: `string`, `number`,\n `boolean` and `date`. You can define your own transforms by subclassing\n [Transform](/ember-data/release/classes/Transform).\n\n Note that you cannot use `attr` to define an attribute of `id`.\n\n `attr` takes an optional hash as a second parameter, currently\n supported options are:\n\n - `defaultValue`: Pass a string or a function to be called to set the attribute\n to a default value if and only if the key is absent from the payload response.\n\n Example\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') username;\n @attr('string') email;\n @attr('boolean', { defaultValue: false }) verified;\n }\n ```\n\n Default value can also be a function. This is useful it you want to return\n a new object for each attribute.\n\n ```app/models/user.js\n import Model, { attr } from '@ember-data/model';\n\n export default class UserModel extends Model {\n @attr('string') username;\n @attr('string') email;\n\n @attr({\n defaultValue() {\n return {};\n }\n })\n settings;\n }\n ```\n\n The `options` hash is passed as second argument to a transforms'\n `serialize` and `deserialize` method. This allows to configure a\n transformation and adapt the corresponding value, based on the config:\n\n ```app/models/post.js\n import Model, { attr } from '@ember-data/model';\n\n export default class PostModel extends Model {\n @attr('text', {\n uppercase: true\n })\n text;\n }\n ```\n\n ```app/transforms/text.js\n export default class TextTransform {\n serialize(value, options) {\n if (options.uppercase) {\n return value.toUpperCase();\n }\n\n return value;\n }\n\n deserialize(value) {\n return value;\n }\n\n static create() {\n return new this();\n }\n }\n ```\n\n @method attr\n @public\n @static\n @for @ember-data/model\n @param {String|Object} type the attribute type\n @param {Object} options a hash of options\n @return {Attribute}\n*/\nexport function attr(): DataDecorator;\nexport function attr<T>(type: TypeFromInstance<T>): DataDecorator;\nexport function attr(type: string): DataDecorator;\nexport function attr(options: AttrOptions): DataDecorator;\nexport function attr<T>(type: TypeFromInstance<T>, options?: OptionsFromInstance<T>): DataDecorator;\nexport function attr(type: string, options?: AttrOptions & object): DataDecorator;\nexport function attr(target: object, key: string | symbol, desc?: PropertyDescriptor): void; // see note on DataDecorator for why void\nexport function attr(\n type?: string | AttrOptions | object,\n options?: (AttrOptions & object) | string | symbol,\n desc?: PropertyDescriptor\n): DataDecorator | void {\n const args = [type, options, desc];\n // see note on DataDecorator for why void\n return isElementDescriptor(args) ? (_attr()(...args) as void) : _attr(type, options as object);\n}\n","import { warn } from '@ember/debug';\nimport { computed } from '@ember/object';\n\nimport { DEBUG } from '@warp-drive/build-config/env';\nimport { assert } from '@warp-drive/build-config/macros';\nimport type { TypeFromInstance } from '@warp-drive/core-types/record';\nimport { RecordStore } from '@warp-drive/core-types/symbols';\n\nimport { lookupLegacySupport } from './legacy-relationships-support';\nimport type { MinimalLegacyRecord } from './model-methods';\nimport { isElementDescriptor, normalizeModelName } from './util';\n/**\n @module @ember-data/model\n*/\n\nexport type IsUnknown<T> = unknown extends T ? true : false;\n\nexport type RelationshipOptions<T, Async extends boolean> = {\n async: Async;\n inverse: null | (IsUnknown<T> extends true ? string : keyof NoNull<T> & string);\n polymorphic?: boolean;\n as?: string;\n linksMode?: true;\n resetOnRemoteUpdate?: boolean;\n};\n\nexport type NoNull<T> = Exclude<T, null>;\n// type BelongsToDecoratorObject<getT> = {\n// get: () => getT;\n// // set: (value: Awaited<getT>) => void;\n// set: (value: getT) => void;\n// // init: () => getT;\n// };\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type RelationshipDecorator<T> = <This>(target: This, key: string, desc?: PropertyDescriptor) => void; // BelongsToDecoratorObject<getT>;\n\nfunction _belongsTo<T, Async extends boolean>(\n type: string,\n options: RelationshipOptions<T, Async>\n): RelationshipDecorator<T> {\n assert(\n `Expected options.async from @belongsTo('${type}', options) to be a boolean`,\n options && typeof options.async === 'boolean'\n );\n assert(\n `Expected options.inverse from @belongsTo('${type}', options) to be either null or the string type of the related resource.`,\n options.inverse === null || (typeof options.inverse === 'string' && options.inverse.length > 0)\n );\n\n const meta = {\n type: normalizeModelName(type),\n options: options,\n kind: 'belongsTo',\n name: '<Unknown BelongsTo>',\n };\n\n return computed({\n get<R extends MinimalLegacyRecord>(this: R, key: string) {\n // this is a legacy behavior we may not carry into a new model setup\n // it's better to error on disconnected records so users find errors\n // in their logic.\n if (this.isDestroying || this.isDestroyed) {\n return null;\n }\n const support = lookupLegacySupport(this);\n\n if (DEBUG) {\n if (['currentState'].includes(key)) {\n throw new Error(\n `'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your belongsTo on ${this.constructor.toString()}`\n );\n }\n if (Object.prototype.hasOwnProperty.call(options, 'serialize')) {\n warn(\n `You provided a serialize option on the \"${key}\" property in the \"${support.identifier.type}\" class, this belongs in the serializer. See Serializer and it's implementations https://api.emberjs.com/ember-data/release/classes/Serializer`,\n false,\n {\n id: 'ds.model.serialize-option-in-belongs-to',\n }\n );\n }\n\n if (Object.prototype.hasOwnProperty.call(options, 'embedded')) {\n warn(\n `You provided an embedded option on the \"${key}\" property in the \"${support.identifier.type}\" class, this belongs in the serializer. See EmbeddedRecordsMixin https://api.emberjs.com/ember-data/release/classes/EmbeddedRecordsMixin`,\n false,\n {\n id: 'ds.model.embedded-option-in-belongs-to',\n }\n );\n }\n }\n\n return support.getBelongsTo(key);\n },\n set<R extends MinimalLegacyRecord>(this: R, key: string, value: unknown) {\n assert(`Cannot set belongsTo relationship ${key} on a destroyed record`, !this.isDestroying && !this.isDestroyed);\n if (this.isDestroying || this.isDestroyed) {\n return null;\n }\n const support = lookupLegacySupport(this);\n if (DEBUG) {\n if (['currentState'].includes(key)) {\n throw new Error(\n `'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your belongsTo on ${this.constructor.toString()}`\n );\n }\n }\n this[RecordStore]._join(() => {\n support.setDirtyBelongsTo(key, value);\n });\n\n return support.getBelongsTo(key);\n },\n }).meta(meta) as RelationshipDecorator<T>;\n}\n\n/**\n `belongsTo` is used to define One-To-One and One-To-Many, and One-To-None\n relationships on a [Model](/ember-data/release/classes/Model).\n\n `belongsTo` takes a configuration hash as a second parameter, currently\n supported options are:\n\n - `async`: (*required*) A boolean value used to declare whether this is a sync (false) or async (true) relationship.\n - `inverse`: (*required*) A string used to identify the inverse property on a related model, or `null`.\n - `polymorphic`: (*optional*) A boolean value to mark the relationship as polymorphic\n - `as`: (*optional*) A string used to declare the abstract type \"this\" record satisfies for polymorphism.\n\n ### Examples\n\n To declare a **one-to-many** (or many-to-many) relationship, use\n `belongsTo` in combination with `hasMany`:\n\n ```js\n // app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Comment extends Model {\n @belongsTo('post', { async: false, inverse: 'comments' }) post;\n }\n\n // app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Post extends Model {\n @hasMany('comment', { async: false, inverse: 'post' }) comments;\n }\n ```\n\n To declare a **one-to-one** relationship with managed inverses, use `belongsTo` for both sides:\n\n ```js\n // app/models/author.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Author extends Model {\n @belongsTo('address', { async: true, inverse: 'owner' }) address;\n }\n\n // app/models/address.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Address extends Model {\n @belongsTo('author', { async: true, inverse: 'address' }) owner;\n }\n ```\n\n To declare a **one-to-one** relationship without managed inverses, use `belongsTo` for both sides\n with `null` as the inverse:\n\n ```js\n // app/models/author.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Author extends Model {\n @belongsTo('address', { async: true, inverse: null }) address;\n }\n\n // app/models/address.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Address extends Model {\n @belongsTo('author', { async: true, inverse: null }) owner;\n }\n ```\n\n To declare a one-to-none relationship between two models, use\n `belongsTo` with inverse set to `null` on just one side::\n\n ```js\n // app/models/person.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Person extends Model {\n @belongsTo('person', { async: false, inverse: null }) bestFriend;\n }\n ```\n\n #### Sync vs Async Relationships\n\n EmberData fulfills relationships using resource data available in\n the cache.\n\n Sync relationships point directly to the known related resources.\n\n When a relationship is declared as async, if any of the known related\n resources have not been loaded, they will be fetched. The property\n on the record when accessed provides a promise that resolves once\n all resources are loaded.\n\n Async relationships may take advantage of links. On access, if the related\n link has not been loaded, or if any known resources are not available in\n the cache, the fresh state will be fetched using the link.\n\n In contrast to async relationship, accessing a sync relationship\n will error on access when any of the known related resources have\n not been loaded.\n\n If you are using `links` with sync relationships, you have to use\n the BelongsTo reference API to fetch or refresh related resources\n that aren't loaded. For instance, for a `bestFriend` relationship:\n\n ```js\n person.belongsTo('bestFriend').reload();\n ```\n\n #### Polymorphic Relationships\n\n To declare a polymorphic relationship, use `hasMany` with the `polymorphic`\n option set to `true`:\n\n ```js\n // app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Comment extends Model {\n @belongsTo('commentable', { async: false, inverse: 'comments', polymorphic: true }) parent;\n }\n ```\n\n `'commentable'` here is referred to as the \"abstract type\" for the polymorphic\n relationship.\n\n Polymorphic relationships with `inverse: null` will accept any type of record as their content.\n Polymorphic relationships with `inverse` set to a string will only accept records with a matching\n inverse relationships declaring itself as satisfying the abstract type.\n\n Below, 'as' is used to declare the that 'post' record satisfies the abstract type 'commentable'\n for this relationship.\n\n ```js\n // app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Post extends Model {\n @hasMany('comment', { async: false, inverse: 'parent', as: 'commentable' }) comments;\n }\n ```\n\n Note: every Model that declares an inverse to a polymorphic relationship must\n declare itself exactly the same. This is because polymorphism is based on structural\n traits.\n\n Polymorphic to polymorphic relationships are supported. Both sides of the relationship\n must be declared as polymorphic, and the `as` option must be used to declare the abstract\n type each record satisfies on both sides.\n\n @method belongsTo\n @public\n @static\n @for @ember-data/model\n @param {string} type (optional) the name of the related resource\n @param {object} options (optional) a hash of options\n @return {PropertyDescriptor} relationship\n*/\n\nexport function belongsTo(): never;\nexport function belongsTo(type: string): never;\nexport function belongsTo<T>(\n type: TypeFromInstance<NoNull<T>>,\n options: RelationshipOptions<T, boolean>\n): RelationshipDecorator<T>;\n// export function belongsTo<K extends Promise<unknown>, T extends Awaited<K> = Awaited<K>>(\n// type: TypeFromInstance<NoNull<T>>,\n// options: RelationshipOptions<T, true>\n// ): RelationshipDecorator<K>;\nexport function belongsTo(type: string, options: RelationshipOptions<unknown, boolean>): RelationshipDecorator<unknown>;\nexport function belongsTo<T>(\n type?: TypeFromInstance<NoNull<T>>,\n options?: RelationshipOptions<T, boolean>\n): RelationshipDecorator<T> {\n if (DEBUG) {\n assert(\n `belongsTo must be invoked with a type and options. Did you mean \\`@belongsTo(${type}, { async: false, inverse: null })\\`?`,\n !isElementDescriptor(arguments as unknown as unknown[])\n );\n }\n return _belongsTo(type!, options!);\n}\n","/**\n @module @ember-data/model\n*/\nimport { deprecate } from '@ember/debug';\nimport { computed } from '@ember/object';\n\nimport { dasherize, singularize } from '@ember-data/request-utils/string';\nimport { DEPRECATE_NON_STRICT_TYPES } from '@warp-drive/build-config/deprecations';\nimport { DEBUG } from '@warp-drive/build-config/env';\nimport { assert } from '@warp-drive/build-config/macros';\nimport type { TypeFromInstance } from '@warp-drive/core-types/record';\nimport { RecordStore } from '@warp-drive/core-types/symbols';\n\nimport type { NoNull, RelationshipDecorator, RelationshipOptions } from './belongs-to';\nimport { lookupLegacySupport } from './legacy-relationships-support';\nimport type { MinimalLegacyRecord } from './model-methods';\nimport { isElementDescriptor } from './util';\n\nfunction normalizeType(type: string) {\n if (DEPRECATE_NON_STRICT_TYPES) {\n const result = singularize(dasherize(type));\n\n deprecate(\n `The resource type '${type}' is not normalized. Update your application code to use '${result}' instead of '${type}'.`,\n result === type,\n {\n id: 'ember-data:deprecate-non-strict-types',\n until: '6.0',\n for: 'ember-data',\n since: {\n available: '4.13',\n enabled: '5.3',\n },\n }\n );\n\n return result;\n }\n\n return type;\n}\n\nfunction _hasMany<T, Async extends boolean>(\n type: string,\n options: RelationshipOptions<T, Async>\n): RelationshipDecorator<T> {\n assert(`Expected hasMany options.async to be a boolean`, options && typeof options.async === 'boolean');\n\n // Metadata about relationships is stored on the meta of\n // the relationship. This is used for introspection and\n // serialization. Note that `key` is populated lazily\n // the first time the CP is called.\n const meta = {\n type: normalizeType(type),\n options,\n kind: 'hasMany',\n name: '<Unknown BelongsTo>',\n };\n\n return computed({\n get<R extends MinimalLegacyRecord>(this: R, key: string) {\n if (DEBUG) {\n if (['currentState'].includes(key)) {\n throw new Error(\n `'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your hasMany on ${this.constructor.toString()}`\n );\n }\n }\n if (this.isDestroying || this.isDestroyed) {\n return [];\n }\n return lookupLegacySupport(this).getHasMany(key);\n },\n set<R extends MinimalLegacyRecord>(this: R, key: string, records: T[]) {\n if (DEBUG) {\n if (['currentState'].includes(key)) {\n throw new Error(\n `'${key}' is a reserved property name on instances of classes extending Model. Please choose a different property name for your hasMany on ${this.constructor.toString()}`\n );\n }\n }\n const support = lookupLegacySupport(this);\n const manyArray = support.getManyArray(key);\n assert(`You must pass an array of records to set a hasMany relationship`, Array.isArray(records));\n this[RecordStore]._join(() => {\n manyArray.splice(0, manyArray.length, ...records);\n });\n\n return support.getHasMany(key);\n },\n }).meta(meta);\n}\n\n/**\n `hasMany` is used to define Many-To-One and Many-To-Many, and Many-To-None\n relationships on a [Model](/ember-data/release/classes/Model).\n\n `hasMany` takes a configuration hash as a second parameter, currently\n supported options are:\n\n - `async`: (*required*) A boolean value used to declare whether this is a sync (false) or async (true) relationship.\n - `inverse`: (*required*) A string used to identify the inverse property on a related model, or `null`.\n - `polymorphic`: (*optional*) A boolean value to mark the relationship as polymorphic\n - `as`: (*optional*) A string used to declare the abstract type \"this\" record satisfies for polymorphism.\n\n ### Examples\n\n To declare a **many-to-one** (or one-to-many) relationship, use\n `belongsTo` in combination with `hasMany`:\n\n ```js\n // app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Post extends Model {\n @hasMany('comment', { async: false, inverse: 'post' }) comments;\n }\n\n\n // app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Comment extends Model {\n @belongsTo('post', { async: false, inverse: 'comments' }) post;\n }\n ```\n\n To declare a **many-to-many** relationship with managed inverses, use `hasMany` for both sides:\n\n ```js\n // app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Post extends Model {\n @hasMany('tag', { async: true, inverse: 'posts' }) tags;\n }\n\n // app/models/tag.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Tag extends Model {\n @hasMany('post', { async: true, inverse: 'tags' }) posts;\n }\n ```\n\n To declare a **many-to-many** relationship without managed inverses, use `hasMany` for both sides\n with `null` as the inverse:\n\n ```js\n // app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Post extends Model {\n @hasMany('tag', { async: true, inverse: null }) tags;\n }\n\n // app/models/tag.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Tag extends Model {\n @hasMany('post', { async: true, inverse: null }) posts;\n }\n ```\n\n To declare a many-to-none relationship between two models, use\n `hasMany` with inverse set to `null` on just one side::\n\n ```js\n // app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Post extends Model {\n @hasMany('category', { async: true, inverse: null }) categories;\n }\n ```\n\n #### Sync vs Async Relationships\n\n EmberData fulfills relationships using resource data available in\n the cache.\n\n Sync relationships point directly to the known related resources.\n\n When a relationship is declared as async, if any of the known related\n resources have not been loaded, they will be fetched. The property\n on the record when accessed provides a promise that resolves once\n all resources are loaded.\n\n Async relationships may take advantage of links. On access, if the related\n link has not been loaded, or if any known resources are not available in\n the cache, the fresh state will be fetched using the link.\n\n In contrast to async relationship, accessing a sync relationship\n will error on access when any of the known related resources have\n not been loaded.\n\n If you are using `links` with sync relationships, you have to use\n the HasMany reference API to fetch or refresh related resources\n that aren't loaded. For instance, for a `comments` relationship:\n\n ```js\n post.hasMany('comments').reload();\n ```\n\n #### Polymorphic Relationships\n\n To declare a polymorphic relationship, use `hasMany` with the `polymorphic`\n option set to `true`:\n\n ```js\n // app/models/comment.js\n import Model, { belongsTo } from '@ember-data/model';\n\n export default class Comment extends Model {\n @belongsTo('commentable', { async: false, inverse: 'comments', polymorphic: true }) parent;\n }\n ```\n\n `'commentable'` here is referred to as the \"abstract type\" for the polymorphic\n relationship.\n\n Polymorphic relationships with `inverse: null` will accept any type of record as their content.\n Polymorphic relationships with `inverse` set to a string will only accept records with a matching\n inverse relationships declaring itself as satisfying the abstract type.\n\n Below, 'as' is used to declare the that 'post' record satisfies the abstract type 'commentable'\n for this relationship.\n\n ```js\n // app/models/post.js\n import Model, { hasMany } from '@ember-data/model';\n\n export default class Post extends Model {\n @hasMany('comment', { async: false, inverse: 'parent', as: 'commentable' }) comments;\n }\n ```\n\n Note: every Model that declares an inverse to a polymorphic relationship must\n declare itself exactly the same. This is because polymorphism is based on structural\n traits.\n\n Polymorphic to polymorphic relationships are supported. Both sides of the relationship\n must be declared as polymorphic, and the `as` option must be used to declare the abstract\n type each record satisfies on both sides.\n\n @method hasMany\n @public\n @static\n @for @ember-data/model\n @param {string} type (optional) the name of the related resource\n @param {object} options (optional) a hash of options\n @return {PropertyDescriptor} relationship\n*/\nexport function hasMany(): never;\nexport function hasMany(type: string): never;\nexport function hasMany<T>(\n type: TypeFromInstance<NoNull<T>>,\n options: RelationshipOptions<T, boolean>\n): RelationshipDecorator<T>;\n// export function hasMany<K extends Promise<unknown>, T extends Awaited<K> = Awaited<K>>(\n// type: TypeFromInstance<NoNull<T>>,\n// options: RelationshipOptions<T, true>\n// ): RelationshipDecorator<K>;\nexport function hasMany(type: string, options: RelationshipOptions<unknown, boolean>): RelationshipDecorator<unknown>;\nexport function hasMany<T>(\n type?: TypeFromInstance<NoNull<T>>,\n options?: RelationshipOptions<T, boolean>\n): RelationshipDecorator<T> {\n if (DEBUG) {\n assert(\n `hasMany must be invoked with a type and options. Did you mean \\`@hasMany(${type}, { async: false, inverse: null })\\`?`,\n !isElementDescriptor(arguments as unknown as unknown[])\n );\n }\n return _hasMany(type!, options!);\n}\n"],"names":["_attr","type","options","undefined","meta","kind","isAttribute","key","computed","get","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","includes","Error","constructor","toString","isDestroyed","isDestroying","peekCache","getAttr","recordIdentifierFor","set","value","identifier","test","id","lid","currentState","isDeleted","cache","currentValue","setAttr","isValid","errors","remove","cleanErrorRequests","attr","desc","args","isElementDescriptor","_belongsTo","async","inverse","length","normalizeModelName","name","support","lookupLegacySupport","Object","prototype","hasOwnProperty","call","warn","getBelongsTo","RecordStore","_join","setDirtyBelongsTo","belongsTo","arguments","normalizeType","deprecations","DEPRECATE_NON_STRICT_TYPES","result","singularize","dasherize","deprecate","until","for","since","available","enabled","_hasMany","getHasMany","records","manyArray","getManyArray","Array","isArray","splice","hasMany"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AAqDA,SAASA,KAAKA,CAACC,IAA2B,EAAEC,OAAqB,EAAE;AACjE,EAAA,IAAI,OAAOD,IAAI,KAAK,QAAQ,EAAE;AAC5BC,IAAAA,OAAO,GAAGD,IAAI;AACdA,IAAAA,IAAI,GAAGE,SAAS;AAClB,GAAC,MAAM;AACLD,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAAE;AACzB;AAEA,EAAA,MAAME,IAAI,GAAG;AACXH,IAAAA,IAAI,EAAEA,IAAI;AACVI,IAAAA,IAAI,EAAE,WAAW;AACjBC,IAAAA,WAAW,EAAE,IAAI;AACjBJ,IAAAA,OAAO,EAAEA,OAAO;AAChBK,IAAAA,GAAG,EAAE;GACN;AAED,EAAA,OAAOC,QAAQ,CAAC;IACdC,GAAGA,CAAcF,GAAW,EAAE;MAC5B,IAAAG,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;QACT,IAAI,CAAC,cAAc,CAAC,CAACC,QAAQ,CAACR,GAAG,CAAC,EAAE;AAClC,UAAA,MAAM,IAAIS,KAAK,CACb,CAAA,CAAA,EAAIT,GAAG,CAAmI,gIAAA,EAAA,IAAI,CAACU,WAAW,CAACC,QAAQ,EAAE,EACvK,CAAC;AACH;AACF;AACA,MAAA,IAAI,IAAI,CAACC,WAAW,IAAI,IAAI,CAACC,YAAY,EAAE;AACzC,QAAA;AACF;AACA,MAAA,OAAOC,SAAS,CAAC,IAAI,CAAC,CAACC,OAAO,CAACC,mBAAmB,CAAC,IAAI,CAAC,EAAEhB,GAAG,CAAC;KAC/D;AACDiB,IAAAA,GAAGA,CAAcjB,GAAW,EAAEkB,KAAY,EAAE;MAC1C,IAAAf,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;QACT,IAAI,CAAC,cAAc,CAAC,CAACC,QAAQ,CAACR,GAAG,CAAC,EAAE;AAClC,UAAA,MAAM,IAAIS,KAAK,CACb,CAAA,CAAA,EAAIT,GAAG,CAAmI,gIAAA,EAAA,IAAI,CAACU,WAAW,CAACC,QAAQ,EAAE,EACvK,CAAC;AACH;AACF;AACA,MAAA,MAAMQ,UAAU,GAAGH,mBAAmB,CAAC,IAAI,CAAC;MAC5Cb,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,QAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,UAAA,MAAA,IAAAX,KAAA,CACE,CAAA,kBAAA,EAAqBT,GAAG,CAAA,wBAAA,EAA2BmB,UAAU,CAACzB,IAAI,CAAIyB,CAAAA,EAAAA,UAAU,CAACE,EAAE,CAAA,EAAA,EAAKF,UAAU,CAACG,GAAG,CAAG,CAAA,CAAA,CAAA;AAAA;AAAA,OAAA,EACzG,CAAC,IAAI,CAACC,YAAY,CAACC,SAAS,CAAA,GAAA,EAAA;AAE9B,MAAA,MAAMC,KAAK,GAAGX,SAAS,CAAC,IAAI,CAAC;MAE7B,MAAMY,YAAY,GAAGD,KAAK,CAACV,OAAO,CAACI,UAAU,EAAEnB,GAAG,CAAC;MACnD,IAAI0B,YAAY,KAAKR,KAAK,EAAE;QAC1BO,KAAK,CAACE,OAAO,CAACR,UAAU,EAAEnB,GAAG,EAAEkB,KAAK,CAAC;AAErC,QAAA,IAAI,CAAC,IAAI,CAACU,OAAO,EAAE;UACjB,MAAM;AAAEC,YAAAA;AAAO,WAAC,GAAG,IAAI;AAEvB,UAAA,IAAIA,MAAM,CAAC3B,GAAG,CAACF,GAAG,CAAC,EAAE;AACnB6B,YAAAA,MAAM,CAACC,MAAM,CAAC9B,GAAG,CAAC;AAClB,YAAA,IAAI,CAACuB,YAAY,CAACQ,kBAAkB,EAAE;AACxC;AACF;AACF;AAEA,MAAA,OAAOb,KAAK;AACd;AACF,GAAC,CAAC,CAACrB,IAAI,CAACA,IAAI,CAAC;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqCA;AACA;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAO6F;AACtF,SAASmC,IAAIA,CAClBtC,IAAoC,EACpCC,OAAkD,EAClDsC,IAAyB,EACH;EACtB,MAAMC,IAAI,GAAG,CAACxC,IAAI,EAAEC,OAAO,EAAEsC,IAAI,CAAC;AAClC;AACA,EAAA,OAAOE,mBAAmB,CAACD,IAAI,CAAC,GAAIzC,KAAK,EAAE,CAAC,GAAGyC,IAAI,CAAC,GAAYzC,KAAK,CAACC,IAAI,EAAEC,OAAiB,CAAC;AAChG;;AC1QA;AACA;AACA;AACA;AACA;AACA;AAC6G;;AAE7G,SAASyC,UAAUA,CACjB1C,IAAY,EACZC,OAAsC,EACZ;EAC1BQ,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,IAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,MAAA,MAAA,IAAAX,KAAA,CACE,CAA2Cf,wCAAAA,EAAAA,IAAI,CAA6B,2BAAA,CAAA,CAAA;AAAA;AAAA,GAAA,EAC5EC,OAAO,IAAI,OAAOA,OAAO,CAAC0C,KAAK,KAAK,SAAS,CAAA,GAAA,EAAA;EAE/ClC,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,IAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,MAAA,MAAA,IAAAX,KAAA,CACE,CAA6Cf,0CAAAA,EAAAA,IAAI,CAA2E,yEAAA,CAAA,CAAA;AAAA;AAAA,GAAA,EAC5HC,OAAO,CAAC2C,OAAO,KAAK,IAAI,IAAK,OAAO3C,OAAO,CAAC2C,OAAO,KAAK,QAAQ,IAAI3C,OAAO,CAAC2C,OAAO,CAACC,MAAM,GAAG,CAAE,CAAA,GAAA,EAAA;AAGjG,EAAA,MAAM1C,IAAI,GAAG;AACXH,IAAAA,IAAI,EAAE8C,kBAAkB,CAAC9C,IAAI,CAAC;AAC9BC,IAAAA,OAAO,EAAEA,OAAO;AAChBG,IAAAA,IAAI,EAAE,WAAW;AACjB2C,IAAAA,IAAI,EAAE;GACP;AAED,EAAA,OAAOxC,QAAQ,CAAC;IACdC,GAAGA,CAAyCF,GAAW,EAAE;AACvD;AACA;AACA;AACA,MAAA,IAAI,IAAI,CAACa,YAAY,IAAI,IAAI,CAACD,WAAW,EAAE;AACzC,QAAA,OAAO,IAAI;AACb;AACA,MAAA,MAAM8B,OAAO,GAAGC,mBAAmB,CAAC,IAAI,CAAC;MAEzC,IAAAxC,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;QACT,IAAI,CAAC,cAAc,CAAC,CAACC,QAAQ,CAACR,GAAG,CAAC,EAAE;AAClC,UAAA,MAAM,IAAIS,KAAK,CACb,CAAA,CAAA,EAAIT,GAAG,CAAwI,qIAAA,EAAA,IAAI,CAACU,WAAW,CAACC,QAAQ,EAAE,EAC5K,CAAC;AACH;AACA,QAAA,IAAIiC,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACpD,OAAO,EAAE,WAAW,CAAC,EAAE;AAC9DqD,UAAAA,IAAI,CACF,CAAA,wCAAA,EAA2ChD,GAAG,CAAA,mBAAA,EAAsB0C,OAAO,CAACvB,UAAU,CAACzB,IAAI,CAAA,8IAAA,CAAgJ,EAC3O,KAAK,EACL;AACE2B,YAAAA,EAAE,EAAE;AACN,WACF,CAAC;AACH;AAEA,QAAA,IAAIuB,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACpD,OAAO,EAAE,UAAU,CAAC,EAAE;AAC7DqD,UAAAA,IAAI,CACF,CAAA,wCAAA,EAA2ChD,GAAG,CAAA,mBAAA,EAAsB0C,OAAO,CAACvB,UAAU,CAACzB,IAAI,CAAA,yIAAA,CAA2I,EACtO,KAAK,EACL;AACE2B,YAAAA,EAAE,EAAE;AACN,WACF,CAAC;AACH;AACF;AAEA,MAAA,OAAOqB,OAAO,CAACO,YAAY,CAACjD,GAAG,CAAC;KACjC;AACDiB,IAAAA,GAAGA,CAAyCjB,GAAW,EAAEkB,KAAc,EAAE;MACvEf,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,QAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,UAAA,MAAA,IAAAX,KAAA,CAAO,CAAqCT,kCAAAA,EAAAA,GAAG,CAAwB,sBAAA,CAAA,CAAA;AAAA;OAAE,EAAA,CAAC,IAAI,CAACa,YAAY,IAAI,CAAC,IAAI,CAACD,WAAW,CAAA,GAAA,EAAA;AAChH,MAAA,IAAI,IAAI,CAACC,YAAY,IAAI,IAAI,CAACD,WAAW,EAAE;AACzC,QAAA,OAAO,IAAI;AACb;AACA,MAAA,MAAM8B,OAAO,GAAGC,mBAAmB,CAAC,IAAI,CAAC;MACzC,IAAAxC,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;QACT,IAAI,CAAC,cAAc,CAAC,CAACC,QAAQ,CAACR,GAAG,CAAC,EAAE;AAClC,UAAA,MAAM,IAAIS,KAAK,CACb,CAAA,CAAA,EAAIT,GAAG,CAAwI,qIAAA,EAAA,IAAI,CAACU,WAAW,CAACC,QAAQ,EAAE,EAC5K,CAAC;AACH;AACF;AACA,MAAA,IAAI,CAACuC,WAAW,CAAC,CAACC,KAAK,CAAC,MAAM;AAC5BT,QAAAA,OAAO,CAACU,iBAAiB,CAACpD,GAAG,EAAEkB,KAAK,CAAC;AACvC,OAAC,CAAC;AAEF,MAAA,OAAOwB,OAAO,CAACO,YAAY,CAACjD,GAAG,CAAC;AAClC;AACF,GAAC,CAAC,CAACH,IAAI,CAACA,IAAI,CAAC;AACf;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;;AAEO,SAASwD,SAASA,CACvB3D,IAAkC,EAClCC,OAAyC,EACf;EAC1B,IAAAQ,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;IACTJ,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,MAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,QAAA,MAAA,IAAAX,KAAA,CACE,CAAgFf,6EAAAA,EAAAA,IAAI,CAAuC,qCAAA,CAAA,CAAA;AAAA;AAAA,KAAA,EAC3H,CAACyC,mBAAmB,CAACmB,SAAiC,CAAC,CAAA,GAAA,EAAA;AAE3D;AACA,EAAA,OAAOlB,UAAU,CAAC1C,IAAI,EAAGC,OAAQ,CAAC;AACpC;;AC3SA;AACA;AACA;AAgBA,SAAS4D,aAAaA,CAAC7D,IAAY,EAAE;EACnC,IAAAS,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAmD,YAAA,CAAAC,0BAAA,CAAgC,EAAA;IAC9B,MAAMC,MAAM,GAAGC,WAAW,CAACC,SAAS,CAAClE,IAAI,CAAC,CAAC;AAE3CmE,IAAAA,SAAS,CACP,CAAA,mBAAA,EAAsBnE,IAAI,CAAA,0DAAA,EAA6DgE,MAAM,CAAA,cAAA,EAAiBhE,IAAI,CAAA,EAAA,CAAI,EACtHgE,MAAM,KAAKhE,IAAI,EACf;AACE2B,MAAAA,EAAE,EAAE,uCAAuC;AAC3CyC,MAAAA,KAAK,EAAE,KAAK;AACZC,MAAAA,GAAG,EAAE,YAAY;AACjBC,MAAAA,KAAK,EAAE;AACLC,QAAAA,SAAS,EAAE,MAAM;AACjBC,QAAAA,OAAO,EAAE;AACX;AACF,KACF,CAAC;AAED,IAAA,OAAOR,MAAM;AACf;AAEA,EAAA,OAAOhE,IAAI;AACb;AAEA,SAASyE,QAAQA,CACfzE,IAAY,EACZC,OAAsC,EACZ;EAC1BQ,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,IAAA,IAAA,CAAAA,IAAA,EAAA;MAAA,MAAAX,IAAAA,KAAA,CAAO,CAAgD,8CAAA,CAAA,CAAA;AAAA;AAAA,GAAA,EAAEd,OAAO,IAAI,OAAOA,OAAO,CAAC0C,KAAK,KAAK,SAAS,CAAA,GAAA,EAAA;;AAEtG;AACA;AACA;AACA;AACA,EAAA,MAAMxC,IAAI,GAAG;AACXH,IAAAA,IAAI,EAAE6D,aAAa,CAAC7D,IAAI,CAAC;IACzBC,OAAO;AACPG,IAAAA,IAAI,EAAE,SAAS;AACf2C,IAAAA,IAAI,EAAE;GACP;AAED,EAAA,OAAOxC,QAAQ,CAAC;IACdC,GAAGA,CAAyCF,GAAW,EAAE;MACvD,IAAAG,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;QACT,IAAI,CAAC,cAAc,CAAC,CAACC,QAAQ,CAACR,GAAG,CAAC,EAAE;AAClC,UAAA,MAAM,IAAIS,KAAK,CACb,CAAA,CAAA,EAAIT,GAAG,CAAsI,mIAAA,EAAA,IAAI,CAACU,WAAW,CAACC,QAAQ,EAAE,EAC1K,CAAC;AACH;AACF;AACA,MAAA,IAAI,IAAI,CAACE,YAAY,IAAI,IAAI,CAACD,WAAW,EAAE;AACzC,QAAA,OAAO,EAAE;AACX;MACA,OAAO+B,mBAAmB,CAAC,IAAI,CAAC,CAACyB,UAAU,CAACpE,GAAG,CAAC;KACjD;AACDiB,IAAAA,GAAGA,CAAyCjB,GAAW,EAAEqE,OAAY,EAAE;MACrE,IAAAlE,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;QACT,IAAI,CAAC,cAAc,CAAC,CAACC,QAAQ,CAACR,GAAG,CAAC,EAAE;AAClC,UAAA,MAAM,IAAIS,KAAK,CACb,CAAA,CAAA,EAAIT,GAAG,CAAsI,mIAAA,EAAA,IAAI,CAACU,WAAW,CAACC,QAAQ,EAAE,EAC1K,CAAC;AACH;AACF;AACA,MAAA,MAAM+B,OAAO,GAAGC,mBAAmB,CAAC,IAAI,CAAC;AACzC,MAAA,MAAM2B,SAAS,GAAG5B,OAAO,CAAC6B,YAAY,CAACvE,GAAG,CAAC;MAC3CG,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,QAAA,IAAA,CAAAA,IAAA,EAAA;UAAA,MAAAX,IAAAA,KAAA,CAAO,CAAiE,+DAAA,CAAA,CAAA;AAAA;AAAA,OAAA,EAAE+D,KAAK,CAACC,OAAO,CAACJ,OAAO,CAAC,CAAA,GAAA,EAAA;AAChG,MAAA,IAAI,CAACnB,WAAW,CAAC,CAACC,KAAK,CAAC,MAAM;QAC5BmB,SAAS,CAACI,MAAM,CAAC,CAAC,EAAEJ,SAAS,CAAC/B,MAAM,EAAE,GAAG8B,OAAO,CAAC;AACnD,OAAC,CAAC;AAEF,MAAA,OAAO3B,OAAO,CAAC0B,UAAU,CAACpE,GAAG,CAAC;AAChC;AACF,GAAC,CAAC,CAACH,IAAI,CAACA,IAAI,CAAC;AACf;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;;AAEO,SAAS8E,OAAOA,CACrBjF,IAAkC,EAClCC,OAAyC,EACf;EAC1B,IAAAQ,cAAA,CAAAC,eAAA,EAAA,CAAAC,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAW,EAAA;IACTJ,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAa,IAAA,IAAA;AAAA,MAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,QAAA,MAAA,IAAAX,KAAA,CACE,CAA4Ef,yEAAAA,EAAAA,IAAI,CAAuC,qCAAA,CAAA,CAAA;AAAA;AAAA,KAAA,EACvH,CAACyC,mBAAmB,CAACmB,SAAiC,CAAC,CAAA,GAAA,EAAA;AAE3D;AACA,EAAA,OAAOa,QAAQ,CAACzE,IAAI,EAAGC,OAAQ,CAAC;AAClC;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { setOwner, getOwner } from '@ember/application';
2
2
  import { setRecordIdentifier, StoreMap, setCacheFor } from '@ember-data/store/-private';
3
- import { g as getModelFactory } from "./schema-provider-Bvogtzx9.js";
4
- import { n as normalizeModelName } from "./model-rk3atPqV.js";
3
+ import { g as getModelFactory } from "./schema-provider-WdyaNQ3o.js";
4
+ import { n as normalizeModelName } from "./model-B9PHp6Pe.js";
5
5
  import { macroCondition, getGlobalConfig } from '@embroider/macros';
6
6
  function instantiateRecord(identifier, createRecordArgs) {
7
7
  const type = identifier.type;
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-CNY5g4Ab.js","sources":["../src/-private/hooks.ts"],"sourcesContent":["import { getOwner, setOwner } from '@ember/application';\n\nimport { setCacheFor, setRecordIdentifier, type Store, StoreMap } from '@ember-data/store/-private';\nimport { assert } from '@warp-drive/build-config/macros';\nimport type { StableRecordIdentifier } from '@warp-drive/core-types';\nimport type { Cache } from '@warp-drive/core-types/cache';\nimport type { TypeFromInstance, TypeFromInstanceOrString } from '@warp-drive/core-types/record';\n\nimport type { Model, ModelStore } from './model';\nimport { getModelFactory } from './schema-provider';\nimport { normalizeModelName } from './util';\n\nfunction recast(context: Store): asserts context is ModelStore {}\n\nexport function instantiateRecord(\n this: Store,\n identifier: StableRecordIdentifier,\n createRecordArgs: { [key: string]: unknown }\n): Model {\n const type = identifier.type;\n\n recast(this);\n\n const cache = this.cache;\n // TODO deprecate allowing unknown args setting\n const createOptions = {\n _createProps: createRecordArgs,\n // TODO @deprecate consider deprecating accessing record properties during init which the below is necessary for\n _secretInit: {\n identifier,\n cache,\n store: this,\n cb: secretInit,\n },\n };\n\n // ensure that `getOwner(this)` works inside a model instance\n setOwner(createOptions, getOwner(this)!);\n const factory = getModelFactory(this, type);\n\n assert(`No model was found for '${type}'`, factory);\n return factory.class.create(createOptions);\n}\n\nexport function teardownRecord(record: Model): void {\n assert(\n `expected to receive an instance of Model from @ember-data/model. If using a custom model make sure you implement teardownRecord`,\n 'destroy' in record\n );\n record.destroy();\n}\n\nexport function modelFor<T>(type: TypeFromInstance<T>): typeof Model | void;\nexport function modelFor(type: string): typeof Model | void;\nexport function modelFor<T>(this: Store, modelName: TypeFromInstanceOrString<T>): typeof Model | void {\n assert(\n `Attempted to call store.modelFor(), but the store instance has already been destroyed.`,\n !this.isDestroyed && !this.isDestroying\n );\n assert(`You need to pass a model name to the store's modelFor method`, modelName);\n assert(\n `Please pass a proper model name to the store's modelFor method`,\n typeof modelName === 'string' && modelName.length\n );\n recast(this);\n\n const type = normalizeModelName(modelName);\n const maybeFactory = getModelFactory(this, type);\n const klass = maybeFactory && maybeFactory.class ? maybeFactory.class : null;\n\n const ignoreType = !klass || !klass.isModel || this._forceShim;\n if (!ignoreType) {\n return klass;\n }\n assert(`No model was found for '${type}' and no schema handles the type`, this.schema.hasResource({ type }));\n}\n\nfunction secretInit(record: Model, cache: Cache, identifier: StableRecordIdentifier, store: Store): void {\n setRecordIdentifier(record, identifier);\n StoreMap.set(record, store);\n setCacheFor(record, cache);\n}\n"],"names":["instantiateRecord","identifier","createRecordArgs","type","cache","createOptions","_createProps","_secretInit","store","cb","secretInit","setOwner","getOwner","factory","getModelFactory","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","test","Error","class","create","teardownRecord","record","destroy","modelFor","modelName","isDestroyed","isDestroying","length","normalizeModelName","maybeFactory","klass","ignoreType","isModel","_forceShim","schema","hasResource","setRecordIdentifier","StoreMap","set","setCacheFor"],"mappings":"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"}
1
+ {"version":3,"file":"hooks-C6_7V3O3.js","sources":["../src/-private/hooks.ts"],"sourcesContent":["import { getOwner, setOwner } from '@ember/application';\n\nimport { setCacheFor, setRecordIdentifier, type Store, StoreMap } from '@ember-data/store/-private';\nimport { assert } from '@warp-drive/build-config/macros';\nimport type { StableRecordIdentifier } from '@warp-drive/core-types';\nimport type { Cache } from '@warp-drive/core-types/cache';\nimport type { TypeFromInstance, TypeFromInstanceOrString } from '@warp-drive/core-types/record';\n\nimport type { Model, ModelStore } from './model';\nimport { getModelFactory } from './schema-provider';\nimport { normalizeModelName } from './util';\n\nfunction recast(context: Store): asserts context is ModelStore {}\n\nexport function instantiateRecord(\n this: Store,\n identifier: StableRecordIdentifier,\n createRecordArgs: { [key: string]: unknown }\n): Model {\n const type = identifier.type;\n\n recast(this);\n\n const cache = this.cache;\n // TODO deprecate allowing unknown args setting\n const createOptions = {\n _createProps: createRecordArgs,\n // TODO @deprecate consider deprecating accessing record properties during init which the below is necessary for\n _secretInit: {\n identifier,\n cache,\n store: this,\n cb: secretInit,\n },\n };\n\n // ensure that `getOwner(this)` works inside a model instance\n setOwner(createOptions, getOwner(this)!);\n const factory = getModelFactory(this, type);\n\n assert(`No model was found for '${type}'`, factory);\n return factory.class.create(createOptions);\n}\n\nexport function teardownRecord(record: Model): void {\n assert(\n `expected to receive an instance of Model from @ember-data/model. If using a custom model make sure you implement teardownRecord`,\n 'destroy' in record\n );\n record.destroy();\n}\n\nexport function modelFor<T>(type: TypeFromInstance<T>): typeof Model | void;\nexport function modelFor(type: string): typeof Model | void;\nexport function modelFor<T>(this: Store, modelName: TypeFromInstanceOrString<T>): typeof Model | void {\n assert(\n `Attempted to call store.modelFor(), but the store instance has already been destroyed.`,\n !this.isDestroyed && !this.isDestroying\n );\n assert(`You need to pass a model name to the store's modelFor method`, modelName);\n assert(\n `Please pass a proper model name to the store's modelFor method`,\n typeof modelName === 'string' && modelName.length\n );\n recast(this);\n\n const type = normalizeModelName(modelName);\n const maybeFactory = getModelFactory(this, type);\n const klass = maybeFactory && maybeFactory.class ? maybeFactory.class : null;\n\n const ignoreType = !klass || !klass.isModel || this._forceShim;\n if (!ignoreType) {\n return klass;\n }\n assert(`No model was found for '${type}' and no schema handles the type`, this.schema.hasResource({ type }));\n}\n\nfunction secretInit(record: Model, cache: Cache, identifier: StableRecordIdentifier, store: Store): void {\n setRecordIdentifier(record, identifier);\n StoreMap.set(record, store);\n setCacheFor(record, cache);\n}\n"],"names":["instantiateRecord","identifier","createRecordArgs","type","cache","createOptions","_createProps","_secretInit","store","cb","secretInit","setOwner","getOwner","factory","getModelFactory","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","test","Error","class","create","teardownRecord","record","destroy","modelFor","modelName","isDestroyed","isDestroying","length","normalizeModelName","maybeFactory","klass","ignoreType","isModel","_forceShim","schema","hasResource","setRecordIdentifier","StoreMap","set","setCacheFor"],"mappings":"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"}
package/dist/hooks.js CHANGED
@@ -1,2 +1,2 @@
1
- export { i as instantiateRecord, m as modelFor, t as teardownRecord } from "./hooks-CNY5g4Ab.js";
2
- export { b as buildSchema } from "./schema-provider-Bvogtzx9.js";
1
+ export { i as instantiateRecord, m as modelFor, t as teardownRecord } from "./hooks-C6_7V3O3.js";
2
+ export { b as buildSchema } from "./schema-provider-WdyaNQ3o.js";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- export { a as attr, b as belongsTo, h as hasMany } from "./has-many-DT3JBYYG.js";
2
- export { M as default } from "./model-rk3atPqV.js";
1
+ export { a as attr, b as belongsTo, h as hasMany } from "./has-many-CwEZBhUG.js";
2
+ export { M as default } from "./model-B9PHp6Pe.js";
3
3
  import '@ember-data/store/-private';
4
- export { i as instantiateRecord, m as modelFor, t as teardownRecord } from "./hooks-CNY5g4Ab.js";
5
- export { M as ModelSchemaProvider } from "./schema-provider-Bvogtzx9.js";
4
+ export { i as instantiateRecord, m as modelFor, t as teardownRecord } from "./hooks-C6_7V3O3.js";
5
+ export { M as ModelSchemaProvider } from "./schema-provider-WdyaNQ3o.js";
@@ -6,9 +6,9 @@ import '@ember-data/store/-private';
6
6
  import '@ember/debug';
7
7
  import '@ember-data/request-utils/string';
8
8
  import { macroCondition, getGlobalConfig } from '@embroider/macros';
9
- import { u as unloadRecord, s as serialize, b as save, r as rollbackAttributes, c as reload, h as hasMany, E as Errors, d as destroyRecord, e as deleteRecord, R as RecordState, f as changedAttributes, g as belongsTo, i as createSnapshot } from "./model-rk3atPqV.js";
9
+ import { u as unloadRecord, s as serialize, b as save, r as rollbackAttributes, c as reload, h as hasMany, E as Errors, d as destroyRecord, e as deleteRecord, R as RecordState, f as changedAttributes, g as belongsTo, i as createSnapshot } from "./model-B9PHp6Pe.js";
10
10
  import '@ember/application';
11
- import { b as buildSchema } from "./schema-provider-Bvogtzx9.js";
11
+ import { b as buildSchema } from "./schema-provider-WdyaNQ3o.js";
12
12
 
13
13
  // 'isDestroying', 'isDestroyed'
14
14
  const LegacyFields = ['_createSnapshot', 'adapterError', 'belongsTo', 'changedAttributes', 'constructor', 'currentState', 'deleteRecord', 'destroyRecord', 'dirtyType', 'errors', 'hasDirtyAttributes', 'hasMany', 'isDeleted', 'isEmpty', 'isError', 'isLoaded', 'isLoading', 'isNew', 'isSaving', 'isValid', 'reload', 'rollbackAttributes', 'save', 'serialize', 'unloadRecord'];
@@ -3,9 +3,7 @@ import { dasherize } from '@ember-data/request-utils/string';
3
3
  import { macroCondition, getGlobalConfig, dependencySatisfies, importSync } from '@embroider/macros';
4
4
  import EmberObject, { computed, get } from '@ember/object';
5
5
  import { recordIdentifierFor as recordIdentifierFor$1, storeFor as storeFor$1 } from '@ember-data/store';
6
- import { isStableIdentifier, recordIdentifierFor, storeFor, peekCache, SOURCE, fastPush, RelatedCollection, coerceId } from '@ember-data/store/-private';
7
- import { cached, compat, notifySignal } from '@ember-data/tracking';
8
- import { defineSignal, subscribed } from '@ember-data/tracking/-private';
6
+ import { memoized, defineSignal, defineNonEnumerableSignal, isStableIdentifier, recordIdentifierFor, storeFor, peekCache, SOURCE, fastPush, RelatedCollection, notifyInternalSignal, ARRAY_SIGNAL, peekInternalSignal, withSignalStore, gate, coerceId, entangleSignal } from '@ember-data/store/-private';
9
7
  import { RecordStore } from '@warp-drive/core-types/symbols';
10
8
  import { A } from '@ember/array';
11
9
  import ArrayProxy from '@ember/array/proxy';
@@ -145,7 +143,7 @@ class PromiseBelongsTo extends Extended {
145
143
  // however, meta on relationships does not trigger change notifications.
146
144
  // if you need relationship meta, you should do `record.belongsTo(relationshipName).meta()`
147
145
  static {
148
- decorateMethodV2(this.prototype, "id", [cached]);
146
+ decorateMethodV2(this.prototype, "id", [memoized]);
149
147
  }
150
148
  get meta() {
151
149
  // eslint-disable-next-line no-constant-condition
@@ -217,6 +215,21 @@ class PromiseManyArray {
217
215
  return this.content ? this.content.length : 0;
218
216
  }
219
217
 
218
+ // this will error if someone tries to call
219
+ // A(identifierArray) since it is not configurable
220
+ // which is preferrable to the `meta` override we used
221
+ // before which required importing all of Ember
222
+ static {
223
+ decorateMethodV2(this.prototype, "length", [memoized]);
224
+ }
225
+ get '[]'() {
226
+ // ember-source < 3.23 (e.g. 3.20 lts)
227
+ // requires that the tag `'[]'` be notified
228
+ // on the ArrayProxy in order for `{{#each}}`
229
+ // to recompute. We entangle content.
230
+ return this.content?.length && this.content;
231
+ }
232
+
220
233
  /**
221
234
  * Iterate the proxied content. Called by the glimmer iterator in #each
222
235
  * We do not guarantee that forEach will always be available. This
@@ -228,7 +241,7 @@ class PromiseManyArray {
228
241
  * @private
229
242
  */
230
243
  static {
231
- decorateMethodV2(this.prototype, "length", [compat]);
244
+ decorateMethodV2(this.prototype, '[]', [memoized]);
232
245
  }
233
246
  forEach(cb) {
234
247
  if (this.content && this.length) {
@@ -344,7 +357,7 @@ class PromiseManyArray {
344
357
  * @public
345
358
  */
346
359
  static {
347
- decorateMethodV2(this.prototype, "links", [compat]);
360
+ decorateMethodV2(this.prototype, "links", [memoized]);
348
361
  }
349
362
  get meta() {
350
363
  return this.content ? this.content.meta : undefined;
@@ -352,7 +365,7 @@ class PromiseManyArray {
352
365
 
353
366
  //---- Our own stuff
354
367
  static {
355
- decorateMethodV2(this.prototype, "meta", [compat]);
368
+ decorateMethodV2(this.prototype, "meta", [memoized]);
356
369
  }
357
370
  _update(promise, content) {
358
371
  if (content !== undefined) {
@@ -373,28 +386,6 @@ defineSignal(PromiseManyArray.prototype, 'isPending', false);
373
386
  defineSignal(PromiseManyArray.prototype, 'isRejected', false);
374
387
  defineSignal(PromiseManyArray.prototype, 'isFulfilled', false);
375
388
  defineSignal(PromiseManyArray.prototype, 'isSettled', false);
376
-
377
- // this will error if someone tries to call
378
- // A(identifierArray) since it is not configurable
379
- // which is preferrable to the `meta` override we used
380
- // before which required importing all of Ember
381
- if (macroCondition(getGlobalConfig().WarpDrive.deprecations.DEPRECATE_COMPUTED_CHAINS)) {
382
- const desc = {
383
- enumerable: true,
384
- configurable: false,
385
- get: function () {
386
- return this.content?.length && this.content;
387
- }
388
- };
389
- compat(desc);
390
-
391
- // ember-source < 3.23 (e.g. 3.20 lts)
392
- // requires that the tag `'[]'` be notified
393
- // on the ArrayProxy in order for `{{#each}}`
394
- // to recompute. We entangle the '[]' tag from content
395
-
396
- Object.defineProperty(PromiseManyArray.prototype, '[]', desc);
397
- }
398
389
  function tapPromise(proxy, promise) {
399
390
  proxy.isPending = true;
400
391
  proxy.isSettled = false;
@@ -567,7 +558,7 @@ class HasManyReference {
567
558
  return [];
568
559
  }
569
560
  static {
570
- decorateMethodV2(this.prototype, "identifiers", [compat, cached]);
561
+ decorateMethodV2(this.prototype, "identifiers", [memoized]);
571
562
  }
572
563
  _resource() {
573
564
  const cache = this.store.cache;
@@ -1036,7 +1027,7 @@ class HasManyReference {
1036
1027
  return support.reloadHasMany(this.key, options);
1037
1028
  }
1038
1029
  }
1039
- defineSignal(HasManyReference.prototype, '_ref', 0);
1030
+ defineNonEnumerableSignal(HasManyReference.prototype, '_ref', 0);
1040
1031
  function isMaybeResource(object) {
1041
1032
  const keys = Object.keys(object).filter(k => k !== 'id' && k !== 'type' && k !== 'lid');
1042
1033
  return keys.length > 0;
@@ -1197,7 +1188,7 @@ class BelongsToReference {
1197
1188
  @return {String} The id of the record in this belongsTo relationship.
1198
1189
  */
1199
1190
  static {
1200
- decorateMethodV2(this.prototype, "identifier", [compat, cached]);
1191
+ decorateMethodV2(this.prototype, "identifier", [memoized]);
1201
1192
  }
1202
1193
  id() {
1203
1194
  return this.identifier?.id || null;
@@ -1620,7 +1611,7 @@ class BelongsToReference {
1620
1611
  return support.reloadBelongsTo(this.key, options).then(() => this.value());
1621
1612
  }
1622
1613
  }
1623
- defineSignal(BelongsToReference.prototype, '_ref', 0);
1614
+ defineNonEnumerableSignal(BelongsToReference.prototype, '_ref', 0);
1624
1615
  const LEGACY_SUPPORT = getOrSetGlobal('LEGACY_SUPPORT', new Map());
1625
1616
  function lookupLegacySupport(record) {
1626
1617
  const identifier = recordIdentifierFor(record);
@@ -2232,7 +2223,7 @@ function handleCompletedRelationshipRequest(recordExt, key, relationship, value,
2232
2223
  if (isHasMany) {
2233
2224
  // we don't notify the record property here to avoid refetch
2234
2225
  // only the many array
2235
- value.notify();
2226
+ notifyInternalSignal(value[ARRAY_SIGNAL]);
2236
2227
  }
2237
2228
  if (error) {
2238
2229
  relationship.state.hasFailedLoadAttempt = true;
@@ -2803,7 +2794,7 @@ function notifyChanges(identifier, value, key, record, store) {
2803
2794
  }
2804
2795
  break;
2805
2796
  case 'identity':
2806
- record.notifyPropertyChange('id');
2797
+ notifyInternalSignal(peekInternalSignal(withSignalStore(record), 'id'));
2807
2798
  break;
2808
2799
  }
2809
2800
  }
@@ -2820,7 +2811,7 @@ function notifyRelationship(identifier, key, record, meta) {
2820
2811
  return;
2821
2812
  }
2822
2813
  if (manyArray) {
2823
- manyArray.notify();
2814
+ notifyInternalSignal(manyArray[ARRAY_SIGNAL]);
2824
2815
 
2825
2816
  //We need to notifyPropertyChange in the adding case because we need to make sure
2826
2817
  //we fetch the newly added record in case it is unloaded
@@ -2988,7 +2979,11 @@ class RecordState {
2988
2979
  storeFor$1(this.record).notifications.unsubscribe(this.handler);
2989
2980
  }
2990
2981
  notify(key) {
2991
- notifySignal(this, key);
2982
+ const signals = withSignalStore(this);
2983
+ const signal = peekInternalSignal(signals, key);
2984
+ if (signal) {
2985
+ notifyInternalSignal(signal);
2986
+ }
2992
2987
  }
2993
2988
  updateInvalidErrors(errors) {
2994
2989
  macroCondition(getGlobalConfig().WarpDrive.env.DEBUG) ? (test => {
@@ -3031,7 +3026,7 @@ class RecordState {
3031
3026
  return !this.isLoaded && this.pendingCount > 0 && this.fulfilledCount === 0;
3032
3027
  }
3033
3028
  static {
3034
- decorateMethodV2(this.prototype, "isLoading", [subscribed]);
3029
+ decorateMethodV2(this.prototype, "isLoading", [gate]);
3035
3030
  }
3036
3031
  get isLoaded() {
3037
3032
  if (this.isNew) {
@@ -3040,7 +3035,7 @@ class RecordState {
3040
3035
  return this.fulfilledCount > 0 || !this.isEmpty;
3041
3036
  }
3042
3037
  static {
3043
- decorateMethodV2(this.prototype, "isLoaded", [subscribed]);
3038
+ decorateMethodV2(this.prototype, "isLoaded", [gate]);
3044
3039
  }
3045
3040
  get isSaved() {
3046
3041
  const rd = this.cache;
@@ -3058,7 +3053,7 @@ class RecordState {
3058
3053
  return true;
3059
3054
  }
3060
3055
  static {
3061
- decorateMethodV2(this.prototype, "isSaved", [subscribed]);
3056
+ decorateMethodV2(this.prototype, "isSaved", [gate]);
3062
3057
  }
3063
3058
  get isEmpty() {
3064
3059
  const rd = this.cache;
@@ -3072,7 +3067,7 @@ class RecordState {
3072
3067
  return !this.isNew && rd.isEmpty(this.identifier);
3073
3068
  }
3074
3069
  static {
3075
- decorateMethodV2(this.prototype, "isEmpty", [subscribed]);
3070
+ decorateMethodV2(this.prototype, "isEmpty", [gate]);
3076
3071
  }
3077
3072
  get isNew() {
3078
3073
  const rd = this.cache;
@@ -3084,7 +3079,7 @@ class RecordState {
3084
3079
  return rd.isNew(this.identifier);
3085
3080
  }
3086
3081
  static {
3087
- decorateMethodV2(this.prototype, "isNew", [subscribed]);
3082
+ decorateMethodV2(this.prototype, "isNew", [gate]);
3088
3083
  }
3089
3084
  get isDeleted() {
3090
3085
  const rd = this.cache;
@@ -3096,13 +3091,13 @@ class RecordState {
3096
3091
  return rd.isDeleted(this.identifier);
3097
3092
  }
3098
3093
  static {
3099
- decorateMethodV2(this.prototype, "isDeleted", [subscribed]);
3094
+ decorateMethodV2(this.prototype, "isDeleted", [gate]);
3100
3095
  }
3101
3096
  get isValid() {
3102
3097
  return this.record.errors.length === 0;
3103
3098
  }
3104
3099
  static {
3105
- decorateMethodV2(this.prototype, "isValid", [subscribed]);
3100
+ decorateMethodV2(this.prototype, "isValid", [gate]);
3106
3101
  }
3107
3102
  get isDirty() {
3108
3103
  const rd = this.cache;
@@ -3112,7 +3107,7 @@ class RecordState {
3112
3107
  return this.isDeleted || this.isNew || rd.hasChangedAttrs(this.identifier);
3113
3108
  }
3114
3109
  static {
3115
- decorateMethodV2(this.prototype, "isDirty", [subscribed]);
3110
+ decorateMethodV2(this.prototype, "isDirty", [gate]);
3116
3111
  }
3117
3112
  get isError() {
3118
3113
  const errorReq = this._errorRequests[this._errorRequests.length - 1];
@@ -3123,7 +3118,7 @@ class RecordState {
3123
3118
  }
3124
3119
  }
3125
3120
  static {
3126
- decorateMethodV2(this.prototype, "isError", [subscribed]);
3121
+ decorateMethodV2(this.prototype, "isError", [gate]);
3127
3122
  }
3128
3123
  get adapterError() {
3129
3124
  const request = this._lastError;
@@ -3133,13 +3128,13 @@ class RecordState {
3133
3128
  return request.state === 'rejected' && request.response.data;
3134
3129
  }
3135
3130
  static {
3136
- decorateMethodV2(this.prototype, "adapterError", [subscribed]);
3131
+ decorateMethodV2(this.prototype, "adapterError", [gate]);
3137
3132
  }
3138
3133
  get isPreloaded() {
3139
3134
  return !this.isEmpty && this.isLoading;
3140
3135
  }
3141
3136
  static {
3142
- decorateMethodV2(this.prototype, "isPreloaded", [cached]);
3137
+ decorateMethodV2(this.prototype, "isPreloaded", [memoized]);
3143
3138
  }
3144
3139
  get stateName() {
3145
3140
  // we might be empty while loading so check this first
@@ -3186,7 +3181,7 @@ class RecordState {
3186
3181
  }
3187
3182
  }
3188
3183
  static {
3189
- decorateMethodV2(this.prototype, "stateName", [cached]);
3184
+ decorateMethodV2(this.prototype, "stateName", [memoized]);
3190
3185
  }
3191
3186
  get dirtyType() {
3192
3187
  // we might be empty while loading so check this first
@@ -3211,7 +3206,7 @@ class RecordState {
3211
3206
  }
3212
3207
  }
3213
3208
  static {
3214
- decorateMethodV2(this.prototype, "dirtyType", [cached]);
3209
+ decorateMethodV2(this.prototype, "dirtyType", [memoized]);
3215
3210
  }
3216
3211
  }
3217
3212
  defineSignal(RecordState.prototype, 'isSaving', false);
@@ -3304,18 +3299,6 @@ class Model extends EmberObject {
3304
3299
  this.___recordState?.destroy();
3305
3300
  const store = storeFor$1(this);
3306
3301
  store.notifications.unsubscribe(this.___private_notifications);
3307
- // Legacy behavior is to notify the relationships on destroy
3308
- // such that they "clear". It's uncertain this behavior would
3309
- // be good for a new model paradigm, likely cheaper and safer
3310
- // to simply not notify, for this reason the store does not itself
3311
- // notify individual changes once the delete has been signaled,
3312
- // this decision is left to model instances.
3313
-
3314
- this.eachRelationship((name, meta) => {
3315
- if (meta.kind === 'belongsTo') {
3316
- this.notifyPropertyChange(name);
3317
- }
3318
- });
3319
3302
  LEGACY_SUPPORT.get(this)?.destroy();
3320
3303
  LEGACY_SUPPORT.delete(this);
3321
3304
  LEGACY_SUPPORT.delete(identifier);
@@ -3350,7 +3333,7 @@ class Model extends EmberObject {
3350
3333
  @readOnly
3351
3334
  */
3352
3335
  static {
3353
- decorateMethodV2(this.prototype, "isEmpty", [compat]);
3336
+ decorateMethodV2(this.prototype, "isEmpty", [memoized]);
3354
3337
  }
3355
3338
  get isLoading() {
3356
3339
  return this.currentState.isLoading;
@@ -3374,7 +3357,7 @@ class Model extends EmberObject {
3374
3357
  @readOnly
3375
3358
  */
3376
3359
  static {
3377
- decorateMethodV2(this.prototype, "isLoading", [compat]);
3360
+ decorateMethodV2(this.prototype, "isLoading", [memoized]);
3378
3361
  }
3379
3362
  get isLoaded() {
3380
3363
  return this.currentState.isLoaded;
@@ -3401,7 +3384,7 @@ class Model extends EmberObject {
3401
3384
  @readOnly
3402
3385
  */
3403
3386
  static {
3404
- decorateMethodV2(this.prototype, "isLoaded", [compat]);
3387
+ decorateMethodV2(this.prototype, "isLoaded", [memoized]);
3405
3388
  }
3406
3389
  get hasDirtyAttributes() {
3407
3390
  return this.currentState.isDirty;
@@ -3428,7 +3411,7 @@ class Model extends EmberObject {
3428
3411
  @readOnly
3429
3412
  */
3430
3413
  static {
3431
- decorateMethodV2(this.prototype, "hasDirtyAttributes", [compat]);
3414
+ decorateMethodV2(this.prototype, "hasDirtyAttributes", [memoized]);
3432
3415
  }
3433
3416
  get isSaving() {
3434
3417
  return this.currentState.isSaving;
@@ -3467,7 +3450,7 @@ class Model extends EmberObject {
3467
3450
  @readOnly
3468
3451
  */
3469
3452
  static {
3470
- decorateMethodV2(this.prototype, "isSaving", [compat]);
3453
+ decorateMethodV2(this.prototype, "isSaving", [memoized]);
3471
3454
  }
3472
3455
  get isDeleted() {
3473
3456
  return this.currentState.isDeleted;
@@ -3492,7 +3475,7 @@ class Model extends EmberObject {
3492
3475
  @readOnly
3493
3476
  */
3494
3477
  static {
3495
- decorateMethodV2(this.prototype, "isDeleted", [compat]);
3478
+ decorateMethodV2(this.prototype, "isDeleted", [memoized]);
3496
3479
  }
3497
3480
  get isNew() {
3498
3481
  return this.currentState.isNew;
@@ -3508,7 +3491,7 @@ class Model extends EmberObject {
3508
3491
  @readOnly
3509
3492
  */
3510
3493
  static {
3511
- decorateMethodV2(this.prototype, "isNew", [compat]);
3494
+ decorateMethodV2(this.prototype, "isNew", [memoized]);
3512
3495
  }
3513
3496
  get isValid() {
3514
3497
  return this.currentState.isValid;
@@ -3532,7 +3515,7 @@ class Model extends EmberObject {
3532
3515
  @readOnly
3533
3516
  */
3534
3517
  static {
3535
- decorateMethodV2(this.prototype, "isValid", [compat]);
3518
+ decorateMethodV2(this.prototype, "isValid", [memoized]);
3536
3519
  }
3537
3520
  get dirtyType() {
3538
3521
  return this.currentState.dirtyType;
@@ -3556,13 +3539,13 @@ class Model extends EmberObject {
3556
3539
  @readOnly
3557
3540
  */
3558
3541
  static {
3559
- decorateMethodV2(this.prototype, "dirtyType", [compat]);
3542
+ decorateMethodV2(this.prototype, "dirtyType", [memoized]);
3560
3543
  }
3561
3544
  get isError() {
3562
3545
  return this.currentState.isError;
3563
3546
  }
3564
3547
  static {
3565
- decorateMethodV2(this.prototype, "isError", [compat]);
3548
+ decorateMethodV2(this.prototype, "isError", [memoized]);
3566
3549
  }
3567
3550
  set isError(v) {
3568
3551
  if (macroCondition(getGlobalConfig().WarpDrive.env.DEBUG)) {
@@ -3614,7 +3597,7 @@ class Model extends EmberObject {
3614
3597
  return recordIdentifierFor$1(this).id;
3615
3598
  }
3616
3599
  static {
3617
- decorateMethodV2(this.prototype, "id", [subscribed]);
3600
+ decorateMethodV2(this.prototype, "id", [gate]);
3618
3601
  }
3619
3602
  set id(id) {
3620
3603
  const normalizedId = coerceId(id);
@@ -3654,7 +3637,7 @@ class Model extends EmberObject {
3654
3637
  return this.___recordState;
3655
3638
  }
3656
3639
  static {
3657
- decorateMethodV2(this.prototype, "currentState", [subscribed]);
3640
+ decorateMethodV2(this.prototype, "currentState", [gate]);
3658
3641
  }
3659
3642
  set currentState(_v) {
3660
3643
  throw new Error('cannot set currentState');
@@ -3732,7 +3715,7 @@ class Model extends EmberObject {
3732
3715
  return this.currentState.adapterError;
3733
3716
  }
3734
3717
  static {
3735
- decorateMethodV2(this.prototype, "adapterError", [compat]);
3718
+ decorateMethodV2(this.prototype, "adapterError", [memoized]);
3736
3719
  }
3737
3720
  set adapterError(v) {
3738
3721
  throw new Error(`adapterError is not directly settable`);
@@ -3760,7 +3743,8 @@ class Model extends EmberObject {
3760
3743
  */
3761
3744
  // @ts-expect-error no return is necessary, but Ember's types are forcing it
3762
3745
  notifyPropertyChange(prop) {
3763
- notifySignal(this, prop);
3746
+ const signals = withSignalStore(this);
3747
+ entangleSignal(signals, this, prop, undefined);
3764
3748
  super.notifyPropertyChange(prop);
3765
3749
  }
3766
3750