@ember-data-mirror/request 5.4.0-alpha.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-CMv6XjzN.js","sources":["../../../node_modules/.pnpm/@babel+runtime@7.24.1/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js","../../../node_modules/.pnpm/@babel+runtime@7.24.1/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js","../src/-private/debug.ts","../src/-private/promise-cache.ts","../src/-private/utils.ts","../src/-private/future.ts","../src/-private/context.ts"],"sourcesContent":["export default function _classPrivateFieldBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n return receiver;\n}","var id = 0;\nexport default function _classPrivateFieldKey(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}","import { DEBUG } from '@ember-data/env';\n\nimport { Context, upgradeHeaders } from './context';\nimport type { ImmutableHeaders, RequestInfo } from '@warp-drive-mirror/core-types/request';\n\nconst BODY_TYPES = {\n type: 'string',\n klass: ['Blob', 'ArrayBuffer', 'TypedArray', 'DataView', 'FormData', 'URLSearchParams', 'ReadableStream'],\n};\nconst ValidKeys = new Map<string, string | string[] | typeof BODY_TYPES>([\n ['records', 'array'],\n ['data', 'json'],\n ['body', BODY_TYPES],\n ['disableTestWaiter', 'boolean'],\n ['options', 'object'],\n ['cacheOptions', 'object'],\n ['op', 'string'],\n ['store', 'object'],\n ['url', 'string'],\n ['cache', ['default', 'force-cache', 'no-cache', 'no-store', 'only-if-cached', 'reload']],\n ['credentials', ['include', 'omit', 'same-origin']],\n [\n 'destination',\n [\n '',\n 'object',\n 'audio',\n 'audioworklet',\n 'document',\n 'embed',\n 'font',\n 'frame',\n 'iframe',\n 'image',\n 'manifest',\n 'paintworklet',\n 'report',\n 'script',\n 'sharedworker',\n 'style',\n 'track',\n 'video',\n 'worker',\n 'xslt',\n ],\n ],\n ['headers', 'headers'],\n ['integrity', 'string'],\n ['keepalive', 'boolean'],\n ['method', ['GET', 'PUT', 'PATCH', 'DELETE', 'POST', 'OPTIONS']],\n ['mode', ['same-origin', 'cors', 'navigate', 'no-cors']],\n ['redirect', ['error', 'follow', 'manual']],\n ['referrer', 'string'],\n ['signal', 'AbortSignal'],\n ['controller', 'AbortController'],\n [\n 'referrerPolicy',\n [\n '',\n 'same-origin',\n 'no-referrer',\n 'no-referrer-when-downgrade',\n 'origin',\n 'origin-when-cross-origin',\n 'strict-origin',\n 'strict-origin-when-cross-origin',\n 'unsafe-url',\n ],\n ],\n]);\n\nconst IS_FROZEN = Symbol('FROZEN');\nconst IS_COLLECTION = Symbol.for('Collection');\n\nfunction freezeHeaders(headers: Headers | ImmutableHeaders): ImmutableHeaders {\n headers.delete =\n headers.set =\n headers.append =\n () => {\n throw new Error(`Cannot Mutate Immutatable Headers, use headers.clone to get a copy`);\n };\n upgradeHeaders(headers);\n return headers as ImmutableHeaders;\n}\n\nexport function deepFreeze<T = unknown>(value: T): T {\n if (value && (value as { [IS_FROZEN]?: true })[IS_FROZEN]) {\n return value;\n }\n const _type = typeof value;\n switch (_type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'undefined':\n case 'bigint':\n return value;\n case 'function':\n throw new Error(`Cannot deep-freeze a function`);\n case 'object': {\n const _niceType = niceTypeOf(value);\n switch (_niceType) {\n case 'array': {\n if ((value as unknown[] & { [IS_COLLECTION]?: true })[IS_COLLECTION]) {\n return value;\n }\n const arr = (value as unknown[]).map(deepFreeze);\n (arr as unknown[] & { [IS_FROZEN]: true })[IS_FROZEN] = true;\n return Object.freeze(arr) as T;\n }\n case 'null':\n return value;\n case 'object':\n Object.keys(value as Record<string, unknown>).forEach((key) => {\n try {\n (value as Record<string, unknown>)[key] = deepFreeze((value as Record<string, unknown>)[key]) as object;\n } catch {\n // continue\n }\n });\n (value as Record<string | symbol, unknown>)[IS_FROZEN] = true;\n return Object.freeze(value);\n case 'headers':\n return freezeHeaders(value as Headers) as T;\n case 'Collection':\n case 'Store':\n case 'AbortSignal':\n return value;\n case 'date':\n case 'map':\n case 'set':\n case 'error':\n case 'stream':\n default:\n // eslint-disable-next-line no-console\n // console.log(`Cannot deep-freeze ${_niceType}`);\n return value;\n }\n }\n }\n}\n\nfunction isMaybeContext(request: unknown) {\n if (request && typeof request === 'object') {\n const keys = Object.keys(request);\n if (keys.length === 1 && keys[0] === 'request') {\n return true;\n }\n }\n return false;\n}\n\nfunction niceTypeOf(v: unknown) {\n if (v === null) {\n return 'null';\n }\n if (typeof v === 'string') {\n return v ? 'non-empty-string' : 'empty-string';\n }\n if (!v) {\n return typeof v;\n }\n if (Array.isArray(v)) {\n return 'array';\n }\n if (v instanceof Date) {\n return 'date';\n }\n if (v instanceof Map) {\n return 'map';\n }\n if (v instanceof Set) {\n return 'set';\n }\n if (v instanceof Error) {\n return 'error';\n }\n if (v instanceof ReadableStream || v instanceof WritableStream || v instanceof TransformStream) {\n return 'stream';\n }\n if (v instanceof Headers) {\n return 'headers';\n }\n if (typeof v === 'object' && v.constructor && v.constructor.name !== 'Object') {\n return v.constructor.name;\n }\n return typeof v;\n}\n\nfunction validateKey(key: string, value: unknown, errors: string[]) {\n const schema = ValidKeys.get(key);\n if (!schema && !IgnoredKeys.has(key)) {\n errors.push(`InvalidKey: '${key}'`);\n return;\n }\n if (schema) {\n if (schema === BODY_TYPES) {\n if (typeof value === 'string' || value instanceof ReadableStream) {\n return;\n }\n let type = niceTypeOf(value);\n if (schema.klass.includes(type)) {\n return;\n }\n errors.push(\n `InvalidValue: key 'body' should be a string or one of '${schema.klass.join(\"', '\")}', received ${\n '<a value of type ' + niceTypeOf(value) + '>'\n }`\n );\n return;\n }\n if (Array.isArray(schema)) {\n if (!schema.includes(value as string)) {\n errors.push(\n `InvalidValue: key ${key} should be a one of '${schema.join(\"', '\")}', received ${\n typeof value === 'string' ? value : '<a value of type ' + niceTypeOf(value) + '>'\n }`\n );\n }\n return;\n } else if (schema === 'json') {\n try {\n JSON.stringify(value);\n } catch (e) {\n errors.push(\n `InvalidValue: key ${key} should be a JSON serializable value, but failed to serialize with Error - ${\n (e as Error).message\n }`\n );\n }\n return;\n } else if (schema === 'headers') {\n if (!(value instanceof Headers)) {\n errors.push(`InvalidValue: key ${key} should be an instance of Headers, received ${niceTypeOf(value)}`);\n }\n return;\n } else if (schema === 'record') {\n const _type = typeof value;\n // record must extend plain object or Object.create(null)\n if (!value || _type !== 'object' || (value.constructor && value.constructor !== Object)) {\n errors.push(\n `InvalidValue: key ${key} should be a dictionary of string keys to string values, received ${niceTypeOf(\n value\n )}`\n );\n return;\n }\n const keys = Object.keys(value);\n keys.forEach((k) => {\n let v: unknown = (value as Record<string, unknown>)[k];\n if (typeof k !== 'string') {\n errors.push(`\\tThe key ${String(k)} on ${key} should be a string key`);\n } else if (typeof v !== 'string') {\n errors.push(`\\tThe value of ${key}.${k} should be a string not ${niceTypeOf(v)}`);\n }\n });\n return;\n } else if (schema === 'string') {\n if (typeof value !== 'string' || value.length === 0) {\n errors.push(\n `InvalidValue: key ${key} should be a non-empty string, received ${\n typeof value === 'string' ? \"''\" : typeof value\n }`\n );\n }\n return;\n } else if (schema === 'object') {\n if (!value || Array.isArray(value) || typeof value !== 'object') {\n errors.push(`InvalidValue: key ${key} should be an object`);\n }\n return;\n } else if (schema === 'boolean') {\n if (typeof value !== 'boolean') {\n errors.push(`InvalidValue: key ${key} should be a boolean, received ${typeof value}`);\n }\n return;\n } else if (schema === 'array') {\n if (!Array.isArray(value)) {\n errors.push(`InvalidValue: key ${key} should be an array, received ${typeof value}`);\n }\n return;\n }\n }\n}\n\nconst IgnoredKeys = new Set<string>([]);\n\nexport function assertValidRequest(\n request: RequestInfo | Context,\n isTopLevel: boolean\n): asserts request is RequestInfo {\n if (DEBUG) {\n // handle basic shape\n if (!request) {\n throw new Error(\n `Expected ${\n isTopLevel ? 'RequestManager.request' : 'next'\n }(<request>) to be called with a request, but none was provided.`\n );\n }\n if (Array.isArray(request) || typeof request !== 'object') {\n throw new Error(\n `The \\`request\\` passed to \\`${\n isTopLevel ? 'RequestManager.request' : 'next'\n }(<request>)\\` should be an object, received \\`${niceTypeOf(request)}\\``\n );\n }\n if (Object.keys(request).length === 0) {\n throw new Error(\n `The \\`request\\` passed to \\`${\n isTopLevel ? 'RequestManager.request' : 'next'\n }(<request>)\\` was empty (\\`{}\\`). Requests need at least one valid key.`\n );\n }\n\n // handle accidentally passing context entirely\n if (request instanceof Context) {\n throw new Error(\n `Expected a request passed to \\`${\n isTopLevel ? 'RequestManager.request' : 'next'\n }(<request>)\\` but received the previous handler's context instead`\n );\n }\n // handle Object.assign({}, context);\n if (isMaybeContext(request)) {\n throw new Error(\n `Expected a request passed to \\`${\n isTopLevel ? 'RequestManager.request' : 'next'\n }(<request>)\\` but received an object with a request key instead.`\n );\n }\n\n // handle schema\n const keys = Object.keys(request) as Array<keyof RequestInfo>;\n const validationErrors: string[] = [];\n const isLegacyRequest: boolean = Boolean('op' in request && !request.url);\n keys.forEach((key) => {\n if (isLegacyRequest && key === 'data') {\n return;\n }\n validateKey(key, request[key], validationErrors);\n });\n if (validationErrors.length) {\n const error: Error & { errors: string[] } = new Error(\n `Invalid Request passed to \\`${\n isTopLevel ? 'RequestManager.request' : 'next'\n }(<request>)\\`.\\n\\nThe following issues were found:\\n\\n\\t${validationErrors.join('\\n\\t')}`\n ) as Error & { errors: string[] };\n error.errors = validationErrors;\n throw error;\n }\n }\n}\n","export type CacheResult<T = unknown, E = unknown> = { isError: true; result: E } | { isError: false; result: T };\n\nexport type Awaitable<T = unknown, E = unknown> = {\n then: (onFulfilled: (value: T) => unknown, onRejected: (reason: E) => unknown) => unknown;\n catch: (onRejected: (reason: E) => unknown) => unknown;\n finally: (onFinally: () => unknown) => unknown;\n};\n\nexport const PromiseCache = new WeakMap<Awaitable, CacheResult>();\nexport const RequestMap = new Map<number, CacheResult>();\n\nexport function setRequestResult(requestId: number, result: CacheResult) {\n RequestMap.set(requestId, result);\n}\nexport function clearRequestResult(requestId: number) {\n RequestMap.delete(requestId);\n}\nexport function getRequestResult(requestId: number): CacheResult | undefined {\n return RequestMap.get(requestId);\n}\n\nexport function setPromiseResult(promise: Promise<unknown> | Awaitable, result: CacheResult) {\n PromiseCache.set(promise, result);\n}\n\nexport function getPromiseResult<T, E>(promise: Promise<T> | Awaitable<T, E>): CacheResult<T, E> | undefined {\n return PromiseCache.get(promise) as CacheResult<T, E> | undefined;\n}\n","import { DEBUG } from '@ember-data/env';\nimport {\n type RequestInfo,\n STRUCTURED,\n type StructuredDataDocument,\n type StructuredErrorDocument,\n} from '@warp-drive-mirror/core-types/request';\n\nimport { Context, ContextOwner } from './context';\nimport { assertValidRequest } from './debug';\nimport { createFuture, isFuture } from './future';\nimport { setRequestResult } from './promise-cache';\nimport type { DeferredFuture, Future, GodContext, Handler } from './types';\n\nexport const IS_CACHE_HANDLER = Symbol('IS_CACHE_HANDLER');\nexport function curryFuture<T>(owner: ContextOwner, inbound: Future<T>, outbound: DeferredFuture<T>): Future<T> {\n owner.setStream(inbound.getStream());\n\n inbound.then(\n (doc: StructuredDataDocument<T>) => {\n const document = {\n [STRUCTURED]: true as const,\n request: owner.request,\n response: doc.response,\n content: doc.content,\n };\n outbound.resolve(document);\n },\n (error: Error & StructuredErrorDocument) => {\n if (isDoc(error)) {\n owner.setStream(owner.god.stream);\n }\n if (!error || !(error instanceof Error)) {\n try {\n throw new Error(error ? error : `Request Rejected with an Unknown Error`);\n } catch (e: unknown) {\n if (error && typeof error === 'object') {\n Object.assign(e as Error, error);\n (e as Error & StructuredErrorDocument).message =\n (error as Error).message || `Request Rejected with an Unknown Error`;\n }\n error = e as Error & StructuredErrorDocument;\n }\n }\n\n error[STRUCTURED] = true;\n error.request = owner.request;\n error.response = owner.getResponse();\n error.error = error.error || error.message;\n\n outbound.reject(error);\n }\n );\n return outbound.promise;\n}\n\nfunction isDoc<T>(doc: T | StructuredDataDocument<T>): doc is StructuredDataDocument<T> {\n return doc && (doc as StructuredDataDocument<T>)[STRUCTURED] === true;\n}\n\nexport type HttpErrorProps = {\n code: number;\n name: string;\n status: number;\n statusText: string;\n isRequestError: boolean;\n};\n\nexport function enhanceReason(reason?: string) {\n return new DOMException(reason || 'The user aborted a request.', 'AbortError');\n}\n\nexport function handleOutcome<T>(\n owner: ContextOwner,\n inbound: Promise<T | StructuredDataDocument<T>>,\n outbound: DeferredFuture<T>\n): Future<T> {\n inbound.then(\n (content: T | StructuredDataDocument<T>) => {\n if (owner.controller.signal.aborted) {\n // the next function did not respect the signal, we handle it here\n outbound.reject(enhanceReason(owner.controller.signal.reason as string));\n return;\n }\n if (isDoc(content)) {\n owner.setStream(owner.god.stream);\n content = content.content;\n }\n const document = {\n [STRUCTURED]: true as const,\n request: owner.request,\n response: owner.getResponse(),\n content,\n };\n outbound.resolve(document);\n },\n (error: Error & StructuredErrorDocument) => {\n if (isDoc(error)) {\n owner.setStream(owner.god.stream);\n }\n if (!error) {\n try {\n throw new Error(`Request Rejected with an Unknown Error`);\n } catch (e: unknown) {\n error = e as Error & StructuredErrorDocument;\n }\n }\n\n error[STRUCTURED] = true;\n error.request = owner.request;\n error.response = owner.getResponse();\n error.error = error.error || error.message;\n outbound.reject(error);\n }\n );\n return outbound.promise;\n}\n\nfunction isCacheHandler(handler: Handler & { [IS_CACHE_HANDLER]?: boolean }, index: number): boolean {\n return index === 0 && Boolean(handler[IS_CACHE_HANDLER]);\n}\n\nexport function executeNextHandler<T>(\n wares: Readonly<Handler[]>,\n request: RequestInfo,\n i: number,\n god: GodContext\n): Future<T> {\n if (DEBUG) {\n if (i === wares.length) {\n throw new Error(`No handler was able to handle this request.`);\n }\n assertValidRequest(request, false);\n }\n const owner = new ContextOwner(request, god, i === 0);\n\n function next(r: RequestInfo): Future<T> {\n owner.nextCalled++;\n return executeNextHandler(wares, r, i + 1, god);\n }\n\n const context = new Context(owner);\n let outcome: Promise<T | StructuredDataDocument<T>> | Future<T>;\n try {\n outcome = wares[i].request<T>(context, next);\n if (!!outcome && isCacheHandler(wares[i], i)) {\n if (!(outcome instanceof Promise)) {\n setRequestResult(owner.requestId, { isError: false, result: outcome });\n outcome = Promise.resolve(outcome);\n }\n } else if (DEBUG) {\n if (!outcome || (!(outcome instanceof Promise) && !(typeof outcome === 'object' && 'then' in outcome))) {\n // eslint-disable-next-line no-console\n console.log({ request, handler: wares[i], outcome });\n if (outcome === undefined) {\n throw new Error(`Expected handler.request to return a promise, instead received undefined.`);\n }\n throw new Error(`Expected handler.request to return a promise, instead received a synchronous value.`);\n }\n }\n } catch (e) {\n if (isCacheHandler(wares[i], i)) {\n setRequestResult(owner.requestId, { isError: true, result: e });\n }\n outcome = Promise.reject<StructuredDataDocument<T>>(e);\n }\n const future = createFuture<T>(owner);\n\n if (isFuture<T>(outcome)) {\n return curryFuture(owner, outcome, future);\n }\n\n return handleOutcome(owner, outcome, future);\n}\n","import { IS_FUTURE, type StructuredDocument } from '@warp-drive-mirror/core-types/request';\n\nimport type { ContextOwner } from './context';\nimport type { Deferred, DeferredFuture, Future } from './types';\nimport { enhanceReason } from './utils';\n\nexport function isFuture<T>(maybe: unknown): maybe is Future<T> {\n return Boolean(maybe && maybe instanceof Promise && (maybe as Future<T>)[IS_FUTURE] === true);\n}\n\nexport function createDeferred<T>(): Deferred<T> {\n let resolve!: (v: T) => void;\n let reject!: (v: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { resolve, reject, promise };\n}\n\nexport function upgradePromise<T>(promise: Promise<StructuredDocument<T>>, future: Future<T>): Future<T> {\n (promise as Future<T>)[IS_FUTURE] = true;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n (promise as Future<T>).getStream = future.getStream;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n (promise as Future<T>).abort = future.abort;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n (promise as Future<T>).onFinalize = future.onFinalize;\n\n return promise as Future<T>;\n}\n\nexport function createFuture<T>(owner: ContextOwner): DeferredFuture<T> {\n const deferred = createDeferred<T>() as unknown as DeferredFuture<T>;\n let { promise } = deferred;\n let cbs: Array<() => void> | undefined;\n promise = promise.finally(() => {\n owner.resolveStream();\n if (cbs) {\n cbs.forEach((cb) => cb());\n }\n }) as Future<T>;\n promise.onFinalize = (fn: () => void) => {\n cbs = cbs || [];\n cbs.push(fn);\n };\n promise[IS_FUTURE] = true;\n promise.getStream = () => {\n return owner.getStream();\n };\n promise.abort = (reason?: string) => {\n owner.abort(enhanceReason(reason));\n };\n deferred.promise = promise;\n return deferred;\n}\n","import { DEBUG } from '@ember-data/env';\nimport type { ImmutableHeaders, ImmutableRequestInfo, RequestInfo, ResponseInfo } from '@warp-drive-mirror/core-types/request';\nimport { SkipCache } from '@warp-drive-mirror/core-types/request';\n\nimport { deepFreeze } from './debug';\nimport { createDeferred } from './future';\nimport type { DeferredStream, GodContext } from './types';\n\nexport function upgradeHeaders(headers: Headers | ImmutableHeaders): ImmutableHeaders {\n (headers as ImmutableHeaders).clone = () => {\n return new Headers(headers);\n };\n (headers as ImmutableHeaders).toJSON = () => {\n return Array.from(headers);\n };\n return headers as ImmutableHeaders;\n}\n\nexport function cloneResponseProperties(response: Response): ResponseInfo {\n const { headers, ok, redirected, status, statusText, type, url } = response;\n upgradeHeaders(headers);\n return {\n headers: headers as ImmutableHeaders,\n ok,\n redirected,\n status,\n statusText,\n type,\n url,\n };\n}\n\nexport class ContextOwner {\n hasSetStream = false;\n hasSetResponse = false;\n hasSubscribers = false;\n stream: DeferredStream = createDeferred<ReadableStream | null>();\n response: ResponseInfo | null = null;\n declare request: ImmutableRequestInfo;\n declare enhancedRequest: ImmutableRequestInfo;\n nextCalled = 0;\n declare god: GodContext;\n declare controller: AbortController;\n declare requestId: number;\n declare isRoot: boolean;\n\n constructor(request: RequestInfo, god: GodContext, isRoot = false) {\n this.isRoot = isRoot;\n this.requestId = god.id;\n this.controller = request.controller || god.controller;\n this.stream.promise.sizeHint = 0;\n\n if (request.controller) {\n if (request.controller !== god.controller) {\n god.controller.signal.addEventListener('abort', () => {\n this.controller.abort(god.controller.signal.reason);\n });\n }\n delete request.controller;\n }\n let enhancedRequest: ImmutableRequestInfo = Object.assign(\n { signal: this.controller.signal },\n request\n ) as ImmutableRequestInfo;\n if (DEBUG) {\n if (!request?.cacheOptions?.[SkipCache]) {\n request = deepFreeze(request) as ImmutableRequestInfo;\n enhancedRequest = deepFreeze(enhancedRequest);\n }\n } else {\n if (request.headers) {\n upgradeHeaders(request.headers);\n }\n }\n this.enhancedRequest = enhancedRequest;\n this.request = request as ImmutableRequestInfo;\n this.god = god;\n this.stream.promise = this.stream.promise.then((stream: ReadableStream | null) => {\n if (this.god.stream === stream && this.hasSubscribers) {\n this.god.stream = null;\n }\n return stream;\n });\n }\n\n get hasRequestedStream(): boolean {\n return this.god.hasRequestedStream;\n }\n\n getResponse(): ResponseInfo | null {\n if (this.hasSetResponse) {\n return this.response;\n }\n if (this.nextCalled === 1) {\n return this.god.response;\n }\n return null;\n }\n getStream(): Promise<ReadableStream | null> {\n if (this.isRoot) {\n this.god.hasRequestedStream = true;\n }\n if (!this.hasSetResponse) {\n const hint = this.god.response?.headers?.get('content-length');\n this.stream.promise.sizeHint = hint ? parseInt(hint, 10) : 0;\n }\n this.hasSubscribers = true;\n return this.stream.promise;\n }\n abort(reason: DOMException) {\n this.controller.abort(reason);\n }\n\n setStream(stream: ReadableStream | Promise<ReadableStream | null> | null) {\n if (!this.hasSetStream) {\n this.hasSetStream = true;\n\n if (!(stream instanceof Promise)) {\n this.god.stream = stream;\n }\n // @ts-expect-error\n this.stream.resolve(stream);\n }\n }\n\n resolveStream() {\n this.setStream(this.nextCalled === 1 ? this.god.stream : null);\n }\n\n setResponse(response: ResponseInfo | Response | null) {\n if (this.hasSetResponse) {\n if (DEBUG) {\n throw new Error(`Cannot setResponse when a response has already been set`);\n }\n return;\n }\n this.hasSetResponse = true;\n if (response instanceof Response) {\n // TODO potentially avoid cloning in prod\n let responseData = cloneResponseProperties(response);\n\n if (DEBUG) {\n responseData = deepFreeze(responseData);\n }\n this.response = responseData;\n this.god.response = responseData;\n const sizeHint = response.headers?.get('content-length');\n this.stream.promise.sizeHint = sizeHint ? parseInt(sizeHint, 10) : 0;\n } else {\n this.response = response;\n this.god.response = response;\n }\n }\n}\n\nexport class Context {\n #owner: ContextOwner;\n declare request: ImmutableRequestInfo;\n declare id: number;\n\n constructor(owner: ContextOwner) {\n this.id = owner.requestId;\n this.#owner = owner;\n this.request = owner.enhancedRequest;\n }\n setStream(stream: ReadableStream | Promise<ReadableStream | null>) {\n this.#owner.setStream(stream);\n }\n setResponse(response: ResponseInfo | Response | null) {\n this.#owner.setResponse(response);\n }\n\n get hasRequestedStream() {\n return this.#owner.hasRequestedStream;\n }\n}\nexport type HandlerRequestContext = Context;\n"],"names":["BODY_TYPES","type","klass","ValidKeys","Map","IS_FROZEN","Symbol","IS_COLLECTION","for","freezeHeaders","headers","delete","set","append","Error","upgradeHeaders","deepFreeze","value","_type","_niceType","niceTypeOf","arr","map","Object","freeze","keys","forEach","key","isMaybeContext","request","length","v","Array","isArray","Date","Set","ReadableStream","WritableStream","TransformStream","Headers","constructor","name","validateKey","errors","schema","get","IgnoredKeys","has","push","includes","join","JSON","stringify","e","message","k","String","assertValidRequest","isTopLevel","macroCondition","getOwnConfig","env","DEBUG","Context","validationErrors","isLegacyRequest","Boolean","url","error","PromiseCache","WeakMap","RequestMap","setRequestResult","requestId","result","clearRequestResult","getRequestResult","setPromiseResult","promise","getPromiseResult","IS_CACHE_HANDLER","curryFuture","owner","inbound","outbound","setStream","getStream","then","doc","document","STRUCTURED","response","content","resolve","isDoc","god","stream","assign","getResponse","reject","enhanceReason","reason","DOMException","handleOutcome","controller","signal","aborted","isCacheHandler","handler","index","executeNextHandler","wares","i","ContextOwner","next","r","nextCalled","context","outcome","Promise","isError","console","log","undefined","future","createFuture","isFuture","maybe","IS_FUTURE","createDeferred","res","rej","upgradePromise","abort","onFinalize","deferred","cbs","finally","resolveStream","cb","fn","clone","toJSON","from","cloneResponseProperties","ok","redirected","status","statusText","isRoot","hasSetStream","hasSetResponse","hasSubscribers","id","sizeHint","addEventListener","enhancedRequest","cacheOptions","SkipCache","hasRequestedStream","hint","parseInt","setResponse","Response","responseData","_owner","_classPrivateFieldLooseKey","defineProperty","writable","_classPrivateFieldLooseBase"],"mappings":"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","x_google_ignoreList":[0,1]}
package/addon/fetch.js ADDED
@@ -0,0 +1,186 @@
1
+ import { c as cloneResponseProperties } from "./context-CMv6XjzN";
2
+ import { macroCondition, getOwnConfig } from '@embroider/macros';
3
+
4
+ /**
5
+ * A basic Fetch Handler which converts a request into a
6
+ * `fetch` call presuming the response to be `json`.
7
+ *
8
+ * ```ts
9
+ * import Fetch from '@ember-data-mirror/request/fetch';
10
+ *
11
+ * manager.use([Fetch]);
12
+ * ```
13
+ *
14
+ * @module @ember-data-mirror/request/fetch
15
+ * @main @ember-data-mirror/request/fetch
16
+ */
17
+
18
+ // Lazily close over fetch to avoid breaking Mirage
19
+ const _fetch = typeof fetch !== 'undefined' ? (...args) => fetch(...args) : typeof FastBoot !== 'undefined' ? (...args) => FastBoot.require('node-fetch')(...args) : () => {
20
+ throw new Error('No Fetch Implementation Found');
21
+ };
22
+
23
+ // clones a response in a way that should still
24
+ // allow it to stream
25
+ function cloneResponse(response, overrides) {
26
+ const props = cloneResponseProperties(response);
27
+ return new Response(response.body, Object.assign(props, overrides));
28
+ }
29
+ let IS_MAYBE_MIRAGE = () => false;
30
+ if (macroCondition(getOwnConfig().env.DEBUG)) {
31
+ IS_MAYBE_MIRAGE = () => Boolean(typeof window !== 'undefined' && (window.server?.pretender || window.fetch.toString() !== 'function fetch() { [native code] }'));
32
+ }
33
+ const MUTATION_OPS = new Set(['updateRecord', 'createRecord', 'deleteRecord']);
34
+ const ERROR_STATUS_CODE_FOR = new Map([[400, 'Bad Request'], [401, 'Unauthorized'], [402, 'Payment Required'], [403, 'Forbidden'], [404, 'Not Found'], [405, 'Method Not Allowed'], [406, 'Not Acceptable'], [407, 'Proxy Authentication Required'], [408, 'Request Timeout'], [409, 'Conflict'], [410, 'Gone'], [411, 'Length Required'], [412, 'Precondition Failed'], [413, 'Payload Too Large'], [414, 'URI Too Long'], [415, 'Unsupported Media Type'], [416, 'Range Not Satisfiable'], [417, 'Expectation Failed'], [419, 'Page Expired'], [420, 'Enhance Your Calm'], [421, 'Misdirected Request'], [422, 'Unprocessable Entity'], [423, 'Locked'], [424, 'Failed Dependency'], [425, 'Too Early'], [426, 'Upgrade Required'], [428, 'Precondition Required'], [429, 'Too Many Requests'], [430, 'Request Header Fields Too Large'], [431, 'Request Header Fields Too Large'], [450, 'Blocked By Windows Parental Controls'], [451, 'Unavailable For Legal Reasons'], [500, 'Internal Server Error'], [501, 'Not Implemented'], [502, 'Bad Gateway'], [503, 'Service Unavailable'], [504, 'Gateway Timeout'], [505, 'HTTP Version Not Supported'], [506, 'Variant Also Negotiates'], [507, 'Insufficient Storage'], [508, 'Loop Detected'], [509, 'Bandwidth Limit Exceeded'], [510, 'Not Extended'], [511, 'Network Authentication Required']]);
35
+
36
+ /**
37
+ * A basic handler which converts a request into a
38
+ * `fetch` call presuming the response to be `json`.
39
+ *
40
+ * ```ts
41
+ * import Fetch from '@ember-data-mirror/request/fetch';
42
+ *
43
+ * manager.use([Fetch]);
44
+ * ```
45
+ *
46
+ * @class Fetch
47
+ * @public
48
+ */
49
+ const Fetch = {
50
+ async request(context) {
51
+ let response;
52
+ try {
53
+ response = await _fetch(context.request.url, context.request);
54
+ } catch (e) {
55
+ if (e instanceof DOMException && e.name === 'AbortError') {
56
+ e.statusText = 'Aborted';
57
+ e.status = 20;
58
+ e.isRequestError = true;
59
+ } else {
60
+ e.statusText = 'Unknown Network Error';
61
+ e.status = 0;
62
+ e.isRequestError = true;
63
+ }
64
+ throw e;
65
+ }
66
+ const isError = !response.ok || response.status >= 400;
67
+ const op = context.request.op;
68
+ const isMutationOp = Boolean(op && MUTATION_OPS.has(op));
69
+ if (!isError && !isMutationOp && response.status !== 204 && !response.headers.has('date')) {
70
+ if (IS_MAYBE_MIRAGE()) {
71
+ response.headers.set('date', new Date().toUTCString());
72
+ } else {
73
+ const headers = new Headers(response.headers);
74
+ headers.set('date', new Date().toUTCString());
75
+ response = cloneResponse(response, {
76
+ headers
77
+ });
78
+ }
79
+ }
80
+ context.setResponse(response);
81
+ if (response.status === 204) {
82
+ return null;
83
+ }
84
+ let text = '';
85
+ // if we are in a mirage context, we cannot support streaming
86
+ if (IS_MAYBE_MIRAGE()) {
87
+ text = await response.text();
88
+ } else {
89
+ const reader = response.body.getReader();
90
+ const decoder = new TextDecoder();
91
+ let isStreaming = context.hasRequestedStream;
92
+ let stream = isStreaming ? new TransformStream() : null;
93
+ let writer = stream?.writable.getWriter();
94
+ if (isStreaming) {
95
+ // Listen for the abort event on the AbortSignal
96
+ context.request.signal?.addEventListener('abort', () => {
97
+ if (!isStreaming) {
98
+ return;
99
+ }
100
+ void stream.writable.abort('Request Aborted');
101
+ void stream.readable.cancel('Request Aborted');
102
+ });
103
+ context.setStream(stream.readable);
104
+ }
105
+
106
+ // eslint-disable-next-line no-constant-condition
107
+ while (true) {
108
+ // we manually read the stream instead of using `response.json()`
109
+ // or `response.text()` because if we need to stream the body
110
+ // we need to be able to pass the stream along efficiently.
111
+ const {
112
+ done,
113
+ value
114
+ } = await reader.read();
115
+ if (done) {
116
+ if (isStreaming) {
117
+ isStreaming = false;
118
+ await writer.ready;
119
+ await writer.close();
120
+ }
121
+ break;
122
+ }
123
+ text += decoder.decode(value, {
124
+ stream: true
125
+ });
126
+
127
+ // if we are streaming, we want to pass the stream along
128
+ if (isStreaming) {
129
+ await writer.ready;
130
+ await writer.write(value);
131
+ } else if (context.hasRequestedStream) {
132
+ const encode = new TextEncoder();
133
+ isStreaming = true;
134
+ stream = new TransformStream();
135
+ // Listen for the abort event on the AbortSignal
136
+ // eslint-disable-next-line @typescript-eslint/no-loop-func
137
+ context.request.signal?.addEventListener('abort', () => {
138
+ if (!isStreaming) {
139
+ return;
140
+ }
141
+ void stream.writable.abort('Request Aborted');
142
+ void stream.readable.cancel('Request Aborted');
143
+ });
144
+ context.setStream(stream.readable);
145
+ writer = stream.writable.getWriter();
146
+ await writer.ready;
147
+ await writer.write(encode.encode(text));
148
+ await writer.ready;
149
+ await writer.write(value);
150
+ }
151
+ }
152
+ if (isStreaming) {
153
+ isStreaming = false;
154
+ await writer.ready;
155
+ await writer.close();
156
+ }
157
+ }
158
+ // if we are an error, we will want to throw
159
+ if (isError) {
160
+ let errorPayload;
161
+ try {
162
+ errorPayload = JSON.parse(text);
163
+ } catch {
164
+ // void;
165
+ }
166
+ // attempt errors discovery
167
+ const errors = Array.isArray(errorPayload) ? errorPayload : isDict(errorPayload) && Array.isArray(errorPayload.errors) ? errorPayload.errors : null;
168
+ const statusText = response.statusText || ERROR_STATUS_CODE_FOR.get(response.status) || 'Unknown Request Error';
169
+ const msg = `[${response.status} ${statusText}] ${context.request.method ?? 'GET'} (${response.type}) - ${response.url}`;
170
+ const error = errors ? new AggregateError(errors, msg) : new Error(msg);
171
+ error.status = response.status;
172
+ error.statusText = statusText;
173
+ error.isRequestError = true;
174
+ error.code = error.status;
175
+ error.name = error.statusText.replaceAll(' ', '') + 'Error';
176
+ error.content = errorPayload;
177
+ throw error;
178
+ } else {
179
+ return JSON.parse(text);
180
+ }
181
+ }
182
+ };
183
+ function isDict(v) {
184
+ return v !== null && typeof v === 'object';
185
+ }
186
+ export { Fetch as default };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sources":["../src/fetch.ts"],"sourcesContent":["/**\n * A basic Fetch Handler which converts a request into a\n * `fetch` call presuming the response to be `json`.\n *\n * ```ts\n * import Fetch from '@ember-data-mirror/request/fetch';\n *\n * manager.use([Fetch]);\n * ```\n *\n * @module @ember-data-mirror/request/fetch\n * @main @ember-data-mirror/request/fetch\n */\n\nimport { DEBUG } from '@ember-data/env';\n\nimport { cloneResponseProperties, type Context } from './-private/context';\nimport type { HttpErrorProps } from './-private/utils';\n\n// Lazily close over fetch to avoid breaking Mirage\nconst _fetch: typeof fetch =\n typeof fetch !== 'undefined'\n ? (...args) => fetch(...args)\n : typeof FastBoot !== 'undefined'\n ? (...args) => (FastBoot.require('node-fetch') as typeof fetch)(...args)\n : ((() => {\n throw new Error('No Fetch Implementation Found');\n }) as typeof fetch);\n\n// clones a response in a way that should still\n// allow it to stream\nfunction cloneResponse(response: Response, overrides: Partial<Response>) {\n const props = cloneResponseProperties(response);\n return new Response(response.body, Object.assign(props, overrides));\n}\n\nlet IS_MAYBE_MIRAGE = () => false;\nif (DEBUG) {\n IS_MAYBE_MIRAGE = () =>\n Boolean(\n typeof window !== 'undefined' &&\n ((window as { server?: { pretender: unknown } }).server?.pretender ||\n window.fetch.toString() !== 'function fetch() { [native code] }')\n );\n}\n\nconst MUTATION_OPS = new Set(['updateRecord', 'createRecord', 'deleteRecord']);\nconst ERROR_STATUS_CODE_FOR = new Map([\n [400, 'Bad Request'],\n [401, 'Unauthorized'],\n [402, 'Payment Required'],\n [403, 'Forbidden'],\n [404, 'Not Found'],\n [405, 'Method Not Allowed'],\n [406, 'Not Acceptable'],\n [407, 'Proxy Authentication Required'],\n [408, 'Request Timeout'],\n [409, 'Conflict'],\n [410, 'Gone'],\n [411, 'Length Required'],\n [412, 'Precondition Failed'],\n [413, 'Payload Too Large'],\n [414, 'URI Too Long'],\n [415, 'Unsupported Media Type'],\n [416, 'Range Not Satisfiable'],\n [417, 'Expectation Failed'],\n [419, 'Page Expired'],\n [420, 'Enhance Your Calm'],\n [421, 'Misdirected Request'],\n [422, 'Unprocessable Entity'],\n [423, 'Locked'],\n [424, 'Failed Dependency'],\n [425, 'Too Early'],\n [426, 'Upgrade Required'],\n [428, 'Precondition Required'],\n [429, 'Too Many Requests'],\n [430, 'Request Header Fields Too Large'],\n [431, 'Request Header Fields Too Large'],\n [450, 'Blocked By Windows Parental Controls'],\n [451, 'Unavailable For Legal Reasons'],\n [500, 'Internal Server Error'],\n [501, 'Not Implemented'],\n [502, 'Bad Gateway'],\n [503, 'Service Unavailable'],\n [504, 'Gateway Timeout'],\n [505, 'HTTP Version Not Supported'],\n [506, 'Variant Also Negotiates'],\n [507, 'Insufficient Storage'],\n [508, 'Loop Detected'],\n [509, 'Bandwidth Limit Exceeded'],\n [510, 'Not Extended'],\n [511, 'Network Authentication Required'],\n]);\n\n/**\n * A basic handler which converts a request into a\n * `fetch` call presuming the response to be `json`.\n *\n * ```ts\n * import Fetch from '@ember-data-mirror/request/fetch';\n *\n * manager.use([Fetch]);\n * ```\n *\n * @class Fetch\n * @public\n */\nconst Fetch = {\n async request<T>(context: Context): Promise<T> {\n let response: Response;\n\n try {\n response = await _fetch(context.request.url!, context.request);\n } catch (e) {\n if (e instanceof DOMException && e.name === 'AbortError') {\n (e as unknown as HttpErrorProps).statusText = 'Aborted';\n (e as unknown as HttpErrorProps).status = 20;\n (e as unknown as HttpErrorProps).isRequestError = true;\n } else {\n (e as HttpErrorProps).statusText = 'Unknown Network Error';\n (e as HttpErrorProps).status = 0;\n (e as HttpErrorProps).isRequestError = true;\n }\n throw e;\n }\n\n const isError = !response.ok || response.status >= 400;\n const op = context.request.op;\n const isMutationOp = Boolean(op && MUTATION_OPS.has(op));\n\n if (!isError && !isMutationOp && response.status !== 204 && !response.headers.has('date')) {\n if (IS_MAYBE_MIRAGE()) {\n response.headers.set('date', new Date().toUTCString());\n } else {\n const headers = new Headers(response.headers);\n headers.set('date', new Date().toUTCString());\n response = cloneResponse(response, {\n headers,\n });\n }\n }\n\n context.setResponse(response);\n\n if (response.status === 204) {\n return null as T;\n }\n\n let text = '';\n // if we are in a mirage context, we cannot support streaming\n if (IS_MAYBE_MIRAGE()) {\n text = await response.text();\n } else {\n const reader = response.body!.getReader();\n const decoder = new TextDecoder();\n let isStreaming = context.hasRequestedStream;\n let stream: TransformStream | null = isStreaming ? new TransformStream() : null;\n let writer = stream?.writable.getWriter();\n\n if (isStreaming) {\n // Listen for the abort event on the AbortSignal\n context.request.signal?.addEventListener('abort', () => {\n if (!isStreaming) {\n return;\n }\n void stream!.writable.abort('Request Aborted');\n void stream!.readable.cancel('Request Aborted');\n });\n context.setStream(stream!.readable);\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // we manually read the stream instead of using `response.json()`\n // or `response.text()` because if we need to stream the body\n // we need to be able to pass the stream along efficiently.\n const { done, value } = await reader.read();\n if (done) {\n if (isStreaming) {\n isStreaming = false;\n await writer!.ready;\n await writer!.close();\n }\n break;\n }\n text += decoder.decode(value, { stream: true });\n\n // if we are streaming, we want to pass the stream along\n if (isStreaming) {\n await writer!.ready;\n await writer!.write(value);\n } else if (context.hasRequestedStream) {\n const encode = new TextEncoder();\n isStreaming = true;\n stream = new TransformStream();\n // Listen for the abort event on the AbortSignal\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n context.request.signal?.addEventListener('abort', () => {\n if (!isStreaming) {\n return;\n }\n void stream!.writable.abort('Request Aborted');\n void stream!.readable.cancel('Request Aborted');\n });\n context.setStream(stream.readable);\n writer = stream.writable.getWriter();\n await writer.ready;\n await writer.write(encode.encode(text));\n await writer.ready;\n await writer.write(value);\n }\n }\n\n if (isStreaming) {\n isStreaming = false;\n await writer!.ready;\n await writer!.close();\n }\n }\n // if we are an error, we will want to throw\n if (isError) {\n let errorPayload: object | undefined;\n try {\n errorPayload = JSON.parse(text) as object;\n } catch {\n // void;\n }\n // attempt errors discovery\n const errors = Array.isArray(errorPayload)\n ? errorPayload\n : isDict(errorPayload) && Array.isArray(errorPayload.errors)\n ? errorPayload.errors\n : null;\n\n const statusText = response.statusText || ERROR_STATUS_CODE_FOR.get(response.status) || 'Unknown Request Error';\n const msg = `[${response.status} ${statusText}] ${context.request.method ?? 'GET'} (${response.type}) - ${\n response.url\n }`;\n\n const error = (errors ? new AggregateError(errors, msg) : new Error(msg)) as Error & {\n content: object | undefined;\n } & HttpErrorProps;\n error.status = response.status;\n error.statusText = statusText;\n error.isRequestError = true;\n error.code = error.status;\n error.name = error.statusText.replaceAll(' ', '') + 'Error';\n error.content = errorPayload;\n throw error;\n } else {\n return JSON.parse(text) as T;\n }\n },\n};\n\nfunction isDict(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === 'object';\n}\n\nexport default Fetch;\n"],"names":["_fetch","fetch","args","FastBoot","require","Error","cloneResponse","response","overrides","props","cloneResponseProperties","Response","body","Object","assign","IS_MAYBE_MIRAGE","macroCondition","getOwnConfig","env","DEBUG","Boolean","window","server","pretender","toString","MUTATION_OPS","Set","ERROR_STATUS_CODE_FOR","Map","Fetch","request","context","url","e","DOMException","name","statusText","status","isRequestError","isError","ok","op","isMutationOp","has","headers","set","Date","toUTCString","Headers","setResponse","text","reader","getReader","decoder","TextDecoder","isStreaming","hasRequestedStream","stream","TransformStream","writer","writable","getWriter","signal","addEventListener","abort","readable","cancel","setStream","done","value","read","ready","close","decode","write","encode","TextEncoder","errorPayload","JSON","parse","errors","Array","isArray","isDict","get","msg","method","type","error","AggregateError","code","replaceAll","content","v"],"mappings":"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"}
package/addon/index.js ADDED
@@ -0,0 +1,240 @@
1
+ import { _ as _classPrivateFieldBase, I as IS_CACHE_HANDLER, a as assertValidRequest, e as executeNextHandler, g as getRequestResult, u as upgradePromise, s as setPromiseResult, b as clearRequestResult, d as _classPrivateFieldKey } from "./context-CMv6XjzN";
2
+ export { f as createDeferred, h as getPromiseResult } from "./context-CMv6XjzN";
3
+ import { macroCondition, getOwnConfig, importSync } from '@embroider/macros';
4
+ let REQ_ID = 0;
5
+ /**
6
+ * ```js
7
+ * import RequestManager from '@ember-data-mirror/request';
8
+ * ```
9
+ *
10
+ * A RequestManager provides a request/response flow in which configured
11
+ * handlers are successively given the opportunity to handle, modify, or
12
+ * pass-along a request.
13
+ *
14
+ * ```ts
15
+ * interface RequestManager {
16
+ * request<T>(req: RequestInfo): Future<T>;
17
+ * }
18
+ * ```
19
+ *
20
+ * For example:
21
+ *
22
+ * ```ts
23
+ * import RequestManager from '@ember-data-mirror/request';
24
+ * import Fetch from '@ember-data-mirror/request/fetch';
25
+ * import Auth from 'ember-simple-auth/ember-data-handler';
26
+ * import Config from './config';
27
+ *
28
+ * const { apiUrl } = Config;
29
+ *
30
+ * // ... create manager
31
+ * const manager = new RequestManager();
32
+ * manager.use([Auth, Fetch]);
33
+ *
34
+ * // ... execute a request
35
+ * const response = await manager.request({
36
+ * url: `${apiUrl}/users`
37
+ * });
38
+ * ```
39
+ *
40
+ * ### Futures
41
+ *
42
+ * The return value of `manager.request` is a `Future`, which allows
43
+ * access to limited information about the request while it is still
44
+ * pending and fulfills with the final state when the request completes.
45
+ *
46
+ * A `Future` is cancellable via `abort`.
47
+ *
48
+ * Handlers may optionally expose a `ReadableStream` to the `Future` for
49
+ * streaming data; however, when doing so the future should not resolve
50
+ * until the response stream is fully read.
51
+ *
52
+ * ```ts
53
+ * interface Future<T> extends Promise<StructuredDocument<T>> {
54
+ * abort(): void;
55
+ *
56
+ * async getStream(): ReadableStream | null;
57
+ * }
58
+ * ```
59
+ *
60
+ * ### StructuredDocuments
61
+ *
62
+ * A Future resolves with a `StructuredDataDocument` or rejects with a `StructuredErrorDocument`.
63
+ *
64
+ * ```ts
65
+ * interface StructuredDataDocument<T> {
66
+ * request: ImmutableRequestInfo;
67
+ * response: ImmutableResponseInfo;
68
+ * content: T;
69
+ * }
70
+ * interface StructuredErrorDocument extends Error {
71
+ * request: ImmutableRequestInfo;
72
+ * response: ImmutableResponseInfo;
73
+ * error: string | object;
74
+ * }
75
+ * type StructuredDocument<T> = StructuredDataDocument<T> | StructuredErrorDocument;
76
+ * ```
77
+ *
78
+ * @class RequestManager
79
+ * @public
80
+ */
81
+ var _handlers = /*#__PURE__*/_classPrivateFieldKey("handlers");
82
+ class RequestManager {
83
+ constructor(options) {
84
+ Object.defineProperty(this, _handlers, {
85
+ writable: true,
86
+ value: []
87
+ });
88
+ Object.assign(this, options);
89
+ this._pending = new Map();
90
+ }
91
+
92
+ /**
93
+ * Register a handler to use for primary cache intercept.
94
+ *
95
+ * Only one such handler may exist. If using the same
96
+ * RequestManager as the Store instance the Store
97
+ * registers itself as a Cache handler.
98
+ *
99
+ * @method useCache
100
+ * @public
101
+ * @param {Handler[]} cacheHandler
102
+ * @return {void}
103
+ */
104
+ useCache(cacheHandler) {
105
+ if (macroCondition(getOwnConfig().env.DEBUG)) {
106
+ if (this._hasCacheHandler) {
107
+ throw new Error(`\`RequestManager.useCache(<handler>)\` May only be invoked once.`);
108
+ }
109
+ if (Object.isFrozen(_classPrivateFieldBase(this, _handlers)[_handlers])) {
110
+ throw new Error(`\`RequestManager.useCache(<handler>)\` May only be invoked prior to any request having been made.`);
111
+ }
112
+ this._hasCacheHandler = true;
113
+ }
114
+ cacheHandler[IS_CACHE_HANDLER] = true;
115
+ _classPrivateFieldBase(this, _handlers)[_handlers].unshift(cacheHandler);
116
+ }
117
+
118
+ /**
119
+ * Register handler(s) to use when a request is issued.
120
+ *
121
+ * Handlers will be invoked in the order they are registered.
122
+ * Each Handler is given the opportunity to handle the request,
123
+ * curry the request, or pass along a modified request.
124
+ *
125
+ * @method use
126
+ * @public
127
+ * @param {Handler[]} newHandlers
128
+ * @return {void}
129
+ */
130
+ use(newHandlers) {
131
+ const handlers = _classPrivateFieldBase(this, _handlers)[_handlers];
132
+ if (macroCondition(getOwnConfig().env.DEBUG)) {
133
+ if (Object.isFrozen(handlers)) {
134
+ throw new Error(`Cannot add a Handler to a RequestManager after a request has been made`);
135
+ }
136
+ if (!Array.isArray(newHandlers)) {
137
+ throw new Error(`\`RequestManager.use(<Handler[]>)\` expects an array of handlers, but was called with \`${typeof newHandlers}\``);
138
+ }
139
+ newHandlers.forEach((handler, index) => {
140
+ if (!handler || typeof handler !== 'object' || typeof handler.request !== 'function') {
141
+ throw new Error(`\`RequestManager.use(<Handler[]>)\` expected to receive an array of handler objects with request methods, by the handler at index ${index} does not conform.`);
142
+ }
143
+ });
144
+ }
145
+ handlers.push(...newHandlers);
146
+ }
147
+
148
+ /**
149
+ * Issue a Request.
150
+ *
151
+ * Returns a Future that fulfills with a StructuredDocument
152
+ *
153
+ * @method request
154
+ * @public
155
+ * @param {RequestInfo} request
156
+ * @return {Future}
157
+ */
158
+ request(request) {
159
+ const handlers = _classPrivateFieldBase(this, _handlers)[_handlers];
160
+ if (macroCondition(getOwnConfig().env.DEBUG)) {
161
+ if (!Object.isFrozen(handlers)) {
162
+ Object.freeze(handlers);
163
+ }
164
+ assertValidRequest(request, true);
165
+ }
166
+ const controller = request.controller || new AbortController();
167
+ if (request.controller) {
168
+ delete request.controller;
169
+ }
170
+ const requestId = REQ_ID++;
171
+ const promise = executeNextHandler(handlers, request, 0, {
172
+ controller,
173
+ response: null,
174
+ stream: null,
175
+ hasRequestedStream: false,
176
+ id: requestId
177
+ });
178
+
179
+ // the cache handler will set the result of the request synchronously
180
+ // if it is able to fulfill the request from the cache
181
+ const cacheResult = getRequestResult(requestId);
182
+ if (macroCondition(getOwnConfig().env.TESTING)) {
183
+ if (!request.disableTestWaiter) {
184
+ const {
185
+ waitForPromise
186
+ } = importSync('@ember/test-waiters');
187
+ const newPromise = waitForPromise(promise);
188
+ const finalPromise = upgradePromise(newPromise.then(result => {
189
+ setPromiseResult(finalPromise, {
190
+ isError: false,
191
+ result
192
+ });
193
+ clearRequestResult(requestId);
194
+ return result;
195
+ }, error => {
196
+ setPromiseResult(finalPromise, {
197
+ isError: true,
198
+ result: error
199
+ });
200
+ clearRequestResult(requestId);
201
+ throw error;
202
+ }), promise);
203
+ if (cacheResult) {
204
+ setPromiseResult(finalPromise, cacheResult);
205
+ }
206
+ return finalPromise;
207
+ }
208
+ }
209
+
210
+ // const promise1 = store.request(myRequest);
211
+ // const promise2 = store.request(myRequest);
212
+ // promise1 === promise2; // false
213
+ // either we need to make promise1 === promise2, or we need to make sure that
214
+ // we need to have a way to key from request to result
215
+ // such that we can lookup the result here and return it if it exists
216
+ const finalPromise = upgradePromise(promise.then(result => {
217
+ setPromiseResult(finalPromise, {
218
+ isError: false,
219
+ result
220
+ });
221
+ clearRequestResult(requestId);
222
+ return result;
223
+ }, error => {
224
+ setPromiseResult(finalPromise, {
225
+ isError: true,
226
+ result: error
227
+ });
228
+ clearRequestResult(requestId);
229
+ throw error;
230
+ }), promise);
231
+ if (cacheResult) {
232
+ setPromiseResult(finalPromise, cacheResult);
233
+ }
234
+ return finalPromise;
235
+ }
236
+ static create(options) {
237
+ return new this(options);
238
+ }
239
+ }
240
+ export { RequestManager as default, setPromiseResult };