@ember-data/store 5.5.0-alpha.1 → 5.5.0-alpha.3
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-service-f6cb9898.js","sources":["../../../node_modules/.pnpm/@babel+runtime@7.22.15/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js","../../../node_modules/.pnpm/@babel+runtime@7.22.15/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js","../../../node_modules/.pnpm/@babel+runtime@7.22.15/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js","../../../node_modules/.pnpm/@babel+runtime@7.22.15/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js","../src/-private/document.ts","../src/-private/cache-handler.ts","../src/-private/utils/coerce-id.ts","../src/-private/utils/identifier-debug-consts.ts","../src/-private/utils/normalize-model-name.ts","../src/-private/utils/uuid-polyfill.ts","../src/-private/caches/resource-utils.ts","../src/-private/caches/identifier-cache.ts","../src/-private/legacy-model-support/record-reference.ts","../src/-private/managers/cache-capabilities-manager.ts","../src/-private/caches/cache-utils.ts","../src/-private/caches/instance-cache.ts","../src/-private/legacy-model-support/shim-model-class.ts","../src/-private/managers/cache-manager.ts","../src/-private/managers/notification-manager.ts","../src/-private/record-arrays/identifier-array.ts","../src/-private/managers/record-array-manager.ts","../src/-private/network/request-cache.ts","../src/-private/utils/is-non-empty-string.ts","../src/-private/utils/construct-resource.ts","../src/-private/store-service.ts"],"sourcesContent":["export default function _initializerDefineProperty(target, property, descriptor, context) {\n if (!descriptor) return;\n Object.defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}","export default function _classPrivateFieldBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n return receiver;\n}","var id = 0;\nexport default function _classPrivateFieldKey(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}","export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\n}","import { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\n\nimport { RequestInfo } from '@ember-data/request/-private/types';\nimport { StableDocumentIdentifier } from '@ember-data/types/cache/identifier';\nimport { Link, PaginationLinks } from '@ember-data/types/q/ember-data-json-api';\n\nimport type Store from './store-service';\n\nfunction urlFromLink(link: Link): string {\n if (typeof link === 'string') return link;\n return link.href;\n}\n\nexport class Document<T> {\n @tracked links?: PaginationLinks;\n @tracked data?: T;\n @tracked errors?: object;\n @tracked meta?: object;\n\n declare identifier: StableDocumentIdentifier | null;\n\n #store: Store;\n constructor(store: Store, identifier: StableDocumentIdentifier | null) {\n this.#store = store;\n this.identifier = identifier;\n }\n\n async #request(link: keyof PaginationLinks, options: object = {}): Promise<Document<T> | null> {\n const href = this.links?.[link];\n if (!href) {\n return null;\n }\n\n const response = await this.#store.request<Document<T>>(Object.assign(options, { url: urlFromLink(href) }));\n\n return response.content;\n }\n\n fetch(options: Partial<RequestInfo> = {}): Promise<Document<T>> {\n assert(`No self link`, this.links?.self);\n options.cacheOptions = options.cacheOptions || {};\n options.cacheOptions.key = this.identifier?.lid;\n return this.#request('self', options) as Promise<Document<T>>;\n }\n\n next(options?: object): Promise<Document<T> | null> {\n return this.#request('next', options);\n }\n\n prev(options?: object): Promise<Document<T> | null> {\n return this.#request('prev', options);\n }\n\n first(options?: object): Promise<Document<T> | null> {\n return this.#request('first', options);\n }\n\n last(options?: object): Promise<Document<T> | null> {\n return this.#request('last', options);\n }\n\n toJSON(): object {\n const data: Partial<Document<T>> = {};\n data.identifier = this.identifier;\n if (this.data !== undefined) {\n data.data = this.data;\n }\n if (this.links !== undefined) {\n data.links = this.links;\n }\n if (this.errors !== undefined) {\n data.errors = this.errors;\n }\n if (this.meta !== undefined) {\n data.meta = this.meta;\n }\n return data;\n }\n}\n","import { assert } from '@ember/debug';\n\nimport type {\n Future,\n Handler,\n ImmutableRequestInfo,\n NextFn,\n RequestContext,\n StructuredErrorDocument,\n} from '@ember-data/request/-private/types';\nimport type Store from '@ember-data/store';\nimport type {\n CollectionResourceDataDocument,\n ResourceDataDocument,\n ResourceErrorDocument,\n} from '@ember-data/types/cache/document';\nimport type { StableDocumentIdentifier } from '@ember-data/types/cache/identifier';\nimport type { ResourceIdentifierObject } from '@ember-data/types/q/ember-data-json-api';\nimport type { JsonApiError } from '@ember-data/types/q/record-data-json-api';\nimport type { RecordInstance } from '@ember-data/types/q/record-instance';\nimport type { CreateRequestOptions, DeleteRequestOptions, UpdateRequestOptions } from '@ember-data/types/request';\n\nimport { Document } from './document';\n\nexport interface LifetimesService {\n isHardExpired(identifier: StableDocumentIdentifier): boolean;\n isSoftExpired(identifier: StableDocumentIdentifier): boolean;\n}\n\nexport type StoreRequestInfo = ImmutableRequestInfo;\nexport type LooseStoreRequestInfo = Omit<StoreRequestInfo, 'records' | 'headers'> & {\n records?: ResourceIdentifierObject[];\n headers?: Headers;\n};\n\nexport type StoreRequestInput = StoreRequestInfo | LooseStoreRequestInfo;\n\nexport interface StoreRequestContext extends RequestContext {\n request: StoreRequestInfo & { store: Store };\n}\n\nfunction isErrorDocument(document: ResourceDataDocument | ResourceErrorDocument): document is ResourceErrorDocument {\n return 'errors' in document;\n}\n\nfunction maybeUpdateUiObjects<T>(\n store: Store,\n request: StoreRequestInfo,\n options: {\n shouldHydrate?: boolean;\n shouldFetch?: boolean;\n shouldBackgroundFetch?: boolean;\n identifier: StableDocumentIdentifier | null;\n },\n document: ResourceDataDocument | ResourceErrorDocument,\n isFromCache: boolean\n): T {\n const { identifier } = options;\n\n if (isErrorDocument(document)) {\n if (!identifier && !options.shouldHydrate) {\n return document as T;\n }\n let doc: Document<undefined> | undefined;\n if (identifier) {\n doc = store._documentCache.get(identifier) as Document<undefined> | undefined;\n }\n\n if (!doc) {\n doc = new Document<undefined>(store, identifier);\n copyDocumentProperties(doc, document);\n\n if (identifier) {\n store._documentCache.set(identifier, doc);\n }\n } else if (!isFromCache) {\n doc.data = undefined;\n copyDocumentProperties(doc, document);\n }\n\n return options.shouldHydrate ? (doc as T) : (document as T);\n }\n\n if (Array.isArray(document.data)) {\n const { recordArrayManager } = store;\n if (!identifier) {\n if (!options.shouldHydrate) {\n return document as T;\n }\n const data = recordArrayManager.createArray({\n type: request.url,\n identifiers: document.data,\n doc: document as CollectionResourceDataDocument,\n query: request,\n }) as T;\n\n const doc = new Document(store, null);\n doc.data = data;\n doc.meta = document.meta;\n doc.links = document.links;\n\n return doc as T;\n }\n let managed = recordArrayManager._keyedArrays.get(identifier.lid);\n\n if (!managed) {\n managed = recordArrayManager.createArray({\n type: identifier.lid,\n identifiers: document.data,\n doc: document as CollectionResourceDataDocument,\n });\n recordArrayManager._keyedArrays.set(identifier.lid, managed);\n const doc = new Document<RecordInstance[]>(store, identifier);\n doc.data = managed;\n doc.meta = document.meta;\n doc.links = document.links;\n store._documentCache.set(identifier, doc);\n\n return options.shouldHydrate ? (doc as T) : (document as T);\n } else {\n const doc = store._documentCache.get(identifier)!;\n if (!isFromCache) {\n recordArrayManager.populateManagedArray(managed, document.data, document as CollectionResourceDataDocument);\n doc.data = managed;\n doc.meta = document.meta;\n doc.links = document.links;\n }\n\n return options.shouldHydrate ? (doc as T) : (document as T);\n }\n } else {\n if (!identifier && !options.shouldHydrate) {\n return document as T;\n }\n const data = document.data ? store.peekRecord(document.data) : null;\n let doc: Document<RecordInstance | null> | undefined;\n if (identifier) {\n doc = store._documentCache.get(identifier);\n }\n\n if (!doc) {\n doc = new Document<RecordInstance | null>(store, identifier);\n doc.data = data;\n copyDocumentProperties(doc, document);\n\n if (identifier) {\n store._documentCache.set(identifier, doc);\n }\n } else if (!isFromCache) {\n doc.data = data;\n copyDocumentProperties(doc, document);\n }\n\n return options.shouldHydrate ? (doc as T) : (document as T);\n }\n}\n\nconst MUTATION_OPS = new Set(['createRecord', 'updateRecord', 'deleteRecord']);\n\nfunction calcShouldFetch(\n store: Store,\n request: StoreRequestInfo,\n hasCachedValue: boolean,\n identifier: StableDocumentIdentifier | null\n): boolean {\n const { cacheOptions } = request;\n return (\n (request.op && MUTATION_OPS.has(request.op)) ||\n cacheOptions?.reload ||\n !hasCachedValue ||\n (store.lifetimes && identifier ? store.lifetimes.isHardExpired(identifier) : false)\n );\n}\n\nfunction calcShouldBackgroundFetch(\n store: Store,\n request: StoreRequestInfo,\n willFetch: boolean,\n identifier: StableDocumentIdentifier | null\n): boolean {\n const { cacheOptions } = request;\n return (\n !willFetch &&\n (cacheOptions?.backgroundReload ||\n (store.lifetimes && identifier ? store.lifetimes.isSoftExpired(identifier) : false))\n );\n}\n\nfunction isMutation(\n request: Partial<StoreRequestInfo>\n): request is UpdateRequestOptions | CreateRequestOptions | DeleteRequestOptions {\n return Boolean(request.op && MUTATION_OPS.has(request.op));\n}\n\nfunction fetchContentAndHydrate<T>(\n next: NextFn<T>,\n context: StoreRequestContext,\n identifier: StableDocumentIdentifier | null,\n shouldFetch: boolean,\n shouldBackgroundFetch: boolean\n): Promise<T> {\n const { store } = context.request;\n const shouldHydrate: boolean =\n (context.request[Symbol.for('ember-data:enable-hydration')] as boolean | undefined) || false;\n\n let isMut = false;\n if (isMutation(context.request)) {\n isMut = true;\n const record = context.request.data?.record;\n assert(`Expected to receive a list of records included in the ${context.request.op} request`, record);\n store.cache.willCommit(record, context);\n }\n\n const promise = next(context.request).then(\n (document) => {\n store.requestManager._pending.delete(context.id);\n store._enableAsyncFlush = true;\n let response: ResourceDataDocument;\n store._join(() => {\n if (isMutation(context.request)) {\n response = store.cache.didCommit(context.request.data.record, document) as ResourceDataDocument;\n } else {\n response = store.cache.put(document) as ResourceDataDocument;\n }\n response = maybeUpdateUiObjects(\n store,\n context.request,\n { shouldHydrate, shouldFetch, shouldBackgroundFetch, identifier },\n response,\n false\n );\n });\n store._enableAsyncFlush = null;\n\n if (shouldFetch) {\n return response!;\n } else if (shouldBackgroundFetch) {\n store.notifications._flush();\n }\n },\n (error: StructuredErrorDocument) => {\n store.requestManager._pending.delete(context.id);\n if (context.request.signal?.aborted) {\n throw error;\n }\n store.requestManager._pending.delete(context.id);\n store._enableAsyncFlush = true;\n let response: ResourceErrorDocument | undefined;\n store._join(() => {\n if (isMutation(context.request)) {\n // TODO similar to didCommit we should spec this to be similar to cache.put for handling full response\n // currently we let the response remain undefiend.\n const errors =\n error &&\n error.content &&\n typeof error.content === 'object' &&\n 'errors' in error.content &&\n Array.isArray(error.content.errors)\n ? (error.content.errors as JsonApiError[])\n : undefined;\n store.cache.commitWasRejected(context.request.data.record, errors);\n // re-throw the original error to preserve `errors` property.\n throw error;\n } else {\n response = store.cache.put(error) as ResourceErrorDocument;\n response = maybeUpdateUiObjects(\n store,\n context.request,\n { shouldHydrate, shouldFetch, shouldBackgroundFetch, identifier },\n response,\n false\n );\n }\n });\n store._enableAsyncFlush = null;\n\n if (!shouldBackgroundFetch) {\n const newError = cloneError(error);\n newError.content = response;\n throw newError;\n } else {\n store.notifications._flush();\n }\n }\n ) as Promise<T>;\n\n if (!isMut) {\n return promise;\n }\n assert(`Expected a mutation`, isMutation(context.request));\n\n // for mutations we need to enqueue the promise with the requestStateService\n return store._requestCache._enqueue(promise, {\n data: [{ op: 'saveRecord', recordIdentifier: context.request.data.record, options: undefined }],\n });\n}\n\nfunction cloneError(error: Error & { error: string | object }) {\n const cloned: Error & { error: string | object; content?: object } = new Error(error.message) as Error & {\n error: string | object;\n content?: object;\n };\n cloned.stack = error.stack;\n cloned.error = error.error;\n return cloned;\n}\n\nexport const SkipCache = Symbol.for('ember-data:skip-cache');\nexport const EnableHydration = Symbol.for('ember-data:enable-hydration');\n\nexport const CacheHandler: Handler = {\n request<T>(context: StoreRequestContext, next: NextFn<T>): Promise<T> | Future<T> {\n // if we have no cache or no cache-key skip cache handling\n if (!context.request.store || context.request.cacheOptions?.[SkipCache]) {\n return next(context.request);\n }\n\n const { store } = context.request;\n const identifier = store.identifierCache.getOrCreateDocumentIdentifier(context.request);\n\n const peeked = identifier ? store.cache.peekRequest(identifier) : null;\n\n // determine if we should skip cache\n if (calcShouldFetch(store, context.request, !!peeked, identifier)) {\n return fetchContentAndHydrate(next, context, identifier, true, false);\n }\n\n // if we have not skipped cache, determine if we should update behind the scenes\n if (calcShouldBackgroundFetch(store, context.request, false, identifier)) {\n let promise = fetchContentAndHydrate(next, context, identifier, false, true);\n store.requestManager._pending.set(context.id, promise);\n }\n\n const shouldHydrate: boolean = (context.request[EnableHydration] as boolean | undefined) || false;\n\n if ('error' in peeked!) {\n const content = shouldHydrate\n ? maybeUpdateUiObjects<T>(\n store,\n context.request,\n { shouldHydrate, identifier },\n peeked.content as ResourceErrorDocument,\n true\n )\n : peeked.content;\n const newError = cloneError(peeked);\n newError.content = content as object;\n throw newError;\n }\n\n return Promise.resolve(\n shouldHydrate\n ? maybeUpdateUiObjects<T>(\n store,\n context.request,\n { shouldHydrate, identifier },\n peeked!.content as ResourceDataDocument,\n true\n )\n : (peeked!.content as T)\n );\n },\n};\n\nfunction copyDocumentProperties(target: { links?: unknown; meta?: unknown; errors?: unknown }, source: object) {\n if ('links' in source) {\n target.links = source.links;\n }\n if ('meta' in source) {\n target.meta = source.meta;\n }\n if ('errors' in source) {\n target.errors = source.errors;\n }\n}\n","/**\n @module @ember-data/store\n*/\n\nimport { assert, deprecate } from '@ember/debug';\n\nimport { DEPRECATE_NON_STRICT_ID } from '@ember-data/deprecations';\n\n// Used by the store to normalize IDs entering the store. Despite the fact\n// that developers may provide IDs as numbers (e.g., `store.findRecord('person', 1)`),\n// it is important that internally we use strings, since IDs may be serialized\n// and lose type information. For example, Ember's router may put a record's\n// ID into the URL, and if we later try to deserialize that URL and find the\n// corresponding record, we will not know if it is a string or a number.\ntype Coercable = string | number | boolean | null | undefined | symbol;\n\nfunction coerceId(id: Coercable): string | null {\n if (DEPRECATE_NON_STRICT_ID) {\n let normalized: string | null;\n if (id === null || id === undefined || id === '') {\n normalized = null;\n } else {\n normalized = String(id);\n }\n\n deprecate(\n `The resource id '<${typeof id}> ${String(\n id\n )} ' is not normalized. Update your application code to use '${JSON.stringify(normalized)}' instead.`,\n normalized === id,\n {\n id: 'ember-data:deprecate-non-strict-id',\n until: '6.0',\n for: 'ember-data',\n since: {\n available: '5.3',\n enabled: '5.3',\n },\n }\n );\n\n return normalized;\n }\n\n assert(\n `Resource IDs must be a non-empty string or null. Received '${String(id)}'.`,\n id === null || (typeof id === 'string' && id.length > 0)\n );\n\n return id;\n}\n\nexport function ensureStringId(id: Coercable): string {\n let normalized: string | null = null;\n if (typeof id === 'string') {\n normalized = id.length > 0 ? id : null;\n } else if (typeof id === 'number' && !isNaN(id)) {\n normalized = String(id);\n }\n\n assert(`Expected id to be a string or number, received ${String(id)}`, normalized !== null);\n\n return normalized;\n}\n\nexport default coerceId;\n","// provided for additional debuggability\nexport const DEBUG_CLIENT_ORIGINATED: unique symbol = Symbol('record-originated-on-client');\nexport const DEBUG_IDENTIFIER_BUCKET: unique symbol = Symbol('identifier-bucket');\nexport const DEBUG_STALE_CACHE_OWNER: unique symbol = Symbol('warpDriveStaleCache');\n\n// also present in production\nexport const CACHE_OWNER: unique symbol = Symbol('warpDriveCache');\n","import { deprecate } from '@ember/debug';\nimport { dasherize } from '@ember/string';\n\nimport { DEPRECATE_NON_STRICT_TYPES } from '@ember-data/deprecations';\n\nexport default function normalizeModelName(type: string): string {\n if (DEPRECATE_NON_STRICT_TYPES) {\n const result = 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: '5.3',\n enabled: '5.3',\n },\n }\n );\n\n return result;\n }\n\n return type;\n}\n","/**\n @module @ember-data/store\n*/\ninterface FastbootCrypto {\n randomFillSync(v: Uint8Array): Uint8Array;\n}\n\ntype UUIDv4 = `${string}-${string}-${string}-${string}-${string}`;\n\nexport default function installPolyfill() {\n const isFastBoot = typeof FastBoot !== 'undefined';\n const CRYPTO: Crypto = isFastBoot ? (FastBoot.require('crypto') as Crypto) : window.crypto;\n\n if (!CRYPTO.randomUUID) {\n // we might be able to optimize this by requesting more bytes than we need at a time\n const rng = function (): Uint8Array {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n let rnds8 = new Uint8Array(16);\n\n if (!CRYPTO.getRandomValues && !isFastBoot) {\n throw new Error(`Unable to generate bytes for UUID`);\n }\n\n return CRYPTO.getRandomValues\n ? CRYPTO.getRandomValues(rnds8)\n : (CRYPTO as unknown as FastbootCrypto).randomFillSync(rnds8);\n };\n\n /*\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n const byteToHex: string[] = [];\n for (let i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n }\n\n const bytesToUuid = function (buf: Uint8Array): UUIDv4 {\n let bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return [\n bth[buf[0]],\n bth[buf[1]],\n bth[buf[2]],\n bth[buf[3]],\n '-',\n bth[buf[4]],\n bth[buf[5]],\n '-',\n bth[buf[6]],\n bth[buf[7]],\n '-',\n bth[buf[8]],\n bth[buf[9]],\n '-',\n bth[buf[10]],\n bth[buf[11]],\n bth[buf[12]],\n bth[buf[13]],\n bth[buf[14]],\n bth[buf[15]],\n ].join('') as UUIDv4;\n };\n\n CRYPTO.randomUUID = function uuidv4(): UUIDv4 {\n let rnds = rng();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n return bytesToUuid(rnds);\n };\n }\n}\n","function isResource(resource: unknown): resource is Record<string, unknown> {\n return Boolean(resource && typeof resource === 'object');\n}\n\nfunction hasProp<T extends string, K extends { [J in T]: string }>(resource: unknown, prop: T): resource is K {\n return Boolean(\n isResource(resource) && prop in resource && typeof resource[prop] === 'string' && (resource[prop] as string).length\n );\n}\n\nexport function hasLid(resource: unknown): resource is { lid: string } {\n return hasProp(resource, 'lid');\n}\n\nexport function hasId(resource: unknown): resource is { id: string } {\n return (\n hasProp(resource, 'id') || Boolean(isResource(resource) && 'id' in resource && typeof resource.id === 'number')\n );\n}\n\nexport function hasType(resource: unknown): resource is { type: string } {\n return hasProp(resource, 'type');\n}\n","/**\n @module @ember-data/store\n*/\nimport { assert, warn } from '@ember/debug';\n\nimport { getOwnConfig, macroCondition } from '@embroider/macros';\n\nimport { LOG_IDENTIFIERS } from '@ember-data/debugging';\nimport { DEBUG } from '@ember-data/env';\nimport { ImmutableRequestInfo } from '@ember-data/request/-private/types';\nimport { StableDocumentIdentifier } from '@ember-data/types/cache/identifier';\nimport type { ExistingResourceObject, ResourceIdentifierObject } from '@ember-data/types/q/ember-data-json-api';\nimport type {\n ForgetMethod,\n GenerationMethod,\n Identifier,\n IdentifierBucket,\n RecordIdentifier,\n ResetMethod,\n ResourceData,\n StableIdentifier,\n StableRecordIdentifier,\n UpdateMethod,\n} from '@ember-data/types/q/identifier';\n\nimport coerceId from '../utils/coerce-id';\nimport {\n CACHE_OWNER,\n DEBUG_CLIENT_ORIGINATED,\n DEBUG_IDENTIFIER_BUCKET,\n DEBUG_STALE_CACHE_OWNER,\n} from '../utils/identifier-debug-consts';\nimport normalizeModelName from '../utils/normalize-model-name';\nimport installPolyfill from '../utils/uuid-polyfill';\nimport { hasId, hasLid, hasType } from './resource-utils';\n\nconst IDENTIFIERS = new Set();\nconst DOCUMENTS = new Set();\n\nexport function isStableIdentifier(identifier: unknown): identifier is StableRecordIdentifier {\n return (identifier as StableRecordIdentifier)[CACHE_OWNER] !== undefined || IDENTIFIERS.has(identifier);\n}\n\nexport function isDocumentIdentifier(identifier: unknown): identifier is StableDocumentIdentifier {\n return DOCUMENTS.has(identifier);\n}\n\nconst isFastBoot = typeof FastBoot !== 'undefined';\nconst _crypto: Crypto = isFastBoot ? (FastBoot.require('crypto') as Crypto) : window.crypto;\n\nif (macroCondition(getOwnConfig<{ polyfillUUID: boolean }>().polyfillUUID)) {\n installPolyfill();\n}\n\nfunction uuidv4(): string {\n assert(\n 'crypto.randomUUID needs to be avaliable. Some browsers incorrectly disallow it in insecure contexts. You maybe want to enable the polyfill: https://github.com/emberjs/data#randomuuid-polyfill',\n typeof _crypto.randomUUID === 'function'\n );\n return _crypto.randomUUID();\n}\n\nfunction freeze<T>(obj: T): T {\n if (typeof Object.freeze === 'function') {\n return Object.freeze(obj);\n }\n return obj;\n}\n\ninterface KeyOptions {\n lid: IdentifierMap;\n id: IdentifierMap;\n}\ntype TypeMap = { [key: string]: KeyOptions };\n\n// type IdentifierTypeLookup = { all: Set<StableRecordIdentifier>; id: Map<string, StableRecordIdentifier> };\n// type IdentifiersByType = Map<string, IdentifierTypeLookup>;\ntype IdentifierMap = Map<string, StableRecordIdentifier>;\ntype KeyInfo = {\n id: string | null;\n type: string;\n};\ntype StableCache = {\n resources: IdentifierMap;\n documents: Map<string, StableDocumentIdentifier>;\n resourcesByType: TypeMap;\n};\n\nexport type KeyInfoMethod = (resource: unknown, known: StableRecordIdentifier | null) => KeyInfo;\n\nexport type MergeMethod = (\n targetIdentifier: StableRecordIdentifier,\n matchedIdentifier: StableRecordIdentifier,\n resourceData: unknown\n) => StableRecordIdentifier;\n\nlet configuredForgetMethod: ForgetMethod | null;\nlet configuredGenerationMethod: GenerationMethod | null;\nlet configuredResetMethod: ResetMethod | null;\nlet configuredUpdateMethod: UpdateMethod | null;\nlet configuredKeyInfoMethod: KeyInfoMethod | null;\n\nexport function setIdentifierGenerationMethod(method: GenerationMethod | null): void {\n configuredGenerationMethod = method;\n}\n\nexport function setIdentifierUpdateMethod(method: UpdateMethod | null): void {\n configuredUpdateMethod = method;\n}\n\nexport function setIdentifierForgetMethod(method: ForgetMethod | null): void {\n configuredForgetMethod = method;\n}\n\nexport function setIdentifierResetMethod(method: ResetMethod | null): void {\n configuredResetMethod = method;\n}\n\nexport function setKeyInfoForResource(method: KeyInfoMethod | null): void {\n configuredKeyInfoMethod = method;\n}\n\nfunction assertIsRequest(request: unknown): asserts request is ImmutableRequestInfo {\n return;\n}\n\n// Map<type, Map<id, lid>>\ntype TypeIdMap = Map<string, Map<string, string>>;\nconst NEW_IDENTIFIERS: TypeIdMap = new Map();\nlet IDENTIFIER_CACHE_ID = 0;\n\nfunction updateTypeIdMapping(typeMap: TypeIdMap, identifier: StableRecordIdentifier, id: string): void {\n let idMap = typeMap.get(identifier.type);\n if (!idMap) {\n idMap = new Map();\n typeMap.set(identifier.type, idMap);\n }\n idMap.set(id, identifier.lid);\n}\n\nfunction defaultUpdateMethod(identifier: StableRecordIdentifier, data: unknown, bucket: 'record'): void;\nfunction defaultUpdateMethod(identifier: StableIdentifier, newData: unknown, bucket: never): void;\nfunction defaultUpdateMethod(\n identifier: StableIdentifier | StableRecordIdentifier,\n data: unknown,\n bucket: 'record'\n): void {\n if (bucket === 'record') {\n assert(`Expected identifier to be a StableRecordIdentifier`, isStableIdentifier(identifier));\n if (!identifier.id && hasId(data)) {\n updateTypeIdMapping(NEW_IDENTIFIERS, identifier, data.id);\n }\n }\n}\n\nfunction defaultKeyInfoMethod(resource: unknown, known: StableRecordIdentifier | null): KeyInfo {\n // TODO RFC something to make this configurable\n const id = hasId(resource) ? coerceId(resource.id) : null;\n const type = hasType(resource) ? normalizeModelName(resource.type) : known ? known.type : null;\n\n assert(`Expected keyInfoForResource to provide a type for the resource`, type);\n\n return { type, id };\n}\n\nfunction defaultGenerationMethod(data: ImmutableRequestInfo, bucket: 'document'): string | null;\nfunction defaultGenerationMethod(data: ResourceData | { type: string }, bucket: 'record'): string;\nfunction defaultGenerationMethod(\n data: ImmutableRequestInfo | ResourceData | { type: string },\n bucket: IdentifierBucket\n): string | null {\n if (bucket === 'record') {\n if (hasLid(data)) {\n return data.lid;\n }\n\n assert(`Cannot generate an identifier for a resource without a type`, hasType(data));\n\n if (hasId(data)) {\n const type = normalizeModelName(data.type);\n const lid = NEW_IDENTIFIERS.get(type)?.get(data.id);\n\n return lid || `@lid:${type}-${data.id}`;\n }\n\n return uuidv4();\n } else if (bucket === 'document') {\n assertIsRequest(data);\n if (!data.url) {\n return null;\n }\n if (!data.method || data.method.toUpperCase() === 'GET') {\n return data.url;\n }\n return null;\n }\n assert(`Unknown bucket ${bucket as string}`, false);\n}\n\nfunction defaultEmptyCallback(...args: unknown[]): void {}\nfunction defaultMergeMethod(\n a: StableRecordIdentifier,\n _b: StableRecordIdentifier,\n _c: unknown\n): StableRecordIdentifier {\n return a;\n}\n\nlet DEBUG_MAP: WeakMap<StableRecordIdentifier, StableRecordIdentifier>;\nif (DEBUG) {\n DEBUG_MAP = new WeakMap<StableRecordIdentifier, StableRecordIdentifier>();\n}\n\n/**\n * Each instance of {Store} receives a unique instance of a IdentifierCache.\n *\n * This cache is responsible for assigning or retrieving the unique identify\n * for arbitrary resource data encountered by the store. Data representing\n * a unique resource or record should always be represented by the same\n * identifier.\n *\n * It can be configured by consuming applications.\n *\n * @class IdentifierCache\n @public\n */\nexport class IdentifierCache {\n declare _cache: StableCache;\n declare _generate: GenerationMethod;\n declare _update: UpdateMethod;\n declare _forget: ForgetMethod;\n declare _reset: ResetMethod;\n declare _merge: MergeMethod;\n declare _keyInfoForResource: KeyInfoMethod;\n declare _isDefaultConfig: boolean;\n declare _id: number;\n\n constructor() {\n // we cache the user configuredGenerationMethod at init because it must\n // be configured prior and is not allowed to be changed\n this._generate = configuredGenerationMethod || (defaultGenerationMethod as GenerationMethod);\n this._update = configuredUpdateMethod || defaultUpdateMethod;\n this._forget = configuredForgetMethod || defaultEmptyCallback;\n this._reset = configuredResetMethod || defaultEmptyCallback;\n this._merge = defaultMergeMethod;\n this._keyInfoForResource = configuredKeyInfoMethod || defaultKeyInfoMethod;\n this._isDefaultConfig = !configuredGenerationMethod;\n this._id = IDENTIFIER_CACHE_ID++;\n\n this._cache = {\n resources: new Map<string, StableRecordIdentifier>(),\n resourcesByType: Object.create(null) as TypeMap,\n documents: new Map<string, StableDocumentIdentifier>(),\n };\n }\n\n /**\n * Internal hook to allow management of merge conflicts with identifiers.\n *\n * we allow late binding of this private internal merge so that\n * the cache can insert itself here to handle elimination of duplicates\n *\n * @method __configureMerge\n * @private\n */\n __configureMerge(method: MergeMethod | null) {\n this._merge = method || defaultMergeMethod;\n }\n\n upgradeIdentifier(resource: { type: string; id: string | null; lid?: string }): StableRecordIdentifier {\n return this._getRecordIdentifier(resource, 2);\n }\n\n /**\n * @method _getRecordIdentifier\n * @private\n */\n _getRecordIdentifier(\n resource: { type: string; id: string | null; lid?: string },\n shouldGenerate: 2\n ): StableRecordIdentifier;\n _getRecordIdentifier(resource: unknown, shouldGenerate: 1): StableRecordIdentifier;\n _getRecordIdentifier(resource: unknown, shouldGenerate: 0): StableRecordIdentifier | undefined;\n _getRecordIdentifier(resource: unknown, shouldGenerate: 0 | 1 | 2): StableRecordIdentifier | undefined {\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(`Identifiers: ${shouldGenerate ? 'Generating' : 'Peeking'} Identifier`, resource);\n }\n // short circuit if we're already the stable version\n if (isStableIdentifier(resource)) {\n if (DEBUG) {\n // TODO should we instead just treat this case as a new generation skipping the short circuit?\n if (!this._cache.resources.has(resource.lid) || this._cache.resources.get(resource.lid) !== resource) {\n throw new Error(`The supplied identifier ${JSON.stringify(resource)} does not belong to this store instance`);\n }\n }\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: cache HIT - Stable ${resource.lid}`);\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n return resource;\n }\n\n // the resource is unknown, ask the application to identify this data for us\n const lid = this._generate(resource, 'record');\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: ${lid ? 'no ' : ''}lid ${lid ? lid + ' ' : ''}determined for resource`, resource);\n }\n\n let identifier: StableRecordIdentifier | null = /*#__NOINLINE__*/ getIdentifierFromLid(this._cache, lid, resource);\n if (identifier !== null) {\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n return identifier;\n }\n\n if (shouldGenerate === 0) {\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n return;\n }\n\n // if we still don't have an identifier, time to generate one\n if (shouldGenerate === 2) {\n (resource as StableRecordIdentifier).lid = lid;\n (resource as StableRecordIdentifier)[CACHE_OWNER] = this._id;\n identifier = /*#__NOINLINE__*/ makeStableRecordIdentifier(resource as StableRecordIdentifier, 'record', false);\n } else {\n // we lie a bit here as a memory optimization\n const keyInfo = this._keyInfoForResource(resource, null) as StableRecordIdentifier;\n keyInfo.lid = lid;\n keyInfo[CACHE_OWNER] = this._id;\n identifier = /*#__NOINLINE__*/ makeStableRecordIdentifier(keyInfo, 'record', false);\n }\n\n addResourceToCache(this._cache, identifier);\n\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n\n return identifier;\n }\n\n /**\n * allows us to peek without generating when needed\n * useful for the \"create\" case when we need to see if\n * we are accidentally overwritting something\n *\n * @method peekRecordIdentifier\n * @param resource\n * @returns {StableRecordIdentifier | undefined}\n * @private\n */\n peekRecordIdentifier(resource: ResourceIdentifierObject | Identifier): StableRecordIdentifier | undefined {\n return this._getRecordIdentifier(resource, 0);\n }\n\n /**\n Returns the DocumentIdentifier for the given Request, creates one if it does not yet exist.\n Returns `null` if the request does not have a `cacheKey` or `url`.\n\n @method getOrCreateDocumentIdentifier\n @param request\n @returns {StableDocumentIdentifier | null}\n @public\n */\n getOrCreateDocumentIdentifier(request: ImmutableRequestInfo): StableDocumentIdentifier | null {\n let cacheKey: string | null | undefined = request.cacheOptions?.key;\n\n if (!cacheKey) {\n cacheKey = this._generate(request, 'document');\n }\n\n if (!cacheKey) {\n return null;\n }\n\n let identifier = this._cache.documents.get(cacheKey);\n\n if (identifier === undefined) {\n identifier = { lid: cacheKey };\n if (DEBUG) {\n Object.freeze(identifier);\n }\n DOCUMENTS.add(identifier);\n this._cache.documents.set(cacheKey, identifier);\n }\n\n return identifier;\n }\n\n /**\n Returns the Identifier for the given Resource, creates one if it does not yet exist.\n\n Specifically this means that we:\n\n - validate the `id` `type` and `lid` combo against known identifiers\n - return an object with an `lid` that is stable (repeated calls with the same\n `id` + `type` or `lid` will return the same `lid` value)\n - this referential stability of the object itself is guaranteed\n\n @method getOrCreateRecordIdentifier\n @param resource\n @returns {StableRecordIdentifier}\n @public\n */\n getOrCreateRecordIdentifier(resource: unknown): StableRecordIdentifier {\n return this._getRecordIdentifier(resource, 1);\n }\n\n /**\n Returns a new Identifier for the supplied data. Call this method to generate\n an identifier when a new resource is being created local to the client and\n potentially does not have an `id`.\n\n Delegates generation to the user supplied `GenerateMethod` if one has been provided\n with the signature `generateMethod({ type }, 'record')`.\n\n @method createIdentifierForNewRecord\n @param data\n @returns {StableRecordIdentifier}\n @public\n */\n createIdentifierForNewRecord(data: { type: string; id?: string | null }): StableRecordIdentifier {\n let newLid = this._generate(data, 'record');\n let identifier = /*#__NOINLINE__*/ makeStableRecordIdentifier(\n { id: data.id || null, type: data.type, lid: newLid, [CACHE_OWNER]: this._id },\n 'record',\n true\n );\n\n // populate our unique table\n if (DEBUG) {\n if (this._cache.resources.has(identifier.lid)) {\n throw new Error(`The lid generated for the new record is not unique as it matches an existing identifier`);\n }\n }\n\n /*#__NOINLINE__*/ addResourceToCache(this._cache, identifier);\n\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: created identifier ${String(identifier)} for newly generated resource`, data);\n }\n\n return identifier;\n }\n\n /**\n Provides the opportunity to update secondary lookup tables for existing identifiers\n Called after an identifier created with `createIdentifierForNewRecord` has been\n committed.\n\n Assigned `id` to an `Identifier` if `id` has not previously existed; however,\n attempting to change the `id` or calling update without providing an `id` when\n one is missing will throw an error.\n\n - sets `id` (if `id` was previously `null`)\n - `lid` and `type` MUST NOT be altered post creation\n\n If a merge occurs, it is possible the returned identifier does not match the originally\n provided identifier. In this case the abandoned identifier will go through the usual\n `forgetRecordIdentifier` codepaths.\n\n @method updateRecordIdentifier\n @param identifierObject\n @param data\n @returns {StableRecordIdentifier}\n @public\n */\n updateRecordIdentifier(identifierObject: RecordIdentifier, data: unknown): StableRecordIdentifier {\n let identifier = this.getOrCreateRecordIdentifier(identifierObject);\n\n const keyInfo = this._keyInfoForResource(data, identifier);\n let existingIdentifier = /*#__NOINLINE__*/ detectMerge(this._cache, keyInfo, identifier, data);\n const hadLid = hasLid(data);\n\n if (!existingIdentifier) {\n // If the incoming type does not match the identifier type, we need to create an identifier for the incoming\n // data so we can merge the incoming data with the existing identifier, see #7325 and #7363\n if (identifier.type !== keyInfo.type) {\n if (hadLid) {\n // Strip the lid to ensure we force a new identifier creation\n delete (data as { lid?: string }).lid;\n }\n existingIdentifier = this.getOrCreateRecordIdentifier(data);\n }\n }\n\n if (existingIdentifier) {\n let generatedIdentifier = identifier;\n identifier = this._mergeRecordIdentifiers(keyInfo, generatedIdentifier, existingIdentifier, data);\n\n // make sure that the `lid` on the data we are processing matches the lid we kept\n if (hadLid) {\n data.lid = identifier.lid;\n }\n\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(\n `Identifiers: merged identifiers ${generatedIdentifier.lid} and ${existingIdentifier.lid} for resource into ${identifier.lid}`,\n data\n );\n }\n }\n\n let id = identifier.id;\n /*#__NOINLINE__*/ performRecordIdentifierUpdate(identifier, keyInfo, data, this._update);\n const newId = identifier.id;\n\n // add to our own secondary lookup table\n if (id !== newId && newId !== null) {\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(\n `Identifiers: updated id for identifier ${identifier.lid} from '${String(id)}' to '${String(\n newId\n )}' for resource`,\n data\n );\n }\n\n const typeSet = this._cache.resourcesByType[identifier.type];\n assert(`Expected to find a typeSet for ${identifier.type}`, typeSet);\n typeSet.id.set(newId, identifier);\n\n if (id !== null) {\n typeSet.id.delete(id);\n }\n } else if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: updated identifier ${identifier.lid} resource`, data);\n }\n\n return identifier;\n }\n\n /**\n * @method _mergeRecordIdentifiers\n * @private\n */\n _mergeRecordIdentifiers(\n keyInfo: KeyInfo,\n identifier: StableRecordIdentifier,\n existingIdentifier: StableRecordIdentifier,\n data: unknown\n ): StableRecordIdentifier {\n assert(`Expected keyInfo to contain an id`, hasId(keyInfo));\n // delegate determining which identifier to keep to the configured MergeMethod\n const kept = this._merge(identifier, existingIdentifier, data);\n const abandoned = kept === identifier ? existingIdentifier : identifier;\n\n // cleanup the identifier we no longer need\n this.forgetRecordIdentifier(abandoned);\n\n // ensure a secondary cache entry for this id for the identifier we do keep\n // keyOptions.id.set(newId, kept);\n\n // ensure a secondary cache entry for this id for the abandoned identifier's type we do keep\n // let baseKeyOptions = getTypeIndex(this._cache.resourcesByType, existingIdentifier.type);\n // baseKeyOptions.id.set(newId, kept);\n\n return kept;\n }\n\n /**\n Provides the opportunity to eliminate an identifier from secondary lookup tables\n as well as eliminates it from ember-data's own lookup tables and book keeping.\n\n Useful when a record has been deleted and the deletion has been persisted and\n we do not care about the record anymore. Especially useful when an `id` of a\n deleted record might be reused later for a new record.\n\n @method forgetRecordIdentifier\n @param identifierObject\n @public\n */\n forgetRecordIdentifier(identifierObject: RecordIdentifier): void {\n const identifier = this.getOrCreateRecordIdentifier(identifierObject);\n const typeSet = this._cache.resourcesByType[identifier.type];\n assert(`Expected to find a typeSet for ${identifier.type}`, typeSet);\n\n if (identifier.id !== null) {\n typeSet.id.delete(identifier.id);\n }\n this._cache.resources.delete(identifier.lid);\n typeSet.lid.delete(identifier.lid);\n\n if (DEBUG) {\n identifier[DEBUG_STALE_CACHE_OWNER] = identifier[CACHE_OWNER];\n }\n identifier[CACHE_OWNER] = undefined;\n IDENTIFIERS.delete(identifier);\n this._forget(identifier, 'record');\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: released identifier ${identifierObject.lid}`);\n }\n }\n\n destroy() {\n NEW_IDENTIFIERS.clear();\n this._cache.documents.forEach((identifier) => {\n DOCUMENTS.delete(identifier);\n });\n this._reset();\n }\n}\n\nfunction makeStableRecordIdentifier(\n recordIdentifier: {\n type: string;\n id: string | null;\n lid: string;\n [CACHE_OWNER]: number | undefined;\n },\n bucket: IdentifierBucket,\n clientOriginated: boolean\n): StableRecordIdentifier {\n IDENTIFIERS.add(recordIdentifier);\n\n if (DEBUG) {\n // we enforce immutability in dev\n // but preserve our ability to do controlled updates to the reference\n let wrapper: StableRecordIdentifier = {\n get lid() {\n return recordIdentifier.lid;\n },\n get id() {\n return recordIdentifier.id;\n },\n get type() {\n return recordIdentifier.type;\n },\n get [CACHE_OWNER](): number | undefined {\n return recordIdentifier[CACHE_OWNER];\n },\n set [CACHE_OWNER](value: number) {\n recordIdentifier[CACHE_OWNER] = value;\n },\n get [DEBUG_STALE_CACHE_OWNER](): number | undefined {\n return (recordIdentifier as StableRecordIdentifier)[DEBUG_STALE_CACHE_OWNER];\n },\n set [DEBUG_STALE_CACHE_OWNER](value: number | undefined) {\n recordIdentifier[DEBUG_STALE_CACHE_OWNER] = value;\n },\n };\n Object.defineProperty(wrapper, 'toString', {\n enumerable: false,\n value: () => {\n const { type, id, lid } = recordIdentifier;\n return `${clientOriginated ? '[CLIENT_ORIGINATED] ' : ''}${String(type)}:${String(id)} (${lid})`;\n },\n });\n Object.defineProperty(wrapper, 'toJSON', {\n enumerable: false,\n value: () => {\n const { type, id, lid } = recordIdentifier;\n return { type, id, lid };\n },\n });\n wrapper[DEBUG_CLIENT_ORIGINATED] = clientOriginated;\n wrapper[DEBUG_IDENTIFIER_BUCKET] = bucket;\n IDENTIFIERS.add(wrapper);\n DEBUG_MAP.set(wrapper, recordIdentifier);\n wrapper = freeze(wrapper);\n return wrapper;\n }\n\n return recordIdentifier;\n}\n\nfunction performRecordIdentifierUpdate(\n identifier: StableRecordIdentifier,\n keyInfo: KeyInfo,\n data: unknown,\n updateFn: UpdateMethod\n) {\n if (DEBUG) {\n const { id, type } = keyInfo;\n\n // get the mutable instance behind our proxy wrapper\n let wrapper = identifier;\n identifier = DEBUG_MAP.get(wrapper)!;\n\n if (hasLid(data)) {\n const lid = data.lid;\n if (lid !== identifier.lid) {\n throw new Error(\n `The 'lid' for a RecordIdentifier cannot be updated once it has been created. Attempted to set lid for '${wrapper.lid}' to '${lid}'.`\n );\n }\n }\n\n if (id && identifier.id !== null && identifier.id !== id) {\n // here we warn and ignore, as this may be a mistake, but we allow the user\n // to have multiple cache-keys pointing at a single lid so we cannot error\n warn(\n `The 'id' for a RecordIdentifier should not be updated once it has been set. Attempted to set id for '${wrapper.lid}' to '${id}'.`,\n false,\n { id: 'ember-data:multiple-ids-for-identifier' }\n );\n }\n\n // TODO consider just ignoring here to allow flexible polymorphic support\n if (type && type !== identifier.type) {\n throw new Error(\n `The 'type' for a RecordIdentifier cannot be updated once it has been set. Attempted to set type for '${wrapper.lid}' to '${type}'.`\n );\n }\n\n updateFn(wrapper, data, 'record');\n } else {\n updateFn(identifier, data, 'record');\n }\n\n // upgrade the ID, this is a \"one time only\" ability\n // for the multiple-cache-key scenario we \"could\"\n // use a heuristic to guess the best id for display\n // (usually when `data.id` is available and `data.attributes` is not)\n if ((data as ExistingResourceObject).id !== undefined) {\n identifier.id = coerceId((data as ExistingResourceObject).id);\n }\n}\n\nfunction detectMerge(\n cache: StableCache,\n keyInfo: KeyInfo,\n identifier: StableRecordIdentifier,\n data: unknown\n): StableRecordIdentifier | false {\n const newId = keyInfo.id;\n const { id, type, lid } = identifier;\n const typeSet = cache.resourcesByType[identifier.type];\n\n // if the IDs are present but do not match\n // then check if we have an existing identifier\n // for the newer ID.\n if (id !== null && id !== newId && newId !== null) {\n const existingIdentifier = typeSet && typeSet.id.get(newId);\n\n return existingIdentifier !== undefined ? existingIdentifier : false;\n } else {\n const newType = keyInfo.type;\n\n // If the ids and type are the same but lid is not the same, we should trigger a merge of the identifiers\n // we trigger a merge of the identifiers\n // though probably we should just throw an error here\n if (id !== null && id === newId && newType === type && hasLid(data) && data.lid !== lid) {\n return getIdentifierFromLid(cache, data.lid, data) || false;\n\n // If the lids are the same, and ids are the same, but types are different we should trigger a merge of the identifiers\n } else if (id !== null && id === newId && newType && newType !== type && hasLid(data) && data.lid === lid) {\n const newTypeSet = cache.resourcesByType[newType];\n const existingIdentifier = newTypeSet && newTypeSet.id.get(newId);\n\n return existingIdentifier !== undefined ? existingIdentifier : false;\n }\n }\n\n return false;\n}\n\nfunction getIdentifierFromLid(cache: StableCache, lid: string, resource: unknown): StableRecordIdentifier | null {\n const identifier = cache.resources.get(lid);\n if (LOG_IDENTIFIERS) {\n // eslint-disable-next-line no-console\n console.log(`Identifiers: cache ${identifier ? 'HIT' : 'MISS'} - Non-Stable ${lid}`, resource);\n }\n return identifier || null;\n}\n\nfunction addResourceToCache(cache: StableCache, identifier: StableRecordIdentifier): void {\n cache.resources.set(identifier.lid, identifier);\n let typeSet = cache.resourcesByType[identifier.type];\n\n if (!typeSet) {\n typeSet = { lid: new Map(), id: new Map() };\n cache.resourcesByType[identifier.type] = typeSet;\n }\n\n typeSet.lid.set(identifier.lid, identifier);\n if (identifier.id) {\n typeSet.id.set(identifier.id, identifier);\n }\n}\n","import { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\n\n/**\n @module @ember-data/store\n*/\nimport type { SingleResourceDocument } from '@ember-data/types/q/ember-data-json-api';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\nimport type { RecordInstance } from '@ember-data/types/q/record-instance';\n\nimport type { NotificationType } from '../managers/notification-manager';\nimport type Store from '../store-service';\n\n/**\n @module @ember-data/store\n*/\n\n/**\n A `RecordReference` is a low-level API that allows users and\n addon authors to perform meta-operations on a record.\n\n @class RecordReference\n @public\n @extends Reference\n*/\nexport default class RecordReference {\n declare store: Store;\n // unsubscribe token given to us by the notification manager\n ___token!: object;\n ___identifier: StableRecordIdentifier;\n\n @tracked _ref = 0;\n\n constructor(store: Store, identifier: StableRecordIdentifier) {\n this.store = store;\n this.___identifier = identifier;\n this.___token = store.notifications.subscribe(\n identifier,\n (_: StableRecordIdentifier, bucket: NotificationType, notifiedKey?: string) => {\n if (bucket === 'identity' || (bucket === 'attributes' && notifiedKey === 'id')) {\n this._ref++;\n }\n }\n );\n }\n\n destroy() {\n this.store.notifications.unsubscribe(this.___token);\n }\n\n get type(): string {\n return this.identifier().type;\n }\n\n /**\n The `id` of the record that this reference refers to.\n\n Together, the `type` and `id` properties form a composite key for\n the identity map.\n\n Example\n\n ```javascript\n let userRef = store.getReference('user', 1);\n\n userRef.id(); // '1'\n ```\n\n @method id\n @public\n @return {String} The id of the record.\n */\n id() {\n this._ref; // consume the tracked prop\n return this.___identifier.id;\n }\n\n /**\n The `identifier` of the record that this reference refers to.\n\n Together, the `type` and `id` properties form a composite key for\n the identity map.\n\n Example\n\n ```javascript\n let userRef = store.getReference('user', 1);\n\n userRef.identifier(); // '1'\n ```\n\n @method identifier\n @public\n @return {String} The identifier of the record.\n */\n identifier(): StableRecordIdentifier {\n return this.___identifier;\n }\n\n /**\n How the reference will be looked up when it is loaded. Currently\n this always returns `identity` to signify that a record will be\n loaded by its `type` and `id`.\n\n Example\n\n ```javascript\n const userRef = store.getReference('user', 1);\n\n userRef.remoteType(); // 'identity'\n ```\n\n @method remoteType\n @public\n @return {String} 'identity'\n */\n remoteType(): 'identity' {\n return 'identity';\n }\n\n /**\n This API allows you to provide a reference with new data. The\n simplest usage of this API is similar to `store.push`: you provide a\n normalized hash of data and the object represented by the reference\n will update.\n\n If you pass a promise to `push`, Ember Data will not ask the adapter\n for the data if another attempt to fetch it is made in the\n interim. When the promise resolves, the underlying object is updated\n with the new data, and the promise returned by *this function* is resolved\n with that object.\n\n For example, `recordReference.push(promise)` will be resolved with a\n record.\n\n Example\n\n ```javascript\n let userRef = store.getReference('user', 1);\n\n // provide data for reference\n userRef.push({\n data: {\n id: \"1\",\n type: \"user\",\n attributes: {\n username: \"@user\"\n }\n }\n }).then(function(user) {\n userRef.value() === user;\n });\n ```\n\n @method push\n @public\n @param objectOrPromise a JSON:API ResourceDocument or a promise resolving to one\n @return a promise for the value (record or relationship)\n */\n push(objectOrPromise: SingleResourceDocument | Promise<SingleResourceDocument>): Promise<RecordInstance> {\n // TODO @deprecate pushing unresolved payloads\n return Promise.resolve(objectOrPromise).then((data) => {\n return this.store.push(data);\n });\n }\n\n /**\n If the entity referred to by the reference is already loaded, it is\n present as `reference.value`. Otherwise the value returned by this function\n is `null`.\n\n Example\n\n ```javascript\n let userRef = store.getReference('user', 1);\n\n userRef.value(); // user\n ```\n\n @method value\n @public\n @return {Model} the record for this RecordReference\n */\n value(): RecordInstance | null {\n return this.store.peekRecord(this.___identifier);\n }\n\n /**\n Triggers a fetch for the backing entity based on its `remoteType`\n (see `remoteType` definitions per reference type).\n\n Example\n\n ```javascript\n let userRef = store.getReference('user', 1);\n\n // load user (via store.find)\n userRef.load().then(...)\n ```\n\n @method load\n @public\n @return {Promise<record>} the record for this RecordReference\n */\n load() {\n const id = this.id();\n if (id !== null) {\n return this.store.findRecord(this.type, id);\n }\n assert(`Unable to fetch record of type ${this.type} without an id`);\n }\n\n /**\n Reloads the record if it is already loaded. If the record is not\n loaded it will load the record via `store.findRecord`\n\n Example\n\n ```javascript\n let userRef = store.getReference('user', 1);\n\n // or trigger a reload\n userRef.reload().then(...)\n ```\n\n @method reload\n @public\n @return {Promise<record>} the record for this RecordReference\n */\n reload() {\n const id = this.id();\n if (id !== null) {\n return this.store.findRecord(this.type, id, { reload: true });\n }\n assert(`Unable to fetch record of type ${this.type} without an id`);\n }\n}\n","import { assert } from '@ember/debug';\n\nimport { StableDocumentIdentifier } from '@ember-data/types/cache/identifier';\nimport type { CacheCapabilitiesManager as StoreWrapper } from '@ember-data/types/q/cache-store-wrapper';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\nimport { SchemaService } from '@ember-data/types/q/schema-service';\n\nimport { IdentifierCache, isDocumentIdentifier, isStableIdentifier } from '../caches/identifier-cache';\nimport type Store from '../store-service';\nimport { NotificationType } from './notification-manager';\n\n/**\n @module @ember-data/store\n*/\n\nexport class CacheCapabilitiesManager implements StoreWrapper {\n declare _willNotify: boolean;\n declare _pendingNotifies: Map<StableRecordIdentifier, Set<string>>;\n declare _store: Store;\n\n constructor(_store: Store) {\n this._store = _store;\n this._willNotify = false;\n this._pendingNotifies = new Map();\n }\n\n get identifierCache(): IdentifierCache {\n return this._store.identifierCache;\n }\n\n _scheduleNotification(identifier: StableRecordIdentifier, key: string) {\n let pending = this._pendingNotifies.get(identifier);\n\n if (!pending) {\n pending = new Set();\n this._pendingNotifies.set(identifier, pending);\n }\n pending.add(key);\n\n if (this._willNotify === true) {\n return;\n }\n\n this._willNotify = true;\n // it's possible a cache adhoc notifies us,\n // in which case we sync flush\n if (this._store._cbs) {\n this._store._schedule('notify', () => this._flushNotifications());\n } else {\n this._flushNotifications();\n }\n }\n\n _flushNotifications(): void {\n if (this._willNotify === false) {\n return;\n }\n\n let pending = this._pendingNotifies;\n this._pendingNotifies = new Map();\n this._willNotify = false;\n\n pending.forEach((set, identifier) => {\n set.forEach((key) => {\n this._store.notifications.notify(identifier, 'relationships', key);\n });\n });\n }\n\n notifyChange(identifier: StableRecordIdentifier, namespace: 'added' | 'removed'): void;\n notifyChange(identifier: StableDocumentIdentifier, namespace: 'added' | 'updated' | 'removed'): void;\n notifyChange(identifier: StableRecordIdentifier, namespace: NotificationType, key?: string): void;\n notifyChange(\n identifier: StableRecordIdentifier | StableDocumentIdentifier,\n namespace: NotificationType | 'added' | 'removed' | 'updated',\n key?: string\n ): void {\n assert(`Expected a stable identifier`, isStableIdentifier(identifier) || isDocumentIdentifier(identifier));\n\n // TODO do we still get value from this?\n if (namespace === 'relationships' && key) {\n this._scheduleNotification(identifier as StableRecordIdentifier, key);\n return;\n }\n\n // @ts-expect-error\n this._store.notifications.notify(identifier, namespace, key);\n }\n\n getSchemaDefinitionService(): SchemaService {\n return this._store.getSchemaDefinitionService();\n }\n\n setRecordId(identifier: StableRecordIdentifier, id: string) {\n assert(`Expected a stable identifier`, isStableIdentifier(identifier));\n this._store._instanceCache.setRecordId(identifier, id);\n }\n\n hasRecord(identifier: StableRecordIdentifier): boolean {\n return Boolean(this._store._instanceCache.peek(identifier));\n }\n\n disconnectRecord(identifier: StableRecordIdentifier): void {\n assert(`Expected a stable identifier`, isStableIdentifier(identifier));\n this._store._instanceCache.disconnect(identifier);\n this._pendingNotifies.delete(identifier);\n }\n}\n","import { assert } from '@ember/debug';\n\nimport type { Cache } from '@ember-data/types/q/cache';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\nimport type { RecordInstance } from '@ember-data/types/q/record-instance';\n\n/*\n * Returns the Cache instance associated with a given\n * Model or Identifier\n */\n\nexport const CacheForIdentifierCache = new Map<StableRecordIdentifier | RecordInstance, Cache>();\n\nexport function setCacheFor(identifier: StableRecordIdentifier | RecordInstance, cache: Cache): void {\n assert(\n `Illegal set of identifier`,\n !CacheForIdentifierCache.has(identifier) || CacheForIdentifierCache.get(identifier) === cache\n );\n CacheForIdentifierCache.set(identifier, cache);\n}\n\nexport function removeRecordDataFor(identifier: StableRecordIdentifier | RecordInstance): void {\n CacheForIdentifierCache.delete(identifier);\n}\n\nexport default function peekCache(instance: StableRecordIdentifier): Cache | null;\nexport default function peekCache(instance: RecordInstance): Cache;\nexport default function peekCache(instance: StableRecordIdentifier | RecordInstance): Cache | null {\n if (CacheForIdentifierCache.has(instance as StableRecordIdentifier)) {\n return CacheForIdentifierCache.get(instance as StableRecordIdentifier) as Cache;\n }\n\n return null;\n}\n","import { assert, warn } from '@ember/debug';\n\nimport { LOG_INSTANCE_CACHE } from '@ember-data/debugging';\nimport { DEBUG } from '@ember-data/env';\nimport type Model from '@ember-data/model';\nimport type { Cache } from '@ember-data/types/q/cache';\nimport type {\n ExistingResourceIdentifierObject,\n NewResourceIdentifierObject,\n} from '@ember-data/types/q/ember-data-json-api';\nimport type { RecordIdentifier, StableRecordIdentifier } from '@ember-data/types/q/identifier';\nimport type { JsonApiRelationship, JsonApiResource } from '@ember-data/types/q/record-data-json-api';\nimport type { RelationshipSchema } from '@ember-data/types/q/record-data-schemas';\nimport type { RecordInstance } from '@ember-data/types/q/record-instance';\n\nimport RecordReference from '../legacy-model-support/record-reference';\nimport { CacheCapabilitiesManager } from '../managers/cache-capabilities-manager';\nimport { CacheManager } from '../managers/cache-manager';\nimport type { CreateRecordProperties } from '../store-service';\nimport type Store from '../store-service';\nimport { ensureStringId } from '../utils/coerce-id';\nimport { CacheForIdentifierCache, removeRecordDataFor, setCacheFor } from './cache-utils';\n\n/**\n @module @ember-data/store\n*/\n\nconst RecordCache = new Map<RecordInstance, StableRecordIdentifier>();\n\nexport function peekRecordIdentifier(record: RecordInstance): StableRecordIdentifier | undefined {\n return RecordCache.get(record);\n}\n\n/**\n Retrieves the unique referentially-stable [RecordIdentifier](/ember-data/release/classes/StableRecordIdentifier)\n assigned to the given record instance.\n ```js\n import { recordIdentifierFor } from \"@ember-data/store\";\n // ... gain access to a record, for instance with peekRecord or findRecord\n const record = store.peekRecord(\"user\", \"1\");\n // get the identifier for the record (see docs for StableRecordIdentifier)\n const identifier = recordIdentifierFor(record);\n // access the identifier's properties.\n const { id, type, lid } = identifier;\n ```\n @method recordIdentifierFor\n @public\n @static\n @for @ember-data/store\n @param {Object} record a record instance previously obstained from the store.\n @returns {StableRecordIdentifier}\n */\nexport function recordIdentifierFor(record: RecordInstance): StableRecordIdentifier {\n assert(`${String(record)} is not a record instantiated by @ember-data/store`, RecordCache.has(record));\n return RecordCache.get(record)!;\n}\n\nexport function setRecordIdentifier(record: RecordInstance, identifier: StableRecordIdentifier): void {\n if (DEBUG) {\n if (RecordCache.has(record) && RecordCache.get(record) !== identifier) {\n throw new Error(`${String(record)} was already assigned an identifier`);\n }\n }\n\n /*\n It would be nice to do a reverse check here that an identifier has not\n previously been assigned a record; however, unload + rematerialization\n prevents us from having a great way of doing so when CustomRecordClasses\n don't necessarily give us access to a `isDestroyed` for dematerialized\n instance.\n */\n\n RecordCache.set(record, identifier);\n}\n\nexport const StoreMap = new Map<RecordInstance, Store>();\n\nexport function storeFor(record: RecordInstance): Store | undefined {\n const store = StoreMap.get(record);\n\n assert(\n `A record in a disconnected state cannot utilize the store. This typically means the record has been destroyed, most commonly by unloading it.`,\n store\n );\n return store;\n}\n\ntype Caches = {\n record: Map<StableRecordIdentifier, RecordInstance>;\n reference: WeakMap<StableRecordIdentifier, RecordReference>;\n};\n\nexport class InstanceCache {\n declare store: Store;\n declare cache: Cache;\n declare _storeWrapper: CacheCapabilitiesManager;\n declare __cacheFor: (resource: RecordIdentifier) => Cache;\n\n declare __cacheManager: CacheManager;\n __instances: Caches = {\n record: new Map<StableRecordIdentifier, RecordInstance>(),\n reference: new WeakMap<StableRecordIdentifier, RecordReference>(),\n };\n\n constructor(store: Store) {\n this.store = store;\n\n this._storeWrapper = new CacheCapabilitiesManager(this.store);\n\n store.identifierCache.__configureMerge(\n (identifier: StableRecordIdentifier, matchedIdentifier: StableRecordIdentifier, resourceData: unknown) => {\n let keptIdentifier = identifier;\n if (identifier.id !== matchedIdentifier.id) {\n // @ts-expect-error TODO this needs to be fixed\n keptIdentifier = 'id' in resourceData && identifier.id === resourceData.id ? identifier : matchedIdentifier;\n } else if (identifier.type !== matchedIdentifier.type) {\n keptIdentifier = // @ts-expect-error TODO this needs to be fixed\n 'type' in resourceData && identifier.type === resourceData.type ? identifier : matchedIdentifier;\n }\n let staleIdentifier = identifier === keptIdentifier ? matchedIdentifier : identifier;\n\n // check for duplicate entities\n let keptHasRecord = this.__instances.record.has(keptIdentifier);\n let staleHasRecord = this.__instances.record.has(staleIdentifier);\n\n // we cannot merge entities when both have records\n // (this may not be strictly true, we could probably swap the cache data the record points at)\n if (keptHasRecord && staleHasRecord) {\n // TODO we probably don't need to throw these errors anymore\n // we can probably just \"swap\" what data source the abandoned\n // record points at so long as\n // it itself is not retained by the store in any way.\n // @ts-expect-error TODO this needs to be fixed\n if ('id' in resourceData) {\n throw new Error(\n `Failed to update the 'id' for the RecordIdentifier '${identifier.type}:${String(identifier.id)} (${\n identifier.lid\n })' to '${String(resourceData.id)}', because that id is already in use by '${\n matchedIdentifier.type\n }:${String(matchedIdentifier.id)} (${matchedIdentifier.lid})'`\n );\n }\n\n assert(\n `Failed to update the RecordIdentifier '${identifier.type}:${String(identifier.id)} (${\n identifier.lid\n })' to merge with the detected duplicate identifier '${matchedIdentifier.type}:${String(\n matchedIdentifier.id\n )} (${String(matchedIdentifier.lid)})'`\n );\n }\n\n this.store.cache.patch({\n op: 'mergeIdentifiers',\n record: staleIdentifier,\n value: keptIdentifier,\n });\n\n /*\n TODO @runspired consider adding this to make polymorphism even nicer\n if (identifier.type !== matchedIdentifier.type) {\n this.store._graph?.registerPolymorphicType(identifier.type, matchedIdentifier.type);\n }\n */\n\n this.unloadRecord(staleIdentifier);\n return keptIdentifier;\n }\n );\n }\n peek(identifier: StableRecordIdentifier): Cache | RecordInstance | undefined {\n return this.__instances.record.get(identifier);\n }\n\n getRecord(identifier: StableRecordIdentifier, properties?: CreateRecordProperties): RecordInstance {\n let record = this.__instances.record.get(identifier);\n\n if (!record) {\n assert(\n `Cannot create a new record instance while the store is being destroyed`,\n !this.store.isDestroying && !this.store.isDestroyed\n );\n const cache = this.store.cache;\n setCacheFor(identifier, cache);\n\n record = this.store.instantiateRecord(identifier, properties || {});\n\n setRecordIdentifier(record, identifier);\n setCacheFor(record, cache);\n StoreMap.set(record, this.store);\n this.__instances.record.set(identifier, record);\n\n if (LOG_INSTANCE_CACHE) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: created Record for ${String(identifier)}`, properties);\n }\n }\n\n return record;\n }\n\n getReference(identifier: StableRecordIdentifier) {\n let cache = this.__instances.reference;\n let reference = cache.get(identifier);\n\n if (!reference) {\n reference = new RecordReference(this.store, identifier);\n cache.set(identifier, reference);\n }\n return reference;\n }\n\n recordIsLoaded(identifier: StableRecordIdentifier, filterDeleted: boolean = false) {\n const cache = this.cache;\n if (!cache) {\n return false;\n }\n const isNew = cache.isNew(identifier);\n const isEmpty = cache.isEmpty(identifier);\n\n // if we are new we must consider ourselves loaded\n if (isNew) {\n return !cache.isDeleted(identifier);\n }\n // even if we have a past request, if we are now empty we are not loaded\n // typically this is true after an unloadRecord call\n\n // if we are not empty, not new && we have a fulfilled request then we are loaded\n // we should consider allowing for something to be loaded that is simply \"not empty\".\n // which is how RecordState currently handles this case; however, RecordState is buggy\n // in that it does not account for unloading.\n return filterDeleted && cache.isDeletionCommitted(identifier) ? false : !isEmpty;\n }\n\n disconnect(identifier: StableRecordIdentifier) {\n const record = this.__instances.record.get(identifier);\n assert(\n 'Cannot destroy record while it is still materialized',\n !record || (record as Model).isDestroyed || (record as Model).isDestroying\n );\n\n this.store._graph?.remove(identifier);\n\n this.store.identifierCache.forgetRecordIdentifier(identifier);\n removeRecordDataFor(identifier);\n this.store._requestCache._clearEntries(identifier);\n if (LOG_INSTANCE_CACHE) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: disconnected ${String(identifier)}`);\n }\n }\n\n unloadRecord(identifier: StableRecordIdentifier) {\n if (DEBUG) {\n const requests = this.store.getRequestStateService().getPendingRequestsForRecord(identifier);\n if (\n requests.some((req) => {\n return req.type === 'mutation';\n })\n ) {\n assert(`You can only unload a record which is not inFlight. '${String(identifier)}'`);\n }\n }\n if (LOG_INSTANCE_CACHE) {\n // eslint-disable-next-line no-console\n console.groupCollapsed(`InstanceCache: unloading record for ${String(identifier)}`);\n }\n\n // TODO is this join still necessary?\n this.store._join(() => {\n const record = this.__instances.record.get(identifier);\n const cache = this.cache;\n\n if (record) {\n this.store.teardownRecord(record);\n this.__instances.record.delete(identifier);\n StoreMap.delete(record);\n RecordCache.delete(record);\n removeRecordDataFor(record);\n\n if (LOG_INSTANCE_CACHE) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: destroyed record for ${String(identifier)}`);\n }\n }\n\n if (cache) {\n cache.unloadRecord(identifier);\n removeRecordDataFor(identifier);\n if (LOG_INSTANCE_CACHE) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: destroyed cache for ${String(identifier)}`);\n }\n } else {\n this.disconnect(identifier);\n }\n\n this.store._requestCache._clearEntries(identifier);\n if (LOG_INSTANCE_CACHE) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: unloaded RecordData for ${String(identifier)}`);\n // eslint-disable-next-line no-console\n console.groupEnd();\n }\n });\n }\n\n clear(type?: string) {\n const cache = this.store.identifierCache._cache;\n if (type === undefined) {\n // it would be cool if we could just de-ref cache here\n // but probably would require WeakRef models to do so.\n cache.resources.forEach((identifier) => {\n this.unloadRecord(identifier);\n });\n } else {\n const typeCache = cache.resourcesByType;\n let identifiers = typeCache[type]?.lid;\n if (identifiers) {\n identifiers.forEach((identifier) => {\n // if (rds.has(identifier)) {\n this.unloadRecord(identifier);\n // }\n // TODO we don't remove the identifier, should we?\n });\n }\n }\n }\n\n // TODO this should move into something coordinating operations\n setRecordId(identifier: StableRecordIdentifier, id: string) {\n const { type, lid } = identifier;\n let oldId = identifier.id;\n\n // ID absolutely can't be missing if the oldID is empty (missing Id in response for a new record)\n assert(\n `'${type}' was saved to the server, but the response does not have an id and your record does not either.`,\n !(id === null && oldId === null)\n );\n\n // ID absolutely can't be different than oldID if oldID is not null\n // TODO this assertion and restriction may not strictly be needed in the identifiers world\n assert(\n `Cannot update the id for '${type}:${lid}' from '${String(oldId)}' to '${id}'.`,\n !(oldId !== null && id !== oldId)\n );\n\n // ID can be null if oldID is not null (altered ID in response for a record)\n // however, this is more than likely a developer error.\n if (oldId !== null && id === null) {\n warn(\n `Your ${type} record was saved to the server, but the response does not have an id.`,\n !(oldId !== null && id === null)\n );\n return;\n }\n\n if (LOG_INSTANCE_CACHE) {\n // eslint-disable-next-line no-console\n console.log(`InstanceCache: updating id to '${id}' for record ${String(identifier)}`);\n }\n\n let existingIdentifier = this.store.identifierCache.peekRecordIdentifier({ type, id });\n assert(\n `'${type}' was saved to the server, but the response returned the new id '${id}', which has already been used with another record.'`,\n !existingIdentifier || existingIdentifier === identifier\n );\n\n if (identifier.id === null) {\n // TODO potentially this needs to handle merged result\n this.store.identifierCache.updateRecordIdentifier(identifier, { type, id });\n }\n\n // TODO update resource cache if needed ?\n // TODO handle consequences of identifier merge for notifications\n this.store.notifications.notify(identifier, 'identity');\n }\n}\n\nfunction _resourceIsFullDeleted(identifier: StableRecordIdentifier, cache: Cache): boolean {\n return cache.isDeletionCommitted(identifier) || (cache.isNew(identifier) && cache.isDeleted(identifier));\n}\n\nexport function resourceIsFullyDeleted(instanceCache: InstanceCache, identifier: StableRecordIdentifier): boolean {\n const cache = instanceCache.cache;\n return !cache || _resourceIsFullDeleted(identifier, cache);\n}\n\n/*\n When a find request is triggered on the store, the user can optionally pass in\n attributes and relationships to be preloaded. These are meant to behave as if they\n came back from the server, except the user obtained them out of band and is informing\n the store of their existence. The most common use case is for supporting client side\n nested URLs, such as `/posts/1/comments/2` so the user can do\n `store.findRecord('comment', 2, { preload: { post: 1 } })` without having to fetch the post.\n\n Preloaded data can be attributes and relationships passed in either as IDs or as actual\n models.\n */\ntype PreloadRelationshipValue = RecordInstance | string;\nexport function preloadData(store: Store, identifier: StableRecordIdentifier, preload: Record<string, unknown>) {\n let jsonPayload: JsonApiResource = {};\n //TODO(Igor) consider the polymorphic case\n const schemas = store.getSchemaDefinitionService();\n const relationships = schemas.relationshipsDefinitionFor(identifier);\n Object.keys(preload).forEach((key) => {\n let preloadValue = preload[key];\n\n let relationshipMeta = relationships[key];\n if (relationshipMeta) {\n if (!jsonPayload.relationships) {\n jsonPayload.relationships = {};\n }\n jsonPayload.relationships[key] = preloadRelationship(relationshipMeta, preloadValue);\n } else {\n if (!jsonPayload.attributes) {\n jsonPayload.attributes = {};\n }\n jsonPayload.attributes[key] = preloadValue;\n }\n });\n const cache = store.cache;\n const hasRecord = Boolean(store._instanceCache.peek(identifier));\n cache.upsert(identifier, jsonPayload, hasRecord);\n}\n\nfunction preloadRelationship(\n schema: RelationshipSchema,\n preloadValue: PreloadRelationshipValue | null | Array<PreloadRelationshipValue>\n): JsonApiRelationship {\n const relatedType = schema.type;\n\n if (schema.kind === 'hasMany') {\n assert('You need to pass in an array to set a hasMany property on a record', Array.isArray(preloadValue));\n return { data: preloadValue.map((value) => _convertPreloadRelationshipToJSON(value, relatedType)) };\n }\n\n assert('You should not pass in an array to set a belongsTo property on a record', !Array.isArray(preloadValue));\n return { data: preloadValue ? _convertPreloadRelationshipToJSON(preloadValue, relatedType) : null };\n}\n\n/*\n findRecord('user', '1', { preload: { friends: ['1'] }});\n findRecord('user', '1', { preload: { friends: [record] }});\n*/\nfunction _convertPreloadRelationshipToJSON(\n value: RecordInstance | string,\n type: string\n): ExistingResourceIdentifierObject | NewResourceIdentifierObject {\n if (typeof value === 'string' || typeof value === 'number') {\n return { type, id: ensureStringId(value) };\n }\n // TODO if not a record instance assert it's an identifier\n // and allow identifiers to be used\n return recordIdentifierFor(value);\n}\n\nexport function _clearCaches() {\n RecordCache.clear();\n StoreMap.clear();\n CacheForIdentifierCache.clear();\n}\n","import type { ModelSchema } from '@ember-data/types/q/ds-model';\nimport type { AttributeSchema, RelationshipSchema } from '@ember-data/types/q/record-data-schemas';\n\nimport type Store from '../store-service';\n\n// if modelFor turns out to be a bottleneck we should replace with a Map\n// and clear it during store teardown.\nconst AvailableShims = new WeakMap<Store, Record<string, ShimModelClass>>();\n\nexport function getShimClass(store: Store, modelName: string): ShimModelClass {\n let shims = AvailableShims.get(store);\n\n if (!shims) {\n shims = Object.create(null) as Record<string, ShimModelClass>;\n AvailableShims.set(store, shims);\n }\n\n let shim = shims[modelName];\n if (shim === undefined) {\n shim = shims[modelName] = new ShimModelClass(store, modelName);\n }\n\n return shim;\n}\n\nfunction mapFromHash<T>(hash: Record<string, T>): Map<string, T> {\n const map: Map<string, T> = new Map();\n for (let i in hash) {\n if (Object.prototype.hasOwnProperty.call(hash, i)) {\n map.set(i, hash[i]);\n }\n }\n return map;\n}\n\n// Mimics the static apis of @ember-data/model\nexport default class ShimModelClass implements ModelSchema {\n declare __store: Store;\n declare modelName: string;\n constructor(store: Store, modelName: string) {\n this.__store = store;\n this.modelName = modelName;\n }\n\n get fields(): Map<string, 'attribute' | 'belongsTo' | 'hasMany'> {\n let attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName });\n let relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName });\n let fields = new Map<string, 'attribute' | 'belongsTo' | 'hasMany'>();\n Object.keys(attrs).forEach((key) => fields.set(key, 'attribute'));\n Object.keys(relationships).forEach((key) => fields.set(key, relationships[key]!.kind));\n return fields;\n }\n\n get attributes(): Map<string, AttributeSchema> {\n let attrs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName });\n return mapFromHash(attrs);\n }\n\n get relationshipsByName(): Map<string, RelationshipSchema> {\n let relationships = this.__store.getSchemaDefinitionService().relationshipsDefinitionFor({ type: this.modelName });\n return mapFromHash(relationships);\n }\n\n eachAttribute<T>(callback: (this: T | undefined, key: string, attribute: AttributeSchema) => void, binding?: T) {\n let attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName });\n Object.keys(attrDefs).forEach((key) => {\n callback.call(binding, key, attrDefs[key]);\n });\n }\n\n eachRelationship<T>(\n callback: (this: T | undefined, key: string, relationship: RelationshipSchema) => void,\n binding?: T\n ) {\n let relationshipDefs = this.__store\n .getSchemaDefinitionService()\n .relationshipsDefinitionFor({ type: this.modelName });\n Object.keys(relationshipDefs).forEach((key) => {\n callback.call(binding, key, relationshipDefs[key]);\n });\n }\n\n eachTransformedAttribute<T>(callback: (this: T | undefined, key: string, type?: string) => void, binding?: T) {\n const attrDefs = this.__store.getSchemaDefinitionService().attributesDefinitionFor({ type: this.modelName });\n Object.keys(attrDefs).forEach((key) => {\n if (attrDefs[key]!.type) {\n callback.call(binding, key, attrDefs[key]!.type);\n }\n });\n }\n}\n","import type { LocalRelationshipOperation } from '@ember-data/graph/-private/-operations';\nimport type { StructuredDataDocument, StructuredDocument } from '@ember-data/request';\nimport type { RelationshipDiff } from '@ember-data/types/cache/cache';\nimport type { Change } from '@ember-data/types/cache/change';\nimport type { ResourceDocument, SingleResourceDataDocument } from '@ember-data/types/cache/document';\nimport type { StableDocumentIdentifier } from '@ember-data/types/cache/identifier';\nimport type { Cache, ChangedAttributesHash, MergeOperation } from '@ember-data/types/q/cache';\nimport type {\n CollectionResourceRelationship,\n SingleResourceRelationship,\n} from '@ember-data/types/q/ember-data-json-api';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\nimport type { JsonApiError, JsonApiResource } from '@ember-data/types/q/record-data-json-api';\n\nimport type { StoreRequestContext } from '../cache-handler';\n\n/**\n * The CacheManager wraps a Cache enforcing that only\n * the public API surface area is exposed.\n *\n * Hence, it is the value of `Store.cache`, wrapping\n * the cache instance returned by `Store.createCache`.\n *\n * It handles translating between cache versions when\n * necessary, for instance when a Store is configured\n * to use both a v1 and a v2 cache depending on some\n * heuristic.\n *\n * Starting with the v2 spec, the cache is designed such\n * that it must be implemented as a singleton.\n *\n * @class CacheManager\n * @public\n */\nexport class CacheManager implements Cache {\n version = '2' as const;\n\n #cache: Cache;\n\n constructor(cache: Cache) {\n this.#cache = cache;\n }\n\n // Cache Management\n // ================\n\n /**\n * Cache the response to a request\n *\n * Unlike `store.push` which has UPSERT\n * semantics, `put` has `replace` semantics similar to\n * the `http` method `PUT`\n *\n * the individually cacheabl\n * e resource data it may contain\n * should upsert, but the document data surrounding it should\n * fully replace any existing information\n *\n * Note that in order to support inserting arbitrary data\n * to the cache that did not originate from a request `put`\n * should expect to sometimes encounter a document with only\n * a `content` member and therefor must not assume the existence\n * of `request` and `response` on the document.\n *\n * @method put\n * @param {StructuredDocument} doc\n * @returns {ResourceDocument}\n * @public\n */\n put<T>(doc: StructuredDocument<T> | { content: T }): ResourceDocument {\n return this.#cache.put(doc);\n }\n\n /**\n * Perform an operation on the cache to update the remote state.\n *\n * Note: currently the only valid operation is a MergeOperation\n * which occurs when a collision of identifiers is detected.\n *\n * @method patch\n * @public\n * @param op the operation to perform\n * @returns {void}\n */\n patch(op: MergeOperation): void {\n this.#cache.patch(op);\n }\n\n /**\n * Update resource data with a local mutation. Currently supports operations\n * on relationships only.\n *\n * @method mutate\n * @public\n * @param mutation\n */\n mutate(mutation: LocalRelationshipOperation): void {\n this.#cache.mutate(mutation);\n }\n\n /**\n * Peek resource data from the Cache.\n *\n * In development, if the return value\n * is JSON the return value\n * will be deep-cloned and deep-frozen\n * to prevent mutation thereby enforcing cache\n * Immutability.\n *\n * This form of peek is useful for implementations\n * that want to feed raw-data from cache to the UI\n * or which want to interact with a blob of data\n * directly from the presentation cache.\n *\n * An implementation might want to do this because\n * de-referencing records which read from their own\n * blob is generally safer because the record does\n * not require retainining connections to the Store\n * and Cache to present data on a per-field basis.\n *\n * This generally takes the place of `getAttr` as\n * an API and may even take the place of `getRelationship`\n * depending on implementation specifics, though this\n * latter usage is less recommended due to the advantages\n * of the Graph handling necessary entanglements and\n * notifications for relational data.\n *\n * @method peek\n * @public\n * @param {StableRecordIdentifier | StableDocumentIdentifier} identifier\n * @returns {ResourceDocument | ResourceBlob | null} the known resource data\n */\n peek(identifier: StableRecordIdentifier): unknown;\n peek(identifier: StableDocumentIdentifier): ResourceDocument | null;\n peek(identifier: StableRecordIdentifier | StableDocumentIdentifier): unknown {\n return this.#cache.peek(identifier);\n }\n\n /**\n * Peek the Cache for the existing request data associated with\n * a cacheable request\n *\n * @method peekRequest\n * @param {StableDocumentIdentifier}\n * @returns {StableDocumentIdentifier | null}\n * @public\n */\n peekRequest(identifier: StableDocumentIdentifier): StructuredDocument<ResourceDocument> | null {\n return this.#cache.peekRequest(identifier);\n }\n\n /**\n * Push resource data from a remote source into the cache for this identifier\n *\n * @method upsert\n * @public\n * @param identifier\n * @param data\n * @param hasRecord\n * @returns {void | string[]} if `hasRecord` is true then calculated key changes should be returned\n */\n upsert(identifier: StableRecordIdentifier, data: JsonApiResource, hasRecord: boolean): void | string[] {\n return this.#cache.upsert(identifier, data, hasRecord);\n }\n\n // Cache Forking Support\n // =====================\n\n /**\n * Create a fork of the cache from the current state.\n *\n * Applications should typically not call this method themselves,\n * preferring instead to fork at the Store level, which will\n * utilize this method to fork the cache.\n *\n * @method fork\n * @public\n * @returns Promise<Cache>\n */\n fork(): Promise<Cache> {\n return this.#cache.fork();\n }\n\n /**\n * Merge a fork back into a parent Cache.\n *\n * Applications should typically not call this method themselves,\n * preferring instead to merge at the Store level, which will\n * utilize this method to merge the caches.\n *\n * @method merge\n * @param {Cache} cache\n * @public\n * @returns Promise<void>\n */\n merge(cache: Cache): Promise<void> {\n return this.#cache.merge(cache);\n }\n\n /**\n * Generate the list of changes applied to all\n * record in the store.\n *\n * Each individual resource or document that has\n * been mutated should be described as an individual\n * `Change` entry in the returned array.\n *\n * A `Change` is described by an object containing up to\n * three properties: (1) the `identifier` of the entity that\n * changed; (2) the `op` code of that change being one of\n * `upsert` or `remove`, and if the op is `upsert` a `patch`\n * containing the data to merge into the cache for the given\n * entity.\n *\n * This `patch` is opaque to the Store but should be understood\n * by the Cache and may expect to be utilized by an Adapter\n * when generating data during a `save` operation.\n *\n * It is generally recommended that the `patch` contain only\n * the updated state, ignoring fields that are unchanged\n *\n * ```ts\n * interface Change {\n * identifier: StableRecordIdentifier | StableDocumentIdentifier;\n * op: 'upsert' | 'remove';\n * patch?: unknown;\n * }\n * ```\n *\n * @method diff\n * @public\n */\n diff(): Promise<Change[]> {\n return this.#cache.diff();\n }\n\n // SSR Support\n // ===========\n\n /**\n * Serialize the entire contents of the Cache into a Stream\n * which may be fed back into a new instance of the same Cache\n * via `cache.hydrate`.\n *\n * @method dump\n * @returns {Promise<ReadableStream>}\n * @public\n */\n dump(): Promise<ReadableStream<unknown>> {\n return this.#cache.dump();\n }\n\n /**\n * hydrate a Cache from a Stream with content previously serialized\n * from another instance of the same Cache, resolving when hydration\n * is complete.\n *\n * This method should expect to be called both in the context of restoring\n * the Cache during application rehydration after SSR **AND** at unknown\n * times during the lifetime of an already booted application when it is\n * desired to bulk-load additional information into the cache. This latter\n * behavior supports optimizing pre/fetching of data for route transitions\n * via data-only SSR modes.\n *\n * @method hydrate\n * @param {ReadableStream} stream\n * @returns {Promise<void>}\n * @public\n */\n hydrate(stream: ReadableStream<unknown>): Promise<void> {\n return this.#cache.hydrate(stream);\n }\n\n // Cache\n // =====\n\n // Resource Support\n // ================\n\n /**\n * [LIFECYLCE] Signal to the cache that a new record has been instantiated on the client\n *\n * It returns properties from options that should be set on the record during the create\n * process. This return value behavior is deprecated.\n *\n * @method clientDidCreate\n * @public\n * @param identifier\n * @param options\n */\n clientDidCreate(identifier: StableRecordIdentifier, options?: Record<string, unknown>): Record<string, unknown> {\n return this.#cache.clientDidCreate(identifier, options);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * will be part of a save transaction.\n *\n * @method willCommit\n * @public\n * @param identifier\n */\n willCommit(identifier: StableRecordIdentifier, context: StoreRequestContext): void {\n this.#cache.willCommit(identifier, context);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * was successfully updated as part of a save transaction.\n *\n * @method didCommit\n * @public\n * @param identifier\n * @param data\n */\n didCommit(identifier: StableRecordIdentifier, result: StructuredDataDocument<unknown>): SingleResourceDataDocument {\n return this.#cache.didCommit(identifier, result);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that a resource\n * was update via a save transaction failed.\n *\n * @method commitWasRejected\n * @public\n * @param identifier\n * @param errors\n */\n commitWasRejected(identifier: StableRecordIdentifier, errors?: JsonApiError[]): void {\n this.#cache.commitWasRejected(identifier, errors);\n }\n\n /**\n * [LIFECYCLE] Signals to the cache that all data for a resource\n * should be cleared.\n *\n * @method unloadRecord\n * @public\n * @param identifier\n */\n unloadRecord(identifier: StableRecordIdentifier): void {\n this.#cache.unloadRecord(identifier);\n }\n\n // Granular Resource Data APIs\n // ===========================\n\n /**\n * Retrieve the data for an attribute from the cache\n *\n * @method getAttr\n * @public\n * @param identifier\n * @param propertyName\n * @returns {unknown}\n */\n getAttr(identifier: StableRecordIdentifier, propertyName: string): unknown {\n return this.#cache.getAttr(identifier, propertyName);\n }\n\n /**\n * Mutate the data for an attribute in the cache\n *\n * @method setAttr\n * @public\n * @param identifier\n * @param propertyName\n * @param value\n */\n setAttr(identifier: StableRecordIdentifier, propertyName: string, value: unknown): void {\n this.#cache.setAttr(identifier, propertyName, value);\n }\n\n /**\n * Query the cache for the changed attributes of a resource.\n *\n * @method changedAttrs\n * @public\n * @param identifier\n * @returns\n */\n changedAttrs(identifier: StableRecordIdentifier): ChangedAttributesHash {\n return this.#cache.changedAttrs(identifier);\n }\n\n /**\n * Query the cache for whether any mutated attributes exist\n *\n * @method hasChangedAttrs\n * @public\n * @param identifier\n * @returns {boolean}\n */\n hasChangedAttrs(identifier: StableRecordIdentifier): boolean {\n return this.#cache.hasChangedAttrs(identifier);\n }\n\n /**\n * Tell the cache to discard any uncommitted mutations to attributes\n *\n * @method rollbackAttrs\n * @public\n * @param identifier\n * @returns the names of attributes that were restored\n */\n rollbackAttrs(identifier: StableRecordIdentifier): string[] {\n return this.#cache.rollbackAttrs(identifier);\n }\n\n // Relationships\n // =============\n\n /**\n * Query the cache for the changes to relationships of a resource.\n *\n * Returns a map of relationship names to RelationshipDiff objects.\n *\n * ```ts\n * type RelationshipDiff =\n | {\n kind: 'collection';\n remoteState: StableRecordIdentifier[];\n additions: Set<StableRecordIdentifier>;\n removals: Set<StableRecordIdentifier>;\n localState: StableRecordIdentifier[];\n reordered: boolean;\n }\n | {\n kind: 'resource';\n remoteState: StableRecordIdentifier | null;\n localState: StableRecordIdentifier | null;\n };\n ```\n *\n * @method changedRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @returns {Map<string, RelationshipDiff>}\n */\n changedRelationships(identifier: StableRecordIdentifier): Map<string, RelationshipDiff> {\n return this.#cache.changedRelationships(identifier);\n }\n\n /**\n * Query the cache for whether any mutated attributes exist\n *\n * @method hasChangedRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @returns {boolean}\n */\n hasChangedRelationships(identifier: StableRecordIdentifier): boolean {\n return this.#cache.hasChangedRelationships(identifier);\n }\n\n /**\n * Tell the cache to discard any uncommitted mutations to relationships.\n *\n * This will also discard the change on any appropriate inverses.\n *\n * This method is a candidate to become a mutation\n *\n * @method rollbackRelationships\n * @public\n * @param {StableRecordIdentifier} identifier\n * @returns {string[]} the names of relationships that were restored\n */\n rollbackRelationships(identifier: StableRecordIdentifier): string[] {\n return this.#cache.rollbackRelationships(identifier);\n }\n\n /**\n * Query the cache for the current state of a relationship property\n *\n * @method getRelationship\n * @public\n * @param identifier\n * @param propertyName\n * @returns resource relationship object\n */\n getRelationship(\n identifier: StableRecordIdentifier,\n propertyName: string\n ): SingleResourceRelationship | CollectionResourceRelationship {\n return this.#cache.getRelationship(identifier, propertyName);\n }\n\n // Resource State\n // ===============\n\n /**\n * Update the cache state for the given resource to be marked as locally deleted,\n * or remove such a mark.\n *\n * @method setIsDeleted\n * @public\n * @param identifier\n * @param isDeleted\n */\n setIsDeleted(identifier: StableRecordIdentifier, isDeleted: boolean): void {\n this.#cache.setIsDeleted(identifier, isDeleted);\n }\n\n /**\n * Query the cache for any validation errors applicable to the given resource.\n *\n * @method getErrors\n * @public\n * @param identifier\n * @returns\n */\n getErrors(identifier: StableRecordIdentifier): JsonApiError[] {\n return this.#cache.getErrors(identifier);\n }\n\n /**\n * Query the cache for whether a given resource has any available data\n *\n * @method isEmpty\n * @public\n * @param identifier\n * @returns {boolean}\n */\n isEmpty(identifier: StableRecordIdentifier): boolean {\n return this.#cache.isEmpty(identifier);\n }\n\n /**\n * Query the cache for whether a given resource was created locally and not\n * yet persisted.\n *\n * @method isNew\n * @public\n * @param identifier\n * @returns {boolean}\n */\n isNew(identifier: StableRecordIdentifier): boolean {\n return this.#cache.isNew(identifier);\n }\n\n /**\n * Query the cache for whether a given resource is marked as deleted (but not\n * necessarily persisted yet).\n *\n * @method isDeleted\n * @public\n * @param identifier\n * @returns {boolean}\n */\n isDeleted(identifier: StableRecordIdentifier): boolean {\n return this.#cache.isDeleted(identifier);\n }\n\n /**\n * Query the cache for whether a given resource has been deleted and that deletion\n * has also been persisted.\n *\n * @method isDeletionCommitted\n * @public\n * @param identifier\n * @returns {boolean}\n */\n isDel;\n isDeletionCommitted(identifier: StableRecordIdentifier): boolean {\n return this.#cache.isDeletionCommitted(identifier);\n }\n}\n","/**\n * @module @ember-data/store\n */\nimport { assert } from '@ember/debug';\n// eslint-disable-next-line no-restricted-imports\nimport { _backburner } from '@ember/runloop';\n\nimport { LOG_NOTIFICATIONS } from '@ember-data/debugging';\nimport { DEBUG } from '@ember-data/env';\nimport { StableDocumentIdentifier } from '@ember-data/types/cache/identifier';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\n\nimport { isDocumentIdentifier, isStableIdentifier } from '../caches/identifier-cache';\nimport type Store from '../store-service';\n\nexport type UnsubscribeToken = object;\nlet tokenId = 0;\n\nconst CacheOperations = new Set(['added', 'removed', 'state', 'updated']);\nexport type CacheOperation = 'added' | 'removed' | 'updated' | 'state';\n\nfunction isCacheOperationValue(value: NotificationType | CacheOperation): value is CacheOperation {\n return CacheOperations.has(value);\n}\n\nfunction runLoopIsFlushing(): boolean {\n //@ts-expect-error\n return !!_backburner.currentInstance && _backburner._autorun !== true;\n}\n\nexport type NotificationType = 'attributes' | 'relationships' | 'identity' | 'errors' | 'meta' | 'state';\n\nexport interface NotificationCallback {\n (identifier: StableRecordIdentifier, notificationType: 'attributes' | 'relationships', key?: string): void;\n (identifier: StableRecordIdentifier, notificationType: 'errors' | 'meta' | 'identity' | 'state'): void;\n (identifier: StableRecordIdentifier, notificationType: NotificationType, key?: string): void;\n}\n\nexport interface ResourceOperationCallback {\n // resource updates\n (identifier: StableRecordIdentifier, notificationType: CacheOperation): void;\n}\n\nexport interface DocumentOperationCallback {\n // document updates\n (identifier: StableDocumentIdentifier, notificationType: CacheOperation): void;\n}\n\nfunction _unsubscribe(\n tokens: Map<UnsubscribeToken, StableDocumentIdentifier | StableRecordIdentifier | 'resource' | 'document'>,\n token: UnsubscribeToken,\n cache: Map<\n 'resource' | 'document' | StableDocumentIdentifier | StableRecordIdentifier,\n Map<UnsubscribeToken, NotificationCallback | ResourceOperationCallback | DocumentOperationCallback>\n >\n) {\n let identifier = tokens.get(token);\n if (LOG_NOTIFICATIONS) {\n if (!identifier) {\n // eslint-disable-next-line no-console\n console.log('Passed unknown unsubscribe token to unsubscribe', identifier);\n }\n }\n if (identifier) {\n tokens.delete(token);\n const map = cache.get(identifier);\n map?.delete(token);\n }\n}\n\n/**\n * The NotificationManager provides the ability to subscribe to\n * changes to Cache state.\n *\n * This Feature is what allows EmberData to create subscriptions that\n * work with any framework or change-notification system.\n *\n * @class NotificationManager\n * @public\n */\nexport default class NotificationManager {\n declare store: Store;\n declare isDestroyed: boolean;\n declare _buffered: Map<StableDocumentIdentifier | StableRecordIdentifier, [string, string | undefined][]>;\n declare _cache: Map<\n StableDocumentIdentifier | StableRecordIdentifier | 'resource' | 'document',\n Map<UnsubscribeToken, NotificationCallback | ResourceOperationCallback | DocumentOperationCallback>\n >;\n declare _tokens: Map<UnsubscribeToken, StableDocumentIdentifier | StableRecordIdentifier | 'resource' | 'document'>;\n declare _hasFlush: boolean;\n declare _onFlushCB?: () => void;\n\n constructor(store: Store) {\n this.store = store;\n this.isDestroyed = false;\n this._buffered = new Map();\n this._hasFlush = false;\n this._cache = new Map();\n this._tokens = new Map();\n }\n\n /**\n * Subscribe to changes for a given resource identifier, resource addition/removal, or document addition/removal.\n *\n * ```ts\n * export type CacheOperation = 'added' | 'removed' | 'updated' | 'state';\n *\n * export interface NotificationCallback {\n * (identifier: StableRecordIdentifier, notificationType: 'attributes' | 'relationships', key?: string): void;\n * (identifier: StableRecordIdentifier, notificationType: 'errors' | 'meta' | 'identity' | 'state'): void;\n * (identifier: StableRecordIdentifier, notificationType: NotificationType, key?: string): void;\n * }\n * export interface ResourceOperationCallback {\n * // resource updates\n * (identifier: StableRecordIdentifier, notificationType: CacheOperation): void;\n * }\n * export interface DocumentOperationCallback {\n * // document updates\n * (identifier: StableDocumentIdentifier, notificationType: CacheOperation): void;\n * }\n * ```\n *\n * @method subscribe\n * @public\n * @param {StableDocumentIdentifier | StableRecordIdentifier | 'resource' | 'document'} identifier\n * @param {NotificationCallback | ResourceOperationCallback | DocumentOperationCallback} callback\n * @returns {UnsubscribeToken} an opaque token to be used with unsubscribe\n */\n subscribe(identifier: StableRecordIdentifier, callback: NotificationCallback): UnsubscribeToken;\n subscribe(identifier: 'resource', callback: ResourceOperationCallback): UnsubscribeToken;\n subscribe(identifier: StableDocumentIdentifier, callback: DocumentOperationCallback): UnsubscribeToken;\n subscribe(identifier: 'document', callback: DocumentOperationCallback): UnsubscribeToken;\n subscribe(\n identifier: StableDocumentIdentifier | StableRecordIdentifier | 'resource' | 'document',\n callback: NotificationCallback | ResourceOperationCallback | DocumentOperationCallback\n ): UnsubscribeToken {\n assert(\n `Expected to receive a stable Identifier to subscribe to`,\n identifier === 'resource' ||\n identifier === 'document' ||\n isStableIdentifier(identifier) ||\n isDocumentIdentifier(identifier)\n );\n let map = this._cache.get(identifier);\n\n if (!map) {\n map = new Map();\n this._cache.set(identifier, map);\n }\n\n let unsubToken = DEBUG ? { _tokenRef: tokenId++ } : {};\n map.set(unsubToken, callback);\n this._tokens.set(unsubToken, identifier);\n return unsubToken;\n }\n\n /**\n * remove a previous subscription\n *\n * @method unsubscribe\n * @public\n * @param {UnsubscribeToken} token\n */\n unsubscribe(token: UnsubscribeToken) {\n if (!this.isDestroyed) {\n _unsubscribe(this._tokens, token, this._cache);\n }\n }\n\n /**\n * Custom Caches and Application Code should not call this method directly.\n *\n * @method notify\n * @param identifier\n * @param value\n * @param key\n * @return {Boolean} whether a notification was delivered to any subscribers\n * @private\n */\n notify(identifier: StableRecordIdentifier, value: 'attributes' | 'relationships', key?: string): boolean;\n notify(identifier: StableRecordIdentifier, value: 'errors' | 'meta' | 'identity' | 'state'): boolean;\n notify(identifier: StableRecordIdentifier | StableDocumentIdentifier, value: CacheOperation): boolean;\n notify(\n identifier: StableRecordIdentifier | StableDocumentIdentifier,\n value: NotificationType | CacheOperation,\n key?: string\n ): boolean {\n assert(\n `Notify does not accept a key argument for the namespace '${value}'. Received key '${key || ''}'.`,\n !key || value === 'attributes' || value === 'relationships'\n );\n if (!isStableIdentifier(identifier) && !isDocumentIdentifier(identifier)) {\n if (LOG_NOTIFICATIONS) {\n // eslint-disable-next-line no-console\n console.log(\n `Notifying: Expected to receive a stable Identifier to notify '${value}' '${key || ''}' with, but ${String(\n identifier\n )} is not in the cache`,\n identifier\n );\n }\n return false;\n }\n\n if (LOG_NOTIFICATIONS) {\n // eslint-disable-next-line no-console\n console.log(`Buffering Notify: ${String(identifier.lid)}\\t${value}\\t${key || ''}`);\n }\n\n const hasSubscribers = Boolean(this._cache.get(identifier)?.size);\n\n if (isCacheOperationValue(value) || hasSubscribers) {\n let buffer = this._buffered.get(identifier);\n if (!buffer) {\n buffer = [];\n this._buffered.set(identifier, buffer);\n }\n buffer.push([value, key]);\n\n void this._scheduleNotify();\n }\n\n return hasSubscribers;\n }\n\n _onNextFlush(cb: () => void) {\n this._onFlushCB = cb;\n }\n\n _scheduleNotify() {\n const asyncFlush = this.store._enableAsyncFlush;\n\n if (this._hasFlush) {\n if (asyncFlush !== false && !runLoopIsFlushing()) {\n return;\n }\n }\n\n if (asyncFlush && !runLoopIsFlushing()) {\n this._hasFlush = true;\n return;\n }\n\n this._flush();\n }\n\n _flush() {\n if (this._buffered.size) {\n this._buffered.forEach((states, identifier) => {\n states.forEach((args) => {\n // @ts-expect-error\n this._flushNotification(identifier, args[0], args[1]);\n });\n });\n this._buffered = new Map();\n }\n\n this._hasFlush = false;\n this._onFlushCB?.();\n this._onFlushCB = undefined;\n }\n\n _flushNotification(identifier: StableRecordIdentifier, value: 'attributes' | 'relationships', key?: string): boolean;\n _flushNotification(identifier: StableRecordIdentifier, value: 'errors' | 'meta' | 'identity' | 'state'): boolean;\n _flushNotification(identifier: StableRecordIdentifier | StableDocumentIdentifier, value: CacheOperation): boolean;\n _flushNotification(\n identifier: StableRecordIdentifier | StableDocumentIdentifier,\n value: NotificationType | CacheOperation,\n key?: string\n ): boolean {\n if (LOG_NOTIFICATIONS) {\n // eslint-disable-next-line no-console\n console.log(`Notifying: ${String(identifier)}\\t${value}\\t${key || ''}`);\n }\n\n // TODO for documents this will need to switch based on Identifier kind\n if (isCacheOperationValue(value)) {\n let callbackMap = this._cache.get(isDocumentIdentifier(identifier) ? 'document' : 'resource') as Map<\n UnsubscribeToken,\n ResourceOperationCallback | DocumentOperationCallback\n >;\n\n if (callbackMap) {\n callbackMap.forEach((cb: ResourceOperationCallback | DocumentOperationCallback) => {\n cb(identifier as StableRecordIdentifier, value);\n });\n }\n }\n\n let callbackMap = this._cache.get(identifier);\n if (!callbackMap || !callbackMap.size) {\n return false;\n }\n callbackMap.forEach((cb) => {\n // @ts-expect-error overload doesn't narrow within body\n cb(identifier, value, key);\n });\n return true;\n }\n\n destroy() {\n this.isDestroyed = true;\n this._tokens.clear();\n this._cache.clear();\n }\n}\n","/**\n @module @ember-data/store\n*/\nimport { tagForProperty } from '@ember/-internals/metal';\nimport { assert } from '@ember/debug';\nimport { dependentKeyCompat } from '@ember/object/compat';\nimport { tracked } from '@glimmer/tracking';\nimport { dirtyTag } from '@glimmer/validator';\nimport Ember from 'ember';\n\nimport { DEPRECATE_COMPUTED_CHAINS } from '@ember-data/deprecations';\nimport { DEBUG } from '@ember-data/env';\nimport { ImmutableRequestInfo } from '@ember-data/request/-private/types';\nimport { addToTransaction, subscribe } from '@ember-data/tracking/-private';\nimport { Links, PaginationLinks } from '@ember-data/types/q/ember-data-json-api';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\nimport type { RecordInstance } from '@ember-data/types/q/record-instance';\n\nimport { recordIdentifierFor } from '../caches/instance-cache';\nimport type RecordArrayManager from '../managers/record-array-manager';\nimport type Store from '../store-service';\n\ntype KeyType = string | symbol | number;\nconst ARRAY_GETTER_METHODS = new Set<KeyType>([\n Symbol.iterator,\n 'concat',\n 'entries',\n 'every',\n 'fill',\n 'filter',\n 'find',\n 'findIndex',\n 'flat',\n 'flatMap',\n 'forEach',\n 'includes',\n 'indexOf',\n 'join',\n 'keys',\n 'lastIndexOf',\n 'map',\n 'reduce',\n 'reduceRight',\n 'slice',\n 'some',\n 'values',\n]);\nconst ARRAY_SETTER_METHODS = new Set<KeyType>(['push', 'pop', 'unshift', 'shift', 'splice', 'sort']);\nconst SYNC_PROPS = new Set<KeyType>(['[]', 'length', 'links', 'meta']);\nfunction isArrayGetter(prop: KeyType): boolean {\n return ARRAY_GETTER_METHODS.has(prop);\n}\nfunction isArraySetter(prop: KeyType): boolean {\n return ARRAY_SETTER_METHODS.has(prop);\n}\n\nexport const IDENTIFIER_ARRAY_TAG = Symbol('#tag');\nexport const SOURCE = Symbol('#source');\nexport const MUTATE = Symbol('#update');\nexport const NOTIFY = Symbol('#notify');\nconst IS_COLLECTION = Symbol.for('Collection');\n\nexport function notifyArray(arr: IdentifierArray) {\n addToTransaction(arr[IDENTIFIER_ARRAY_TAG]);\n\n if (DEPRECATE_COMPUTED_CHAINS) {\n // @ts-expect-error tagForProperty is mistyped to Tag instead of DirtyableTag\n // eslint-disable-next-line\n dirtyTag(tagForProperty(arr, 'length'));\n // @ts-expect-error tagForProperty is mistyped to Tag instead of DirtyableTag\n // eslint-disable-next-line\n dirtyTag(tagForProperty(arr, '[]'));\n }\n}\n\nfunction convertToInt(prop: KeyType): number | null {\n if (typeof prop === 'symbol') return null;\n\n const num = Number(prop);\n\n if (isNaN(num)) return null;\n\n return num % 1 === 0 ? num : null;\n}\n\nclass Tag {\n @tracked ref = null;\n declare shouldReset: boolean;\n /*\n * whether this was part of a transaction when last mutated\n */\n declare t: boolean;\n declare _debug_base: string;\n declare _debug_prop: string;\n\n constructor() {\n if (DEBUG) {\n const [arr, prop] = arguments as unknown as [IdentifierArray, string];\n\n this._debug_base = arr.constructor.name + ':' + String(arr.modelName);\n this._debug_prop = prop;\n }\n this.shouldReset = false;\n this.t = false;\n }\n}\n\ntype ProxiedMethod = (...args: unknown[]) => unknown;\ndeclare global {\n interface ProxyConstructor {\n new <TSource extends object, TTarget extends object>(target: TSource, handler: ProxyHandler<TSource>): TTarget;\n }\n}\n\nexport type IdentifierArrayCreateOptions = {\n identifiers: StableRecordIdentifier[];\n type?: string;\n store: Store;\n allowMutation: boolean;\n manager: RecordArrayManager;\n links?: Links | PaginationLinks | null;\n meta?: Record<string, unknown> | null;\n};\n\ninterface PrivateState {\n links: Links | PaginationLinks | null;\n meta: Record<string, unknown> | null;\n}\ntype ForEachCB = (record: RecordInstance, index: number, context: IdentifierArray) => void;\nfunction safeForEach(\n instance: IdentifierArray,\n arr: StableRecordIdentifier[],\n store: Store,\n callback: ForEachCB,\n target: unknown\n) {\n if (target === undefined) {\n target = null;\n }\n // clone to prevent mutation\n arr = arr.slice();\n assert('`forEach` expects a function as first argument.', typeof callback === 'function');\n\n // because we retrieveLatest above we need not worry if array is mutated during iteration\n // by unloadRecord/rollbackAttributes\n // push/add/removeObject may still be problematic\n // but this is a more traditionally expected forEach bug.\n const length = arr.length; // we need to access length to ensure we are consumed\n\n for (let index = 0; index < length; index++) {\n callback.call(target, store._instanceCache.getRecord(arr[index]), index, instance);\n }\n\n return instance;\n}\n\n/**\n A record array is an array that contains records of a certain type (or modelName).\n The record array materializes records as needed when they are retrieved for the first\n time. You should not create record arrays yourself. Instead, an instance of\n `RecordArray` or its subclasses will be returned by your application's store\n in response to queries.\n\n This class should not be imported and instantiated by consuming applications.\n\n @class RecordArray\n @public\n*/\ninterface IdentifierArray extends Omit<Array<RecordInstance>, '[]'> {\n [MUTATE]?(prop: string, args: unknown[], result?: unknown): void;\n}\nclass IdentifierArray {\n declare DEPRECATED_CLASS_NAME: string;\n /**\n The flag to signal a `RecordArray` is currently loading data.\n Example\n ```javascript\n let people = store.peekAll('person');\n people.isUpdating; // false\n people.update();\n people.isUpdating; // true\n ```\n @property isUpdating\n @public\n @type Boolean\n */\n @tracked isUpdating: boolean = false;\n isLoaded: boolean = true;\n isDestroying: boolean = false;\n isDestroyed: boolean = false;\n _updatingPromise: Promise<IdentifierArray> | null = null;\n\n [IS_COLLECTION] = true;\n declare [IDENTIFIER_ARRAY_TAG]: Tag;\n [SOURCE]: StableRecordIdentifier[];\n [NOTIFY]() {\n notifyArray(this);\n }\n\n declare links: Links | PaginationLinks | null;\n declare meta: Record<string, unknown> | null;\n declare modelName?: string;\n /**\n The store that created this record array.\n\n @property store\n @private\n @type Store\n */\n declare store: Store;\n declare _manager: RecordArrayManager;\n\n destroy(clear: boolean) {\n this.isDestroying = !clear;\n // changing the reference breaks the Proxy\n // this[SOURCE] = [];\n this[SOURCE].length = 0;\n this[NOTIFY]();\n this.isDestroyed = !clear;\n }\n\n // length must be on self for proxied methods to work properly\n @dependentKeyCompat\n get length() {\n return this[SOURCE].length;\n }\n set length(value) {\n this[SOURCE].length = value;\n }\n\n // here to support computed chains\n // and {{#each}}\n get '[]'() {\n if (DEPRECATE_COMPUTED_CHAINS) {\n return this;\n }\n }\n\n constructor(options: IdentifierArrayCreateOptions) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let self = this;\n this.modelName = options.type;\n this.store = options.store;\n this._manager = options.manager;\n this[SOURCE] = options.identifiers;\n // @ts-expect-error\n this[IDENTIFIER_ARRAY_TAG] = DEBUG ? new Tag(this, 'length') : new Tag();\n const store = options.store;\n const boundFns = new Map<KeyType, ProxiedMethod>();\n const _TAG = this[IDENTIFIER_ARRAY_TAG];\n const PrivateState: PrivateState = {\n links: options.links || null,\n meta: options.meta || null,\n };\n let transaction: boolean = false;\n\n // when a mutation occurs\n // we track all mutations within the call\n // and forward them as one\n\n const proxy = new Proxy<StableRecordIdentifier[], RecordInstance[]>(this[SOURCE], {\n get(target: StableRecordIdentifier[], prop: KeyType, receiver: IdentifierArray): unknown {\n let index = convertToInt(prop);\n if (_TAG.shouldReset && (index !== null || SYNC_PROPS.has(prop) || isArrayGetter(prop))) {\n options.manager._syncArray(receiver as unknown as IdentifierArray);\n _TAG.t = false;\n _TAG.shouldReset = false;\n }\n\n if (index !== null) {\n const identifier = target[index];\n if (!transaction) {\n subscribe(_TAG);\n }\n return identifier && store._instanceCache.getRecord(identifier);\n }\n\n if (prop === 'meta') return subscribe(_TAG), PrivateState.meta;\n if (prop === 'links') return subscribe(_TAG), PrivateState.links;\n if (prop === '[]') return subscribe(_TAG), receiver;\n\n if (isArrayGetter(prop)) {\n let fn = boundFns.get(prop);\n\n if (fn === undefined) {\n if (prop === 'forEach') {\n fn = function () {\n subscribe(_TAG);\n transaction = true;\n let result = safeForEach(receiver, target, store, arguments[0] as ForEachCB, arguments[1]);\n transaction = false;\n return result;\n };\n } else {\n fn = function () {\n subscribe(_TAG);\n // array functions must run through Reflect to work properly\n // binding via other means will not work.\n transaction = true;\n let result = Reflect.apply(target[prop] as ProxiedMethod, receiver, arguments) as unknown;\n transaction = false;\n return result;\n };\n }\n\n boundFns.set(prop, fn);\n }\n\n return fn;\n }\n\n if (isArraySetter(prop)) {\n let fn = boundFns.get(prop);\n\n if (fn === undefined) {\n fn = function () {\n // array functions must run through Reflect to work properly\n // binding via other means will not work.\n if (!options.allowMutation) {\n assert(`Mutating this array of records via ${String(prop)} is not allowed.`, options.allowMutation);\n return;\n }\n const args: unknown[] = Array.prototype.slice.call(arguments);\n assert(`Cannot start a new array transaction while a previous transaction is underway`, !transaction);\n transaction = true;\n let result: unknown = Reflect.apply(target[prop] as ProxiedMethod, receiver, args);\n self[MUTATE]!(prop as string, args, result);\n addToTransaction(_TAG);\n // TODO handle cache updates\n transaction = false;\n return result;\n };\n\n boundFns.set(prop, fn);\n }\n\n return fn;\n }\n\n if (prop in self) {\n if (prop === NOTIFY || prop === IDENTIFIER_ARRAY_TAG || prop === SOURCE) {\n return self[prop];\n }\n\n let fn = boundFns.get(prop);\n if (fn) return fn;\n\n let outcome: unknown = self[prop];\n\n if (typeof outcome === 'function') {\n fn = function () {\n subscribe(_TAG);\n // array functions must run through Reflect to work properly\n // binding via other means will not work.\n return Reflect.apply(outcome as ProxiedMethod, receiver, arguments) as unknown;\n };\n\n boundFns.set(prop, fn);\n return fn;\n }\n\n return subscribe(_TAG), outcome;\n }\n\n return target[prop];\n },\n\n set(target: StableRecordIdentifier[], prop: KeyType, value: unknown /*, receiver */): boolean {\n if (prop === 'length') {\n if (!transaction && value === 0) {\n transaction = true;\n addToTransaction(_TAG);\n Reflect.set(target, prop, value);\n self[MUTATE]!('length 0', []);\n transaction = false;\n return true;\n } else if (transaction) {\n return Reflect.set(target, prop, value);\n } else {\n assert(`unexpected length set`);\n }\n }\n if (prop === 'links') {\n PrivateState.links = (value || null) as PaginationLinks | Links | null;\n return true;\n }\n if (prop === 'meta') {\n PrivateState.meta = (value || null) as Record<string, unknown> | null;\n return true;\n }\n let index = convertToInt(prop);\n\n if (index === null || index > target.length) {\n if (prop in self) {\n self[prop] = value;\n return true;\n }\n return false;\n }\n\n if (!options.allowMutation) {\n assert(`Mutating ${String(prop)} on this RecordArray is not allowed.`, options.allowMutation);\n return false;\n }\n\n let original: StableRecordIdentifier | undefined = target[index];\n let newIdentifier = extractIdentifierFromRecord(value);\n (target as unknown as Record<KeyType, unknown>)[index] = newIdentifier;\n if (!transaction) {\n self[MUTATE]!('replace cell', [index, original, newIdentifier]);\n addToTransaction(_TAG);\n }\n\n return true;\n },\n\n deleteProperty(target: StableRecordIdentifier[], prop: string | symbol): boolean {\n assert(`Deleting keys on managed arrays is disallowed`, transaction);\n if (!transaction) {\n return false;\n }\n return Reflect.deleteProperty(target, prop);\n },\n\n getPrototypeOf() {\n return IdentifierArray.prototype;\n },\n }) as IdentifierArray;\n\n if (DEBUG) {\n const meta = Ember.meta(this);\n meta.addMixin = (mixin: object) => {\n assert(`Do not call A() on EmberData RecordArrays`);\n };\n }\n\n this[NOTIFY] = this[NOTIFY].bind(proxy);\n\n return proxy;\n }\n\n /**\n Used to get the latest version of all of the records in this array\n from the adapter.\n\n Example\n\n ```javascript\n let people = store.peekAll('person');\n people.isUpdating; // false\n\n people.update().then(function() {\n people.isUpdating; // false\n });\n\n people.isUpdating; // true\n ```\n\n @method update\n @public\n */\n update(): Promise<IdentifierArray> {\n if (this.isUpdating) {\n return this._updatingPromise!;\n }\n\n this.isUpdating = true;\n\n let updatingPromise = this._update();\n void updatingPromise.finally(() => {\n this._updatingPromise = null;\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n this.isUpdating = false;\n });\n\n this._updatingPromise = updatingPromise;\n\n return updatingPromise;\n }\n\n /*\n Update this RecordArray and return a promise which resolves once the update\n is finished.\n */\n _update(): Promise<IdentifierArray> {\n assert(`_update cannot be used with this array`, this.modelName);\n return this.store.findAll(this.modelName, { reload: true });\n }\n\n // TODO deprecate\n /**\n Saves all of the records in the `RecordArray`.\n\n Example\n\n ```javascript\n let messages = store.peekAll('message');\n messages.forEach(function(message) {\n message.hasBeenSeen = true;\n });\n messages.save();\n ```\n\n @method save\n @public\n @return {Promise<IdentifierArray>} promise\n */\n save(): Promise<IdentifierArray> {\n let promise = Promise.all(this.map((record) => this.store.saveRecord(record))).then(() => this);\n\n return promise;\n }\n}\n\nexport default IdentifierArray;\n\nexport type CollectionCreateOptions = IdentifierArrayCreateOptions & {\n query: ImmutableRequestInfo | Record<string, unknown> | null;\n isLoaded: boolean;\n};\n\nexport class Collection extends IdentifierArray {\n query: ImmutableRequestInfo | Record<string, unknown> | null = null;\n\n constructor(options: CollectionCreateOptions) {\n super(options as IdentifierArrayCreateOptions);\n this.query = options.query || null;\n this.isLoaded = options.isLoaded || false;\n }\n\n _update(): Promise<Collection> {\n const { store, query } = this;\n\n // TODO save options from initial request?\n assert(`update cannot be used with this array`, this.modelName);\n assert(`update cannot be used with no query`, query);\n const promise = store.query(this.modelName, query as Record<string, unknown>, { _recordArray: this });\n\n return promise;\n }\n\n destroy(clear: boolean) {\n super.destroy(clear);\n this._manager._managed.delete(this);\n this._manager._pending.delete(this);\n }\n}\n// trick the proxy \"in\" check\nCollection.prototype.query = null;\n\n// Ensure instanceof works correctly\n//Object.setPrototypeOf(IdentifierArray.prototype, Array.prototype);\n\ntype PromiseProxyRecord = { then(): void; content: RecordInstance | null | undefined };\n\nfunction assertRecordPassedToHasMany(record: RecordInstance | PromiseProxyRecord) {\n assert(\n `All elements of a hasMany relationship must be instances of Model, you passed $${typeof record}`,\n (function () {\n try {\n recordIdentifierFor(record);\n return true;\n } catch {\n return false;\n }\n })()\n );\n}\n\nfunction extractIdentifierFromRecord(record: PromiseProxyRecord | RecordInstance | null) {\n if (!record) {\n return null;\n }\n\n assertRecordPassedToHasMany(record);\n return recordIdentifierFor(record);\n}\n","/**\n @module @ember-data/store\n*/\nimport { ImmutableRequestInfo } from '@ember-data/request/-private/types';\nimport { addTransactionCB } from '@ember-data/tracking/-private';\nimport type { CollectionResourceDocument } from '@ember-data/types/q/ember-data-json-api';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\n\nimport IdentifierArray, {\n Collection,\n CollectionCreateOptions,\n IDENTIFIER_ARRAY_TAG,\n NOTIFY,\n notifyArray,\n SOURCE,\n} from '../record-arrays/identifier-array';\nimport type Store from '../store-service';\nimport { CacheOperation, UnsubscribeToken } from './notification-manager';\n\nconst FAKE_ARR = {};\nconst SLICE_BATCH_SIZE = 1200;\n/**\n * This is a clever optimization.\n *\n * clever optimizations rarely stand the test of time, so if you're\n * ever curious or think something better is possible please benchmark\n * and discuss. The benchmark for this at the time of writing is in\n * `scripts/benchmark-push.js`\n *\n * This approach turns out to be 150x faster in Chrome and node than\n * simply using push or concat. It's highly susceptible to the specifics\n * of the batch size, and may require tuning.\n *\n * Clever optimizations should always come with a `why`. This optimization\n * exists for two reasons.\n *\n * 1) array.push(...objects) and Array.prototype.push.apply(arr, objects)\n * are susceptible to stack overflows. The size of objects at which this\n * occurs varies by environment, browser, and current stack depth and memory\n * pressure; however, it occurs in all browsers in fairly pristine conditions\n * somewhere around 125k to 200k elements. Since EmberData regularly encounters\n * arrays larger than this in size, we cannot use push.\n *\n * 2) `array.concat` or simply setting the array to a new reference is often an\n * easier approach; however, native Proxy to an array cannot swap it's target array\n * and attempts at juggling multiple array sources have proven to be victim to a number\n * of browser implementation bugs. Should these bugs be addressed then we could\n * simplify to using `concat`, however, do note this is currently 150x faster\n * than concat, and due to the overloaded signature of concat will likely always\n * be faster.\n *\n * Sincerely,\n * - runspired (Chris Thoburn) 08/21/2022\n *\n * @function fastPush\n * @internal\n * @param target the array to push into\n * @param source the items to push into target\n */\nexport function fastPush<T>(target: T[], source: T[]) {\n let startLength = 0;\n let newLength = source.length;\n while (newLength - startLength > SLICE_BATCH_SIZE) {\n // eslint-disable-next-line prefer-spread\n target.push.apply(target, source.slice(startLength, startLength + SLICE_BATCH_SIZE));\n startLength += SLICE_BATCH_SIZE;\n }\n // eslint-disable-next-line prefer-spread\n target.push.apply(target, source.slice(startLength));\n}\n\ntype ChangeSet = Map<StableRecordIdentifier, 'add' | 'del'>;\n\n/**\n @class RecordArrayManager\n @internal\n*/\nclass RecordArrayManager {\n declare store: Store;\n declare isDestroying: boolean;\n declare isDestroyed: boolean;\n declare _set: Map<IdentifierArray, Set<StableRecordIdentifier>>;\n declare _live: Map<string, IdentifierArray>;\n declare _managed: Set<IdentifierArray>;\n declare _pending: Map<IdentifierArray, ChangeSet>;\n declare _identifiers: Map<StableRecordIdentifier, Set<Collection>>;\n declare _staged: Map<string, ChangeSet>;\n declare _subscription: UnsubscribeToken;\n declare _keyedArrays: Map<string, Collection>;\n declare _visibilitySet: Map<StableRecordIdentifier, boolean>;\n\n constructor(options: { store: Store }) {\n this.store = options.store;\n this.isDestroying = false;\n this.isDestroyed = false;\n this._live = new Map();\n this._managed = new Set();\n this._pending = new Map();\n this._staged = new Map();\n this._keyedArrays = new Map();\n this._identifiers = new Map();\n this._set = new Map();\n this._visibilitySet = new Map();\n\n this._subscription = this.store.notifications.subscribe(\n 'resource',\n (identifier: StableRecordIdentifier, type: CacheOperation) => {\n if (type === 'added') {\n this._visibilitySet.set(identifier, true);\n this.identifierAdded(identifier);\n } else if (type === 'removed') {\n this._visibilitySet.set(identifier, false);\n this.identifierRemoved(identifier);\n } else if (type === 'state') {\n this.identifierChanged(identifier);\n }\n }\n );\n }\n\n _syncArray(array: IdentifierArray) {\n const pending = this._pending.get(array);\n\n if (!pending || this.isDestroying || this.isDestroyed) {\n return;\n }\n\n sync(array, pending, this._set.get(array)!);\n this._pending.delete(array);\n }\n\n /**\n Get the `RecordArray` for a modelName, which contains all loaded records of\n given modelName.\n\n @method liveArrayFor\n @internal\n @param {String} modelName\n @return {RecordArray}\n */\n liveArrayFor(type: string): IdentifierArray {\n let array = this._live.get(type);\n let identifiers: StableRecordIdentifier[] = [];\n let staged = this._staged.get(type);\n if (staged) {\n staged.forEach((value, key) => {\n if (value === 'add') {\n identifiers.push(key);\n }\n });\n this._staged.delete(type);\n }\n\n if (!array) {\n array = new IdentifierArray({\n type,\n identifiers,\n store: this.store,\n allowMutation: false,\n manager: this,\n });\n this._live.set(type, array);\n this._set.set(array, new Set(identifiers));\n }\n\n return array;\n }\n\n createArray(config: {\n type?: string;\n query?: ImmutableRequestInfo | Record<string, unknown>;\n identifiers?: StableRecordIdentifier[];\n doc?: CollectionResourceDocument;\n }): Collection {\n let options: CollectionCreateOptions = {\n type: config.type,\n links: config.doc?.links || null,\n meta: config.doc?.meta || null,\n query: config.query || null,\n identifiers: config.identifiers || [],\n isLoaded: !!config.identifiers?.length,\n allowMutation: false,\n store: this.store,\n manager: this,\n };\n let array = new Collection(options);\n this._managed.add(array);\n this._set.set(array, new Set(options.identifiers || []));\n if (config.identifiers) {\n associate(this._identifiers, array, config.identifiers);\n }\n\n return array;\n }\n\n dirtyArray(array: IdentifierArray, delta: number): void {\n if (array === FAKE_ARR) {\n return;\n }\n let tag = array[IDENTIFIER_ARRAY_TAG];\n if (!tag.shouldReset) {\n tag.shouldReset = true;\n addTransactionCB(array[NOTIFY]);\n } else if (delta > 0 && !tag.t) {\n addTransactionCB(array[NOTIFY]);\n }\n }\n\n _getPendingFor(\n identifier: StableRecordIdentifier,\n includeManaged: boolean,\n isRemove?: boolean\n ): Map<IdentifierArray, ChangeSet> | void {\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n\n let liveArray = this._live.get(identifier.type);\n const allPending = this._pending;\n let pending: Map<IdentifierArray, ChangeSet> = new Map();\n\n if (includeManaged) {\n let managed = this._identifiers.get(identifier);\n if (managed) {\n managed.forEach((arr) => {\n let changes = allPending.get(arr);\n if (!changes) {\n changes = new Map();\n allPending.set(arr, changes);\n }\n pending.set(arr, changes);\n });\n }\n }\n\n // during unloadAll we can ignore removes since we've already\n // cleared the array.\n if (liveArray && liveArray[SOURCE].length === 0 && isRemove) {\n const pendingLive = allPending.get(liveArray);\n if (!pendingLive || pendingLive.size === 0) {\n return pending;\n }\n }\n\n if (!liveArray) {\n // start building a changeset for when we eventually\n // do have a live array\n let changes = this._staged.get(identifier.type);\n if (!changes) {\n changes = new Map();\n this._staged.set(identifier.type, changes);\n }\n pending.set(FAKE_ARR as IdentifierArray, changes);\n } else {\n let changes = allPending.get(liveArray);\n if (!changes) {\n changes = new Map();\n allPending.set(liveArray, changes);\n }\n pending.set(liveArray, changes);\n }\n\n return pending;\n }\n\n populateManagedArray(array: Collection, identifiers: StableRecordIdentifier[], payload: CollectionResourceDocument) {\n this._pending.delete(array);\n const source = array[SOURCE];\n const old = source.slice();\n source.length = 0;\n fastPush(source, identifiers);\n this._set.set(array, new Set(identifiers));\n\n notifyArray(array);\n array.meta = payload.meta || null;\n array.links = payload.links || null;\n array.isLoaded = true;\n\n disassociate(this._identifiers, array, old);\n associate(this._identifiers, array, identifiers);\n }\n\n identifierAdded(identifier: StableRecordIdentifier): void {\n let changeSets = this._getPendingFor(identifier, false);\n if (changeSets) {\n changeSets.forEach((changes, array) => {\n let existing = changes.get(identifier);\n if (existing === 'del') {\n changes.delete(identifier);\n } else {\n changes.set(identifier, 'add');\n\n this.dirtyArray(array, changes.size);\n }\n });\n }\n }\n\n identifierRemoved(identifier: StableRecordIdentifier): void {\n let changeSets = this._getPendingFor(identifier, true, true);\n if (changeSets) {\n changeSets.forEach((changes, array) => {\n let existing = changes.get(identifier);\n if (existing === 'add') {\n changes.delete(identifier);\n } else {\n changes.set(identifier, 'del');\n\n this.dirtyArray(array, changes.size);\n }\n });\n }\n }\n\n identifierChanged(identifier: StableRecordIdentifier): void {\n let newState = this.store._instanceCache.recordIsLoaded(identifier, true);\n\n // if the change matches the most recent direct added/removed\n // state, then we can ignore it\n if (this._visibilitySet.get(identifier) === newState) {\n return;\n }\n\n if (newState) {\n this.identifierAdded(identifier);\n } else {\n this.identifierRemoved(identifier);\n }\n }\n\n clear(isClear = true) {\n this._live.forEach((array) => array.destroy(isClear));\n this._managed.forEach((array) => array.destroy(isClear));\n this._managed.clear();\n this._identifiers.clear();\n this._pending.clear();\n this._set.forEach((set) => set.clear());\n this._visibilitySet.clear();\n }\n\n destroy() {\n this.isDestroying = true;\n this.clear(false);\n this._live.clear();\n this.isDestroyed = true;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this.store.notifications.unsubscribe(this._subscription);\n }\n}\n\nfunction associate(\n ArraysCache: Map<StableRecordIdentifier, Set<Collection>>,\n array: Collection,\n identifiers: StableRecordIdentifier[]\n) {\n for (let i = 0; i < identifiers.length; i++) {\n let identifier = identifiers[i];\n let cache = ArraysCache.get(identifier);\n if (!cache) {\n cache = new Set();\n ArraysCache.set(identifier, cache);\n }\n cache.add(array);\n }\n}\n\nfunction disassociate(\n ArraysCache: Map<StableRecordIdentifier, Set<Collection>>,\n array: Collection,\n identifiers: StableRecordIdentifier[]\n) {\n for (let i = 0; i < identifiers.length; i++) {\n disassociateIdentifier(ArraysCache, array, identifiers[i]);\n }\n}\n\nexport function disassociateIdentifier(\n ArraysCache: Map<StableRecordIdentifier, Set<Collection>>,\n array: Collection,\n identifier: StableRecordIdentifier\n) {\n let cache = ArraysCache.get(identifier);\n if (cache) {\n cache.delete(array);\n }\n}\n\nfunction sync(\n array: IdentifierArray,\n changes: Map<StableRecordIdentifier, 'add' | 'del'>,\n arraySet: Set<StableRecordIdentifier>\n) {\n let state = array[SOURCE];\n const adds: StableRecordIdentifier[] = [];\n const removes: StableRecordIdentifier[] = [];\n changes.forEach((value, key) => {\n if (value === 'add') {\n // likely we want to keep a Set along-side\n if (arraySet.has(key)) {\n return;\n }\n adds.push(key);\n arraySet.add(key);\n } else {\n if (arraySet.has(key)) {\n removes.push(key);\n }\n }\n });\n if (removes.length) {\n if (removes.length === state.length) {\n state.length = 0;\n arraySet.clear();\n // changing the reference breaks the Proxy\n // state = array[SOURCE] = [];\n } else {\n removes.forEach((i) => {\n const index = state.indexOf(i);\n if (index !== -1) {\n state.splice(index, 1);\n arraySet.delete(i);\n }\n });\n }\n }\n\n if (adds.length) {\n fastPush(state, adds);\n // changing the reference breaks the Proxy\n // else we could do this\n /*\n if (state.length === 0) {\n array[SOURCE] = adds;\n } else {\n array[SOURCE] = state.concat(adds);\n }\n */\n }\n}\n\nexport default RecordArrayManager;\n","/**\n * @module @ember-data/store\n */\nimport { assert } from '@ember/debug';\n\nimport { DEBUG } from '@ember-data/env';\nimport type {\n FindRecordQuery,\n Operation,\n Request,\n RequestState,\n SaveRecordMutation,\n} from '@ember-data/types/q/fetch-manager';\nimport type { StableRecordIdentifier } from '@ember-data/types/q/identifier';\n\nimport Store from '../store-service';\n\nconst Touching: unique symbol = Symbol('touching');\nexport const RequestPromise: unique symbol = Symbol('promise');\nconst EMPTY_ARR: RequestState[] = DEBUG ? (Object.freeze([]) as unknown as RequestState[]) : [];\n\ninterface InternalRequest extends RequestState {\n [Touching]: StableRecordIdentifier[];\n [RequestPromise]?: Promise<unknown>;\n}\n\ntype RecordOperation = FindRecordQuery | SaveRecordMutation;\nexport type RequestSubscription = (requestState: RequestState) => void;\n\nfunction hasRecordIdentifier(op: Operation): op is RecordOperation {\n return 'recordIdentifier' in op;\n}\n\n/**\n * The RequestStateService is used to track the state of requests\n * for fetching or updating known resource identifies that are inflight.\n *\n * @class RequestStateService\n * @public\n */\nexport default class RequestStateService {\n _pending: Map<StableRecordIdentifier, InternalRequest[]> = new Map();\n _done: Map<StableRecordIdentifier, InternalRequest[]> = new Map();\n _subscriptions: Map<StableRecordIdentifier, RequestSubscription[]> = new Map();\n _toFlush: InternalRequest[] = [];\n _store: Store;\n\n constructor(store: Store) {\n this._store = store;\n }\n\n _clearEntries(identifier: StableRecordIdentifier) {\n this._done.delete(identifier);\n }\n\n _enqueue<T>(promise: Promise<T>, queryRequest: Request): Promise<T> {\n let query = queryRequest.data[0];\n if (hasRecordIdentifier(query)) {\n const identifier = query.recordIdentifier;\n let type = query.op === 'saveRecord' ? ('mutation' as const) : ('query' as const);\n if (!this._pending.has(identifier)) {\n this._pending.set(identifier, []);\n }\n let request: InternalRequest = {\n state: 'pending',\n request: queryRequest,\n type,\n } as InternalRequest;\n request[Touching] = [query.recordIdentifier];\n request[RequestPromise] = promise;\n this._pending.get(identifier)!.push(request);\n this._triggerSubscriptions(request);\n return promise.then(\n (result) => {\n this._dequeue(identifier, request);\n let finalizedRequest = {\n state: 'fulfilled',\n request: queryRequest,\n type,\n response: { data: result },\n } as InternalRequest;\n finalizedRequest[Touching] = request[Touching];\n this._addDone(finalizedRequest);\n this._triggerSubscriptions(finalizedRequest);\n return result;\n },\n (error) => {\n this._dequeue(identifier, request);\n let finalizedRequest = {\n state: 'rejected',\n request: queryRequest,\n type,\n response: { data: error },\n } as InternalRequest;\n finalizedRequest[Touching] = request[Touching];\n this._addDone(finalizedRequest);\n this._triggerSubscriptions(finalizedRequest);\n throw error;\n }\n );\n }\n assert(`Expected a well formed query`);\n }\n\n _triggerSubscriptions(req: InternalRequest): void {\n if (req.state === 'pending') {\n this._flushRequest(req);\n return;\n }\n this._toFlush.push(req);\n\n if (this._toFlush.length === 1) {\n this._store.notifications._onNextFlush(() => {\n this._flush();\n });\n }\n }\n\n _flush(): void {\n this._toFlush.forEach((req) => {\n this._flushRequest(req);\n });\n this._toFlush = [];\n }\n\n _flushRequest(req: InternalRequest): void {\n req[Touching].forEach((identifier: StableRecordIdentifier) => {\n const subscriptions = this._subscriptions.get(identifier);\n if (subscriptions) {\n subscriptions.forEach((callback) => callback(req));\n }\n });\n }\n\n _dequeue(identifier: StableRecordIdentifier, request: InternalRequest) {\n const pending = this._pending.get(identifier)!;\n this._pending.set(\n identifier,\n pending.filter((req) => req !== request)\n );\n }\n\n _addDone(request: InternalRequest) {\n request[Touching].forEach((identifier) => {\n // TODO add support for multiple\n let requestDataOp = request.request.data[0].op;\n let requests = this._done.get(identifier);\n\n if (requests) {\n requests = requests.filter((req) => {\n // TODO add support for multiple\n let data: Operation;\n if (Array.isArray(req.request.data)) {\n data = req.request.data[0];\n } else {\n data = req.request.data;\n }\n return data.op !== requestDataOp;\n });\n }\n requests = requests || [];\n requests.push(request);\n this._done.set(identifier, requests);\n });\n }\n\n /**\n * Subscribe to requests for a given resource identity.\n *\n * The callback will receive the current state of the request.\n *\n * ```ts\n * interface RequestState {\n * state: 'pending' | 'fulfilled' | 'rejected';\n * type: 'query' | 'mutation';\n * request: Request;\n * response?: { data: unknown };\n * }\n * ```\n *\n * Note: It should be considered dangerous to use this API for more than simple\n * state derivation or debugging. The `request` and `response` properties are poorly\n * spec'd and may change unexpectedly when shifting what Handlers are in use or how\n * requests are issued from the Store.\n *\n * We expect to revisit this API in the near future as we continue to refine the\n * RequestManager ergonomics, as a simpler but more powerful direct integration\n * with the RequestManager for these purposes is likely to be a better long-term\n * design.\n *\n * @method subscribeForRecord\n * @public\n * @param {StableRecordIdentifier} identifier\n * @param {(state: RequestState) => void} callback\n */\n subscribeForRecord(identifier: StableRecordIdentifier, callback: RequestSubscription) {\n let subscriptions = this._subscriptions.get(identifier);\n if (!subscriptions) {\n subscriptions = [];\n this._subscriptions.set(identifier, subscriptions);\n }\n subscriptions.push(callback);\n }\n\n /**\n * Retrieve all active requests for a given resource identity.\n *\n * @method getPendingRequestsForRecord\n * @public\n * @param {StableRecordIdentifier} identifier\n * @returns {RequestState[]} an array of request states for any pending requests for the given identifier\n */\n getPendingRequestsForRecord(identifier: StableRecordIdentifier): RequestState[] {\n return this._pending.get(identifier) || EMPTY_ARR;\n }\n\n /**\n * Retrieve the last completed request for a given resource identity.\n *\n * @method getLastRequestForRecord\n * @public\n * @param {StableRecordIdentifier} identifier\n * @returns {RequestState | null} the state of the most recent request for the given identifier\n */\n getLastRequestForRecord(identifier: StableRecordIdentifier): RequestState | null {\n let requests = this._done.get(identifier);\n if (requests) {\n return requests[requests.length - 1];\n }\n return null;\n }\n}\n","export default function isNonEmptyString(str: unknown): str is string {\n return Boolean(str && typeof str === 'string');\n}\n","import { assert } from '@ember/debug';\n\nimport type {\n ExistingResourceIdentifierObject,\n ResourceIdentifierObject,\n} from '@ember-data/types/q/ember-data-json-api';\n\nimport { isStableIdentifier } from '../caches/identifier-cache';\nimport coerceId from './coerce-id';\nimport isNonEmptyString from './is-non-empty-string';\n\nfunction constructResource(type: ResourceIdentifierObject): ResourceIdentifierObject;\nfunction constructResource(type: string, id: string, lid: string): ExistingResourceIdentifierObject;\nfunction constructResource(\n type: string | undefined,\n id: null | undefined,\n lid: string\n): ExistingResourceIdentifierObject;\nfunction constructResource(type: string, id: string, lid?: string | null): ExistingResourceIdentifierObject;\nfunction constructResource(type: string, id?: string | number | null, lid?: string | null): ResourceIdentifierObject;\nfunction constructResource(\n type: string | ResourceIdentifierObject | undefined,\n id?: string | number | null,\n lid?: string | null\n): ResourceIdentifierObject | ExistingResourceIdentifierObject {\n if (typeof type === 'object' && type !== null) {\n let resource = type;\n if (isStableIdentifier(resource)) {\n return resource;\n }\n if ('id' in resource) {\n resource.id = coerceId(resource.id);\n }\n\n assert(\n 'Expected either id or lid to be a valid string',\n ('id' in resource && isNonEmptyString(resource.id)) || isNonEmptyString(resource.lid)\n );\n assert('if id is present, the type must be a string', !('id' in resource) || typeof resource.type === 'string');\n\n return resource;\n } else {\n const trueId = coerceId(id);\n if (!isNonEmptyString(trueId)) {\n if (isNonEmptyString(lid)) {\n return { lid };\n }\n throw new Error('Expected either id or lid to be a valid string');\n }\n\n assert('type must be a string', typeof type === 'string');\n\n if (isNonEmptyString(lid)) {\n return { type, id: trueId, lid };\n }\n\n return { type, id: trueId };\n }\n}\n\nexport default constructResource;\n","/**\n @module @ember-data/store\n */\n// this import location is deprecated but breaks in 4.8 and older\nimport { getOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\nimport EmberObject from '@ember/object';\n\nimport type { Object as JSONObject } from 'json-typescript';\n\nimport { LOG_PAYLOADS, LOG_REQUESTS } from '@ember-data/debugging';\nimport { DEBUG, TESTING } from '@ember-data/env';\nimport type { Graph } from '@ember-data/graph/-private/graph';\nimport type { FetchManager } from '@ember-data/legacy-compat/-private';\nimport type RequestManager from '@ember-data/request';\nimport type { Future } from '@ember-data/request/-private/types';\nimport { ResourceDocument } from '@ember-data/types/cache/document';\nimport { StableDocumentIdentifier } from '@ember-data/types/cache/identifier';\nimport type { Cache, CacheV1 } from '@ember-data/types/q/cache';\nimport type { CacheCapabilitiesManager } from '@ember-data/types/q/cache-store-wrapper';\nimport { ModelSchema } from '@ember-data/types/q/ds-model';\nimport type {\n CollectionResourceDocument,\n EmptyResourceDocument,\n JsonApiDocument,\n ResourceIdentifierObject,\n SingleResourceDocument,\n} from '@ember-data/types/q/ember-data-json-api';\nimport type { StableExistingRecordIdentifier, StableRecordIdentifier } from '@ember-data/types/q/identifier';\nimport type { MinimumAdapterInterface } from '@ember-data/types/q/minimum-adapter-interface';\nimport type { MinimumSerializerInterface } from '@ember-data/types/q/minimum-serializer-interface';\nimport type { RecordInstance } from '@ember-data/types/q/record-instance';\nimport type { SchemaService } from '@ember-data/types/q/schema-service';\nimport type { FindOptions } from '@ember-data/types/q/store';\n\nimport {\n EnableHydration,\n type LifetimesService,\n SkipCache,\n StoreRequestContext,\n type StoreRequestInput,\n} from './cache-handler';\nimport { IdentifierCache } from './caches/identifier-cache';\nimport {\n InstanceCache,\n peekRecordIdentifier,\n preloadData,\n recordIdentifierFor,\n resourceIsFullyDeleted,\n storeFor,\n} from './caches/instance-cache';\nimport { Document } from './document';\nimport type RecordReference from './legacy-model-support/record-reference';\nimport { getShimClass } from './legacy-model-support/shim-model-class';\nimport { CacheManager } from './managers/cache-manager';\nimport NotificationManager from './managers/notification-manager';\nimport RecordArrayManager from './managers/record-array-manager';\nimport RequestStateService, { RequestPromise } from './network/request-cache';\nimport IdentifierArray, { Collection } from './record-arrays/identifier-array';\nimport coerceId, { ensureStringId } from './utils/coerce-id';\nimport constructResource from './utils/construct-resource';\nimport normalizeModelName from './utils/normalize-model-name';\n\nexport { storeFor };\n\nexport interface CreateRecordProperties {\n id?: string | null;\n [key: string]: unknown;\n}\n\n/**\n * A Store coordinates interaction between your application, a [Cache](https://api.emberjs.com/ember-data/release/classes/%3CInterface%3E%20Cache),\n * and sources of data (such as your API or a local persistence layer)\n * accessed via a [RequestManager](https://github.com/emberjs/data/tree/main/packages/request).\n *\n * ```app/services/store.js\n * import Store from '@ember-data/store';\n *\n * export default class extends Store {}\n * ```\n *\n * Most Ember applications will only have a single `Store` configured as a Service\n * in this manner. However, setting up multiple stores is possible, including using\n * each as a unique service.\n *\n\n @class Store\n @public\n*/\n\n// @ts-expect-error\ninterface Store {\n createRecordDataFor?(identifier: StableRecordIdentifier, wrapper: CacheCapabilitiesManager): Cache | CacheV1;\n\n createCache(storeWrapper: CacheCapabilitiesManager): Cache;\n\n instantiateRecord(identifier: StableRecordIdentifier, createRecordArgs: { [key: string]: unknown }): RecordInstance;\n\n teardownRecord(record: RecordInstance): void;\n}\n\nclass Store extends EmberObject {\n declare recordArrayManager: RecordArrayManager;\n\n /**\n * Provides access to the NotificationManager associated\n * with this Store instance.\n *\n * The NotificationManager can be used to subscribe to\n * changes to the cache.\n *\n * @property {NotificationManager} notifications\n * @public\n */\n declare notifications: NotificationManager;\n\n /**\n * Provides access to the SchemaService instance\n * for this Store instance.\n *\n * The SchemaService can be used to query for\n * information about the schema of a resource.\n *\n * @property {SchemaService} schema\n * @public\n */\n get schema(): SchemaService {\n return this.getSchemaDefinitionService();\n }\n declare _schema: SchemaService;\n\n /**\n * Provides access to the IdentifierCache instance\n * for this store.\n *\n * The IdentifierCache can be used to generate or\n * retrieve a stable unique identifier for any resource.\n *\n * @property {IdentifierCache} identifierCache\n * @public\n */\n declare identifierCache: IdentifierCache;\n /**\n * Provides access to the requestManager instance associated\n * with this Store instance.\n *\n * When using `ember-data` this property is automatically\n * set to an instance of `RequestManager`. When not using `ember-data`\n * you must configure this property yourself, either by declaring\n * it as a service or by initializing it.\n *\n * ```ts\n * import Store, { CacheHandler } from '@ember-data/store';\n * import RequestManager from '@ember-data/request';\n * import Fetch from '@ember/data/request/fetch';\n *\n * class extends Store {\n * constructor() {\n * super(...arguments);\n * this.requestManager = new RequestManager();\n * this.requestManager.use([Fetch]);\n * this.requestManager.useCache(CacheHandler);\n * }\n * }\n * ```\n *\n * @public\n * @property {RequestManager} requestManager\n */\n declare requestManager: RequestManager;\n\n /**\n * A Property which an App may set to provide a Lifetimes Service\n * to control when a cached request becomes stale.\n *\n * Note, when defined, these methods will only be invoked if a\n * cache key exists for the request, either because the request\n * contains `cacheOptions.key` or because the [IdentifierCache](/ember-data/release/classes/IdentifierCache)\n * was able to generate a key for the request using the configured\n * [generation method](/ember-data/release/functions/@ember-data%2Fstore/setIdentifierGenerationMethod).\n *\n * `isSoftExpired` will only be invoked if `isHardExpired` returns `false`.\n *\n * ```ts\n * store.lifetimes = {\n * // make the request and ignore the current cache state\n * isHardExpired(identifier: StableDocumentIdentifier): boolean {\n * return false;\n * }\n *\n * // make the request in the background if true, return cache state\n * isSoftExpired(identifier: StableDocumentIdentifier): boolean {\n * return false;\n * }\n * }\n * ```\n *\n * @public\n * @property {LivetimesService|undefined} lifetimes\n */\n declare lifetimes?: LifetimesService;\n\n // Private\n declare _graph?: Graph;\n declare _fetchManager: FetchManager;\n declare _adapterCache: Record<string, MinimumAdapterInterface & { store: Store }>;\n declare _serializerCache: Record<string, MinimumSerializerInterface & { store: Store }>;\n declare _requestCache: RequestStateService;\n declare _instanceCache: InstanceCache;\n declare _documentCache: Map<StableDocumentIdentifier, Document<RecordInstance | RecordInstance[] | null | undefined>>;\n\n declare _cbs: { coalesce?: () => void; sync?: () => void; notify?: () => void } | null;\n declare _forceShim: boolean;\n declare _enableAsyncFlush: boolean | null;\n\n // DEBUG-only properties\n declare DISABLE_WAITER?: boolean;\n\n declare _isDestroying: boolean;\n declare _isDestroyed: boolean;\n\n get isDestroying(): boolean {\n return this._isDestroying;\n }\n set isDestroying(value: boolean) {\n this._isDestroying = value;\n }\n get isDestroyed(): boolean {\n return this._isDestroyed;\n }\n set isDestroyed(value: boolean) {\n this._isDestroyed = value;\n }\n\n /**\n @method init\n @private\n */\n constructor(createArgs?: unknown) {\n // @ts-expect-error ember-source types improperly expect createArgs to be `Owner`\n super(createArgs);\n Object.assign(this, createArgs);\n\n this.identifierCache = new IdentifierCache();\n\n this.notifications = new NotificationManager(this);\n\n // private but maybe useful to be here, somewhat intimate\n this.recordArrayManager = new RecordArrayManager({ store: this });\n\n // private\n this._requestCache = new RequestStateService(this);\n this._instanceCache = new InstanceCache(this);\n this._adapterCache = Object.create(null) as Record<string, MinimumAdapterInterface & { store: Store }>;\n this._serializerCache = Object.create(null) as Record<string, MinimumSerializerInterface & { store: Store }>;\n this._documentCache = new Map();\n\n this.isDestroying = false;\n this.isDestroyed = false;\n }\n\n _run(cb: () => void) {\n assert(`EmberData should never encounter a nested run`, !this._cbs);\n const _cbs: { coalesce?: () => void; sync?: () => void; notify?: () => void } = (this._cbs = {});\n if (DEBUG) {\n try {\n cb();\n if (_cbs.coalesce) {\n _cbs.coalesce();\n }\n if (_cbs.sync) {\n _cbs.sync();\n }\n if (_cbs.notify) {\n _cbs.notify();\n }\n } finally {\n this._cbs = null;\n }\n } else {\n cb();\n if (_cbs.coalesce) {\n _cbs.coalesce();\n }\n if (_cbs.sync) {\n _cbs.sync();\n }\n if (_cbs.notify) {\n _cbs.notify();\n }\n this._cbs = null;\n }\n }\n _join(cb: () => void): void {\n if (this._cbs) {\n cb();\n } else {\n this._run(cb);\n }\n }\n\n _schedule(name: 'coalesce' | 'sync' | 'notify', cb: () => void): void {\n assert(`EmberData expects to schedule only when there is an active run`, !!this._cbs);\n assert(`EmberData expects only one flush per queue name, cannot schedule ${name}`, !this._cbs[name]);\n\n this._cbs[name] = cb;\n }\n\n /**\n * Retrieve the RequestStateService instance\n * associated with this Store.\n *\n * This can be used to query the status of requests\n * that have been initiated for a given identifier.\n *\n * @method getRequestStateService\n * @returns {RequestStateService}\n * @public\n */\n getRequestStateService(): RequestStateService {\n return this._requestCache;\n }\n\n _getAllPending(): (Promise<unknown[]> & { length: number }) | void {\n if (TESTING) {\n const all: Promise<unknown>[] = [];\n const pending = this._requestCache._pending;\n\n pending.forEach((requests) => {\n all.push(...requests.map((v) => v[RequestPromise]!));\n });\n this.requestManager._pending.forEach((v) => all.push(v));\n const promise: Promise<unknown[]> & { length: number } = Promise.allSettled(all) as Promise<unknown[]> & {\n length: number;\n };\n promise.length = all.length;\n return promise;\n }\n }\n\n /**\n * Issue a request via the configured RequestManager,\n * inserting the response into the cache and handing\n * back a Future which resolves to a ResponseDocument\n *\n * Resource data is always updated in the cache.\n *\n * Only GET requests have the request result and document\n * cached by default when a cache key is present.\n *\n * The cache key used is `requestConfig.cacheOptions.key`\n * if present, falling back to `requestconfig.url`.\n *\n * Params are not serialized as part of the cache-key, so\n * either ensure they are already in the url or utilize\n * `requestConfig.cacheOptions.key`. For queries issued\n * via the `POST` method `requestConfig.cacheOptions.key`\n * MUST be supplied for the document to be cached.\n *\n * @method request\n * @param {StoreRequestInput} requestConfig\n * @returns {Future}\n * @public\n */\n request<T>(requestConfig: StoreRequestInput): Future<T> {\n // we lazily set the cache handler when we issue the first request\n // because constructor doesn't allow for this to run after\n // the user has had the chance to set the prop.\n let opts: {\n store: Store;\n disableTestWaiter?: boolean;\n [EnableHydration]: true;\n records?: StableRecordIdentifier[];\n } = {\n store: this,\n [EnableHydration]: true,\n };\n\n if (requestConfig.records) {\n const identifierCache = this.identifierCache;\n opts.records = requestConfig.records.map((r) => identifierCache.getOrCreateRecordIdentifier(r));\n }\n\n if (TESTING) {\n if (this.DISABLE_WAITER) {\n opts.disableTestWaiter =\n typeof requestConfig.disableTestWaiter === 'boolean' ? requestConfig.disableTestWaiter : true;\n }\n }\n\n if (LOG_REQUESTS) {\n let options: unknown;\n try {\n options = JSON.parse(JSON.stringify(requestConfig));\n } catch {\n options = requestConfig;\n }\n // eslint-disable-next-line no-console\n console.log(\n `request: [[START]] ${requestConfig.op && !requestConfig.url ? '(LEGACY) ' : ''}${\n requestConfig.op || '<unknown operation>'\n } ${requestConfig.url || '<empty url>'} ${requestConfig.method || '<empty method>'}`,\n options\n );\n }\n\n const future = this.requestManager.request<T>(Object.assign(requestConfig, opts));\n\n future.onFinalize(() => {\n if (LOG_REQUESTS) {\n // eslint-disable-next-line no-console\n console.log(\n `request: [[FINALIZE]] ${requestConfig.op && !requestConfig.url ? '(LEGACY) ' : ''}${\n requestConfig.op || '<unknown operation>'\n } ${requestConfig.url || '<empty url>'} ${requestConfig.method || '<empty method>'}`\n );\n }\n // skip flush for legacy belongsTo\n if (requestConfig.op === 'findBelongsTo' && !requestConfig.url) {\n return;\n }\n this.notifications._flush();\n });\n\n return future;\n }\n\n /**\n * A hook which an app or addon may implement. Called when\n * the Store is attempting to create a Record Instance for\n * a resource.\n *\n * This hook can be used to select or instantiate any desired\n * mechanism of presentating cache data to the ui for access\n * mutation, and interaction.\n *\n * @method instantiateRecord (hook)\n * @param identifier\n * @param createRecordArgs\n * @param recordDataFor deprecated use this.cache\n * @param notificationManager deprecated use this.notifications\n * @returns A record instance\n * @public\n */\n\n /**\n * A hook which an app or addon may implement. Called when\n * the Store is destroying a Record Instance. This hook should\n * be used to teardown any custom record instances instantiated\n * with `instantiateRecord`.\n *\n * @method teardownRecord (hook)\n * @public\n * @param record\n */\n\n /**\n * Provides access to the SchemaDefinitionService instance\n * for this Store instance.\n *\n * The SchemaDefinitionService can be used to query for\n * information about the schema of a resource.\n *\n * @method getSchemaDefinitionService\n * @public\n */\n getSchemaDefinitionService(): SchemaService {\n assert(`You must registerSchemaDefinitionService with the store to use custom model classes`, this._schema);\n return this._schema;\n }\n\n /**\n * DEPRECATED - Use `registerSchema` instead.\n *\n * Allows an app to register a custom SchemaService\n * for use when information about a resource's schema needs\n * to be queried.\n *\n * This method can only be called more than once, but only one schema\n * definition service may exist. Therefore if you wish to chain services\n * you must lookup the existing service and close over it with the new\n * service by accessing `store.schema` prior to registration.\n *\n * For Example:\n *\n * ```ts\n * import Store from '@ember-data/store';\n *\n * class SchemaDelegator {\n * constructor(schema) {\n * this._schema = schema;\n * }\n *\n * doesTypeExist(type: string): boolean {\n * if (AbstractSchemas.has(type)) {\n * return true;\n * }\n * return this._schema.doesTypeExist(type);\n * }\n *\n * attributesDefinitionFor(identifier: RecordIdentifier | { type: string }): AttributesSchema {\n * return this._schema.attributesDefinitionFor(identifier);\n * }\n *\n * relationshipsDefinitionFor(identifier: RecordIdentifier | { type: string }): RelationshipsSchema {\n * const schema = AbstractSchemas.get(identifier.type);\n * return schema || this._schema.relationshipsDefinitionFor(identifier);\n * }\n * }\n *\n * export default class extends Store {\n * constructor(...args) {\n * super(...args);\n *\n * const schema = this.schema;\n * this.registerSchemaDefinitionService(new SchemaDelegator(schema));\n * }\n * }\n * ```\n *\n * @method registerSchemaDefinitionService\n * @param {SchemaService} schema\n * @deprecated\n * @public\n */\n registerSchemaDefinitionService(schema: SchemaService) {\n this._schema = schema;\n }\n /**\n * Allows an app to register a custom SchemaService\n * for use when information about a resource's schema needs\n * to be queried.\n *\n * This method can only be called more than once, but only one schema\n * definition service may exist. Therefore if you wish to chain services\n * you must lookup the existing service and close over it with the new\n * service by accessing `store.schema` prior to registration.\n *\n * For Example:\n *\n * ```ts\n * import Store from '@ember-data/store';\n *\n * class SchemaDelegator {\n * constructor(schema) {\n * this._schema = schema;\n * }\n *\n * doesTypeExist(type: string): boolean {\n * if (AbstractSchemas.has(type)) {\n * return true;\n * }\n * return this._schema.doesTypeExist(type);\n * }\n *\n * attributesDefinitionFor(identifier: RecordIdentifier | { type: string }): AttributesSchema {\n * return this._schema.attributesDefinitionFor(identifier);\n * }\n *\n * relationshipsDefinitionFor(identifier: RecordIdentifier | { type: string }): RelationshipsSchema {\n * const schema = AbstractSchemas.get(identifier.type);\n * return schema || this._schema.relationshipsDefinitionFor(identifier);\n * }\n * }\n *\n * export default class extends Store {\n * constructor(...args) {\n * super(...args);\n *\n * const schema = this.schema;\n * this.registerSchema(new SchemaDelegator(schema));\n * }\n * }\n * ```\n *\n * @method registerSchema\n * @param {SchemaService} schema\n * @public\n */\n registerSchema(schema: SchemaService) {\n this._schema = schema;\n }\n\n /**\n Returns the schema for a particular `modelName`.\n\n When used with Model from @ember-data/model the return is the model class,\n but this is not guaranteed.\n\n If looking to query attribute or relationship information it is\n recommended to use `getSchemaDefinitionService` instead. This method\n should be considered legacy and exists primarily to continue to support\n Adapter/Serializer APIs which expect it's return value in their method\n signatures.\n\n The class of a model might be useful if you want to get a list of all the\n relationship names of the model, see\n [`relationshipNames`](/ember-data/release/classes/Model?anchor=relationshipNames)\n for example.\n\n @method modelFor\n @public\n @param {String} type\n @return {ModelSchema}\n */\n // TODO @deprecate in favor of schema APIs, requires adapter/serializer overhaul or replacement\n\n modelFor(type: string): ModelSchema {\n if (DEBUG) {\n assertDestroyedStoreOnly(this, 'modelFor');\n }\n assert(`You need to pass <type> to the store's modelFor method`, typeof type === 'string' && type.length);\n assert(\n `No model was found for '${type}' and no schema handles the type`,\n this.getSchemaDefinitionService().doesTypeExist(type)\n );\n\n return getShimClass(this, type);\n }\n\n /**\n Create a new record in the current store. The properties passed\n to this method are set on the newly created record.\n\n To create a new instance of a `Post`:\n\n ```js\n store.createRecord('post', {\n title: 'Ember is awesome!'\n });\n ```\n\n To create a new instance of a `Post` that has a relationship with a `User` record:\n\n ```js\n let user = this.store.peekRecord('user', 1);\n store.createRecord('post', {\n title: 'Ember is awesome!',\n user: user\n });\n ```\n\n @method createRecord\n @public\n @param {String} modelName\n @param {Object} inputProperties a hash of properties to set on the\n newly created record.\n @return {Model} record\n */\n createRecord(modelName: string, inputProperties: CreateRecordProperties): RecordInstance {\n if (DEBUG) {\n assertDestroyingStore(this, 'createRecord');\n }\n assert(`You need to pass a model name to the store's createRecord method`, modelName);\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`,\n typeof modelName === 'string'\n );\n\n // This is wrapped in a `run.join` so that in test environments users do not need to manually wrap\n // calls to `createRecord`. The run loop usage here is because we batch the joining and updating\n // of record-arrays via ember's run loop, not our own.\n //\n // to remove this, we would need to move to a new `async` API.\n let record!: RecordInstance;\n this._join(() => {\n let normalizedModelName = normalizeModelName(modelName);\n let properties = { ...inputProperties };\n\n // If the passed properties do not include a primary key,\n // give the adapter an opportunity to generate one. Typically,\n // client-side ID generators will use something like uuid.js\n // to avoid conflicts.\n\n if (properties.id === null || properties.id === undefined) {\n let adapter = this.adapterFor(modelName, true);\n\n if (adapter && adapter.generateIdForRecord) {\n properties.id = adapter.generateIdForRecord(this, modelName, properties);\n } else {\n properties.id = null;\n }\n }\n\n // Coerce ID to a string\n properties.id = coerceId(properties.id);\n const resource = { type: normalizedModelName, id: properties.id };\n\n if (resource.id) {\n const identifier = this.identifierCache.peekRecordIdentifier(resource as ResourceIdentifierObject);\n\n assert(\n `The id ${String(properties.id)} has already been used with another '${normalizedModelName}' record.`,\n !identifier\n );\n }\n\n const identifier = this.identifierCache.createIdentifierForNewRecord(resource);\n const cache = this.cache;\n\n const createOptions = normalizeProperties(this, identifier, properties);\n const resultProps = cache.clientDidCreate(identifier, createOptions);\n\n record = this._instanceCache.getRecord(identifier, resultProps);\n });\n return record;\n }\n\n /**\n For symmetry, a record can be deleted via the store.\n\n Example\n\n ```javascript\n let post = store.createRecord('post', {\n title: 'Ember is awesome!'\n });\n\n store.deleteRecord(post);\n ```\n\n @method deleteRecord\n @public\n @param {Model} record\n */\n deleteRecord(record: RecordInstance): void {\n if (DEBUG) {\n assertDestroyingStore(this, 'deleteRecord');\n }\n\n const identifier = peekRecordIdentifier(record);\n const cache = this.cache;\n assert(`expected the record to be connected to a cache`, identifier);\n this._join(() => {\n cache.setIsDeleted(identifier, true);\n\n if (cache.isNew(identifier)) {\n this._instanceCache.unloadRecord(identifier);\n }\n });\n }\n\n /**\n For symmetry, a record can be unloaded via the store.\n This will cause the record to be destroyed and freed up for garbage collection.\n\n Example\n\n ```javascript\n store.findRecord('post', 1).then(function(post) {\n store.unloadRecord(post);\n });\n ```\n\n @method unloadRecord\n @public\n @param {Model} record\n */\n unloadRecord(record: RecordInstance): void {\n if (DEBUG) {\n assertDestroyingStore(this, 'unloadRecord');\n }\n const identifier = peekRecordIdentifier(record);\n if (identifier) {\n this._instanceCache.unloadRecord(identifier);\n }\n }\n\n /**\n This method returns a record for a given identifier or type and id combination.\n\n The `findRecord` method will always resolve its promise with the same\n object for a given identifier or type and `id`.\n\n The `findRecord` method will always return a **promise** that will be\n resolved with the record.\n\n **Example 1**\n\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n\n export default class PostRoute extends Route {\n model({ post_id }) {\n return this.store.findRecord('post', post_id);\n }\n }\n ```\n\n **Example 2**\n\n `findRecord` can be called with a single identifier argument instead of the combination\n of `type` (modelName) and `id` as separate arguments. You may recognize this combo as\n the typical pairing from [JSON:API](https://jsonapi.org/format/#document-resource-object-identification)\n\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n\n export default class PostRoute extends Route {\n model({ post_id: id }) {\n return this.store.findRecord({ type: 'post', id });\n }\n }\n ```\n\n **Example 3**\n\n If you have previously received an lid via an Identifier for this record, and the record\n has already been assigned an id, you can find the record again using just the lid.\n\n ```app/routes/post.js\n store.findRecord({ lid });\n ```\n\n If the record is not yet available, the store will ask the adapter's `findRecord`\n method to retrieve and supply the necessary data. If the record is already present\n in the store, it depends on the reload behavior _when_ the returned promise\n resolves.\n\n ### Preloading\n\n You can optionally `preload` specific attributes and relationships that you know of\n by passing them via the passed `options`.\n\n For example, if your Ember route looks like `/posts/1/comments/2` and your API route\n for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment\n without also fetching the post you can pass in the post to the `findRecord` call:\n\n ```app/routes/post-comments.js\n import Route from '@ember/routing/route';\n\n export default class PostRoute extends Route {\n model({ post_id, comment_id: id }) {\n return this.store.findRecord({ type: 'comment', id, { preload: { post: post_id }} });\n }\n }\n ```\n\n In your adapter you can then access this id without triggering a network request via the\n snapshot:\n\n ```app/adapters/application.js\n import EmberObject from '@ember/object';\n\n export default class Adapter extends EmberObject {\n\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n\n if (type === 'comment')\n let postId = snapshot.belongsTo('post', { id: true });\n\n return fetch(`./posts/${postId}/comments/${id}`)\n .then(response => response.json())\n }\n }\n }\n ```\n\n This could also be achieved by supplying the post id to the adapter via the adapterOptions\n property on the options hash.\n\n ```app/routes/post-comments.js\n import Route from '@ember/routing/route';\n\n export default class PostRoute extends Route {\n model({ post_id, comment_id: id }) {\n return this.store.findRecord({ type: 'comment', id, { adapterOptions: { post: post_id }} });\n }\n }\n ```\n\n ```app/adapters/application.js\n import EmberObject from '@ember/object';\n\n export default class Adapter extends EmberObject {\n\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n\n if (type === 'comment')\n let postId = snapshot.adapterOptions.post;\n\n return fetch(`./posts/${postId}/comments/${id}`)\n .then(response => response.json())\n }\n }\n }\n ```\n\n If you have access to the post model you can also pass the model itself to preload:\n\n ```javascript\n let post = await store.findRecord('post', 1);\n let comment = await store.findRecord('comment', 2, { post: myPostModel });\n ```\n\n ### Reloading\n\n The reload behavior is configured either via the passed `options` hash or\n the result of the adapter's `shouldReloadRecord`.\n\n If `{ reload: true }` is passed or `adapter.shouldReloadRecord` evaluates\n to `true`, then the returned promise resolves once the adapter returns\n data, regardless if the requested record is already in the store:\n\n ```js\n store.push({\n data: {\n id: 1,\n type: 'post',\n revision: 1\n }\n });\n\n // adapter#findRecord resolves with\n // [\n // {\n // id: 1,\n // type: 'post',\n // revision: 2\n // }\n // ]\n store.findRecord('post', 1, { reload: true }).then(function(post) {\n post.revision; // 2\n });\n ```\n\n If no reload is indicated via the above mentioned ways, then the promise\n immediately resolves with the cached version in the store.\n\n ### Background Reloading\n\n Optionally, if `adapter.shouldBackgroundReloadRecord` evaluates to `true`,\n then a background reload is started, which updates the records' data, once\n it is available:\n\n ```js\n // app/adapters/post.js\n import ApplicationAdapter from \"./application\";\n\n export default class PostAdapter extends ApplicationAdapter {\n shouldReloadRecord(store, snapshot) {\n return false;\n },\n\n shouldBackgroundReloadRecord(store, snapshot) {\n return true;\n }\n });\n\n // ...\n\n store.push({\n data: {\n id: 1,\n type: 'post',\n revision: 1\n }\n });\n\n let blogPost = store.findRecord('post', 1).then(function(post) {\n post.revision; // 1\n });\n\n // later, once adapter#findRecord resolved with\n // [\n // {\n // id: 1,\n // type: 'post',\n // revision: 2\n // }\n // ]\n\n blogPost.revision; // 2\n ```\n\n If you would like to force or prevent background reloading, you can set a\n boolean value for `backgroundReload` in the options object for\n `findRecord`.\n\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n\n export default class PostEditRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { backgroundReload: false });\n }\n }\n ```\n\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to your adapter via the snapshot\n\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n\n export default class PostEditRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, {\n adapterOptions: { subscribe: false }\n });\n }\n }\n ```\n\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n\n export default class PostAdapter extends MyCustomAdapter {\n findRecord(store, type, id, snapshot) {\n if (snapshot.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n\n See [peekRecord](../methods/peekRecord?anchor=peekRecord) to get the cached version of a record.\n\n ### Retrieving Related Model Records\n\n If you use an adapter such as Ember's default\n [`JSONAPIAdapter`](/ember-data/release/classes/JSONAPIAdapter)\n that supports the [JSON API specification](http://jsonapi.org/) and if your server\n endpoint supports the use of an\n ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n you can use `findRecord()` or `findAll()` to automatically retrieve additional records related to\n the one you request by supplying an `include` parameter in the `options` object.\n\n For example, given a `post` model that has a `hasMany` relationship with a `comment`\n model, when we retrieve a specific post we can have the server also return that post's\n comments in the same request:\n\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n\n export default class PostRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { include: 'comments' });\n }\n }\n ```\n\n ```app/adapters/application.js\n import EmberObject from '@ember/object';\n\n export default class Adapter extends EmberObject {\n\n findRecord(store, schema, id, snapshot) {\n let type = schema.modelName;\n\n if (type === 'post')\n let includes = snapshot.adapterOptions.include;\n\n return fetch(`./posts/${postId}?include=${includes}`)\n .then(response => response.json())\n }\n }\n }\n ```\n\n In this case, the post's comments would then be available in your template as\n `model.comments`.\n\n Multiple relationships can be requested using an `include` parameter consisting of a\n comma-separated list (without white-space) while nested relationships can be specified\n using a dot-separated sequence of relationship names. So to request both the post's\n comments and the authors of those comments the request would look like this:\n\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n\n export default class PostRoute extends Route {\n model(params) {\n return this.store.findRecord('post', params.post_id, { include: 'comments,comments.author' });\n }\n }\n ```\n\n ### Retrieving Specific Fields by Type\n\n If your server endpoint supports the use of a ['fields' query parameter](https://jsonapi.org/format/#fetching-sparse-fieldsets),\n you can use pass those fields through to your server. At this point in time, this requires a few manual steps on your part.\n\n 1. Implement `buildQuery` in your adapter.\n\n ```app/adapters/application.js\n buildQuery(snapshot) {\n let query = super.buildQuery(...arguments);\n\n let { fields } = snapshot.adapterOptions;\n\n if (fields) {\n query.fields = fields;\n }\n\n return query;\n }\n ```\n\n 2. Then pass through the applicable fields to your `findRecord` request.\n\n Given a `post` model with attributes body, title, publishDate and meta, you can retrieve a filtered list of attributes.\n\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default Route.extend({\n model(params) {\n return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title' } });\n }\n });\n ```\n\n Moreover, you can filter attributes on related models as well. If a `post` has a `belongsTo` relationship to a user,\n just include the relationship key and attributes.\n\n ```app/routes/post.js\n import Route from '@ember/routing/route';\n export default Route.extend({\n model(params) {\n return this.store.findRecord('post', params.post_id, { adapterOptions: { fields: { post: 'body,title', user: 'name,email' } });\n }\n });\n ```\n\n @since 1.13.0\n @method findRecord\n @public\n @param {String|object} modelName - either a string representing the modelName or a ResourceIdentifier object containing both the type (a string) and the id (a string) for the record or an lid (a string) of an existing record\n @param {(String|Integer|Object)} id - optional object with options for the request only if the first param is a ResourceIdentifier, else the string id of the record to be retrieved\n @param {Object} [options] - if the first param is a string this will be the optional options for the request. See examples for available options.\n @return {Promise} promise\n */\n findRecord(resource: string, id: string | number, options?: FindOptions): Promise<RecordInstance>;\n findRecord(resource: ResourceIdentifierObject, id?: FindOptions): Promise<RecordInstance>;\n findRecord(\n resource: string | ResourceIdentifierObject,\n id?: string | number | FindOptions,\n options?: FindOptions\n ): Promise<RecordInstance> {\n if (DEBUG) {\n assertDestroyingStore(this, 'findRecord');\n }\n\n assert(\n `You need to pass a modelName or resource identifier as the first argument to the store's findRecord method`,\n resource\n );\n if (isMaybeIdentifier(resource)) {\n options = id as FindOptions | undefined;\n } else {\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${resource}`,\n typeof resource === 'string'\n );\n const type = normalizeModelName(resource);\n const normalizedId = ensureStringId(id as string | number);\n resource = constructResource(type, normalizedId);\n }\n\n const identifier = this.identifierCache.getOrCreateRecordIdentifier(resource);\n options = options || {};\n\n if (options.preload) {\n // force reload if we preload to ensure we don't resolve the promise\n // until we are complete, else we will end up background-reloading\n // even for initial load.\n if (!this._instanceCache.recordIsLoaded(identifier)) {\n options.reload = true;\n }\n this._join(() => {\n preloadData(this, identifier, options!.preload!);\n });\n }\n\n const promise = this.request<RecordInstance>({\n op: 'findRecord',\n data: {\n record: identifier,\n options,\n },\n cacheOptions: { [SkipCache as symbol]: true },\n });\n\n return promise.then((document) => {\n return document.content;\n });\n }\n\n /**\n Get the reference for the specified record.\n\n Example\n\n ```javascript\n let userRef = store.getReference('user', 1);\n\n // check if the user is loaded\n let isLoaded = userRef.value() !== null;\n\n // get the record of the reference (null if not yet available)\n let user = userRef.value();\n\n // get the identifier of the reference\n if (userRef.remoteType() === 'id') {\n let id = userRef.id();\n }\n\n // load user (via store.find)\n userRef.load().then(...)\n\n // or trigger a reload\n userRef.reload().then(...)\n\n // provide data for reference\n userRef.push({ id: 1, username: '@user' }).then(function(user) {\n userRef.value() === user;\n });\n ```\n\n @method getReference\n @public\n @param {String|object} resource - modelName (string) or Identifier (object)\n @param {String|Integer} id\n @since 2.5.0\n @return {RecordReference}\n */\n // TODO @deprecate getReference (and references generally)\n getReference(resource: string | ResourceIdentifierObject, id: string | number): RecordReference {\n if (DEBUG) {\n assertDestroyingStore(this, 'getReference');\n }\n\n let resourceIdentifier: ResourceIdentifierObject;\n if (arguments.length === 1 && isMaybeIdentifier(resource)) {\n resourceIdentifier = resource;\n } else {\n const type = normalizeModelName(resource as string);\n const normalizedId = ensureStringId(id);\n resourceIdentifier = constructResource(type, normalizedId);\n }\n\n assert(\n 'getReference expected to receive either a resource identifier or type and id as arguments',\n isMaybeIdentifier(resourceIdentifier)\n );\n\n let identifier: StableRecordIdentifier = this.identifierCache.getOrCreateRecordIdentifier(resourceIdentifier);\n\n return this._instanceCache.getReference(identifier);\n }\n\n /**\n Get a record by a given type and ID without triggering a fetch.\n\n This method will synchronously return the record if it is available in the store,\n otherwise it will return `null`. A record is available if it has been fetched earlier, or\n pushed manually into the store.\n\n See [findRecord](../methods/findRecord?anchor=findRecord) if you would like to request this record from the backend.\n\n _Note: This is a synchronous method and does not return a promise._\n\n **Example 1**\n\n ```js\n let post = store.peekRecord('post', 1);\n\n post.id; // 1\n ```\n\n `peekRecord` can be called with a single identifier argument instead of the combination\n of `type` (modelName) and `id` as separate arguments. You may recognize this combo as\n the typical pairing from [JSON:API](https://jsonapi.org/format/#document-resource-object-identification)\n\n **Example 2**\n\n ```js\n let post = store.peekRecord({ type: 'post', id });\n post.id; // 1\n ```\n\n If you have previously received an lid from an Identifier for this record, you can lookup the record again using\n just the lid.\n\n **Example 3**\n\n ```js\n let post = store.peekRecord({ lid });\n post.id; // 1\n ```\n\n\n @since 1.13.0\n @method peekRecord\n @public\n @param {String|object} modelName - either a string representing the modelName or a ResourceIdentifier object containing both the type (a string) and the id (a string) for the record or an lid (a string) of an existing record\n @param {String|Integer} id - optional only if the first param is a ResourceIdentifier, else the string id of the record to be retrieved.\n @return {Model|null} record\n */\n peekRecord(identifier: string, id: string | number): RecordInstance | null;\n peekRecord(identifier: ResourceIdentifierObject): RecordInstance | null;\n peekRecord(identifier: ResourceIdentifierObject | string, id?: string | number): RecordInstance | null {\n if (arguments.length === 1 && isMaybeIdentifier(identifier)) {\n const stableIdentifier = this.identifierCache.peekRecordIdentifier(identifier);\n const isLoaded = stableIdentifier && this._instanceCache.recordIsLoaded(stableIdentifier);\n // TODO come up with a better mechanism for determining if we have data and could peek.\n // this is basically an \"are we not empty\" query.\n return isLoaded ? this._instanceCache.getRecord(stableIdentifier) : null;\n }\n\n if (DEBUG) {\n assertDestroyingStore(this, 'peekRecord');\n }\n\n assert(`You need to pass a model name to the store's peekRecord method`, identifier);\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${String(\n identifier\n )}`,\n typeof identifier === 'string'\n );\n\n const type = normalizeModelName(identifier);\n const normalizedId = ensureStringId(id);\n const resource = { type, id: normalizedId };\n const stableIdentifier = this.identifierCache.peekRecordIdentifier(resource);\n const isLoaded = stableIdentifier && this._instanceCache.recordIsLoaded(stableIdentifier);\n\n return isLoaded ? this._instanceCache.getRecord(stableIdentifier) : null;\n }\n\n /**\n This method delegates a query to the adapter. This is the one place where\n adapter-level semantics are exposed to the application.\n\n Each time this method is called a new request is made through the adapter.\n\n Exposing queries this way seems preferable to creating an abstract query\n language for all server-side queries, and then require all adapters to\n implement them.\n\n ---\n\n If you do something like this:\n\n ```javascript\n store.query('person', { page: 1 });\n ```\n\n The request made to the server will look something like this:\n\n ```\n GET \"/api/v1/person?page=1\"\n ```\n\n ---\n\n If you do something like this:\n\n ```javascript\n store.query('person', { ids: [1, 2, 3] });\n ```\n\n The request made to the server will look something like this:\n\n ```\n GET \"/api/v1/person?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3\"\n decoded: \"/api/v1/person?ids[]=1&ids[]=2&ids[]=3\"\n ```\n\n This method returns a promise, which is resolved with a\n [`Collection`](/ember-data/release/classes/Collection)\n once the server returns.\n\n @since 1.13.0\n @method query\n @public\n @param {String} modelName\n @param {any} query an opaque query to be used by the adapter\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter.query\n @return {Promise} promise\n */\n query(\n modelName: string,\n query: Record<string, unknown>,\n options: { [key: string]: unknown; adapterOptions?: Record<string, unknown> }\n ): Promise<Collection> {\n if (DEBUG) {\n assertDestroyingStore(this, 'query');\n }\n assert(`You need to pass a model name to the store's query method`, modelName);\n assert(`You need to pass a query hash to the store's query method`, query);\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`,\n typeof modelName === 'string'\n );\n\n const promise = this.request<Collection>({\n op: 'query',\n data: {\n type: normalizeModelName(modelName),\n query,\n options: options || {},\n },\n cacheOptions: { [SkipCache as symbol]: true },\n });\n\n return promise.then((document) => document.content);\n }\n\n /**\n This method makes a request for one record, where the `id` is not known\n beforehand (if the `id` is known, use [`findRecord`](../methods/findRecord?anchor=findRecord)\n instead).\n\n This method can be used when it is certain that the server will return a\n single object for the primary data.\n\n Each time this method is called a new request is made through the adapter.\n\n Let's assume our API provides an endpoint for the currently logged in user\n via:\n\n ```\n // GET /api/current_user\n {\n user: {\n id: 1234,\n username: 'admin'\n }\n }\n ```\n\n Since the specific `id` of the `user` is not known beforehand, we can use\n `queryRecord` to get the user:\n\n ```javascript\n store.queryRecord('user', {}).then(function(user) {\n let username = user.username;\n // do thing\n });\n ```\n\n The request is made through the adapters' `queryRecord`:\n\n ```app/adapters/user.js\n import Adapter from '@ember-data/adapter';\n import $ from 'jquery';\n\n export default class UserAdapter extends Adapter {\n queryRecord(modelName, query) {\n return $.getJSON('/api/current_user');\n }\n }\n ```\n\n Note: the primary use case for `store.queryRecord` is when a single record\n is queried and the `id` is not known beforehand. In all other cases\n `store.query` and using the first item of the array is likely the preferred\n way:\n\n ```\n // GET /users?username=unique\n {\n data: [{\n id: 1234,\n type: 'user',\n attributes: {\n username: \"unique\"\n }\n }]\n }\n ```\n\n ```javascript\n store.query('user', { username: 'unique' }).then(function(users) {\n return users.firstObject;\n }).then(function(user) {\n let id = user.id;\n });\n ```\n\n This method returns a promise, which resolves with the found record.\n\n If the adapter returns no data for the primary data of the payload, then\n `queryRecord` resolves with `null`:\n\n ```\n // GET /users?username=unique\n {\n data: null\n }\n ```\n\n ```javascript\n store.queryRecord('user', { username: 'unique' }).then(function(user) {\n // user is null\n });\n ```\n\n @since 1.13.0\n @method queryRecord\n @public\n @param {String} modelName\n @param {any} query an opaque query to be used by the adapter\n @param {Object} options optional, may include `adapterOptions` hash which will be passed to adapter.queryRecord\n @return {Promise} promise which resolves with the found record or `null`\n */\n queryRecord(modelName: string, query: Record<string, unknown>, options?): Promise<RecordInstance | null> {\n if (DEBUG) {\n assertDestroyingStore(this, 'queryRecord');\n }\n assert(`You need to pass a model name to the store's queryRecord method`, modelName);\n assert(`You need to pass a query hash to the store's queryRecord method`, query);\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`,\n typeof modelName === 'string'\n );\n\n const promise = this.request<RecordInstance | null>({\n op: 'queryRecord',\n data: {\n type: normalizeModelName(modelName),\n query,\n options: options || {},\n },\n cacheOptions: { [SkipCache as symbol]: true },\n });\n\n return promise.then((document) => document.content);\n }\n\n /**\n `findAll` asks the adapter's `findAll` method to find the records for the\n given type, and returns a promise which will resolve with all records of\n this type present in the store, even if the adapter only returns a subset\n of them.\n\n ```app/routes/authors.js\n import Route from '@ember/routing/route';\n\n export default class AuthorsRoute extends Route {\n model(params) {\n return this.store.findAll('author');\n }\n }\n ```\n\n _When_ the returned promise resolves depends on the reload behavior,\n configured via the passed `options` hash and the result of the adapter's\n `shouldReloadAll` method.\n\n ### Reloading\n\n If `{ reload: true }` is passed or `adapter.shouldReloadAll` evaluates to\n `true`, then the returned promise resolves once the adapter returns data,\n regardless if there are already records in the store:\n\n ```js\n store.push({\n data: {\n id: 'first',\n type: 'author'\n }\n });\n\n // adapter#findAll resolves with\n // [\n // {\n // id: 'second',\n // type: 'author'\n // }\n // ]\n store.findAll('author', { reload: true }).then(function(authors) {\n authors.getEach('id'); // ['first', 'second']\n });\n ```\n\n If no reload is indicated via the above mentioned ways, then the promise\n immediately resolves with all the records currently loaded in the store.\n\n ### Background Reloading\n\n Optionally, if `adapter.shouldBackgroundReloadAll` evaluates to `true`,\n then a background reload is started. Once this resolves, the array with\n which the promise resolves, is updated automatically so it contains all the\n records in the store:\n\n ```app/adapters/application.js\n import Adapter from '@ember-data/adapter';\n\n export default class ApplicationAdapter extends Adapter {\n shouldReloadAll(store, snapshotsArray) {\n return false;\n },\n\n shouldBackgroundReloadAll(store, snapshotsArray) {\n return true;\n }\n });\n\n // ...\n\n store.push({\n data: {\n id: 'first',\n type: 'author'\n }\n });\n\n let allAuthors;\n store.findAll('author').then(function(authors) {\n authors.getEach('id'); // ['first']\n\n allAuthors = authors;\n });\n\n // later, once adapter#findAll resolved with\n // [\n // {\n // id: 'second',\n // type: 'author'\n // }\n // ]\n\n allAuthors.getEach('id'); // ['first', 'second']\n ```\n\n If you would like to force or prevent background reloading, you can set a\n boolean value for `backgroundReload` in the options object for\n `findAll`.\n\n ```app/routes/post/edit.js\n import Route from '@ember/routing/route';\n\n export default class PostEditRoute extends Route {\n model() {\n return this.store.findAll('post', { backgroundReload: false });\n }\n }\n ```\n\n If you pass an object on the `adapterOptions` property of the options\n argument it will be passed to you adapter via the `snapshotRecordArray`\n\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n\n export default class PostsRoute extends Route {\n model(params) {\n return this.store.findAll('post', {\n adapterOptions: { subscribe: false }\n });\n }\n }\n ```\n\n ```app/adapters/post.js\n import MyCustomAdapter from './custom-adapter';\n\n export default class UserAdapter extends MyCustomAdapter {\n findAll(store, type, sinceToken, snapshotRecordArray) {\n if (snapshotRecordArray.adapterOptions.subscribe) {\n // ...\n }\n // ...\n }\n }\n ```\n\n See [peekAll](../methods/peekAll?anchor=peekAll) to get an array of current records in the\n store, without waiting until a reload is finished.\n\n ### Retrieving Related Model Records\n\n If you use an adapter such as Ember's default\n [`JSONAPIAdapter`](/ember-data/release/classes/JSONAPIAdapter)\n that supports the [JSON API specification](http://jsonapi.org/) and if your server\n endpoint supports the use of an\n ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n you can use `findAll()` to automatically retrieve additional records related to\n those requested by supplying an `include` parameter in the `options` object.\n\n For example, given a `post` model that has a `hasMany` relationship with a `comment`\n model, when we retrieve all of the post records we can have the server also return\n all of the posts' comments in the same request:\n\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n\n export default class PostsRoute extends Route {\n model() {\n return this.store.findAll('post', { include: 'comments' });\n }\n }\n ```\n Multiple relationships can be requested using an `include` parameter consisting of a\n comma-separated list (without white-space) while nested relationships can be specified\n using a dot-separated sequence of relationship names. So to request both the posts'\n comments and the authors of those comments the request would look like this:\n\n ```app/routes/posts.js\n import Route from '@ember/routing/route';\n\n export default class PostsRoute extends Route {\n model() {\n return this.store.findAll('post', { include: 'comments,comments.author' });\n }\n }\n ```\n\n See [query](../methods/query?anchor=query) to only get a subset of records from the server.\n\n @since 1.13.0\n @method findAll\n @public\n @param {String} modelName\n @param {Object} options\n @return {Promise} promise\n */\n findAll(modelName: string, options: { reload?: boolean; backgroundReload?: boolean } = {}): Promise<IdentifierArray> {\n if (DEBUG) {\n assertDestroyingStore(this, 'findAll');\n }\n assert(`You need to pass a model name to the store's findAll method`, modelName);\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`,\n typeof modelName === 'string'\n );\n\n const promise = this.request<IdentifierArray>({\n op: 'findAll',\n data: {\n type: normalizeModelName(modelName),\n options: options || {},\n },\n cacheOptions: { [SkipCache as symbol]: true },\n });\n\n return promise.then((document) => document.content);\n }\n\n /**\n This method returns a filtered array that contains all of the\n known records for a given type in the store.\n\n Note that because it's just a filter, the result will contain any\n locally created records of the type, however, it will not make a\n request to the backend to retrieve additional records. If you\n would like to request all the records from the backend please use\n [store.findAll](../methods/findAll?anchor=findAll).\n\n Also note that multiple calls to `peekAll` for a given type will always\n return the same `RecordArray`.\n\n Example\n\n ```javascript\n let localPosts = store.peekAll('post');\n ```\n\n @since 1.13.0\n @method peekAll\n @public\n @param {String} modelName\n @return {RecordArray}\n */\n peekAll(modelName: string): IdentifierArray {\n if (DEBUG) {\n assertDestroyingStore(this, 'peekAll');\n }\n assert(`You need to pass a model name to the store's peekAll method`, modelName);\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`,\n typeof modelName === 'string'\n );\n\n let type = normalizeModelName(modelName);\n return this.recordArrayManager.liveArrayFor(type);\n }\n\n /**\n This method unloads all records in the store.\n It schedules unloading to happen during the next run loop.\n\n Optionally you can pass a type which unload all records for a given type.\n\n ```javascript\n store.unloadAll();\n store.unloadAll('post');\n ```\n\n @method unloadAll\n @public\n @param {String} modelName\n */\n unloadAll(modelName?: string) {\n if (DEBUG) {\n assertDestroyedStoreOnly(this, 'unloadAll');\n }\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${String(\n modelName\n )}`,\n !modelName || typeof modelName === 'string'\n );\n\n this._join(() => {\n if (modelName === undefined) {\n // destroy the graph before unloadAll\n // since then we avoid churning relationships\n // during unload\n this._graph?.identifiers.clear();\n\n this.recordArrayManager.clear();\n this._instanceCache.clear();\n } else {\n let normalizedModelName = normalizeModelName(modelName);\n this._instanceCache.clear(normalizedModelName);\n }\n });\n }\n\n /**\n Push some data for a given type into the store.\n\n This method expects normalized [JSON API](http://jsonapi.org/) document. This means you have to follow [JSON API specification](http://jsonapi.org/format/) with few minor adjustments:\n - record's `type` should always be in singular, dasherized form\n - members (properties) should be camelCased\n\n [Your primary data should be wrapped inside `data` property](http://jsonapi.org/format/#document-top-level):\n\n ```js\n store.push({\n data: {\n // primary data for single record of type `Person`\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Daniel',\n lastName: 'Kmak'\n }\n }\n });\n ```\n\n [Demo.](http://ember-twiddle.com/fb99f18cd3b4d3e2a4c7)\n\n `data` property can also hold an array (of records):\n\n ```js\n store.push({\n data: [\n // an array of records\n {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Daniel',\n lastName: 'Kmak'\n }\n },\n {\n id: '2',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n }\n }\n ]\n });\n ```\n\n [Demo.](http://ember-twiddle.com/69cdbeaa3702159dc355)\n\n There are some typical properties for `JSONAPI` payload:\n * `id` - mandatory, unique record's key\n * `type` - mandatory string which matches `model`'s dasherized name in singular form\n * `attributes` - object which holds data for record attributes - `attr`'s declared in model\n * `relationships` - object which must contain any of the following properties under each relationships' respective key (example path is `relationships.achievements.data`):\n - [`links`](http://jsonapi.org/format/#document-links)\n - [`data`](http://jsonapi.org/format/#document-resource-object-linkage) - place for primary data\n - [`meta`](http://jsonapi.org/format/#document-meta) - object which contains meta-information about relationship\n\n For this model:\n\n ```app/models/person.js\n import Model, { attr, hasMany } from '@ember-data/model';\n\n export default class PersonRoute extends Route {\n @attr('string') firstName;\n @attr('string') lastName;\n\n @hasMany('person') children;\n }\n ```\n\n To represent the children as IDs:\n\n ```js\n {\n data: {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n },\n relationships: {\n children: {\n data: [\n {\n id: '2',\n type: 'person'\n },\n {\n id: '3',\n type: 'person'\n },\n {\n id: '4',\n type: 'person'\n }\n ]\n }\n }\n }\n }\n ```\n\n [Demo.](http://ember-twiddle.com/343e1735e034091f5bde)\n\n To represent the children relationship as a URL:\n\n ```js\n {\n data: {\n id: '1',\n type: 'person',\n attributes: {\n firstName: 'Tom',\n lastName: 'Dale'\n },\n relationships: {\n children: {\n links: {\n related: '/people/1/children'\n }\n }\n }\n }\n }\n ```\n\n If you're streaming data or implementing an adapter, make sure\n that you have converted the incoming data into this form. The\n store's [normalize](../methods/normalize?anchor=normalize) method is a convenience\n helper for converting a json payload into the form Ember Data\n expects.\n\n ```js\n store.push(store.normalize('person', data));\n ```\n\n This method can be used both to push in brand new\n records, as well as to update existing records.\n\n @method push\n @public\n @param {Object} data\n @return the record(s) that was created or\n updated.\n */\n push(data: EmptyResourceDocument): null;\n push(data: SingleResourceDocument): RecordInstance;\n push(data: CollectionResourceDocument): RecordInstance[];\n push(data: JsonApiDocument): RecordInstance | RecordInstance[] | null {\n if (DEBUG) {\n assertDestroyingStore(this, 'push');\n }\n let pushed = this._push(data, false);\n\n if (Array.isArray(pushed)) {\n let records = pushed.map((identifier) => this._instanceCache.getRecord(identifier));\n return records;\n }\n\n if (pushed === null) {\n return null;\n }\n\n return this._instanceCache.getRecord(pushed);\n }\n\n /**\n Push some data in the form of a json-api document into the store,\n without creating materialized records.\n\n @method _push\n @private\n @param {Object} jsonApiDoc\n @return {StableRecordIdentifier|Array<StableRecordIdentifier>|null} identifiers for the primary records that had data loaded\n */\n _push(\n jsonApiDoc: JsonApiDocument,\n asyncFlush?: boolean\n ): StableExistingRecordIdentifier | StableExistingRecordIdentifier[] | null {\n if (DEBUG) {\n assertDestroyingStore(this, '_push');\n }\n if (LOG_PAYLOADS) {\n try {\n let data: unknown = JSON.parse(JSON.stringify(jsonApiDoc)) as unknown;\n // eslint-disable-next-line no-console\n console.log('EmberData | Payload - push', data);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log('EmberData | Payload - push', jsonApiDoc);\n }\n }\n if (asyncFlush) {\n this._enableAsyncFlush = true;\n }\n\n let ret!: ResourceDocument;\n this._join(() => {\n ret = this.cache.put({ content: jsonApiDoc });\n });\n\n this._enableAsyncFlush = null;\n\n return 'data' in ret ? ret.data : null;\n }\n\n /**\n Push some raw data into the store.\n\n This method can be used both to push in brand new\n records, as well as to update existing records. You\n can push in more than one type of object at once.\n All objects should be in the format expected by the\n serializer.\n\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n\n export default class ApplicationSerializer extends RESTSerializer;\n ```\n\n ```js\n let pushData = {\n posts: [\n { id: 1, postTitle: \"Great post\", commentIds: [2] }\n ],\n comments: [\n { id: 2, commentBody: \"Insightful comment\" }\n ]\n }\n\n store.pushPayload(pushData);\n ```\n\n By default, the data will be deserialized using a default\n serializer (the application serializer if it exists).\n\n Alternatively, `pushPayload` will accept a model type which\n will determine which serializer will process the payload.\n\n ```app/serializers/application.js\n import RESTSerializer from '@ember-data/serializer/rest';\n\n export default class ApplicationSerializer extends RESTSerializer;\n ```\n\n ```app/serializers/post.js\n import JSONSerializer from '@ember-data/serializer/json';\n\n export default JSONSerializer;\n ```\n\n ```js\n store.pushPayload(pushData); // Will use the application serializer\n store.pushPayload('post', pushData); // Will use the post serializer\n ```\n\n @method pushPayload\n @public\n @param {String} modelName Optionally, a model type used to determine which serializer will be used\n @param {Object} inputPayload\n */\n // TODO @runspired @deprecate pushPayload in favor of looking up the serializer\n pushPayload(modelName: string, inputPayload: JSONObject): void {\n if (DEBUG) {\n assertDestroyingStore(this, 'pushPayload');\n }\n\n const payload = inputPayload || (modelName as unknown as object);\n const normalizedModelName = inputPayload ? normalizeModelName(modelName) : 'application';\n const serializer = this.serializerFor(normalizedModelName);\n\n assert(\n `You cannot use 'store.pushPayload(<type>, <payload>)' unless the serializer for '${normalizedModelName}' defines 'pushPayload'`,\n serializer && typeof serializer.pushPayload === 'function'\n );\n serializer.pushPayload(this, payload);\n }\n\n /**\n * Trigger a save for a Record.\n *\n * @method saveRecord\n * @public\n * @param {RecordInstance} record\n * @param options\n * @returns {Promise<RecordInstance>}\n */\n saveRecord(record: RecordInstance, options: Record<string, unknown> = {}): Promise<RecordInstance> {\n if (DEBUG) {\n assertDestroyingStore(this, 'saveRecord');\n }\n assert(`Unable to initate save for a record in a disconnected state`, storeFor(record));\n let identifier = recordIdentifierFor(record);\n const cache = this.cache;\n\n if (!identifier) {\n // this commonly means we're disconnected\n // but just in case we reject here to prevent bad things.\n return Promise.reject(`Record Is Disconnected`);\n }\n // TODO we used to check if the record was destroyed here\n assert(\n `Cannot initiate a save request for an unloaded record: ${identifier.lid}`,\n this._instanceCache.recordIsLoaded(identifier)\n );\n if (resourceIsFullyDeleted(this._instanceCache, identifier)) {\n return Promise.resolve(record);\n }\n\n if (!options) {\n options = {};\n }\n let operation: 'createRecord' | 'deleteRecord' | 'updateRecord' = 'updateRecord';\n\n if (cache.isNew(identifier)) {\n operation = 'createRecord';\n } else if (cache.isDeleted(identifier)) {\n operation = 'deleteRecord';\n }\n\n const request = {\n op: operation,\n data: {\n options,\n record: identifier,\n },\n cacheOptions: { [SkipCache as symbol]: true },\n };\n\n // we lie here on the type because legacy doesn't have enough context\n cache.willCommit(identifier, { request } as unknown as StoreRequestContext);\n\n return this.request<RecordInstance>(request).then((document) => document.content);\n }\n\n /**\n * Instantiation hook allowing applications or addons to configure the store\n * to utilize a custom Cache implementation.\n *\n * This hook should not be called directly by consuming applications or libraries.\n * Use `Store.cache` to access the Cache instance.\n *\n * @method createCache (hook)\n * @public\n * @param storeWrapper\n * @returns {Cache}\n */\n\n /**\n * Returns the cache instance associated to this Store, instantiates the Cache\n * if necessary via `Store.createCache`\n *\n * @property {Cache} cache\n * @public\n */\n get cache(): Cache {\n let { cache } = this._instanceCache;\n if (!cache) {\n cache = this._instanceCache.cache = this.createCache(this._instanceCache._storeWrapper);\n if (DEBUG) {\n cache = new CacheManager(cache);\n }\n }\n return cache;\n }\n\n /**\n `normalize` converts a json payload into the normalized form that\n [push](../methods/push?anchor=push) expects.\n\n Example\n\n ```js\n socket.on('message', function(message) {\n let modelName = message.model;\n let data = message.data;\n store.push(store.normalize(modelName, data));\n });\n ```\n\n @method normalize\n @public\n @param {String} modelName The name of the model type for this payload\n @param {Object} payload\n @return {Object} The normalized payload\n */\n // TODO @runspired @deprecate users should call normalize on the associated serializer directly\n normalize(modelName: string, payload: JSONObject) {\n if (DEBUG) {\n assertDestroyingStore(this, 'normalize');\n }\n assert(`You need to pass a model name to the store's normalize method`, modelName);\n assert(\n `Passing classes to store methods has been removed. Please pass a dasherized string instead of ${typeof modelName}`,\n typeof modelName === 'string'\n );\n const normalizedModelName = normalizeModelName(modelName);\n const serializer = this.serializerFor(normalizedModelName);\n const schema = this.modelFor(normalizedModelName);\n assert(\n `You must define a normalize method in your serializer in order to call store.normalize`,\n typeof serializer?.normalize === 'function'\n );\n return serializer.normalize(schema, payload);\n }\n\n /**\n Returns an instance of the adapter for a given type. For\n example, `adapterFor('person')` will return an instance of\n the adapter located at `app/adapters/person.js`\n\n If no `person` adapter is found, this method will look\n for an `application` adapter (the default adapter for\n your entire application).\n\n @method adapterFor\n @public\n @param {String} modelName\n @return Adapter\n */\n adapterFor(modelName: string): MinimumAdapterInterface;\n adapterFor(modelName: string, _allowMissing: true): MinimumAdapterInterface | undefined;\n adapterFor(modelName: string, _allowMissing?: true): MinimumAdapterInterface | undefined {\n if (DEBUG) {\n assertDestroyingStore(this, 'adapterFor');\n }\n assert(`You need to pass a model name to the store's adapterFor method`, modelName);\n assert(\n `Passing classes to store.adapterFor has been removed. Please pass a dasherized string instead of ${modelName}`,\n typeof modelName === 'string'\n );\n let normalizedModelName = normalizeModelName(modelName);\n\n let { _adapterCache } = this;\n let adapter: (MinimumAdapterInterface & { store: Store }) | undefined = _adapterCache[normalizedModelName];\n if (adapter) {\n return adapter;\n }\n\n const owner = getOwner(this)!;\n\n // name specific adapter\n adapter = owner.lookup(`adapter:${normalizedModelName}`) as\n | (MinimumAdapterInterface & { store: Store })\n | undefined;\n if (adapter !== undefined) {\n _adapterCache[normalizedModelName] = adapter;\n return adapter;\n }\n\n // no adapter found for the specific name, fallback and check for application adapter\n adapter = _adapterCache.application || owner.lookup('adapter:application');\n if (adapter !== undefined) {\n _adapterCache[normalizedModelName] = adapter;\n _adapterCache.application = adapter;\n return adapter;\n }\n\n assert(\n `No adapter was found for '${modelName}' and no 'application' adapter was found as a fallback.`,\n _allowMissing\n );\n }\n\n /**\n Returns an instance of the serializer for a given type. For\n example, `serializerFor('person')` will return an instance of\n `App.PersonSerializer`.\n\n If no `App.PersonSerializer` is found, this method will look\n for an `App.ApplicationSerializer` (the default serializer for\n your entire application).\n\n If a serializer cannot be found on the adapter, it will fall back\n to an instance of `JSONSerializer`.\n\n @method serializerFor\n @public\n @param {String} modelName the record to serialize\n @return {Serializer}\n */\n serializerFor(modelName: string): MinimumSerializerInterface | null {\n if (DEBUG) {\n assertDestroyingStore(this, 'serializerFor');\n }\n assert(`You need to pass a model name to the store's serializerFor method`, modelName);\n assert(\n `Passing classes to store.serializerFor has been removed. Please pass a dasherized string instead of ${modelName}`,\n typeof modelName === 'string'\n );\n let normalizedModelName = normalizeModelName(modelName);\n\n let { _serializerCache } = this;\n let serializer: (MinimumSerializerInterface & { store: Store }) | undefined = _serializerCache[normalizedModelName];\n if (serializer) {\n return serializer;\n }\n\n // by name\n const owner = getOwner(this)!;\n serializer = owner.lookup(`serializer:${normalizedModelName}`) as\n | (MinimumSerializerInterface & { store: Store })\n | undefined;\n if (serializer !== undefined) {\n _serializerCache[normalizedModelName] = serializer;\n return serializer;\n }\n\n // no serializer found for the specific model, fallback and check for application serializer\n serializer = _serializerCache.application || owner.lookup('serializer:application');\n if (serializer !== undefined) {\n _serializerCache[normalizedModelName] = serializer;\n _serializerCache.application = serializer;\n return serializer;\n }\n\n return null;\n }\n\n // @ts-expect-error\n destroy(): void {\n if (this.isDestroyed) {\n // @ember/test-helpers will call destroy multiple times\n return;\n }\n this.isDestroying = true;\n // enqueue destruction of any adapters/serializers we have created\n for (let adapterName in this._adapterCache) {\n let adapter = this._adapterCache[adapterName]!;\n if (typeof adapter.destroy === 'function') {\n adapter.destroy();\n }\n }\n\n for (let serializerName in this._serializerCache) {\n let serializer = this._serializerCache[serializerName]!;\n if (typeof serializer.destroy === 'function') {\n serializer.destroy();\n }\n }\n\n this._graph?.destroy();\n this._graph = undefined;\n\n this.notifications.destroy();\n this.recordArrayManager.destroy();\n this.identifierCache.destroy();\n\n this.unloadAll();\n this.isDestroyed = true;\n }\n\n static create(args?: Record<string, unknown>) {\n return new this(args);\n }\n}\n\nexport default Store;\n\nlet assertDestroyingStore: (store: Store, method: string) => void;\nlet assertDestroyedStoreOnly: (store: Store, method: string) => void;\n\nif (DEBUG) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n assertDestroyingStore = function assertDestroyingStore(store: Store, method: string) {\n assert(\n `Attempted to call store.${method}(), but the store instance has already been destroyed.`,\n !(store.isDestroying || store.isDestroyed)\n );\n };\n // eslint-disable-next-line @typescript-eslint/no-shadow\n assertDestroyedStoreOnly = function assertDestroyedStoreOnly(store: Store, method: string) {\n assert(\n `Attempted to call store.${method}(), but the store instance has already been destroyed.`,\n !store.isDestroyed\n );\n };\n}\n\nfunction isMaybeIdentifier(\n maybeIdentifier: string | ResourceIdentifierObject\n): maybeIdentifier is ResourceIdentifierObject {\n return Boolean(\n maybeIdentifier !== null &&\n typeof maybeIdentifier === 'object' &&\n (('id' in maybeIdentifier && 'type' in maybeIdentifier && maybeIdentifier.id && maybeIdentifier.type) ||\n maybeIdentifier.lid)\n );\n}\n\nfunction normalizeProperties(\n store: Store,\n identifier: StableRecordIdentifier,\n properties?: { [key: string]: unknown }\n): { [key: string]: unknown } | undefined {\n // assert here\n if (properties !== undefined) {\n if ('id' in properties) {\n assert(`expected id to be a string or null`, properties.id !== undefined);\n }\n assert(\n `You passed '${typeof properties}' as properties for record creation instead of an object.`,\n typeof properties === 'object' && properties !== null\n );\n\n const { type } = identifier;\n\n // convert relationship Records to RecordDatas before passing to RecordData\n let defs = store.getSchemaDefinitionService().relationshipsDefinitionFor({ type });\n\n if (defs !== null) {\n let keys = Object.keys(properties);\n let relationshipValue;\n\n for (let i = 0; i < keys.length; i++) {\n let prop = keys[i];\n let def = defs[prop];\n\n if (def !== undefined) {\n if (def.kind === 'hasMany') {\n if (DEBUG) {\n assertRecordsPassedToHasMany(properties[prop] as RecordInstance[]);\n }\n relationshipValue = extractIdentifiersFromRecords(properties[prop] as RecordInstance[]);\n } else {\n relationshipValue = extractIdentifierFromRecord(properties[prop]);\n }\n\n properties[prop] = relationshipValue;\n }\n }\n }\n }\n return properties;\n}\n\nfunction assertRecordsPassedToHasMany(records: RecordInstance[]) {\n assert(`You must pass an array of records to set a hasMany relationship`, Array.isArray(records));\n assert(\n `All elements of a hasMany relationship must be instances of Model, you passed ${records\n .map((r) => `${typeof r}`)\n .join(', ')}`,\n (function () {\n return records.every((record) => {\n try {\n recordIdentifierFor(record);\n return true;\n } catch {\n return false;\n }\n });\n })()\n );\n}\n\nfunction extractIdentifiersFromRecords(records: RecordInstance[]): StableRecordIdentifier[] {\n return records.map((record) => extractIdentifierFromRecord(record)) as StableRecordIdentifier[];\n}\n\ntype PromiseProxyRecord = { then(): void; content: RecordInstance | null | undefined };\n\nfunction extractIdentifierFromRecord(recordOrPromiseRecord: PromiseProxyRecord | RecordInstance | null) {\n if (!recordOrPromiseRecord) {\n return null;\n }\n const extract = recordIdentifierFor;\n\n return extract(recordOrPromiseRecord);\n}\n"],"names":["_initializerDefineProperty","target","property","descriptor","context","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_classPrivateFieldBase","receiver","privateKey","prototype","hasOwnProperty","TypeError","id","_classPrivateFieldKey","name","_applyDecoratedDescriptor","decorators","desc","keys","forEach","key","slice","reverse","reduce","decorator","undefined","urlFromLink","link","href","Document","_class","_store","_classPrivateFieldLooseKey","_request","_class2","constructor","store","identifier","_request2","_descriptor","_descriptor2","_descriptor3","_descriptor4","_classPrivateFieldLooseBase","fetch","options","assert","links","self","cacheOptions","lid","next","prev","first","last","toJSON","data","errors","meta","tracked","response","request","assign","url","content","isErrorDocument","document","maybeUpdateUiObjects","isFromCache","shouldHydrate","doc","_documentCache","get","copyDocumentProperties","set","Array","isArray","recordArrayManager","createArray","type","identifiers","query","managed","_keyedArrays","populateManagedArray","peekRecord","MUTATION_OPS","Set","calcShouldFetch","hasCachedValue","op","has","reload","lifetimes","isHardExpired","calcShouldBackgroundFetch","willFetch","backgroundReload","isSoftExpired","isMutation","Boolean","fetchContentAndHydrate","shouldFetch","shouldBackgroundFetch","Symbol","for","isMut","record","cache","willCommit","promise","then","requestManager","_pending","delete","_enableAsyncFlush","_join","didCommit","put","notifications","_flush","error","signal","aborted","commitWasRejected","newError","cloneError","_requestCache","_enqueue","recordIdentifier","cloned","Error","message","stack","SkipCache","EnableHydration","CacheHandler","identifierCache","getOrCreateDocumentIdentifier","peeked","peekRequest","Promise","resolve","source","coerceId","macroCondition","getOwnConfig","deprecations","DEPRECATE_NON_STRICT_ID","normalized","String","deprecate","JSON","stringify","until","since","available","enabled","length","ensureStringId","isNaN","DEBUG_CLIENT_ORIGINATED","DEBUG_IDENTIFIER_BUCKET","DEBUG_STALE_CACHE_OWNER","CACHE_OWNER","normalizeModelName","DEPRECATE_NON_STRICT_TYPES","result","dasherize","installPolyfill","isFastBoot","FastBoot","CRYPTO","require","window","crypto","randomUUID","rng","rnds8","Uint8Array","getRandomValues","randomFillSync","byteToHex","i","toString","substr","bytesToUuid","buf","bth","join","uuidv4","rnds","isResource","resource","hasProp","prop","hasLid","hasId","hasType","IDENTIFIERS","DOCUMENTS","isStableIdentifier","isDocumentIdentifier","_crypto","polyfillUUID","freeze","obj","configuredForgetMethod","configuredGenerationMethod","configuredResetMethod","configuredUpdateMethod","setIdentifierGenerationMethod","method","setIdentifierUpdateMethod","setIdentifierForgetMethod","setIdentifierResetMethod","NEW_IDENTIFIERS","Map","IDENTIFIER_CACHE_ID","updateTypeIdMapping","typeMap","idMap","defaultUpdateMethod","bucket","defaultKeyInfoMethod","known","defaultGenerationMethod","toUpperCase","defaultEmptyCallback","args","defaultMergeMethod","a","_b","_c","DEBUG_MAP","env","DEBUG","WeakMap","IdentifierCache","_generate","_update","_forget","_reset","_merge","_keyInfoForResource","_isDefaultConfig","_id","_cache","resources","resourcesByType","create","documents","__configureMerge","upgradeIdentifier","_getRecordIdentifier","shouldGenerate","debug","LOG_IDENTIFIERS","console","groupCollapsed","log","groupEnd","getIdentifierFromLid","makeStableRecordIdentifier","keyInfo","addResourceToCache","peekRecordIdentifier","cacheKey","add","getOrCreateRecordIdentifier","createIdentifierForNewRecord","newLid","updateRecordIdentifier","identifierObject","existingIdentifier","detectMerge","hadLid","generatedIdentifier","_mergeRecordIdentifiers","performRecordIdentifierUpdate","newId","typeSet","kept","abandoned","forgetRecordIdentifier","destroy","clear","clientOriginated","wrapper","updateFn","warn","newType","newTypeSet","RecordReference","___token","___identifier","subscribe","_","notifiedKey","_ref","unsubscribe","remoteType","push","objectOrPromise","load","findRecord","CacheCapabilitiesManager","_willNotify","_pendingNotifies","_scheduleNotification","pending","_cbs","_schedule","_flushNotifications","notify","notifyChange","namespace","getSchemaDefinitionService","setRecordId","_instanceCache","hasRecord","peek","disconnectRecord","disconnect","CacheForIdentifierCache","setCacheFor","removeRecordDataFor","peekCache","instance","RecordCache","recordIdentifierFor","setRecordIdentifier","StoreMap","storeFor","InstanceCache","__instances","reference","_storeWrapper","matchedIdentifier","resourceData","keptIdentifier","staleIdentifier","keptHasRecord","staleHasRecord","patch","unloadRecord","getRecord","properties","isDestroying","isDestroyed","instantiateRecord","LOG_INSTANCE_CACHE","getReference","recordIsLoaded","filterDeleted","isNew","isEmpty","isDeleted","isDeletionCommitted","_graph","remove","_clearEntries","requests","getRequestStateService","getPendingRequestsForRecord","some","req","teardownRecord","typeCache","oldId","_resourceIsFullDeleted","resourceIsFullyDeleted","instanceCache","preloadData","preload","jsonPayload","schemas","relationships","relationshipsDefinitionFor","preloadValue","relationshipMeta","preloadRelationship","attributes","upsert","schema","relatedType","kind","map","_convertPreloadRelationshipToJSON","_clearCaches","AvailableShims","getShimClass","modelName","shims","shim","ShimModelClass","mapFromHash","hash","__store","fields","attrs","attributesDefinitionFor","relationshipsByName","eachAttribute","callback","binding","attrDefs","eachRelationship","relationshipDefs","eachTransformedAttribute","CacheManager","version","isDel","mutate","mutation","fork","merge","diff","dump","hydrate","stream","clientDidCreate","getAttr","propertyName","setAttr","changedAttrs","hasChangedAttrs","rollbackAttrs","changedRelationships","hasChangedRelationships","rollbackRelationships","getRelationship","setIsDeleted","getErrors","tokenId","CacheOperations","isCacheOperationValue","runLoopIsFlushing","_backburner","currentInstance","_autorun","_unsubscribe","tokens","token","LOG_NOTIFICATIONS","NotificationManager","_buffered","_hasFlush","_tokens","unsubToken","_tokenRef","hasSubscribers","size","buffer","_scheduleNotify","_onNextFlush","cb","_onFlushCB","asyncFlush","states","_flushNotification","callbackMap","ARRAY_GETTER_METHODS","iterator","ARRAY_SETTER_METHODS","SYNC_PROPS","isArrayGetter","isArraySetter","IDENTIFIER_ARRAY_TAG","SOURCE","MUTATE","NOTIFY","IS_COLLECTION","notifyArray","arr","addToTransaction","DEPRECATE_COMPUTED_CHAINS","dirtyTag","tagForProperty","convertToInt","num","Number","Tag","arguments","_debug_base","_debug_prop","shouldReset","t","safeForEach","index","IdentifierArray","_class3","[]","isLoaded","_updatingPromise","_manager","manager","boundFns","_TAG","PrivateState","transaction","proxy","Proxy","_syncArray","fn","Reflect","apply","allowMutation","outcome","original","newIdentifier","extractIdentifierFromRecord","deleteProperty","getPrototypeOf","Ember","addMixin","mixin","bind","update","isUpdating","updatingPromise","finally","findAll","save","all","saveRecord","dependentKeyCompat","getOwnPropertyDescriptor","Collection","_recordArray","_managed","assertRecordPassedToHasMany","FAKE_ARR","SLICE_BATCH_SIZE","fastPush","startLength","newLength","RecordArrayManager","_live","_staged","_identifiers","_set","_visibilitySet","_subscription","identifierAdded","identifierRemoved","identifierChanged","array","sync","liveArrayFor","staged","config","associate","dirtyArray","delta","tag","addTransactionCB","_getPendingFor","includeManaged","isRemove","liveArray","allPending","changes","pendingLive","payload","old","disassociate","changeSets","existing","newState","isClear","ArraysCache","disassociateIdentifier","arraySet","state","adds","removes","indexOf","splice","Touching","RequestPromise","EMPTY_ARR","hasRecordIdentifier","RequestStateService","_done","_subscriptions","_toFlush","queryRequest","_triggerSubscriptions","_dequeue","finalizedRequest","_addDone","_flushRequest","subscriptions","filter","requestDataOp","subscribeForRecord","getLastRequestForRecord","isNonEmptyString","str","constructResource","trueId","Store","EmberObject","_isDestroying","_isDestroyed","createArgs","_adapterCache","_serializerCache","_run","coalesce","_getAllPending","TESTING","v","allSettled","requestConfig","opts","records","r","DISABLE_WAITER","disableTestWaiter","LOG_REQUESTS","parse","future","onFinalize","_schema","registerSchemaDefinitionService","registerSchema","modelFor","assertDestroyedStoreOnly","doesTypeExist","createRecord","inputProperties","assertDestroyingStore","normalizedModelName","adapter","adapterFor","generateIdForRecord","createOptions","normalizeProperties","resultProps","deleteRecord","isMaybeIdentifier","normalizedId","resourceIdentifier","stableIdentifier","queryRecord","peekAll","unloadAll","pushed","_push","jsonApiDoc","LOG_PAYLOADS","e","ret","pushPayload","inputPayload","serializer","serializerFor","reject","operation","createCache","normalize","_allowMissing","owner","getOwner","lookup","application","adapterName","serializerName","maybeIdentifier","defs","relationshipValue","def","assertRecordsPassedToHasMany","extractIdentifiersFromRecords","every","recordOrPromiseRecord","extract"],"mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMEyB,EAAAA,UAAUA,GAA2B;IACnC,OAAO,IAAI,CAACkQ,aAAa,CAAA;AAC3B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKEM,EAAAA,UAAUA,GAAe;AACvB,IAAA,OAAO,UAAU,CAAA;AACnB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAOEC,IAAIA,CAACC,eAAyE,EAA2B;AACvG;IACA,OAAOlK,OAAO,CAACC,OAAO,CAACiK,eAAe,CAAC,CAAChM,IAAI,CAAEvD,IAAI,IAAK;AACrD,MAAA,OAAO,IAAI,CAACpB,KAAK,CAAC0Q,IAAI,CAACtP,IAAI,CAAC,CAAA;AAC9B,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKErD,EAAAA,KAAKA,GAA0B;IAC7B,OAAO,IAAI,CAACiC,KAAK,CAACiD,UAAU,CAAC,IAAI,CAACkN,aAAa,CAAC,CAAA;AAClD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKES,EAAAA,IAAIA,GAAG;AACL,IAAA,MAAMpS,EAAE,GAAG,IAAI,CAACA,EAAE,EAAE,CAAA;IACpB,IAAIA,EAAE,KAAK,IAAI,EAAE;MACf,OAAO,IAAI,CAACwB,KAAK,CAAC6Q,UAAU,CAAC,IAAI,CAAClO,IAAI,EAAEnE,EAAE,CAAC,CAAA;AAC7C,KAAA;AACAkC,IAAAA,MAAM,CAAE,CAAiC,+BAAA,EAAA,IAAI,CAACiC,IAAK,gBAAe,CAAC,CAAA;AACrE,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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CAAAC,YAAA,GAAA8G,KAAA,CAAA6W,YAAA,CAAkB,EAAA;AAChB;AACA3W,QAAAA,OAAO,CAACE,GAAG,CACR,CAAA,sBAAA,EAAwBmW,aAAa,CAAC7gB,EAAE,IAAI,CAAC6gB,aAAa,CAACxiB,GAAG,GAAG,WAAW,GAAG,EAAG,CAAA,EACjFwiB,aAAa,CAAC7gB,EAAE,IAAI,qBACrB,CAAG6gB,CAAAA,EAAAA,aAAa,CAACxiB,GAAG,IAAI,aAAc,CAAA,EAAA,EAAIwiB,aAAa,CAACnZ,MAAM,IAAI,gBAAiB,EACtF,CAAC,CAAA;AACH,OAAA;AACA;MACA,IAAImZ,aAAa,CAAC7gB,EAAE,KAAK,eAAe,IAAI,CAAC6gB,aAAa,CAACxiB,GAAG,EAAE;AAC9D,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAI,CAACwD,aAAa,CAACC,MAAM,EAAE,CAAA;AAC7B,KAAC,CAAC,CAAA;AAEF,IAAA,OAAOuf,MAAM,CAAA;AACf,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACElT,EAAAA,0BAA0BA,GAAkB;AAC1C/Q,IAAAA,MAAM,CAAE,CAAoF,mFAAA,CAAA,EAAE,IAAI,CAACmkB,OAAO,CAAC,CAAA;IAC3G,OAAO,IAAI,CAACA,OAAO,CAAA;AACrB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,+BAA+BA,CAAClP,MAAqB,EAAE;IACrD,IAAI,CAACiP,OAAO,GAAGjP,MAAM,CAAA;AACvB,GAAA;AACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEmP,cAAcA,CAACnP,MAAqB,EAAE;IACpC,IAAI,CAACiP,OAAO,GAAGjP,MAAM,CAAA;AACvB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKE;;EAEAoP,QAAQA,CAACriB,IAAY,EAAe;AAClC,IAAA,IAAAkE,cAAA,CAAAC,YAAA,GAAAyF,GAAA,CAAAC,KAAA,CAAW,EAAA;AACTyY,MAAAA,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;AAC5C,KAAA;IACAvkB,MAAM,CAAE,CAAuD,sDAAA,CAAA,EAAE,OAAOiC,IAAI,KAAK,QAAQ,IAAIA,IAAI,CAAC+E,MAAM,CAAC,CAAA;AACzGhH,IAAAA,MAAM,CACH,CAAA,wBAAA,EAA0BiC,IAAK,CAAA,gCAAA,CAAiC,EACjE,IAAI,CAAC8O,0BAA0B,EAAE,CAACyT,aAAa,CAACviB,IAAI,CACtD,CAAC,CAAA;AAED,IAAA,OAAOwT,YAAY,CAAC,IAAI,EAAExT,IAAI,CAAC,CAAA;AACjC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMEwiB,EAAAA,YAAYA,CAAC/O,SAAiB,EAAEgP,eAAuC,EAAkB;AACvF,IAAA,IAAAve,cAAA,CAAAC,YAAA,GAAAyF,GAAA,CAAAC,KAAA,CAAW,EAAA;AACT6Y,MAAAA,qBAAqB,CAAC,IAAI,EAA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C,IAAA,IAAAsC,cAAA,CAAAC,YAAA,GAAAyF,GAAA,CAAAC,KAAA,CAAW,EAAA;AACT6Y,MAAAA,qBAAqB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;AAC7C,KAAA;AACA,IAAA,MAAMplB,UAAU,GAAGqO,oBAAoB,CAAC/J,MAAM,CAAC,CAAA;AAC/C,IAAA,IAAItE,UAAU,EAAE;AACd,MAAA,IAAI,CAAC0R,cAAc,CAAC0B,YAAY,CAACpT,UAAU,CAAC,CAAA;AAC9C,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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,aAAa;AACjBlC,MAAAA,IAAI,EAAE;AACJuB,QAAAA,IAAI,EAAEsF,kBAAkB,CAACmO,SAAS,CAAC;QACnCvT,KAAK;QACLpC,OAAO,EAAEA,OAAO,IAAI,EAAC;OACtB;AACDI,MAAAA,YAAY,EAAE;AAAE,QAAA,CAACqF,SAAS,GAAa,IAAA;AAAK,OAAA;AAC9C,KAAC,CAAC,CAAA;IAEF,OAAOxB,OAAO,CAACC,IAAI,CAAE7C,QAAQ,IAAKA,QAAQ,CAACF,OAAO,CAAC,CAAA;AACrD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAsCE0c,EAAAA,OAAOA,CAAClI,SAAiB,EAAE3V,OAAyD,GAAG,EAAE,EAA4B;AACnH,IAAA,IAAAoG,cAAA,CAAAC,YAAA,GAAAyF,GAAA,CAAAC,KAAA,CAAW,EAAA;AACT6Y,MAAAA,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AACxC,KAAA;AACA3kB,IAAAA,MAAM,CAAE,CAAA,2DAAA,CAA4D,EAAE0V,SAAS,CAAC,CAAA;IAChF1V,MAAM,CACH,iGAAgG0V,SAAU,CAAA,CAAC,EAC5G,OAAOA,SAAS,KAAK,QACvB,CAAC,CAAA;AAED,IAAA,MAAM1R,OAAO,GAAG,IAAI,CAACjD,OAAO,CAAkB;AAC5C6B,MAAAA,EAAE,EAAE,SAAS;AACblC,MAAAA,IAAI,EAAE;AACJuB,QAAAA,IAAI,EAAEsF,kBAAkB,CAACmO,SAAS,CAAC;QACnC3V,OAAO,EAAEA,OAAO,IAAI,EAAC;OACtB;AACDI,MAAAA,YAAY,EAAE;AAAE,QAAA,CAACqF,SAAS,GAAa,IAAA;AAAK,OAAA;AAC9C,KAAC,CAAC,CAAA;IAEF,OAAOxB,OAAO,CAACC,IAAI,CAAE7C,QAAQ,IAAKA,QAAQ,CAACF,OAAO,CAAC,CAAA;AACrD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAMEukB,OAAOA,CAAC/P,SAAiB,EAAmB;AAC1C,IAAA,IAAAvP,cAAA,CAAAC,YAAA,GAAAyF,GAAA,CAAAC,KAAA,CAAW,EAAA;AACT6Y,MAAAA,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AACxC,KAAA;AACA3kB,IAAAA,MAAM,CAAE,CAAA,2DAAA,CAA4D,EAAE0V,SAAS,CAAC,CAAA;IAChF1V,MAAM,CACH,iGAAgG0V,SAAU,CAAA,CAAC,EAC5G,OAAOA,SAAS,KAAK,QACvB,CAAC,CAAA;AAED,IAAA,IAAIzT,IAAI,GAAGsF,kBAAkB,CAACmO,SAAS,CAAC,CAAA;AACxC,IAAA,OAAO,IAAI,CAAC3T,kBAAkB,CAACwd,YAAY,CAACtd,IAAI,CAAC,CAAA;AACnD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAIEyjB,SAASA,CAAChQ,SAAkB,EAAE;AAC5B,IAAA,IAAAvP,cAAA,CAAAC,YAAA,GAAAyF,GAAA,CAAAC,KAAA,CAAW,EAAA;AACTyY,MAAAA,wBAAwB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;AAC7C,KAAA;AACAvkB,IAAAA,MAAM,CACH,CAAA,8FAAA,EAAgGwG,MAAM,CACrGkP,SACF,CAAE,CAAA,CAAC,EACH,CAACA,SAAS,IAAI,OAAOA,SAAS,KAAK,QACrC,CAAC,CAAA;IAED,IAAI,CAACpR,KAAK,CAAC,MAAM;MACf,IAAIoR,SAAS,KAAK/W,SAAS,EAAE;AAC3B;AACA;AACA;AACA,QAAA,IAAI,CAAC8U,MAAM,EAAEvR,WAAW,CAAC8M,KAAK,EAAE,CAAA;AAEhC,QAAA,IAAI,CAACjN,kBAAkB,CAACiN,KAAK,EAAE,CAAA;AAC/B,QAAA,IAAI,CAACiC,cAAc,CAACjC,KAAK,EAAE,CAAA;AAC7B,OAAC,MAAM;AACL,QAAA,IAAI4V,mBAAmB,GAAGrd,kBAAkB,CAACmO,SAAS,CAAC,CAAA;AACvD,QAAA,IAAI,CAACzE,cAAc,CAACjC,KAAK,CAAC4V,mBAAmB,CAAC,CAAA;AAChD,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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","x_google_ignoreList":[0,1,2,3]}
|