@warp-drive-mirror/experiments 0.0.1-alpha.101 → 0.0.1-alpha.102

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.
@@ -1,14 +1,17 @@
1
1
  import { SkipCache } from '@warp-drive-mirror/core-types/request';
2
2
  import { macroCondition, getGlobalConfig } from '@embroider/macros';
3
+ const WorkerScope = globalThis.SharedWorkerGlobalScope;
3
4
  class DataWorker {
4
5
  constructor(UserStore) {
6
+ globalThis.name = 'WarpDrive DataWorker';
5
7
  this.store = new UserStore();
6
8
  this.threads = new Map();
7
9
  this.pending = new Map();
8
10
  this.initialize();
11
+ this.isSharedWorker = globalThis instanceof WorkerScope;
9
12
  }
10
13
  initialize() {
11
- globalThis.onmessage = event => {
14
+ const fn = event => {
12
15
  const {
13
16
  type
14
17
  } = event.data;
@@ -18,6 +21,11 @@ class DataWorker {
18
21
  break;
19
22
  }
20
23
  };
24
+ if (this.isSharedWorker) {
25
+ globalThis.onconnect = fn;
26
+ } else {
27
+ globalThis.onmessage = fn;
28
+ }
21
29
  }
22
30
  setupThread(thread, port) {
23
31
  this.threads.set(thread, port);
@@ -1 +1 @@
1
- {"version":3,"file":"data-worker.js","sources":["../src/data-worker/worker.ts","../src/data-worker/utils.ts","../src/data-worker/cache-handler.ts"],"sourcesContent":["import type { Future, ResponseInfo, StructuredDataDocument } from '@ember-data-mirror/request';\nimport type Store from '@ember-data-mirror/store';\n\nimport type { AbortEventData, RequestEventData, ThreadInitEventData, WorkerThreadEvent } from './types';\n\nexport class DataWorker {\n declare store: Store;\n declare threads: Map<string, MessagePort>;\n declare pending: Map<string, Map<number, Future<unknown>>>;\n\n constructor(UserStore: typeof Store) {\n this.store = new UserStore();\n this.threads = new Map();\n this.pending = new Map();\n this.initialize();\n }\n\n initialize() {\n globalThis.onmessage = (event: MessageEvent<ThreadInitEventData>) => {\n const { type } = event.data;\n\n switch (type) {\n case 'connect':\n this.setupThread(event.data.thread, event.ports[0]);\n break;\n }\n };\n }\n\n setupThread(thread: string, port: MessagePort) {\n this.threads.set(thread, port);\n this.pending.set(thread, new Map());\n port.onmessage = (event: WorkerThreadEvent) => {\n if (event.type === 'close') {\n this.threads.delete(thread);\n return;\n }\n\n const { type } = event.data;\n switch (type) {\n case 'abort':\n this.abortRequest(event.data);\n break;\n case 'request':\n void this.request(prepareRequest(event.data));\n break;\n }\n };\n }\n\n abortRequest(event: AbortEventData) {\n const { thread, id } = event;\n const future = this.pending.get(thread)!.get(id);\n\n if (future) {\n future.abort();\n this.pending.get(thread)!.delete(id);\n }\n }\n\n async request(event: RequestEventData) {\n const { thread, id, data } = event;\n\n try {\n const future = this.store.request(data);\n this.pending.get(thread)!.set(id, future);\n\n const result = await future;\n\n this.threads.get(thread)?.postMessage({ type: 'success-response', id, thread, data: prepareResponse(result) });\n } catch (error) {\n if (isAbortError(error)) return;\n\n this.threads.get(thread)?.postMessage({ type: 'error-response', id, thread, data: error });\n } finally {\n this.pending.get(thread)!.delete(id);\n }\n }\n}\n\ntype Mutable<T> = { -readonly [P in keyof T]: T[P] };\n\nfunction softCloneResponse(response: Response | ResponseInfo | null) {\n if (!response) return null;\n\n const clone: Partial<Mutable<Response>> = {};\n\n if (response.headers) {\n clone.headers = Array.from(response.headers.entries()) as unknown as Headers;\n }\n\n clone.ok = response.ok;\n clone.redirected = response.redirected;\n clone.status = response.status;\n clone.statusText = response.statusText;\n clone.type = response.type;\n clone.url = response.url;\n\n return clone;\n}\n\nfunction isAbortError(error: unknown): error is Error {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nfunction prepareResponse<T>(result: StructuredDataDocument<T>) {\n const newResponse = {\n response: softCloneResponse(result.response),\n content: result.content,\n };\n\n return newResponse;\n}\n\nfunction prepareRequest(event: RequestEventData) {\n if (event.data.headers) {\n event.data.headers = new Headers(event.data.headers);\n }\n\n return event;\n}\n","import type Store from '@ember-data-mirror/store';\nimport type { StableDocumentIdentifier } from '@warp-drive-mirror/core-types/identifier';\nimport type {\n ImmutableCreateRequestOptions,\n ImmutableDeleteRequestOptions,\n ImmutableRequestInfo,\n ImmutableUpdateRequestOptions,\n StructuredDataDocument,\n} from '@warp-drive-mirror/core-types/request';\nimport type { ApiError } from '@warp-drive-mirror/core-types/spec/error';\n\nexport const MUTATION_OPS = new Set(['createRecord', 'updateRecord', 'deleteRecord']);\n\n/**\n * In a Worker, any time we are asked to make a request, data needs to be returned.\n * background requests are ergo no different than foreground requests.\n * @internal\n */\nexport function calcShouldFetch(\n store: Store,\n request: ImmutableRequestInfo,\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 cacheOptions?.backgroundReload ||\n !hasCachedValue ||\n (store.lifetimes && identifier\n ? store.lifetimes.isHardExpired(identifier, store) || store.lifetimes.isSoftExpired(identifier, store)\n : false)\n );\n}\n\nexport function isMutation(\n request: Partial<ImmutableRequestInfo>\n): request is ImmutableUpdateRequestOptions | ImmutableCreateRequestOptions | ImmutableDeleteRequestOptions {\n return Boolean(request.op && MUTATION_OPS.has(request.op));\n}\n\nexport function isCacheAffecting<T>(document: StructuredDataDocument<T>): boolean {\n if (!isMutation(document.request)) {\n return true;\n }\n // a mutation combined with a 204 has no cache impact when no known records were involved\n // a createRecord with a 201 with an empty response and no known records should similarly\n // have no cache impact\n\n if (document.request.op === 'createRecord' && document.response?.status === 201) {\n return document.content ? Object.keys(document.content).length > 0 : false;\n }\n\n return document.response?.status !== 204;\n}\n\nfunction isAggregateError(error: Error & { errors?: ApiError[] }): error is AggregateError & { errors: ApiError[] } {\n return error instanceof AggregateError || (error.name === 'AggregateError' && Array.isArray(error.errors));\n}\n\ntype RobustError = Error & { error: string | object; errors?: ApiError[]; content?: unknown };\n\n// TODO @runspired, consider if we should deep freeze errors (potentially only in debug) vs cloning them\nexport function cloneError(error: RobustError) {\n const isAggregate = isAggregateError(error);\n\n const cloned = (\n isAggregate ? new AggregateError(structuredClone(error.errors), error.message) : new Error(error.message)\n ) as RobustError;\n cloned.stack = error.stack!;\n cloned.error = error.error;\n\n // copy over enumerable properties\n Object.assign(cloned, error);\n\n return cloned;\n}\n","import type { CacheHandler as CacheHandlerType, Future, NextFn } from '@ember-data-mirror/request';\nimport type Store from '@ember-data-mirror/store';\nimport type { StoreRequestContext } from '@ember-data-mirror/store';\nimport { assert } from '@warp-drive-mirror/build-config/macros';\nimport type { StableDocumentIdentifier } from '@warp-drive-mirror/core-types/identifier';\nimport type { StructuredDataDocument, StructuredErrorDocument } from '@warp-drive-mirror/core-types/request';\nimport { SkipCache } from '@warp-drive-mirror/core-types/request';\nimport type { ResourceDataDocument, ResourceErrorDocument } from '@warp-drive-mirror/core-types/spec/document';\nimport type { ApiError } from '@warp-drive-mirror/core-types/spec/error';\n\nimport { calcShouldFetch, cloneError, isCacheAffecting, isMutation } from './utils';\n\n/**\n * A simplified CacheHandler that hydrates ResourceDataDocuments from the cache\n * with their referenced resources.\n *\n * @typedoc\n */\nexport const CacheHandler: CacheHandlerType = {\n request<T>(context: StoreRequestContext, next: NextFn<T>): Promise<T | StructuredDataDocument<T>> | Future<T> | 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 const peeked = identifier ? store.cache.peekRequest(identifier) : null;\n\n // In a Worker, any time we are asked to make a request, data needs to be returned.\n // background requests are ergo no different than foreground requests.\n if (calcShouldFetch(store, context.request, !!peeked, identifier)) {\n return fetchContentAndHydrate(next, context, identifier);\n }\n\n assert(`Expected a peeked request to be present`, peeked);\n context.setResponse(peeked.response);\n\n if ('error' in peeked) {\n throw peeked;\n }\n\n return maybeUpdateObjects<T>(store, peeked.content as ResourceDataDocument);\n },\n};\n\nfunction maybeUpdateObjects<T>(store: Store, document: ResourceDataDocument | null): T {\n if (!document) {\n return document as T;\n }\n\n if (Array.isArray(document.data)) {\n const data = document.data.map((identifier) => {\n return store.cache.peek(identifier);\n });\n\n return Object.assign({}, document, { data }) as T;\n } else {\n const data = (document.data ? store.cache.peek(document.data) : null) as T;\n return Object.assign({}, document, { data }) as T;\n }\n}\n\nfunction updateCacheForSuccess<T>(\n store: Store,\n request: StoreRequestContext['request'],\n document: StructuredDataDocument<T>\n) {\n let response: ResourceDataDocument | null = null;\n if (isMutation(request)) {\n const record = request.data?.record || request.records?.[0];\n if (record) {\n response = store.cache.didCommit(record, document) as ResourceDataDocument;\n\n // a mutation combined with a 204 has no cache impact when no known records were involved\n // a createRecord with a 201 with an empty response and no known records should similarly\n // have no cache impact\n } else if (isCacheAffecting(document)) {\n response = store.cache.put(document) as ResourceDataDocument;\n }\n } else {\n response = store.cache.put(document) as ResourceDataDocument;\n }\n return maybeUpdateObjects(store, response);\n}\n\nfunction handleFetchSuccess<T>(\n store: Store,\n request: StoreRequestContext['request'],\n identifier: StableDocumentIdentifier | null,\n document: StructuredDataDocument<T>\n): T {\n let response: ResourceDataDocument;\n store._join(() => {\n response = updateCacheForSuccess<T>(store, request, document) as ResourceDataDocument;\n });\n\n if (store.lifetimes?.didRequest) {\n store.lifetimes.didRequest(request, document.response, identifier, store);\n }\n\n return response! as T;\n}\n\nfunction updateCacheForError<T>(\n store: Store,\n request: StoreRequestContext['request'],\n error: StructuredErrorDocument<T>\n) {\n if (isMutation(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 ApiError[])\n : undefined;\n\n const record = request.data?.record || request.records?.[0];\n\n store.cache.commitWasRejected(record, errors);\n } else {\n return store.cache.put(error) as ResourceErrorDocument;\n }\n}\n\nfunction handleFetchError<T>(\n store: Store,\n request: StoreRequestContext['request'],\n identifier: StableDocumentIdentifier | null,\n error: StructuredErrorDocument<T>\n): never {\n if (request.signal?.aborted) {\n throw error;\n }\n let response: ResourceErrorDocument | undefined;\n store._join(() => {\n response = updateCacheForError(store, request, error);\n });\n\n if (identifier && store.lifetimes?.didRequest) {\n store.lifetimes.didRequest(request, error.response, identifier, store);\n }\n\n if (isMutation(request)) {\n throw error;\n }\n\n const newError = cloneError(error);\n newError.content = response!;\n throw newError;\n}\n\nfunction fetchContentAndHydrate<T>(\n next: NextFn<T>,\n context: StoreRequestContext,\n identifier: StableDocumentIdentifier | null\n): Promise<T> {\n const { request } = context;\n const { store } = context.request;\n\n if (isMutation(request)) {\n // TODO should we handle multiple records in request.records by iteratively calling willCommit for each\n const record = request.data?.record || request.records?.[0];\n assert(`Expected to receive a list of records included in the ${request.op} request`, record);\n if (record) {\n store.cache.willCommit(record, context);\n }\n }\n\n if (store.lifetimes?.willRequest) {\n store.lifetimes.willRequest(request, identifier, store);\n }\n\n return next(request).then(\n (document) => handleFetchSuccess(store, request, identifier, document),\n (error: StructuredErrorDocument<T>) => handleFetchError(store, request, identifier, error)\n );\n}\n"],"names":["DataWorker","constructor","UserStore","store","threads","Map","pending","initialize","globalThis","onmessage","event","type","data","setupThread","thread","ports","port","set","delete","abortRequest","request","prepareRequest","id","future","get","abort","result","postMessage","prepareResponse","error","isAbortError","softCloneResponse","response","clone","headers","Array","from","entries","ok","redirected","status","statusText","url","Error","name","newResponse","content","Headers","MUTATION_OPS","Set","calcShouldFetch","hasCachedValue","identifier","cacheOptions","op","has","reload","backgroundReload","lifetimes","isHardExpired","isSoftExpired","isMutation","Boolean","isCacheAffecting","document","Object","keys","length","isAggregateError","AggregateError","isArray","errors","cloneError","isAggregate","cloned","structuredClone","message","stack","assign","CacheHandler","context","next","SkipCache","identifierCache","getOrCreateDocumentIdentifier","peeked","cache","peekRequest","fetchContentAndHydrate","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","test","setResponse","maybeUpdateObjects","map","peek","updateCacheForSuccess","record","records","didCommit","put","handleFetchSuccess","_join","didRequest","updateCacheForError","undefined","commitWasRejected","handleFetchError","signal","aborted","newError","willCommit","willRequest","then"],"mappings":";;;AAKO,MAAMA,UAAU,CAAC;EAKtBC,WAAWA,CAACC,SAAuB,EAAE;AACnC,IAAA,IAAI,CAACC,KAAK,GAAG,IAAID,SAAS,EAAE,CAAA;AAC5B,IAAA,IAAI,CAACE,OAAO,GAAG,IAAIC,GAAG,EAAE,CAAA;AACxB,IAAA,IAAI,CAACC,OAAO,GAAG,IAAID,GAAG,EAAE,CAAA;IACxB,IAAI,CAACE,UAAU,EAAE,CAAA;AACnB,GAAA;AAEAA,EAAAA,UAAUA,GAAG;AACXC,IAAAA,UAAU,CAACC,SAAS,GAAIC,KAAwC,IAAK;MACnE,MAAM;AAAEC,QAAAA,IAAAA;OAAM,GAAGD,KAAK,CAACE,IAAI,CAAA;AAE3B,MAAA,QAAQD,IAAI;AACV,QAAA,KAAK,SAAS;AACZ,UAAA,IAAI,CAACE,WAAW,CAACH,KAAK,CAACE,IAAI,CAACE,MAAM,EAAEJ,KAAK,CAACK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACnD,UAAA,MAAA;AACJ,OAAA;KACD,CAAA;AACH,GAAA;AAEAF,EAAAA,WAAWA,CAACC,MAAc,EAAEE,IAAiB,EAAE;IAC7C,IAAI,CAACZ,OAAO,CAACa,GAAG,CAACH,MAAM,EAAEE,IAAI,CAAC,CAAA;IAC9B,IAAI,CAACV,OAAO,CAACW,GAAG,CAACH,MAAM,EAAE,IAAIT,GAAG,EAAE,CAAC,CAAA;AACnCW,IAAAA,IAAI,CAACP,SAAS,GAAIC,KAAwB,IAAK;AAC7C,MAAA,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,EAAE;AAC1B,QAAA,IAAI,CAACP,OAAO,CAACc,MAAM,CAACJ,MAAM,CAAC,CAAA;AAC3B,QAAA,OAAA;AACF,OAAA;MAEA,MAAM;AAAEH,QAAAA,IAAAA;OAAM,GAAGD,KAAK,CAACE,IAAI,CAAA;AAC3B,MAAA,QAAQD,IAAI;AACV,QAAA,KAAK,OAAO;AACV,UAAA,IAAI,CAACQ,YAAY,CAACT,KAAK,CAACE,IAAI,CAAC,CAAA;AAC7B,UAAA,MAAA;AACF,QAAA,KAAK,SAAS;UACZ,KAAK,IAAI,CAACQ,OAAO,CAACC,cAAc,CAACX,KAAK,CAACE,IAAI,CAAC,CAAC,CAAA;AAC7C,UAAA,MAAA;AACJ,OAAA;KACD,CAAA;AACH,GAAA;EAEAO,YAAYA,CAACT,KAAqB,EAAE;IAClC,MAAM;MAAEI,MAAM;AAAEQ,MAAAA,EAAAA;AAAG,KAAC,GAAGZ,KAAK,CAAA;AAC5B,IAAA,MAAMa,MAAM,GAAG,IAAI,CAACjB,OAAO,CAACkB,GAAG,CAACV,MAAM,CAAC,CAAEU,GAAG,CAACF,EAAE,CAAC,CAAA;AAEhD,IAAA,IAAIC,MAAM,EAAE;MACVA,MAAM,CAACE,KAAK,EAAE,CAAA;MACd,IAAI,CAACnB,OAAO,CAACkB,GAAG,CAACV,MAAM,CAAC,CAAEI,MAAM,CAACI,EAAE,CAAC,CAAA;AACtC,KAAA;AACF,GAAA;EAEA,MAAMF,OAAOA,CAACV,KAAuB,EAAE;IACrC,MAAM;MAAEI,MAAM;MAAEQ,EAAE;AAAEV,MAAAA,IAAAA;AAAK,KAAC,GAAGF,KAAK,CAAA;IAElC,IAAI;MACF,MAAMa,MAAM,GAAG,IAAI,CAACpB,KAAK,CAACiB,OAAO,CAACR,IAAI,CAAC,CAAA;AACvC,MAAA,IAAI,CAACN,OAAO,CAACkB,GAAG,CAACV,MAAM,CAAC,CAAEG,GAAG,CAACK,EAAE,EAAEC,MAAM,CAAC,CAAA;MAEzC,MAAMG,MAAM,GAAG,MAAMH,MAAM,CAAA;MAE3B,IAAI,CAACnB,OAAO,CAACoB,GAAG,CAACV,MAAM,CAAC,EAAEa,WAAW,CAAC;AAAEhB,QAAAA,IAAI,EAAE,kBAAkB;QAAEW,EAAE;QAAER,MAAM;QAAEF,IAAI,EAAEgB,eAAe,CAACF,MAAM,CAAA;AAAE,OAAC,CAAC,CAAA;KAC/G,CAAC,OAAOG,KAAK,EAAE;AACd,MAAA,IAAIC,YAAY,CAACD,KAAK,CAAC,EAAE,OAAA;MAEzB,IAAI,CAACzB,OAAO,CAACoB,GAAG,CAACV,MAAM,CAAC,EAAEa,WAAW,CAAC;AAAEhB,QAAAA,IAAI,EAAE,gBAAgB;QAAEW,EAAE;QAAER,MAAM;AAAEF,QAAAA,IAAI,EAAEiB,KAAAA;AAAM,OAAC,CAAC,CAAA;AAC5F,KAAC,SAAS;MACR,IAAI,CAACvB,OAAO,CAACkB,GAAG,CAACV,MAAM,CAAC,CAAEI,MAAM,CAACI,EAAE,CAAC,CAAA;AACtC,KAAA;AACF,GAAA;AACF,CAAA;AAIA,SAASS,iBAAiBA,CAACC,QAAwC,EAAE;AACnE,EAAA,IAAI,CAACA,QAAQ,EAAE,OAAO,IAAI,CAAA;EAE1B,MAAMC,KAAiC,GAAG,EAAE,CAAA;EAE5C,IAAID,QAAQ,CAACE,OAAO,EAAE;AACpBD,IAAAA,KAAK,CAACC,OAAO,GAAGC,KAAK,CAACC,IAAI,CAACJ,QAAQ,CAACE,OAAO,CAACG,OAAO,EAAE,CAAuB,CAAA;AAC9E,GAAA;AAEAJ,EAAAA,KAAK,CAACK,EAAE,GAAGN,QAAQ,CAACM,EAAE,CAAA;AACtBL,EAAAA,KAAK,CAACM,UAAU,GAAGP,QAAQ,CAACO,UAAU,CAAA;AACtCN,EAAAA,KAAK,CAACO,MAAM,GAAGR,QAAQ,CAACQ,MAAM,CAAA;AAC9BP,EAAAA,KAAK,CAACQ,UAAU,GAAGT,QAAQ,CAACS,UAAU,CAAA;AACtCR,EAAAA,KAAK,CAACtB,IAAI,GAAGqB,QAAQ,CAACrB,IAAI,CAAA;AAC1BsB,EAAAA,KAAK,CAACS,GAAG,GAAGV,QAAQ,CAACU,GAAG,CAAA;AAExB,EAAA,OAAOT,KAAK,CAAA;AACd,CAAA;AAEA,SAASH,YAAYA,CAACD,KAAc,EAAkB;EACpD,OAAOA,KAAK,YAAYc,KAAK,IAAId,KAAK,CAACe,IAAI,KAAK,YAAY,CAAA;AAC9D,CAAA;AAEA,SAAShB,eAAeA,CAAIF,MAAiC,EAAE;AAC7D,EAAA,MAAMmB,WAAW,GAAG;AAClBb,IAAAA,QAAQ,EAAED,iBAAiB,CAACL,MAAM,CAACM,QAAQ,CAAC;IAC5Cc,OAAO,EAAEpB,MAAM,CAACoB,OAAAA;GACjB,CAAA;AAED,EAAA,OAAOD,WAAW,CAAA;AACpB,CAAA;AAEA,SAASxB,cAAcA,CAACX,KAAuB,EAAE;AAC/C,EAAA,IAAIA,KAAK,CAACE,IAAI,CAACsB,OAAO,EAAE;AACtBxB,IAAAA,KAAK,CAACE,IAAI,CAACsB,OAAO,GAAG,IAAIa,OAAO,CAACrC,KAAK,CAACE,IAAI,CAACsB,OAAO,CAAC,CAAA;AACtD,GAAA;AAEA,EAAA,OAAOxB,KAAK,CAAA;AACd;;AC7GO,MAAMsC,YAAY,GAAG,IAAIC,GAAG,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,CAAA;;AAErF;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAC7B/C,KAAY,EACZiB,OAA6B,EAC7B+B,cAAuB,EACvBC,UAA2C,EAClC;EACT,MAAM;AAAEC,IAAAA,YAAAA;AAAa,GAAC,GAAGjC,OAAO,CAAA;EAChC,OACGA,OAAO,CAACkC,EAAE,IAAIN,YAAY,CAACO,GAAG,CAACnC,OAAO,CAACkC,EAAE,CAAC,IAC3CD,YAAY,EAAEG,MAAM,IACpBH,YAAY,EAAEI,gBAAgB,IAC9B,CAACN,cAAc,KACdhD,KAAK,CAACuD,SAAS,IAAIN,UAAU,GAC1BjD,KAAK,CAACuD,SAAS,CAACC,aAAa,CAACP,UAAU,EAAEjD,KAAK,CAAC,IAAIA,KAAK,CAACuD,SAAS,CAACE,aAAa,CAACR,UAAU,EAAEjD,KAAK,CAAC,GACpG,KAAK,CAAC,CAAA;AAEd,CAAA;AAEO,SAAS0D,UAAUA,CACxBzC,OAAsC,EACoE;AAC1G,EAAA,OAAO0C,OAAO,CAAC1C,OAAO,CAACkC,EAAE,IAAIN,YAAY,CAACO,GAAG,CAACnC,OAAO,CAACkC,EAAE,CAAC,CAAC,CAAA;AAC5D,CAAA;AAEO,SAASS,gBAAgBA,CAAIC,QAAmC,EAAW;AAChF,EAAA,IAAI,CAACH,UAAU,CAACG,QAAQ,CAAC5C,OAAO,CAAC,EAAE;AACjC,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AACA;AACA;AACA;;AAEA,EAAA,IAAI4C,QAAQ,CAAC5C,OAAO,CAACkC,EAAE,KAAK,cAAc,IAAIU,QAAQ,CAAChC,QAAQ,EAAEQ,MAAM,KAAK,GAAG,EAAE;AAC/E,IAAA,OAAOwB,QAAQ,CAAClB,OAAO,GAAGmB,MAAM,CAACC,IAAI,CAACF,QAAQ,CAAClB,OAAO,CAAC,CAACqB,MAAM,GAAG,CAAC,GAAG,KAAK,CAAA;AAC5E,GAAA;AAEA,EAAA,OAAOH,QAAQ,CAAChC,QAAQ,EAAEQ,MAAM,KAAK,GAAG,CAAA;AAC1C,CAAA;AAEA,SAAS4B,gBAAgBA,CAACvC,KAAsC,EAAoD;AAClH,EAAA,OAAOA,KAAK,YAAYwC,cAAc,IAAKxC,KAAK,CAACe,IAAI,KAAK,gBAAgB,IAAIT,KAAK,CAACmC,OAAO,CAACzC,KAAK,CAAC0C,MAAM,CAAE,CAAA;AAC5G,CAAA;AAIA;AACO,SAASC,UAAUA,CAAC3C,KAAkB,EAAE;AAC7C,EAAA,MAAM4C,WAAW,GAAGL,gBAAgB,CAACvC,KAAK,CAAC,CAAA;EAE3C,MAAM6C,MAAM,GACVD,WAAW,GAAG,IAAIJ,cAAc,CAACM,eAAe,CAAC9C,KAAK,CAAC0C,MAAM,CAAC,EAAE1C,KAAK,CAAC+C,OAAO,CAAC,GAAG,IAAIjC,KAAK,CAACd,KAAK,CAAC+C,OAAO,CAC1F,CAAA;AAChBF,EAAAA,MAAM,CAACG,KAAK,GAAGhD,KAAK,CAACgD,KAAM,CAAA;AAC3BH,EAAAA,MAAM,CAAC7C,KAAK,GAAGA,KAAK,CAACA,KAAK,CAAA;;AAE1B;AACAoC,EAAAA,MAAM,CAACa,MAAM,CAACJ,MAAM,EAAE7C,KAAK,CAAC,CAAA;AAE5B,EAAA,OAAO6C,MAAM,CAAA;AACf;;AC3DO,MAAMK,YAA8B,GAAG;AAC5C3D,EAAAA,OAAOA,CAAI4D,OAA4B,EAAEC,IAAe,EAA0D;AAChH;AACA,IAAA,IAAI,CAACD,OAAO,CAAC5D,OAAO,CAACjB,KAAK,IAAI6E,OAAO,CAAC5D,OAAO,CAACiC,YAAY,GAAG6B,SAAS,CAAC,EAAE;AACvE,MAAA,OAAOD,IAAI,CAACD,OAAO,CAAC5D,OAAO,CAAC,CAAA;AAC9B,KAAA;IAEA,MAAM;AAAEjB,MAAAA,KAAAA;KAAO,GAAG6E,OAAO,CAAC5D,OAAO,CAAA;IACjC,MAAMgC,UAAU,GAAGjD,KAAK,CAACgF,eAAe,CAACC,6BAA6B,CAACJ,OAAO,CAAC5D,OAAO,CAAC,CAAA;AACvF,IAAA,MAAMiE,MAAM,GAAGjC,UAAU,GAAGjD,KAAK,CAACmF,KAAK,CAACC,WAAW,CAACnC,UAAU,CAAC,GAAG,IAAI,CAAA;;AAEtE;AACA;AACA,IAAA,IAAIF,eAAe,CAAC/C,KAAK,EAAE6E,OAAO,CAAC5D,OAAO,EAAE,CAAC,CAACiE,MAAM,EAAEjC,UAAU,CAAC,EAAE;AACjE,MAAA,OAAOoC,sBAAsB,CAACP,IAAI,EAAED,OAAO,EAAE5B,UAAU,CAAC,CAAA;AAC1D,KAAA;IAEAqC,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAC,IAAA,IAAA;AAAA,MAAA,IAAA,CAAAA,IAAA,EAAA;QAAA,MAAAnD,IAAAA,KAAA,CAAQ,CAAwC,uCAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAE0C,MAAM,CAAA,GAAA,EAAA,CAAA;AACxDL,IAAAA,OAAO,CAACe,WAAW,CAACV,MAAM,CAACrD,QAAQ,CAAC,CAAA;IAEpC,IAAI,OAAO,IAAIqD,MAAM,EAAE;AACrB,MAAA,MAAMA,MAAM,CAAA;AACd,KAAA;AAEA,IAAA,OAAOW,kBAAkB,CAAI7F,KAAK,EAAEkF,MAAM,CAACvC,OAA+B,CAAC,CAAA;AAC7E,GAAA;AACF,EAAC;AAED,SAASkD,kBAAkBA,CAAI7F,KAAY,EAAE6D,QAAqC,EAAK;EACrF,IAAI,CAACA,QAAQ,EAAE;AACb,IAAA,OAAOA,QAAQ,CAAA;AACjB,GAAA;EAEA,IAAI7B,KAAK,CAACmC,OAAO,CAACN,QAAQ,CAACpD,IAAI,CAAC,EAAE;IAChC,MAAMA,IAAI,GAAGoD,QAAQ,CAACpD,IAAI,CAACqF,GAAG,CAAE7C,UAAU,IAAK;AAC7C,MAAA,OAAOjD,KAAK,CAACmF,KAAK,CAACY,IAAI,CAAC9C,UAAU,CAAC,CAAA;AACrC,KAAC,CAAC,CAAA;IAEF,OAAOa,MAAM,CAACa,MAAM,CAAC,EAAE,EAAEd,QAAQ,EAAE;AAAEpD,MAAAA,IAAAA;AAAK,KAAC,CAAC,CAAA;AAC9C,GAAC,MAAM;AACL,IAAA,MAAMA,IAAI,GAAIoD,QAAQ,CAACpD,IAAI,GAAGT,KAAK,CAACmF,KAAK,CAACY,IAAI,CAAClC,QAAQ,CAACpD,IAAI,CAAC,GAAG,IAAU,CAAA;IAC1E,OAAOqD,MAAM,CAACa,MAAM,CAAC,EAAE,EAAEd,QAAQ,EAAE;AAAEpD,MAAAA,IAAAA;AAAK,KAAC,CAAC,CAAA;AAC9C,GAAA;AACF,CAAA;AAEA,SAASuF,qBAAqBA,CAC5BhG,KAAY,EACZiB,OAAuC,EACvC4C,QAAmC,EACnC;EACA,IAAIhC,QAAqC,GAAG,IAAI,CAAA;AAChD,EAAA,IAAI6B,UAAU,CAACzC,OAAO,CAAC,EAAE;AACvB,IAAA,MAAMgF,MAAM,GAAGhF,OAAO,CAACR,IAAI,EAAEwF,MAAM,IAAIhF,OAAO,CAACiF,OAAO,GAAG,CAAC,CAAC,CAAA;AAC3D,IAAA,IAAID,MAAM,EAAE;MACVpE,QAAQ,GAAG7B,KAAK,CAACmF,KAAK,CAACgB,SAAS,CAACF,MAAM,EAAEpC,QAAQ,CAAyB,CAAA;;AAE1E;AACA;AACA;AACF,KAAC,MAAM,IAAID,gBAAgB,CAACC,QAAQ,CAAC,EAAE;MACrChC,QAAQ,GAAG7B,KAAK,CAACmF,KAAK,CAACiB,GAAG,CAACvC,QAAQ,CAAyB,CAAA;AAC9D,KAAA;AACF,GAAC,MAAM;IACLhC,QAAQ,GAAG7B,KAAK,CAACmF,KAAK,CAACiB,GAAG,CAACvC,QAAQ,CAAyB,CAAA;AAC9D,GAAA;AACA,EAAA,OAAOgC,kBAAkB,CAAC7F,KAAK,EAAE6B,QAAQ,CAAC,CAAA;AAC5C,CAAA;AAEA,SAASwE,kBAAkBA,CACzBrG,KAAY,EACZiB,OAAuC,EACvCgC,UAA2C,EAC3CY,QAAmC,EAChC;AACH,EAAA,IAAIhC,QAA8B,CAAA;EAClC7B,KAAK,CAACsG,KAAK,CAAC,MAAM;IAChBzE,QAAQ,GAAGmE,qBAAqB,CAAIhG,KAAK,EAAEiB,OAAO,EAAE4C,QAAQ,CAAyB,CAAA;AACvF,GAAC,CAAC,CAAA;AAEF,EAAA,IAAI7D,KAAK,CAACuD,SAAS,EAAEgD,UAAU,EAAE;AAC/BvG,IAAAA,KAAK,CAACuD,SAAS,CAACgD,UAAU,CAACtF,OAAO,EAAE4C,QAAQ,CAAChC,QAAQ,EAAEoB,UAAU,EAAEjD,KAAK,CAAC,CAAA;AAC3E,GAAA;AAEA,EAAA,OAAO6B,QAAQ,CAAA;AACjB,CAAA;AAEA,SAAS2E,mBAAmBA,CAC1BxG,KAAY,EACZiB,OAAuC,EACvCS,KAAiC,EACjC;AACA,EAAA,IAAIgC,UAAU,CAACzC,OAAO,CAAC,EAAE;AACvB;AACA;AACA,IAAA,MAAMmD,MAAM,GACV1C,KAAK,IACLA,KAAK,CAACiB,OAAO,IACb,OAAOjB,KAAK,CAACiB,OAAO,KAAK,QAAQ,IACjC,QAAQ,IAAIjB,KAAK,CAACiB,OAAO,IACzBX,KAAK,CAACmC,OAAO,CAACzC,KAAK,CAACiB,OAAO,CAACyB,MAAM,CAAC,GAC9B1C,KAAK,CAACiB,OAAO,CAACyB,MAAM,GACrBqC,SAAS,CAAA;AAEf,IAAA,MAAMR,MAAM,GAAGhF,OAAO,CAACR,IAAI,EAAEwF,MAAM,IAAIhF,OAAO,CAACiF,OAAO,GAAG,CAAC,CAAC,CAAA;IAE3DlG,KAAK,CAACmF,KAAK,CAACuB,iBAAiB,CAACT,MAAM,EAAE7B,MAAM,CAAC,CAAA;AAC/C,GAAC,MAAM;AACL,IAAA,OAAOpE,KAAK,CAACmF,KAAK,CAACiB,GAAG,CAAC1E,KAAK,CAAC,CAAA;AAC/B,GAAA;AACF,CAAA;AAEA,SAASiF,gBAAgBA,CACvB3G,KAAY,EACZiB,OAAuC,EACvCgC,UAA2C,EAC3CvB,KAAiC,EAC1B;AACP,EAAA,IAAIT,OAAO,CAAC2F,MAAM,EAAEC,OAAO,EAAE;AAC3B,IAAA,MAAMnF,KAAK,CAAA;AACb,GAAA;AACA,EAAA,IAAIG,QAA2C,CAAA;EAC/C7B,KAAK,CAACsG,KAAK,CAAC,MAAM;IAChBzE,QAAQ,GAAG2E,mBAAmB,CAACxG,KAAK,EAAEiB,OAAO,EAAES,KAAK,CAAC,CAAA;AACvD,GAAC,CAAC,CAAA;AAEF,EAAA,IAAIuB,UAAU,IAAIjD,KAAK,CAACuD,SAAS,EAAEgD,UAAU,EAAE;AAC7CvG,IAAAA,KAAK,CAACuD,SAAS,CAACgD,UAAU,CAACtF,OAAO,EAAES,KAAK,CAACG,QAAQ,EAAEoB,UAAU,EAAEjD,KAAK,CAAC,CAAA;AACxE,GAAA;AAEA,EAAA,IAAI0D,UAAU,CAACzC,OAAO,CAAC,EAAE;AACvB,IAAA,MAAMS,KAAK,CAAA;AACb,GAAA;AAEA,EAAA,MAAMoF,QAAQ,GAAGzC,UAAU,CAAC3C,KAAK,CAAC,CAAA;EAClCoF,QAAQ,CAACnE,OAAO,GAAGd,QAAS,CAAA;AAC5B,EAAA,MAAMiF,QAAQ,CAAA;AAChB,CAAA;AAEA,SAASzB,sBAAsBA,CAC7BP,IAAe,EACfD,OAA4B,EAC5B5B,UAA2C,EAC/B;EACZ,MAAM;AAAEhC,IAAAA,OAAAA;AAAQ,GAAC,GAAG4D,OAAO,CAAA;EAC3B,MAAM;AAAE7E,IAAAA,KAAAA;GAAO,GAAG6E,OAAO,CAAC5D,OAAO,CAAA;AAEjC,EAAA,IAAIyC,UAAU,CAACzC,OAAO,CAAC,EAAE;AACvB;AACA,IAAA,MAAMgF,MAAM,GAAGhF,OAAO,CAACR,IAAI,EAAEwF,MAAM,IAAIhF,OAAO,CAACiF,OAAO,GAAG,CAAC,CAAC,CAAA;IAC3DZ,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,KAAA,CAAA,GAAA,CAAAC,IAAA,IAAA;AAAA,MAAA,IAAA,CAAAA,IAAA,EAAA;AAAA,QAAA,MAAA,IAAAnD,KAAA,CAAQ,CAAA,sDAAA,EAAwDvB,OAAO,CAACkC,EAAG,CAAS,QAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAE8C,MAAM,CAAA,GAAA,EAAA,CAAA;AAC5F,IAAA,IAAIA,MAAM,EAAE;MACVjG,KAAK,CAACmF,KAAK,CAAC4B,UAAU,CAACd,MAAM,EAAEpB,OAAO,CAAC,CAAA;AACzC,KAAA;AACF,GAAA;AAEA,EAAA,IAAI7E,KAAK,CAACuD,SAAS,EAAEyD,WAAW,EAAE;IAChChH,KAAK,CAACuD,SAAS,CAACyD,WAAW,CAAC/F,OAAO,EAAEgC,UAAU,EAAEjD,KAAK,CAAC,CAAA;AACzD,GAAA;AAEA,EAAA,OAAO8E,IAAI,CAAC7D,OAAO,CAAC,CAACgG,IAAI,CACtBpD,QAAQ,IAAKwC,kBAAkB,CAACrG,KAAK,EAAEiB,OAAO,EAAEgC,UAAU,EAAEY,QAAQ,CAAC,EACrEnC,KAAiC,IAAKiF,gBAAgB,CAAC3G,KAAK,EAAEiB,OAAO,EAAEgC,UAAU,EAAEvB,KAAK,CAC3F,CAAC,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"data-worker.js","sources":["../src/data-worker/worker.ts","../src/data-worker/utils.ts","../src/data-worker/cache-handler.ts"],"sourcesContent":["import type { Future, ResponseInfo, StructuredDataDocument } from '@ember-data-mirror/request';\nimport type Store from '@ember-data-mirror/store';\n\nimport type { AbortEventData, RequestEventData, ThreadInitEventData, WorkerThreadEvent } from './types';\n\nconst WorkerScope = (globalThis as unknown as { SharedWorkerGlobalScope: FunctionConstructor }).SharedWorkerGlobalScope;\n\nexport class DataWorker {\n declare store: Store;\n declare threads: Map<string, MessagePort>;\n declare pending: Map<string, Map<number, Future<unknown>>>;\n declare isSharedWorker: boolean;\n\n constructor(UserStore: typeof Store) {\n (globalThis as unknown as { name: string }).name = 'WarpDrive DataWorker';\n this.store = new UserStore();\n this.threads = new Map();\n this.pending = new Map();\n this.initialize();\n this.isSharedWorker = globalThis instanceof WorkerScope;\n }\n\n initialize() {\n const fn = (event: MessageEvent<ThreadInitEventData>) => {\n const { type } = event.data;\n\n switch (type) {\n case 'connect':\n this.setupThread(event.data.thread, event.ports[0]);\n break;\n }\n };\n\n if (this.isSharedWorker) {\n (globalThis as unknown as { onconnect: typeof globalThis.onmessage }).onconnect = fn;\n } else {\n globalThis.onmessage = fn;\n }\n }\n\n setupThread(thread: string, port: MessagePort) {\n this.threads.set(thread, port);\n this.pending.set(thread, new Map());\n port.onmessage = (event: WorkerThreadEvent) => {\n if (event.type === 'close') {\n this.threads.delete(thread);\n return;\n }\n\n const { type } = event.data;\n switch (type) {\n case 'abort':\n this.abortRequest(event.data);\n break;\n case 'request':\n void this.request(prepareRequest(event.data));\n break;\n }\n };\n }\n\n abortRequest(event: AbortEventData) {\n const { thread, id } = event;\n const future = this.pending.get(thread)!.get(id);\n\n if (future) {\n future.abort();\n this.pending.get(thread)!.delete(id);\n }\n }\n\n async request(event: RequestEventData) {\n const { thread, id, data } = event;\n\n try {\n const future = this.store.request(data);\n this.pending.get(thread)!.set(id, future);\n\n const result = await future;\n\n this.threads.get(thread)?.postMessage({ type: 'success-response', id, thread, data: prepareResponse(result) });\n } catch (error) {\n if (isAbortError(error)) return;\n\n this.threads.get(thread)?.postMessage({ type: 'error-response', id, thread, data: error });\n } finally {\n this.pending.get(thread)!.delete(id);\n }\n }\n}\n\ntype Mutable<T> = { -readonly [P in keyof T]: T[P] };\n\nfunction softCloneResponse(response: Response | ResponseInfo | null) {\n if (!response) return null;\n\n const clone: Partial<Mutable<Response>> = {};\n\n if (response.headers) {\n clone.headers = Array.from(response.headers.entries()) as unknown as Headers;\n }\n\n clone.ok = response.ok;\n clone.redirected = response.redirected;\n clone.status = response.status;\n clone.statusText = response.statusText;\n clone.type = response.type;\n clone.url = response.url;\n\n return clone;\n}\n\nfunction isAbortError(error: unknown): error is Error {\n return error instanceof Error && error.name === 'AbortError';\n}\n\nfunction prepareResponse<T>(result: StructuredDataDocument<T>) {\n const newResponse = {\n response: softCloneResponse(result.response),\n content: result.content,\n };\n\n return newResponse;\n}\n\nfunction prepareRequest(event: RequestEventData) {\n if (event.data.headers) {\n event.data.headers = new Headers(event.data.headers);\n }\n\n return event;\n}\n","import type Store from '@ember-data-mirror/store';\nimport type { StableDocumentIdentifier } from '@warp-drive-mirror/core-types/identifier';\nimport type {\n ImmutableCreateRequestOptions,\n ImmutableDeleteRequestOptions,\n ImmutableRequestInfo,\n ImmutableUpdateRequestOptions,\n StructuredDataDocument,\n} from '@warp-drive-mirror/core-types/request';\nimport type { ApiError } from '@warp-drive-mirror/core-types/spec/error';\n\nexport const MUTATION_OPS = new Set(['createRecord', 'updateRecord', 'deleteRecord']);\n\n/**\n * In a Worker, any time we are asked to make a request, data needs to be returned.\n * background requests are ergo no different than foreground requests.\n * @internal\n */\nexport function calcShouldFetch(\n store: Store,\n request: ImmutableRequestInfo,\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 cacheOptions?.backgroundReload ||\n !hasCachedValue ||\n (store.lifetimes && identifier\n ? store.lifetimes.isHardExpired(identifier, store) || store.lifetimes.isSoftExpired(identifier, store)\n : false)\n );\n}\n\nexport function isMutation(\n request: Partial<ImmutableRequestInfo>\n): request is ImmutableUpdateRequestOptions | ImmutableCreateRequestOptions | ImmutableDeleteRequestOptions {\n return Boolean(request.op && MUTATION_OPS.has(request.op));\n}\n\nexport function isCacheAffecting<T>(document: StructuredDataDocument<T>): boolean {\n if (!isMutation(document.request)) {\n return true;\n }\n // a mutation combined with a 204 has no cache impact when no known records were involved\n // a createRecord with a 201 with an empty response and no known records should similarly\n // have no cache impact\n\n if (document.request.op === 'createRecord' && document.response?.status === 201) {\n return document.content ? Object.keys(document.content).length > 0 : false;\n }\n\n return document.response?.status !== 204;\n}\n\nfunction isAggregateError(error: Error & { errors?: ApiError[] }): error is AggregateError & { errors: ApiError[] } {\n return error instanceof AggregateError || (error.name === 'AggregateError' && Array.isArray(error.errors));\n}\n\ntype RobustError = Error & { error: string | object; errors?: ApiError[]; content?: unknown };\n\n// TODO @runspired, consider if we should deep freeze errors (potentially only in debug) vs cloning them\nexport function cloneError(error: RobustError) {\n const isAggregate = isAggregateError(error);\n\n const cloned = (\n isAggregate ? new AggregateError(structuredClone(error.errors), error.message) : new Error(error.message)\n ) as RobustError;\n cloned.stack = error.stack!;\n cloned.error = error.error;\n\n // copy over enumerable properties\n Object.assign(cloned, error);\n\n return cloned;\n}\n","import type { CacheHandler as CacheHandlerType, Future, NextFn } from '@ember-data-mirror/request';\nimport type Store from '@ember-data-mirror/store';\nimport type { StoreRequestContext } from '@ember-data-mirror/store';\nimport { assert } from '@warp-drive-mirror/build-config/macros';\nimport type { StableDocumentIdentifier } from '@warp-drive-mirror/core-types/identifier';\nimport type { StructuredDataDocument, StructuredErrorDocument } from '@warp-drive-mirror/core-types/request';\nimport { SkipCache } from '@warp-drive-mirror/core-types/request';\nimport type { ResourceDataDocument, ResourceErrorDocument } from '@warp-drive-mirror/core-types/spec/document';\nimport type { ApiError } from '@warp-drive-mirror/core-types/spec/error';\n\nimport { calcShouldFetch, cloneError, isCacheAffecting, isMutation } from './utils';\n\n/**\n * A simplified CacheHandler that hydrates ResourceDataDocuments from the cache\n * with their referenced resources.\n *\n * @typedoc\n */\nexport const CacheHandler: CacheHandlerType = {\n request<T>(context: StoreRequestContext, next: NextFn<T>): Promise<T | StructuredDataDocument<T>> | Future<T> | 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 const peeked = identifier ? store.cache.peekRequest(identifier) : null;\n\n // In a Worker, any time we are asked to make a request, data needs to be returned.\n // background requests are ergo no different than foreground requests.\n if (calcShouldFetch(store, context.request, !!peeked, identifier)) {\n return fetchContentAndHydrate(next, context, identifier);\n }\n\n assert(`Expected a peeked request to be present`, peeked);\n context.setResponse(peeked.response);\n\n if ('error' in peeked) {\n throw peeked;\n }\n\n return maybeUpdateObjects<T>(store, peeked.content as ResourceDataDocument);\n },\n};\n\nfunction maybeUpdateObjects<T>(store: Store, document: ResourceDataDocument | null): T {\n if (!document) {\n return document as T;\n }\n\n if (Array.isArray(document.data)) {\n const data = document.data.map((identifier) => {\n return store.cache.peek(identifier);\n });\n\n return Object.assign({}, document, { data }) as T;\n } else {\n const data = (document.data ? store.cache.peek(document.data) : null) as T;\n return Object.assign({}, document, { data }) as T;\n }\n}\n\nfunction updateCacheForSuccess<T>(\n store: Store,\n request: StoreRequestContext['request'],\n document: StructuredDataDocument<T>\n) {\n let response: ResourceDataDocument | null = null;\n if (isMutation(request)) {\n const record = request.data?.record || request.records?.[0];\n if (record) {\n response = store.cache.didCommit(record, document) as ResourceDataDocument;\n\n // a mutation combined with a 204 has no cache impact when no known records were involved\n // a createRecord with a 201 with an empty response and no known records should similarly\n // have no cache impact\n } else if (isCacheAffecting(document)) {\n response = store.cache.put(document) as ResourceDataDocument;\n }\n } else {\n response = store.cache.put(document) as ResourceDataDocument;\n }\n return maybeUpdateObjects(store, response);\n}\n\nfunction handleFetchSuccess<T>(\n store: Store,\n request: StoreRequestContext['request'],\n identifier: StableDocumentIdentifier | null,\n document: StructuredDataDocument<T>\n): T {\n let response: ResourceDataDocument;\n store._join(() => {\n response = updateCacheForSuccess<T>(store, request, document) as ResourceDataDocument;\n });\n\n if (store.lifetimes?.didRequest) {\n store.lifetimes.didRequest(request, document.response, identifier, store);\n }\n\n return response! as T;\n}\n\nfunction updateCacheForError<T>(\n store: Store,\n request: StoreRequestContext['request'],\n error: StructuredErrorDocument<T>\n) {\n if (isMutation(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 ApiError[])\n : undefined;\n\n const record = request.data?.record || request.records?.[0];\n\n store.cache.commitWasRejected(record, errors);\n } else {\n return store.cache.put(error) as ResourceErrorDocument;\n }\n}\n\nfunction handleFetchError<T>(\n store: Store,\n request: StoreRequestContext['request'],\n identifier: StableDocumentIdentifier | null,\n error: StructuredErrorDocument<T>\n): never {\n if (request.signal?.aborted) {\n throw error;\n }\n let response: ResourceErrorDocument | undefined;\n store._join(() => {\n response = updateCacheForError(store, request, error);\n });\n\n if (identifier && store.lifetimes?.didRequest) {\n store.lifetimes.didRequest(request, error.response, identifier, store);\n }\n\n if (isMutation(request)) {\n throw error;\n }\n\n const newError = cloneError(error);\n newError.content = response!;\n throw newError;\n}\n\nfunction fetchContentAndHydrate<T>(\n next: NextFn<T>,\n context: StoreRequestContext,\n identifier: StableDocumentIdentifier | null\n): Promise<T> {\n const { request } = context;\n const { store } = context.request;\n\n if (isMutation(request)) {\n // TODO should we handle multiple records in request.records by iteratively calling willCommit for each\n const record = request.data?.record || request.records?.[0];\n assert(`Expected to receive a list of records included in the ${request.op} request`, record);\n if (record) {\n store.cache.willCommit(record, context);\n }\n }\n\n if (store.lifetimes?.willRequest) {\n store.lifetimes.willRequest(request, identifier, store);\n }\n\n return next(request).then(\n (document) => handleFetchSuccess(store, request, identifier, document),\n (error: StructuredErrorDocument<T>) => handleFetchError(store, request, identifier, error)\n );\n}\n"],"names":["WorkerScope","globalThis","SharedWorkerGlobalScope","DataWorker","constructor","UserStore","name","store","threads","Map","pending","initialize","isSharedWorker","fn","event","type","data","setupThread","thread","ports","onconnect","onmessage","port","set","delete","abortRequest","request","prepareRequest","id","future","get","abort","result","postMessage","prepareResponse","error","isAbortError","softCloneResponse","response","clone","headers","Array","from","entries","ok","redirected","status","statusText","url","Error","newResponse","content","Headers","MUTATION_OPS","Set","calcShouldFetch","hasCachedValue","identifier","cacheOptions","op","has","reload","backgroundReload","lifetimes","isHardExpired","isSoftExpired","isMutation","Boolean","isCacheAffecting","document","Object","keys","length","isAggregateError","AggregateError","isArray","errors","cloneError","isAggregate","cloned","structuredClone","message","stack","assign","CacheHandler","context","next","SkipCache","identifierCache","getOrCreateDocumentIdentifier","peeked","cache","peekRequest","fetchContentAndHydrate","macroCondition","getGlobalConfig","WarpDrive","env","DEBUG","test","setResponse","maybeUpdateObjects","map","peek","updateCacheForSuccess","record","records","didCommit","put","handleFetchSuccess","_join","didRequest","updateCacheForError","undefined","commitWasRejected","handleFetchError","signal","aborted","newError","willCommit","willRequest","then"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@warp-drive-mirror/experiments",
3
3
  "description": "Experimental features for EmberData/WarpDrive",
4
- "version": "0.0.1-alpha.101",
4
+ "version": "0.0.1-alpha.102",
5
5
  "license": "MIT",
6
6
  "author": "Chris Thoburn <runspired@users.noreply.github.com>",
7
7
  "repository": {
@@ -41,10 +41,10 @@
41
41
  },
42
42
  "peerDependencies": {
43
43
  "@sqlite.org/sqlite-wasm": "3.46.0-build2",
44
- "@ember-data-mirror/request": "5.4.0-alpha.101",
45
- "@ember-data-mirror/request-utils": "5.4.0-alpha.101",
46
- "@ember-data-mirror/store": "5.4.0-alpha.101",
47
- "@warp-drive-mirror/core-types": "0.0.0-alpha.87"
44
+ "@ember-data-mirror/request": "5.4.0-alpha.102",
45
+ "@ember-data-mirror/request-utils": "5.4.0-alpha.102",
46
+ "@ember-data-mirror/store": "5.4.0-alpha.102",
47
+ "@warp-drive-mirror/core-types": "0.0.0-alpha.88"
48
48
  },
49
49
  "peerDependenciesMeta": {
50
50
  "@sqlite.org/sqlite-wasm": {
@@ -53,20 +53,20 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "@embroider/macros": "^1.16.1",
56
- "@warp-drive-mirror/build-config": "0.0.0-alpha.38"
56
+ "@warp-drive-mirror/build-config": "0.0.0-alpha.39"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@babel/core": "^7.24.5",
60
60
  "@babel/plugin-transform-typescript": "^7.24.5",
61
61
  "@babel/preset-env": "^7.24.5",
62
62
  "@babel/preset-typescript": "^7.24.1",
63
- "@ember-data-mirror/request": "5.4.0-alpha.101",
64
- "@ember-data-mirror/request-utils": "5.4.0-alpha.101",
65
- "@ember-data-mirror/store": "5.4.0-alpha.101",
66
- "@ember-data-mirror/tracking": "5.4.0-alpha.101",
63
+ "@ember-data-mirror/request": "5.4.0-alpha.102",
64
+ "@ember-data-mirror/request-utils": "5.4.0-alpha.102",
65
+ "@ember-data-mirror/store": "5.4.0-alpha.102",
66
+ "@ember-data-mirror/tracking": "5.4.0-alpha.102",
67
67
  "@glimmer/component": "^1.1.2",
68
- "@warp-drive-mirror/core-types": "0.0.0-alpha.87",
69
- "@warp-drive/internal-config": "5.4.0-alpha.101",
68
+ "@warp-drive-mirror/core-types": "0.0.0-alpha.88",
69
+ "@warp-drive/internal-config": "5.4.0-alpha.102",
70
70
  "ember-source": "~5.8.0",
71
71
  "pnpm-sync-dependencies-meta-injected": "0.0.14",
72
72
  "@sqlite.org/sqlite-wasm": "3.46.0-build2",
@@ -6,6 +6,7 @@ declare module '@warp-drive-mirror/experiments/data-worker/worker' {
6
6
  store: Store;
7
7
  threads: Map<string, MessagePort>;
8
8
  pending: Map<string, Map<number, Future<unknown>>>;
9
+ isSharedWorker: boolean;
9
10
  constructor(UserStore: typeof Store);
10
11
  initialize(): void;
11
12
  setupThread(thread: string, port: MessagePort): void;
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/data-worker/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAwC,MAAM,qBAAqB,CAAC;AACxF,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAA0C,MAAM,SAAS,CAAC;AAExG,qBAAa,UAAU;IACb,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE/C,SAAS,EAAE,OAAO,KAAK;IAOnC,UAAU;IAYV,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;IAqB7C,YAAY,CAAC,KAAK,EAAE,cAAc;IAU5B,OAAO,CAAC,KAAK,EAAE,gBAAgB;CAkBtC"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/data-worker/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAwC,MAAM,qBAAqB,CAAC;AACxF,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAA0C,MAAM,SAAS,CAAC;AAIxG,qBAAa,UAAU;IACb,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,cAAc,EAAE,OAAO,CAAC;gBAEpB,SAAS,EAAE,OAAO,KAAK;IASnC,UAAU;IAkBV,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;IAqB7C,YAAY,CAAC,KAAK,EAAE,cAAc;IAU5B,OAAO,CAAC,KAAK,EAAE,gBAAgB;CAkBtC"}