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

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.
@@ -7,24 +7,36 @@ class DataWorker {
7
7
  this.store = new UserStore();
8
8
  this.threads = new Map();
9
9
  this.pending = new Map();
10
- this.initialize();
11
10
  this.isSharedWorker = globalThis instanceof WorkerScope;
11
+ this.initialize();
12
12
  }
13
13
  initialize() {
14
- const fn = event => {
15
- const {
16
- type
17
- } = event.data;
18
- switch (type) {
19
- case 'connect':
20
- this.setupThread(event.data.thread, event.ports[0]);
21
- break;
22
- }
23
- };
24
14
  if (this.isSharedWorker) {
25
- globalThis.onconnect = fn;
15
+ globalThis.onconnect = e => {
16
+ const port = e.ports[0];
17
+ port.onmessage = event => {
18
+ const {
19
+ type
20
+ } = event.data;
21
+ switch (type) {
22
+ case 'connect':
23
+ this.setupThread(event.data.thread, port);
24
+ break;
25
+ }
26
+ };
27
+ port.start();
28
+ };
26
29
  } else {
27
- globalThis.onmessage = fn;
30
+ globalThis.onmessage = event => {
31
+ const {
32
+ type
33
+ } = event.data;
34
+ switch (type) {
35
+ case 'connect':
36
+ this.setupThread(event.data.thread, event.ports[0]);
37
+ break;
38
+ }
39
+ };
28
40
  }
29
41
  }
30
42
  setupThread(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\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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"}
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.isSharedWorker = globalThis instanceof WorkerScope;\n this.initialize();\n }\n\n initialize() {\n if (this.isSharedWorker) {\n (globalThis as unknown as { onconnect: typeof globalThis.onmessage }).onconnect = (e) => {\n const port = e.ports[0];\n port.onmessage = (event: MessageEvent<ThreadInitEventData>) => {\n const { type } = event.data;\n\n switch (type) {\n case 'connect':\n this.setupThread(event.data.thread, port);\n break;\n }\n };\n port.start();\n };\n } else {\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\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","isSharedWorker","initialize","onconnect","e","port","ports","onmessage","event","type","data","setupThread","thread","start","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":";;;AAKA,MAAMA,WAAW,GAAIC,UAAU,CAAiEC,uBAAuB,CAAA;AAEhH,MAAMC,UAAU,CAAC;EAMtBC,WAAWA,CAACC,SAAuB,EAAE;IAClCJ,UAAU,CAAiCK,IAAI,GAAG,sBAAsB,CAAA;AACzE,IAAA,IAAI,CAACC,KAAK,GAAG,IAAIF,SAAS,EAAE,CAAA;AAC5B,IAAA,IAAI,CAACG,OAAO,GAAG,IAAIC,GAAG,EAAE,CAAA;AACxB,IAAA,IAAI,CAACC,OAAO,GAAG,IAAID,GAAG,EAAE,CAAA;AACxB,IAAA,IAAI,CAACE,cAAc,GAAGV,UAAU,YAAYD,WAAW,CAAA;IACvD,IAAI,CAACY,UAAU,EAAE,CAAA;AACnB,GAAA;AAEAA,EAAAA,UAAUA,GAAG;IACX,IAAI,IAAI,CAACD,cAAc,EAAE;AACtBV,MAAAA,UAAU,CAA2DY,SAAS,GAAIC,CAAC,IAAK;AACvF,QAAA,MAAMC,IAAI,GAAGD,CAAC,CAACE,KAAK,CAAC,CAAC,CAAC,CAAA;AACvBD,QAAAA,IAAI,CAACE,SAAS,GAAIC,KAAwC,IAAK;UAC7D,MAAM;AAAEC,YAAAA,IAAAA;WAAM,GAAGD,KAAK,CAACE,IAAI,CAAA;AAE3B,UAAA,QAAQD,IAAI;AACV,YAAA,KAAK,SAAS;cACZ,IAAI,CAACE,WAAW,CAACH,KAAK,CAACE,IAAI,CAACE,MAAM,EAAEP,IAAI,CAAC,CAAA;AACzC,cAAA,MAAA;AACJ,WAAA;SACD,CAAA;QACDA,IAAI,CAACQ,KAAK,EAAE,CAAA;OACb,CAAA;AACH,KAAC,MAAM;AACLtB,MAAAA,UAAU,CAACgB,SAAS,GAAIC,KAAwC,IAAK;QACnE,MAAM;AAAEC,UAAAA,IAAAA;SAAM,GAAGD,KAAK,CAACE,IAAI,CAAA;AAE3B,QAAA,QAAQD,IAAI;AACV,UAAA,KAAK,SAAS;AACZ,YAAA,IAAI,CAACE,WAAW,CAACH,KAAK,CAACE,IAAI,CAACE,MAAM,EAAEJ,KAAK,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACnD,YAAA,MAAA;AACJ,SAAA;OACD,CAAA;AACH,KAAA;AACF,GAAA;AAEAK,EAAAA,WAAWA,CAACC,MAAc,EAAEP,IAAiB,EAAE;IAC7C,IAAI,CAACP,OAAO,CAACgB,GAAG,CAACF,MAAM,EAAEP,IAAI,CAAC,CAAA;IAC9B,IAAI,CAACL,OAAO,CAACc,GAAG,CAACF,MAAM,EAAE,IAAIb,GAAG,EAAE,CAAC,CAAA;AACnCM,IAAAA,IAAI,CAACE,SAAS,GAAIC,KAAwB,IAAK;AAC7C,MAAA,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,EAAE;AAC1B,QAAA,IAAI,CAACX,OAAO,CAACiB,MAAM,CAACH,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,CAACO,YAAY,CAACR,KAAK,CAACE,IAAI,CAAC,CAAA;AAC7B,UAAA,MAAA;AACF,QAAA,KAAK,SAAS;UACZ,KAAK,IAAI,CAACO,OAAO,CAACC,cAAc,CAACV,KAAK,CAACE,IAAI,CAAC,CAAC,CAAA;AAC7C,UAAA,MAAA;AACJ,OAAA;KACD,CAAA;AACH,GAAA;EAEAM,YAAYA,CAACR,KAAqB,EAAE;IAClC,MAAM;MAAEI,MAAM;AAAEO,MAAAA,EAAAA;AAAG,KAAC,GAAGX,KAAK,CAAA;AAC5B,IAAA,MAAMY,MAAM,GAAG,IAAI,CAACpB,OAAO,CAACqB,GAAG,CAACT,MAAM,CAAC,CAAES,GAAG,CAACF,EAAE,CAAC,CAAA;AAEhD,IAAA,IAAIC,MAAM,EAAE;MACVA,MAAM,CAACE,KAAK,EAAE,CAAA;MACd,IAAI,CAACtB,OAAO,CAACqB,GAAG,CAACT,MAAM,CAAC,CAAEG,MAAM,CAACI,EAAE,CAAC,CAAA;AACtC,KAAA;AACF,GAAA;EAEA,MAAMF,OAAOA,CAACT,KAAuB,EAAE;IACrC,MAAM;MAAEI,MAAM;MAAEO,EAAE;AAAET,MAAAA,IAAAA;AAAK,KAAC,GAAGF,KAAK,CAAA;IAElC,IAAI;MACF,MAAMY,MAAM,GAAG,IAAI,CAACvB,KAAK,CAACoB,OAAO,CAACP,IAAI,CAAC,CAAA;AACvC,MAAA,IAAI,CAACV,OAAO,CAACqB,GAAG,CAACT,MAAM,CAAC,CAAEE,GAAG,CAACK,EAAE,EAAEC,MAAM,CAAC,CAAA;MAEzC,MAAMG,MAAM,GAAG,MAAMH,MAAM,CAAA;MAE3B,IAAI,CAACtB,OAAO,CAACuB,GAAG,CAACT,MAAM,CAAC,EAAEY,WAAW,CAAC;AAAEf,QAAAA,IAAI,EAAE,kBAAkB;QAAEU,EAAE;QAAEP,MAAM;QAAEF,IAAI,EAAEe,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,CAAC5B,OAAO,CAACuB,GAAG,CAACT,MAAM,CAAC,EAAEY,WAAW,CAAC;AAAEf,QAAAA,IAAI,EAAE,gBAAgB;QAAEU,EAAE;QAAEP,MAAM;AAAEF,QAAAA,IAAI,EAAEgB,KAAAA;AAAM,OAAC,CAAC,CAAA;AAC5F,KAAC,SAAS;MACR,IAAI,CAAC1B,OAAO,CAACqB,GAAG,CAACT,MAAM,CAAC,CAAEG,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,CAACrB,IAAI,GAAGoB,QAAQ,CAACpB,IAAI,CAAA;AAC1BqB,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,CAAC9B,IAAI,KAAK,YAAY,CAAA;AAC9D,CAAA;AAEA,SAAS6B,eAAeA,CAAIF,MAAiC,EAAE;AAC7D,EAAA,MAAMkB,WAAW,GAAG;AAClBZ,IAAAA,QAAQ,EAAED,iBAAiB,CAACL,MAAM,CAACM,QAAQ,CAAC;IAC5Ca,OAAO,EAAEnB,MAAM,CAACmB,OAAAA;GACjB,CAAA;AAED,EAAA,OAAOD,WAAW,CAAA;AACpB,CAAA;AAEA,SAASvB,cAAcA,CAACV,KAAuB,EAAE;AAC/C,EAAA,IAAIA,KAAK,CAACE,IAAI,CAACqB,OAAO,EAAE;AACtBvB,IAAAA,KAAK,CAACE,IAAI,CAACqB,OAAO,GAAG,IAAIY,OAAO,CAACnC,KAAK,CAACE,IAAI,CAACqB,OAAO,CAAC,CAAA;AACtD,GAAA;AAEA,EAAA,OAAOvB,KAAK,CAAA;AACd;;AClIO,MAAMoC,YAAY,GAAG,IAAIC,GAAG,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,CAAA;;AAErF;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAC7BjD,KAAY,EACZoB,OAA6B,EAC7B8B,cAAuB,EACvBC,UAA2C,EAClC;EACT,MAAM;AAAEC,IAAAA,YAAAA;AAAa,GAAC,GAAGhC,OAAO,CAAA;EAChC,OACGA,OAAO,CAACiC,EAAE,IAAIN,YAAY,CAACO,GAAG,CAAClC,OAAO,CAACiC,EAAE,CAAC,IAC3CD,YAAY,EAAEG,MAAM,IACpBH,YAAY,EAAEI,gBAAgB,IAC9B,CAACN,cAAc,KACdlD,KAAK,CAACyD,SAAS,IAAIN,UAAU,GAC1BnD,KAAK,CAACyD,SAAS,CAACC,aAAa,CAACP,UAAU,EAAEnD,KAAK,CAAC,IAAIA,KAAK,CAACyD,SAAS,CAACE,aAAa,CAACR,UAAU,EAAEnD,KAAK,CAAC,GACpG,KAAK,CAAC,CAAA;AAEd,CAAA;AAEO,SAAS4D,UAAUA,CACxBxC,OAAsC,EACoE;AAC1G,EAAA,OAAOyC,OAAO,CAACzC,OAAO,CAACiC,EAAE,IAAIN,YAAY,CAACO,GAAG,CAAClC,OAAO,CAACiC,EAAE,CAAC,CAAC,CAAA;AAC5D,CAAA;AAEO,SAASS,gBAAgBA,CAAIC,QAAmC,EAAW;AAChF,EAAA,IAAI,CAACH,UAAU,CAACG,QAAQ,CAAC3C,OAAO,CAAC,EAAE;AACjC,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AACA;AACA;AACA;;AAEA,EAAA,IAAI2C,QAAQ,CAAC3C,OAAO,CAACiC,EAAE,KAAK,cAAc,IAAIU,QAAQ,CAAC/B,QAAQ,EAAEQ,MAAM,KAAK,GAAG,EAAE;AAC/E,IAAA,OAAOuB,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,CAAC/B,QAAQ,EAAEQ,MAAM,KAAK,GAAG,CAAA;AAC1C,CAAA;AAEA,SAAS2B,gBAAgBA,CAACtC,KAAsC,EAAoD;AAClH,EAAA,OAAOA,KAAK,YAAYuC,cAAc,IAAKvC,KAAK,CAAC9B,IAAI,KAAK,gBAAgB,IAAIoC,KAAK,CAACkC,OAAO,CAACxC,KAAK,CAACyC,MAAM,CAAE,CAAA;AAC5G,CAAA;AAIA;AACO,SAASC,UAAUA,CAAC1C,KAAkB,EAAE;AAC7C,EAAA,MAAM2C,WAAW,GAAGL,gBAAgB,CAACtC,KAAK,CAAC,CAAA;EAE3C,MAAM4C,MAAM,GACVD,WAAW,GAAG,IAAIJ,cAAc,CAACM,eAAe,CAAC7C,KAAK,CAACyC,MAAM,CAAC,EAAEzC,KAAK,CAAC8C,OAAO,CAAC,GAAG,IAAIhC,KAAK,CAACd,KAAK,CAAC8C,OAAO,CAC1F,CAAA;AAChBF,EAAAA,MAAM,CAACG,KAAK,GAAG/C,KAAK,CAAC+C,KAAM,CAAA;AAC3BH,EAAAA,MAAM,CAAC5C,KAAK,GAAGA,KAAK,CAACA,KAAK,CAAA;;AAE1B;AACAmC,EAAAA,MAAM,CAACa,MAAM,CAACJ,MAAM,EAAE5C,KAAK,CAAC,CAAA;AAE5B,EAAA,OAAO4C,MAAM,CAAA;AACf;;AC3DO,MAAMK,YAA8B,GAAG;AAC5C1D,EAAAA,OAAOA,CAAI2D,OAA4B,EAAEC,IAAe,EAA0D;AAChH;AACA,IAAA,IAAI,CAACD,OAAO,CAAC3D,OAAO,CAACpB,KAAK,IAAI+E,OAAO,CAAC3D,OAAO,CAACgC,YAAY,GAAG6B,SAAS,CAAC,EAAE;AACvE,MAAA,OAAOD,IAAI,CAACD,OAAO,CAAC3D,OAAO,CAAC,CAAA;AAC9B,KAAA;IAEA,MAAM;AAAEpB,MAAAA,KAAAA;KAAO,GAAG+E,OAAO,CAAC3D,OAAO,CAAA;IACjC,MAAM+B,UAAU,GAAGnD,KAAK,CAACkF,eAAe,CAACC,6BAA6B,CAACJ,OAAO,CAAC3D,OAAO,CAAC,CAAA;AACvF,IAAA,MAAMgE,MAAM,GAAGjC,UAAU,GAAGnD,KAAK,CAACqF,KAAK,CAACC,WAAW,CAACnC,UAAU,CAAC,GAAG,IAAI,CAAA;;AAEtE;AACA;AACA,IAAA,IAAIF,eAAe,CAACjD,KAAK,EAAE+E,OAAO,CAAC3D,OAAO,EAAE,CAAC,CAACgE,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,MAAAlD,IAAAA,KAAA,CAAQ,CAAwC,uCAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAEyC,MAAM,CAAA,GAAA,EAAA,CAAA;AACxDL,IAAAA,OAAO,CAACe,WAAW,CAACV,MAAM,CAACpD,QAAQ,CAAC,CAAA;IAEpC,IAAI,OAAO,IAAIoD,MAAM,EAAE;AACrB,MAAA,MAAMA,MAAM,CAAA;AACd,KAAA;AAEA,IAAA,OAAOW,kBAAkB,CAAI/F,KAAK,EAAEoF,MAAM,CAACvC,OAA+B,CAAC,CAAA;AAC7E,GAAA;AACF,EAAC;AAED,SAASkD,kBAAkBA,CAAI/F,KAAY,EAAE+D,QAAqC,EAAK;EACrF,IAAI,CAACA,QAAQ,EAAE;AACb,IAAA,OAAOA,QAAQ,CAAA;AACjB,GAAA;EAEA,IAAI5B,KAAK,CAACkC,OAAO,CAACN,QAAQ,CAAClD,IAAI,CAAC,EAAE;IAChC,MAAMA,IAAI,GAAGkD,QAAQ,CAAClD,IAAI,CAACmF,GAAG,CAAE7C,UAAU,IAAK;AAC7C,MAAA,OAAOnD,KAAK,CAACqF,KAAK,CAACY,IAAI,CAAC9C,UAAU,CAAC,CAAA;AACrC,KAAC,CAAC,CAAA;IAEF,OAAOa,MAAM,CAACa,MAAM,CAAC,EAAE,EAAEd,QAAQ,EAAE;AAAElD,MAAAA,IAAAA;AAAK,KAAC,CAAC,CAAA;AAC9C,GAAC,MAAM;AACL,IAAA,MAAMA,IAAI,GAAIkD,QAAQ,CAAClD,IAAI,GAAGb,KAAK,CAACqF,KAAK,CAACY,IAAI,CAAClC,QAAQ,CAAClD,IAAI,CAAC,GAAG,IAAU,CAAA;IAC1E,OAAOmD,MAAM,CAACa,MAAM,CAAC,EAAE,EAAEd,QAAQ,EAAE;AAAElD,MAAAA,IAAAA;AAAK,KAAC,CAAC,CAAA;AAC9C,GAAA;AACF,CAAA;AAEA,SAASqF,qBAAqBA,CAC5BlG,KAAY,EACZoB,OAAuC,EACvC2C,QAAmC,EACnC;EACA,IAAI/B,QAAqC,GAAG,IAAI,CAAA;AAChD,EAAA,IAAI4B,UAAU,CAACxC,OAAO,CAAC,EAAE;AACvB,IAAA,MAAM+E,MAAM,GAAG/E,OAAO,CAACP,IAAI,EAAEsF,MAAM,IAAI/E,OAAO,CAACgF,OAAO,GAAG,CAAC,CAAC,CAAA;AAC3D,IAAA,IAAID,MAAM,EAAE;MACVnE,QAAQ,GAAGhC,KAAK,CAACqF,KAAK,CAACgB,SAAS,CAACF,MAAM,EAAEpC,QAAQ,CAAyB,CAAA;;AAE1E;AACA;AACA;AACF,KAAC,MAAM,IAAID,gBAAgB,CAACC,QAAQ,CAAC,EAAE;MACrC/B,QAAQ,GAAGhC,KAAK,CAACqF,KAAK,CAACiB,GAAG,CAACvC,QAAQ,CAAyB,CAAA;AAC9D,KAAA;AACF,GAAC,MAAM;IACL/B,QAAQ,GAAGhC,KAAK,CAACqF,KAAK,CAACiB,GAAG,CAACvC,QAAQ,CAAyB,CAAA;AAC9D,GAAA;AACA,EAAA,OAAOgC,kBAAkB,CAAC/F,KAAK,EAAEgC,QAAQ,CAAC,CAAA;AAC5C,CAAA;AAEA,SAASuE,kBAAkBA,CACzBvG,KAAY,EACZoB,OAAuC,EACvC+B,UAA2C,EAC3CY,QAAmC,EAChC;AACH,EAAA,IAAI/B,QAA8B,CAAA;EAClChC,KAAK,CAACwG,KAAK,CAAC,MAAM;IAChBxE,QAAQ,GAAGkE,qBAAqB,CAAIlG,KAAK,EAAEoB,OAAO,EAAE2C,QAAQ,CAAyB,CAAA;AACvF,GAAC,CAAC,CAAA;AAEF,EAAA,IAAI/D,KAAK,CAACyD,SAAS,EAAEgD,UAAU,EAAE;AAC/BzG,IAAAA,KAAK,CAACyD,SAAS,CAACgD,UAAU,CAACrF,OAAO,EAAE2C,QAAQ,CAAC/B,QAAQ,EAAEmB,UAAU,EAAEnD,KAAK,CAAC,CAAA;AAC3E,GAAA;AAEA,EAAA,OAAOgC,QAAQ,CAAA;AACjB,CAAA;AAEA,SAAS0E,mBAAmBA,CAC1B1G,KAAY,EACZoB,OAAuC,EACvCS,KAAiC,EACjC;AACA,EAAA,IAAI+B,UAAU,CAACxC,OAAO,CAAC,EAAE;AACvB;AACA;AACA,IAAA,MAAMkD,MAAM,GACVzC,KAAK,IACLA,KAAK,CAACgB,OAAO,IACb,OAAOhB,KAAK,CAACgB,OAAO,KAAK,QAAQ,IACjC,QAAQ,IAAIhB,KAAK,CAACgB,OAAO,IACzBV,KAAK,CAACkC,OAAO,CAACxC,KAAK,CAACgB,OAAO,CAACyB,MAAM,CAAC,GAC9BzC,KAAK,CAACgB,OAAO,CAACyB,MAAM,GACrBqC,SAAS,CAAA;AAEf,IAAA,MAAMR,MAAM,GAAG/E,OAAO,CAACP,IAAI,EAAEsF,MAAM,IAAI/E,OAAO,CAACgF,OAAO,GAAG,CAAC,CAAC,CAAA;IAE3DpG,KAAK,CAACqF,KAAK,CAACuB,iBAAiB,CAACT,MAAM,EAAE7B,MAAM,CAAC,CAAA;AAC/C,GAAC,MAAM;AACL,IAAA,OAAOtE,KAAK,CAACqF,KAAK,CAACiB,GAAG,CAACzE,KAAK,CAAC,CAAA;AAC/B,GAAA;AACF,CAAA;AAEA,SAASgF,gBAAgBA,CACvB7G,KAAY,EACZoB,OAAuC,EACvC+B,UAA2C,EAC3CtB,KAAiC,EAC1B;AACP,EAAA,IAAIT,OAAO,CAAC0F,MAAM,EAAEC,OAAO,EAAE;AAC3B,IAAA,MAAMlF,KAAK,CAAA;AACb,GAAA;AACA,EAAA,IAAIG,QAA2C,CAAA;EAC/ChC,KAAK,CAACwG,KAAK,CAAC,MAAM;IAChBxE,QAAQ,GAAG0E,mBAAmB,CAAC1G,KAAK,EAAEoB,OAAO,EAAES,KAAK,CAAC,CAAA;AACvD,GAAC,CAAC,CAAA;AAEF,EAAA,IAAIsB,UAAU,IAAInD,KAAK,CAACyD,SAAS,EAAEgD,UAAU,EAAE;AAC7CzG,IAAAA,KAAK,CAACyD,SAAS,CAACgD,UAAU,CAACrF,OAAO,EAAES,KAAK,CAACG,QAAQ,EAAEmB,UAAU,EAAEnD,KAAK,CAAC,CAAA;AACxE,GAAA;AAEA,EAAA,IAAI4D,UAAU,CAACxC,OAAO,CAAC,EAAE;AACvB,IAAA,MAAMS,KAAK,CAAA;AACb,GAAA;AAEA,EAAA,MAAMmF,QAAQ,GAAGzC,UAAU,CAAC1C,KAAK,CAAC,CAAA;EAClCmF,QAAQ,CAACnE,OAAO,GAAGb,QAAS,CAAA;AAC5B,EAAA,MAAMgF,QAAQ,CAAA;AAChB,CAAA;AAEA,SAASzB,sBAAsBA,CAC7BP,IAAe,EACfD,OAA4B,EAC5B5B,UAA2C,EAC/B;EACZ,MAAM;AAAE/B,IAAAA,OAAAA;AAAQ,GAAC,GAAG2D,OAAO,CAAA;EAC3B,MAAM;AAAE/E,IAAAA,KAAAA;GAAO,GAAG+E,OAAO,CAAC3D,OAAO,CAAA;AAEjC,EAAA,IAAIwC,UAAU,CAACxC,OAAO,CAAC,EAAE;AACvB;AACA,IAAA,MAAM+E,MAAM,GAAG/E,OAAO,CAACP,IAAI,EAAEsF,MAAM,IAAI/E,OAAO,CAACgF,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,IAAAlD,KAAA,CAAQ,CAAA,sDAAA,EAAwDvB,OAAO,CAACiC,EAAG,CAAS,QAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAE8C,MAAM,CAAA,GAAA,EAAA,CAAA;AAC5F,IAAA,IAAIA,MAAM,EAAE;MACVnG,KAAK,CAACqF,KAAK,CAAC4B,UAAU,CAACd,MAAM,EAAEpB,OAAO,CAAC,CAAA;AACzC,KAAA;AACF,GAAA;AAEA,EAAA,IAAI/E,KAAK,CAACyD,SAAS,EAAEyD,WAAW,EAAE;IAChClH,KAAK,CAACyD,SAAS,CAACyD,WAAW,CAAC9F,OAAO,EAAE+B,UAAU,EAAEnD,KAAK,CAAC,CAAA;AACzD,GAAA;AAEA,EAAA,OAAOgF,IAAI,CAAC5D,OAAO,CAAC,CAAC+F,IAAI,CACtBpD,QAAQ,IAAKwC,kBAAkB,CAACvG,KAAK,EAAEoB,OAAO,EAAE+B,UAAU,EAAEY,QAAQ,CAAC,EACrElC,KAAiC,IAAKgF,gBAAgB,CAAC7G,KAAK,EAAEoB,OAAO,EAAE+B,UAAU,EAAEtB,KAAK,CAC3F,CAAC,CAAA;AACH;;;;"}
@@ -32,13 +32,7 @@ class WorkerFetch {
32
32
  })(isTesting || isServerEnv || worker instanceof SharedWorker) : {};
33
33
  this.worker = worker;
34
34
  if (!isServerEnv) {
35
- this.channel = new MessageChannel();
36
- const port = this.worker instanceof SharedWorker ? this.worker.port : this.worker;
37
- port.postMessage({
38
- type: 'connect',
39
- thread: this.threadId
40
- }, [this.channel.port2]);
41
- this.channel.port1.onmessage = event => {
35
+ const fn = event => {
42
36
  const {
43
37
  type,
44
38
  id,
@@ -74,6 +68,20 @@ class WorkerFetch {
74
68
  return;
75
69
  }
76
70
  };
71
+ if (worker instanceof SharedWorker) {
72
+ worker.port.postMessage({
73
+ type: 'connect',
74
+ thread: this.threadId
75
+ });
76
+ worker.port.onmessage = fn;
77
+ } else if (worker) {
78
+ this.channel = new MessageChannel();
79
+ worker.postMessage({
80
+ type: 'connect',
81
+ thread: this.threadId
82
+ }, [this.channel.port2]);
83
+ this.channel.port1.onmessage = fn;
84
+ }
77
85
  }
78
86
  }
79
87
  cleanupRequest(id) {
@@ -85,7 +93,7 @@ class WorkerFetch {
85
93
  return info;
86
94
  }
87
95
  send(event) {
88
- this.channel.port1.postMessage(event);
96
+ this.worker instanceof SharedWorker ? this.worker.port.postMessage(event) : this.channel.port1.postMessage(event);
89
97
  }
90
98
  request(context, next) {
91
99
  if (isServerEnv) {
@@ -1 +1 @@
1
- {"version":3,"file":"worker-fetch.js","sources":["../src/data-worker/fetch.ts"],"sourcesContent":["import type { RequestInfo } from '@ember-data-mirror/request';\nimport { createDeferred } from '@ember-data-mirror/request';\nimport type { Context } from '@ember-data-mirror/request/-private/context';\nimport type { Deferred, Future, NextFn } from '@ember-data-mirror/request/-private/types';\nimport { TESTING } from '@warp-drive-mirror/build-config/env';\nimport { assert } from '@warp-drive-mirror/build-config/macros';\nimport type { ApiError } from '@warp-drive-mirror/core-types/spec/error';\n\nimport type { AbortEventData, MainThreadEvent, RequestEventData } from './types';\n\nexport interface FastBoot {\n require(moduleName: string): unknown;\n isFastBoot: boolean;\n request: Request;\n}\n\ndeclare global {\n const FastBoot: undefined | FastBoot;\n}\n\nconst isServerEnv = typeof FastBoot !== 'undefined';\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\nfunction stitchTrace(stack: string, origin: string) {\n if (origin.startsWith('Error\\n')) {\n return origin.slice(6) + '\\n' + stack;\n }\n return origin + '\\n' + stack;\n}\n\nfunction cloneError(error: RobustError, stack: string) {\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 = stitchTrace(error.stack || '', stack);\n cloned.error = error.error;\n\n // copy over enumerable properties\n Object.assign(cloned, error);\n\n return cloned;\n}\n\nexport class WorkerFetch {\n declare worker: Worker | SharedWorker;\n declare threadId: string;\n declare pending: Map<\n number,\n { context: Context; signal: AbortSignal | null; abortFn: () => void; deferred: Deferred<unknown>; stack: string }\n >;\n declare channel: MessageChannel;\n\n constructor(worker: Worker | SharedWorker | null) {\n this.threadId = isServerEnv ? '' : crypto.randomUUID();\n this.pending = new Map();\n\n const isTesting = TESTING ? true : false;\n assert(`Expected a SharedWorker instance`, isTesting || isServerEnv || worker instanceof SharedWorker);\n this.worker = worker as SharedWorker;\n\n if (!isServerEnv) {\n this.channel = new MessageChannel();\n\n const port = this.worker instanceof SharedWorker ? this.worker.port : this.worker;\n port.postMessage({ type: 'connect', thread: this.threadId }, [this.channel.port2]);\n\n this.channel.port1.onmessage = (event: MainThreadEvent<unknown>) => {\n const { type, id, data } = event.data;\n const info = this.cleanupRequest(id);\n\n // typically this means the request was aborted\n if (!info) {\n return;\n }\n\n if (type === 'success-response') {\n const { deferred } = info;\n\n const { response, content } = data;\n\n if (response) {\n (response as { headers: Headers }).headers = new Headers(response.headers);\n info.context.setResponse(new Response(null, response));\n }\n\n deferred.resolve(content);\n return;\n }\n\n if (type === 'error-response') {\n const { deferred, stack } = info;\n\n deferred.reject(cloneError(data, stack));\n return;\n }\n };\n }\n }\n\n cleanupRequest(id: number) {\n const info = this.pending.get(id);\n this.pending.delete(id);\n\n if (info?.signal) {\n info.signal.removeEventListener('abort', info.abortFn);\n }\n\n return info;\n }\n\n send(event: RequestEventData | AbortEventData) {\n this.channel.port1.postMessage(event);\n }\n\n request<T>(context: Context, next: NextFn<T>): Promise<T> | Future<T> {\n if (isServerEnv) {\n return next(context.request);\n }\n\n const deferred = createDeferred<T>();\n const { signal, request } = prepareRequest(context.request);\n const abortFn = signal\n ? () => {\n deferred.reject(enhanceReason(signal.reason as string));\n this.send({ type: 'abort', thread: this.threadId, id: context.id, data: signal.reason as string });\n this.cleanupRequest(context.id);\n }\n : () => {\n return;\n };\n\n signal?.addEventListener('abort', abortFn);\n\n try {\n throw new Error();\n } catch (e: unknown) {\n this.pending.set(context.id, {\n context,\n deferred,\n signal,\n abortFn,\n stack: (e as Error).stack!,\n });\n }\n\n this.send({\n type: 'request',\n thread: this.threadId,\n id: context.id,\n data: request,\n });\n\n return deferred.promise;\n }\n}\n\nexport function enhanceReason(reason?: string) {\n return new DOMException(reason || 'The user aborted a request.', 'AbortError');\n}\n\nfunction prepareRequest(request: Context['request']): { signal: AbortSignal | null; request: RequestInfo } {\n const { signal, headers } = request;\n const requestCopy = Object.assign({}, request) as RequestInfo;\n\n delete requestCopy.store;\n\n if (signal instanceof AbortSignal) {\n delete requestCopy.signal;\n }\n\n if (headers instanceof Headers) {\n requestCopy.headers = Array.from(headers.entries()) as unknown as Headers;\n }\n\n return { signal: signal || null, request: requestCopy };\n}\n"],"names":["isServerEnv","FastBoot","isAggregateError","error","AggregateError","name","Array","isArray","errors","stitchTrace","stack","origin","startsWith","slice","cloneError","isAggregate","cloned","structuredClone","message","Error","Object","assign","WorkerFetch","constructor","worker","threadId","crypto","randomUUID","pending","Map","isTesting","macroCondition","getGlobalConfig","WarpDrive","env","TESTING","DEBUG","test","SharedWorker","channel","MessageChannel","port","postMessage","type","thread","port2","port1","onmessage","event","id","data","info","cleanupRequest","deferred","response","content","headers","Headers","context","setResponse","Response","resolve","reject","get","delete","signal","removeEventListener","abortFn","send","request","next","createDeferred","prepareRequest","enhanceReason","reason","addEventListener","e","set","promise","DOMException","requestCopy","store","AbortSignal","from","entries"],"mappings":";;;AAoBA,MAAMA,WAAW,GAAG,OAAOC,QAAQ,KAAK,WAAW,CAAA;AAEnD,SAASC,gBAAgBA,CAACC,KAAsC,EAAoD;AAClH,EAAA,OAAOA,KAAK,YAAYC,cAAc,IAAKD,KAAK,CAACE,IAAI,KAAK,gBAAgB,IAAIC,KAAK,CAACC,OAAO,CAACJ,KAAK,CAACK,MAAM,CAAE,CAAA;AAC5G,CAAA;AAIA,SAASC,WAAWA,CAACC,KAAa,EAAEC,MAAc,EAAE;AAClD,EAAA,IAAIA,MAAM,CAACC,UAAU,CAAC,SAAS,CAAC,EAAE;IAChC,OAAOD,MAAM,CAACE,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAGH,KAAK,CAAA;AACvC,GAAA;AACA,EAAA,OAAOC,MAAM,GAAG,IAAI,GAAGD,KAAK,CAAA;AAC9B,CAAA;AAEA,SAASI,UAAUA,CAACX,KAAkB,EAAEO,KAAa,EAAE;AACrD,EAAA,MAAMK,WAAW,GAAGb,gBAAgB,CAACC,KAAK,CAAC,CAAA;EAE3C,MAAMa,MAAM,GACVD,WAAW,GAAG,IAAIX,cAAc,CAACa,eAAe,CAACd,KAAK,CAACK,MAAM,CAAC,EAAEL,KAAK,CAACe,OAAO,CAAC,GAAG,IAAIC,KAAK,CAAChB,KAAK,CAACe,OAAO,CAC1F,CAAA;AAChBF,EAAAA,MAAM,CAACN,KAAK,GAAGD,WAAW,CAACN,KAAK,CAACO,KAAK,IAAI,EAAE,EAAEA,KAAK,CAAC,CAAA;AACpDM,EAAAA,MAAM,CAACb,KAAK,GAAGA,KAAK,CAACA,KAAK,CAAA;;AAE1B;AACAiB,EAAAA,MAAM,CAACC,MAAM,CAACL,MAAM,EAAEb,KAAK,CAAC,CAAA;AAE5B,EAAA,OAAOa,MAAM,CAAA;AACf,CAAA;AAEO,MAAMM,WAAW,CAAC;EASvBC,WAAWA,CAACC,MAAoC,EAAE;IAChD,IAAI,CAACC,QAAQ,GAAGzB,WAAW,GAAG,EAAE,GAAG0B,MAAM,CAACC,UAAU,EAAE,CAAA;AACtD,IAAA,IAAI,CAACC,OAAO,GAAG,IAAIC,GAAG,EAAE,CAAA;AAExB,IAAA,MAAMC,SAAS,GAAGC,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAC,OAAA,CAAU,GAAA,IAAI,GAAG,KAAK,CAAA;IACxCJ,cAAA,CAAAC,eAAA,EAAAC,CAAAA,SAAA,CAAAC,GAAA,CAAAE,KAAA,CAAA,GAAA,CAAAC,IAAA,IAAA;AAAA,MAAA,IAAA,CAAAA,IAAA,EAAA;QAAA,MAAAlB,IAAAA,KAAA,CAAQ,CAAiC,gCAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAEW,SAAS,IAAI9B,WAAW,IAAIwB,MAAM,YAAYc,YAAY,CAAA,GAAA,EAAA,CAAA;IACrG,IAAI,CAACd,MAAM,GAAGA,MAAsB,CAAA;IAEpC,IAAI,CAACxB,WAAW,EAAE;AAChB,MAAA,IAAI,CAACuC,OAAO,GAAG,IAAIC,cAAc,EAAE,CAAA;AAEnC,MAAA,MAAMC,IAAI,GAAG,IAAI,CAACjB,MAAM,YAAYc,YAAY,GAAG,IAAI,CAACd,MAAM,CAACiB,IAAI,GAAG,IAAI,CAACjB,MAAM,CAAA;MACjFiB,IAAI,CAACC,WAAW,CAAC;AAAEC,QAAAA,IAAI,EAAE,SAAS;QAAEC,MAAM,EAAE,IAAI,CAACnB,QAAAA;OAAU,EAAE,CAAC,IAAI,CAACc,OAAO,CAACM,KAAK,CAAC,CAAC,CAAA;MAElF,IAAI,CAACN,OAAO,CAACO,KAAK,CAACC,SAAS,GAAIC,KAA+B,IAAK;QAClE,MAAM;UAAEL,IAAI;UAAEM,EAAE;AAAEC,UAAAA,IAAAA;SAAM,GAAGF,KAAK,CAACE,IAAI,CAAA;AACrC,QAAA,MAAMC,IAAI,GAAG,IAAI,CAACC,cAAc,CAACH,EAAE,CAAC,CAAA;;AAEpC;QACA,IAAI,CAACE,IAAI,EAAE;AACT,UAAA,OAAA;AACF,SAAA;QAEA,IAAIR,IAAI,KAAK,kBAAkB,EAAE;UAC/B,MAAM;AAAEU,YAAAA,QAAAA;AAAS,WAAC,GAAGF,IAAI,CAAA;UAEzB,MAAM;YAAEG,QAAQ;AAAEC,YAAAA,OAAAA;AAAQ,WAAC,GAAGL,IAAI,CAAA;AAElC,UAAA,IAAII,QAAQ,EAAE;YACXA,QAAQ,CAA0BE,OAAO,GAAG,IAAIC,OAAO,CAACH,QAAQ,CAACE,OAAO,CAAC,CAAA;AAC1EL,YAAAA,IAAI,CAACO,OAAO,CAACC,WAAW,CAAC,IAAIC,QAAQ,CAAC,IAAI,EAAEN,QAAQ,CAAC,CAAC,CAAA;AACxD,WAAA;AAEAD,UAAAA,QAAQ,CAACQ,OAAO,CAACN,OAAO,CAAC,CAAA;AACzB,UAAA,OAAA;AACF,SAAA;QAEA,IAAIZ,IAAI,KAAK,gBAAgB,EAAE;UAC7B,MAAM;YAAEU,QAAQ;AAAE3C,YAAAA,KAAAA;AAAM,WAAC,GAAGyC,IAAI,CAAA;UAEhCE,QAAQ,CAACS,MAAM,CAAChD,UAAU,CAACoC,IAAI,EAAExC,KAAK,CAAC,CAAC,CAAA;AACxC,UAAA,OAAA;AACF,SAAA;OACD,CAAA;AACH,KAAA;AACF,GAAA;EAEA0C,cAAcA,CAACH,EAAU,EAAE;IACzB,MAAME,IAAI,GAAG,IAAI,CAACvB,OAAO,CAACmC,GAAG,CAACd,EAAE,CAAC,CAAA;AACjC,IAAA,IAAI,CAACrB,OAAO,CAACoC,MAAM,CAACf,EAAE,CAAC,CAAA;IAEvB,IAAIE,IAAI,EAAEc,MAAM,EAAE;MAChBd,IAAI,CAACc,MAAM,CAACC,mBAAmB,CAAC,OAAO,EAAEf,IAAI,CAACgB,OAAO,CAAC,CAAA;AACxD,KAAA;AAEA,IAAA,OAAOhB,IAAI,CAAA;AACb,GAAA;EAEAiB,IAAIA,CAACpB,KAAwC,EAAE;IAC7C,IAAI,CAACT,OAAO,CAACO,KAAK,CAACJ,WAAW,CAACM,KAAK,CAAC,CAAA;AACvC,GAAA;AAEAqB,EAAAA,OAAOA,CAAIX,OAAgB,EAAEY,IAAe,EAA0B;AACpE,IAAA,IAAItE,WAAW,EAAE;AACf,MAAA,OAAOsE,IAAI,CAACZ,OAAO,CAACW,OAAO,CAAC,CAAA;AAC9B,KAAA;AAEA,IAAA,MAAMhB,QAAQ,GAAGkB,cAAc,EAAK,CAAA;IACpC,MAAM;MAAEN,MAAM;AAAEI,MAAAA,OAAAA;AAAQ,KAAC,GAAGG,cAAc,CAACd,OAAO,CAACW,OAAO,CAAC,CAAA;AAC3D,IAAA,MAAMF,OAAO,GAAGF,MAAM,GAClB,MAAM;MACJZ,QAAQ,CAACS,MAAM,CAACW,aAAa,CAACR,MAAM,CAACS,MAAgB,CAAC,CAAC,CAAA;MACvD,IAAI,CAACN,IAAI,CAAC;AAAEzB,QAAAA,IAAI,EAAE,OAAO;QAAEC,MAAM,EAAE,IAAI,CAACnB,QAAQ;QAAEwB,EAAE,EAAES,OAAO,CAACT,EAAE;QAAEC,IAAI,EAAEe,MAAM,CAACS,MAAAA;AAAiB,OAAC,CAAC,CAAA;AAClG,MAAA,IAAI,CAACtB,cAAc,CAACM,OAAO,CAACT,EAAE,CAAC,CAAA;AACjC,KAAC,GACD,MAAM;AACJ,MAAA,OAAA;KACD,CAAA;AAELgB,IAAAA,MAAM,EAAEU,gBAAgB,CAAC,OAAO,EAAER,OAAO,CAAC,CAAA;IAE1C,IAAI;MACF,MAAM,IAAIhD,KAAK,EAAE,CAAA;KAClB,CAAC,OAAOyD,CAAU,EAAE;MACnB,IAAI,CAAChD,OAAO,CAACiD,GAAG,CAACnB,OAAO,CAACT,EAAE,EAAE;QAC3BS,OAAO;QACPL,QAAQ;QACRY,MAAM;QACNE,OAAO;QACPzD,KAAK,EAAGkE,CAAC,CAAWlE,KAAAA;AACtB,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,IAAI,CAAC0D,IAAI,CAAC;AACRzB,MAAAA,IAAI,EAAE,SAAS;MACfC,MAAM,EAAE,IAAI,CAACnB,QAAQ;MACrBwB,EAAE,EAAES,OAAO,CAACT,EAAE;AACdC,MAAAA,IAAI,EAAEmB,OAAAA;AACR,KAAC,CAAC,CAAA;IAEF,OAAOhB,QAAQ,CAACyB,OAAO,CAAA;AACzB,GAAA;AACF,CAAA;AAEO,SAASL,aAAaA,CAACC,MAAe,EAAE;EAC7C,OAAO,IAAIK,YAAY,CAACL,MAAM,IAAI,6BAA6B,EAAE,YAAY,CAAC,CAAA;AAChF,CAAA;AAEA,SAASF,cAAcA,CAACH,OAA2B,EAAwD;EACzG,MAAM;IAAEJ,MAAM;AAAET,IAAAA,OAAAA;AAAQ,GAAC,GAAGa,OAAO,CAAA;EACnC,MAAMW,WAAW,GAAG5D,MAAM,CAACC,MAAM,CAAC,EAAE,EAAEgD,OAAO,CAAgB,CAAA;EAE7D,OAAOW,WAAW,CAACC,KAAK,CAAA;EAExB,IAAIhB,MAAM,YAAYiB,WAAW,EAAE;IACjC,OAAOF,WAAW,CAACf,MAAM,CAAA;AAC3B,GAAA;EAEA,IAAIT,OAAO,YAAYC,OAAO,EAAE;AAC9BuB,IAAAA,WAAW,CAACxB,OAAO,GAAGlD,KAAK,CAAC6E,IAAI,CAAC3B,OAAO,CAAC4B,OAAO,EAAE,CAAuB,CAAA;AAC3E,GAAA;EAEA,OAAO;IAAEnB,MAAM,EAAEA,MAAM,IAAI,IAAI;AAAEI,IAAAA,OAAO,EAAEW,WAAAA;GAAa,CAAA;AACzD;;;;"}
1
+ {"version":3,"file":"worker-fetch.js","sources":["../src/data-worker/fetch.ts"],"sourcesContent":["import type { RequestInfo } from '@ember-data-mirror/request';\nimport { createDeferred } from '@ember-data-mirror/request';\nimport type { Context } from '@ember-data-mirror/request/-private/context';\nimport type { Deferred, Future, NextFn } from '@ember-data-mirror/request/-private/types';\nimport { TESTING } from '@warp-drive-mirror/build-config/env';\nimport { assert } from '@warp-drive-mirror/build-config/macros';\nimport type { ApiError } from '@warp-drive-mirror/core-types/spec/error';\n\nimport type { AbortEventData, MainThreadEvent, RequestEventData } from './types';\n\nexport interface FastBoot {\n require(moduleName: string): unknown;\n isFastBoot: boolean;\n request: Request;\n}\n\ndeclare global {\n const FastBoot: undefined | FastBoot;\n}\n\nconst isServerEnv = typeof FastBoot !== 'undefined';\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\nfunction stitchTrace(stack: string, origin: string) {\n if (origin.startsWith('Error\\n')) {\n return origin.slice(6) + '\\n' + stack;\n }\n return origin + '\\n' + stack;\n}\n\nfunction cloneError(error: RobustError, stack: string) {\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 = stitchTrace(error.stack || '', stack);\n cloned.error = error.error;\n\n // copy over enumerable properties\n Object.assign(cloned, error);\n\n return cloned;\n}\n\nexport class WorkerFetch {\n declare worker: Worker | SharedWorker;\n declare threadId: string;\n declare pending: Map<\n number,\n { context: Context; signal: AbortSignal | null; abortFn: () => void; deferred: Deferred<unknown>; stack: string }\n >;\n declare channel: MessageChannel;\n\n constructor(worker: Worker | SharedWorker | null) {\n this.threadId = isServerEnv ? '' : crypto.randomUUID();\n this.pending = new Map();\n\n const isTesting = TESTING ? true : false;\n assert(`Expected a SharedWorker instance`, isTesting || isServerEnv || worker instanceof SharedWorker);\n this.worker = worker as SharedWorker;\n\n if (!isServerEnv) {\n const fn = (event: MainThreadEvent<unknown>) => {\n const { type, id, data } = event.data;\n const info = this.cleanupRequest(id);\n\n // typically this means the request was aborted\n if (!info) {\n return;\n }\n\n if (type === 'success-response') {\n const { deferred } = info;\n\n const { response, content } = data;\n\n if (response) {\n (response as { headers: Headers }).headers = new Headers(response.headers);\n info.context.setResponse(new Response(null, response));\n }\n\n deferred.resolve(content);\n return;\n }\n\n if (type === 'error-response') {\n const { deferred, stack } = info;\n\n deferred.reject(cloneError(data, stack));\n return;\n }\n };\n\n if (worker instanceof SharedWorker) {\n worker.port.postMessage({ type: 'connect', thread: this.threadId });\n worker.port.onmessage = fn;\n } else if (worker) {\n this.channel = new MessageChannel();\n worker.postMessage({ type: 'connect', thread: this.threadId }, [this.channel.port2]);\n\n this.channel.port1.onmessage = fn;\n }\n }\n }\n\n cleanupRequest(id: number) {\n const info = this.pending.get(id);\n this.pending.delete(id);\n\n if (info?.signal) {\n info.signal.removeEventListener('abort', info.abortFn);\n }\n\n return info;\n }\n\n send(event: RequestEventData | AbortEventData) {\n this.worker instanceof SharedWorker ? this.worker.port.postMessage(event) : this.channel.port1.postMessage(event);\n }\n\n request<T>(context: Context, next: NextFn<T>): Promise<T> | Future<T> {\n if (isServerEnv) {\n return next(context.request);\n }\n\n const deferred = createDeferred<T>();\n const { signal, request } = prepareRequest(context.request);\n const abortFn = signal\n ? () => {\n deferred.reject(enhanceReason(signal.reason as string));\n this.send({ type: 'abort', thread: this.threadId, id: context.id, data: signal.reason as string });\n this.cleanupRequest(context.id);\n }\n : () => {\n return;\n };\n\n signal?.addEventListener('abort', abortFn);\n\n try {\n throw new Error();\n } catch (e: unknown) {\n this.pending.set(context.id, {\n context,\n deferred,\n signal,\n abortFn,\n stack: (e as Error).stack!,\n });\n }\n\n this.send({\n type: 'request',\n thread: this.threadId,\n id: context.id,\n data: request,\n });\n\n return deferred.promise;\n }\n}\n\nexport function enhanceReason(reason?: string) {\n return new DOMException(reason || 'The user aborted a request.', 'AbortError');\n}\n\nfunction prepareRequest(request: Context['request']): { signal: AbortSignal | null; request: RequestInfo } {\n const { signal, headers } = request;\n const requestCopy = Object.assign({}, request) as RequestInfo;\n\n delete requestCopy.store;\n\n if (signal instanceof AbortSignal) {\n delete requestCopy.signal;\n }\n\n if (headers instanceof Headers) {\n requestCopy.headers = Array.from(headers.entries()) as unknown as Headers;\n }\n\n return { signal: signal || null, request: requestCopy };\n}\n"],"names":["isServerEnv","FastBoot","isAggregateError","error","AggregateError","name","Array","isArray","errors","stitchTrace","stack","origin","startsWith","slice","cloneError","isAggregate","cloned","structuredClone","message","Error","Object","assign","WorkerFetch","constructor","worker","threadId","crypto","randomUUID","pending","Map","isTesting","macroCondition","getGlobalConfig","WarpDrive","env","TESTING","DEBUG","test","SharedWorker","fn","event","type","id","data","info","cleanupRequest","deferred","response","content","headers","Headers","context","setResponse","Response","resolve","reject","port","postMessage","thread","onmessage","channel","MessageChannel","port2","port1","get","delete","signal","removeEventListener","abortFn","send","request","next","createDeferred","prepareRequest","enhanceReason","reason","addEventListener","e","set","promise","DOMException","requestCopy","store","AbortSignal","from","entries"],"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.102",
4
+ "version": "0.0.1-alpha.104",
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.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"
44
+ "@ember-data-mirror/request": "5.4.0-alpha.104",
45
+ "@ember-data-mirror/request-utils": "5.4.0-alpha.104",
46
+ "@ember-data-mirror/store": "5.4.0-alpha.104",
47
+ "@warp-drive-mirror/core-types": "0.0.0-alpha.90"
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.39"
56
+ "@warp-drive-mirror/build-config": "0.0.0-alpha.41"
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.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",
63
+ "@ember-data-mirror/request": "5.4.0-alpha.104",
64
+ "@ember-data-mirror/request-utils": "5.4.0-alpha.104",
65
+ "@ember-data-mirror/store": "5.4.0-alpha.104",
66
+ "@ember-data-mirror/tracking": "5.4.0-alpha.104",
67
67
  "@glimmer/component": "^1.1.2",
68
- "@warp-drive-mirror/core-types": "0.0.0-alpha.88",
69
- "@warp-drive/internal-config": "5.4.0-alpha.102",
68
+ "@warp-drive-mirror/core-types": "0.0.0-alpha.90",
69
+ "@warp-drive/internal-config": "5.4.0-alpha.104",
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",
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/data-worker/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAKnF,OAAO,KAAK,EAAE,cAAc,EAAmB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,MAAM,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;CACtC;AAgCD,qBAAa,WAAW;IACd,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAClB,MAAM,EACN;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAClH,CAAC;IACM,OAAO,EAAE,cAAc,CAAC;gBAEpB,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IA+ChD,cAAc,CAAC,EAAE,EAAE,MAAM;;;;;;;IAWzB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,cAAc;IAI7C,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;CAwCtE;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,gBAE5C"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/data-worker/fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAKnF,OAAO,KAAK,EAAE,cAAc,EAAmB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,MAAM,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;CACtC;AAgCD,qBAAa,WAAW;IACd,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAClB,MAAM,EACN;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAClH,CAAC;IACM,OAAO,EAAE,cAAc,CAAC;gBAEpB,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAoDhD,cAAc,CAAC,EAAE,EAAE,MAAM;;;;;;;IAWzB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,cAAc;IAI7C,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;CAwCtE;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,gBAE5C"}
@@ -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;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"}
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;IA4BV,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;IAqB7C,YAAY,CAAC,KAAK,EAAE,cAAc;IAU5B,OAAO,CAAC,KAAK,EAAE,gBAAgB;CAkBtC"}