@ueberbrot/effect-api-query
Version:
Type-safe TanStack Query utilities derived from Effect RPC and HTTP API contracts.
1 lines • 183 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":["EffectArray","EffectArray","skipToken","call","EffectArray","EffectArray","skipToken","EffectArray","node","options"],"sources":["../src/core/canonical-key.ts","../src/core/metadata-query.ts","../src/core/prepared-input.ts","../src/core/utility-tree.ts","../src/core/schema-key.ts","../src/rpc/errors.ts","../src/core/stream-hash-index.ts","../src/core/stream-publication.ts","../src/core/streamed-query.ts","../src/rpc/streamed-query.ts","../src/rpc/operation.ts","../src/rpc/create-utils.ts","../src/http/errors.ts","../src/http/request.ts","../src/http/streamed-query.ts","../src/http/operation.ts","../src/http/create-utils.ts","../src/core/stream-snapshot.ts","../src/core/view-prefix.ts","../src/core/query-filter.ts","../src/core/hydration.ts","../src/core/stream-recovery.ts","../src/core/configure.ts","../src/core/configure-utils.ts","../src/core/branch-filter.ts","../src/core/declared-error.ts","../src/core/consume-events.ts"],"sourcesContent":["import { Array as EffectArray, Order, Predicate } from \"effect\";\n\nimport type { JsonValue } from \"./types\";\n\nexport const canonicalizeArray = (\n value: readonly unknown[],\n seen = new WeakSet()\n): readonly JsonValue[] => {\n if (seen.has(value)) {\n throw new TypeError(\"Key values must not contain cycles\");\n }\n seen.add(value);\n const copy: JsonValue[] = [];\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.hasOwn(value, index)) {\n throw new TypeError(\"Key values must not contain sparse arrays\");\n }\n // oxlint-disable-next-line eslint/no-use-before-define\n copy.push(canonicalize(value[index], seen));\n }\n seen.delete(value);\n return Object.freeze(copy);\n};\n\nconst canonicalizeObject = (\n // oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type\n value: Record<string, unknown>,\n seen: WeakSet<object>\n): JsonValue => {\n const prototype: unknown = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(\"Key values must contain only plain objects\");\n }\n const copy: Record<string, JsonValue> = {};\n for (const key of EffectArray.sort(Object.keys(value), Order.String)) {\n if (key === \"__proto__\" || key === \"constructor\") {\n throw new TypeError(\n \"Key objects must not contain __proto__ or constructor properties\"\n );\n }\n // oxlint-disable-next-line eslint/no-use-before-define\n copy[key] = canonicalize(value[key], seen);\n }\n seen.delete(value);\n return Object.freeze(copy);\n};\n\n/** Copies strict JSON into the immutable representation used by keys and filters. */\nexport const canonicalize = (\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n value: unknown,\n seen = new WeakSet()\n): JsonValue => {\n if (\n value === null ||\n Predicate.isString(value) ||\n Predicate.isBoolean(value)\n ) {\n return value;\n }\n if (Predicate.isNumber(value)) {\n if (!Number.isFinite(value)) {\n throw new TypeError(\"Key values must contain only finite numbers\");\n }\n return Object.is(value, -0) ? 0 : value;\n }\n if (!Predicate.isObjectOrArray(value)) {\n throw new TypeError(\"Key values must be JSON-safe\");\n }\n if (Array.isArray(value)) {\n return canonicalizeArray(value, seen);\n }\n if (seen.has(value)) {\n throw new TypeError(\"Key values must not contain cycles\");\n }\n seen.add(value);\n return canonicalizeObject(value, seen);\n};\n","import { replaceEqualDeep } from \"@tanstack/query-core\";\nimport type { QueryFunctionContext } from \"@tanstack/query-core\";\nimport { Exit, Predicate } from \"effect\";\n\nimport type { UnaryOperation } from \"./operation\";\nimport type { RunPromiseExit } from \"./types\";\n\ntype StructuralSharing = (previous: unknown, data: unknown) => unknown;\n\nconst isStructuralSharing = (policy: unknown): policy is StructuralSharing =>\n Predicate.isFunction(policy);\n\nconst shareQueryData = (previous: unknown, data: unknown, policy: unknown) => {\n if (policy === false) {\n return data;\n }\n if (isStructuralSharing(policy)) {\n return policy(previous, data);\n }\n return replaceEqualDeep(previous, data);\n};\n\nconst fetchedPolicies = new WeakMap<object, { readonly policy: unknown }>();\n\nexport const preserveMetadataPolicy = <Data>(\n previous: unknown,\n data: Data\n): Data => {\n if (Predicate.isObject(previous) && Predicate.isObject(data)) {\n const policy = fetchedPolicies.get(previous);\n if (policy !== undefined) {\n fetchedPolicies.set(data, policy);\n }\n }\n return data;\n};\n\nexport const prepareMetadataExecution = (\n description: NonNullable<UnaryOperation[\"metadata\"]>,\n\n options: Record<string, unknown>,\n runPromiseExit: RunPromiseExit<unknown>,\n\n requestOptions: unknown,\n skipped: boolean\n) => {\n const hasLocalPolicy = Object.hasOwn(options, \"structuralSharing\");\n const localPolicy = options[\"structuralSharing\"];\n if (!skipped) {\n options[\"structuralSharing\"] = (previous: unknown, data: unknown) => {\n const produced = Predicate.isObject(data)\n ? fetchedPolicies.get(data)\n : undefined;\n if (Predicate.isObject(data)) {\n fetchedPolicies.delete(data);\n }\n const shared = shareQueryData(\n previous,\n data,\n produced === undefined ? localPolicy : produced.policy\n );\n return produced === undefined ? shared : description.finalizeData(shared);\n };\n }\n\n return (input: unknown) =>\n async ({ client, queryKey, signal }: QueryFunctionContext) => {\n const policy = hasLocalPolicy\n ? localPolicy\n : client.defaultQueryOptions({ queryKey }).structuralSharing;\n const exit = await runPromiseExit(\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n description.invoke(input, requestOptions),\n { signal }\n );\n if (Exit.isFailure(exit)) {\n throw description.executionError(\"metadata\", exit.cause);\n }\n const data = exit.value === undefined ? null : exit.value;\n if (Predicate.isObject(data)) {\n fetchedPolicies.set(data, { policy });\n }\n return data;\n };\n};\n","import type { QueryKey } from \"@tanstack/query-core\";\nimport { Predicate } from \"effect\";\n\nimport { canonicalize } from \"./canonical-key\";\nimport type { InferInput, SupportedQueryView } from \"./inference\";\nimport type { OperationInput, RuntimeKeyEncoder } from \"./operation\";\nimport type { JsonValue } from \"./types\";\n\n/** Opaque, owner-bound preparation. Retained execution input must remain unchanged. */\nexport interface PreparedInput<Input> {\n readonly \"~effect-api-query/PreparedInput\": { readonly input?: Input };\n}\n\ninterface PreparedValue {\n readonly owner: OperationInput;\n readonly input: unknown;\n readonly keyValue: JsonValue;\n}\nconst values = new WeakMap<object, PreparedValue>();\nconst owners = new WeakMap<\n () => QueryKey,\n {\n readonly input: OperationInput;\n readonly encoder: RuntimeKeyEncoder | undefined;\n }\n>();\n\nexport const registerInputOwner = (\n key: () => QueryKey,\n input: OperationInput,\n encoder: RuntimeKeyEncoder | undefined\n) => {\n owners.set(key, { input, encoder });\n};\n\nexport const inputKind = (key: () => QueryKey) => owners.get(key)?.input._tag;\n\n// oxlint-disable-next-line anti-slop/no-unknown-parameters\nexport const readPreparedInput = (owner: OperationInput, input: unknown) => {\n const prepared = Predicate.isObject(input) ? values.get(input) : undefined;\n if (prepared !== undefined && prepared.owner !== owner) {\n throw new TypeError(\"Prepared input belongs to another utility leaf\");\n }\n return prepared;\n};\n\n/** Constructs and encodes once for repeated keys/options on this utility leaf. */\nexport const prepareInput = <Leaf extends { readonly key: () => QueryKey }>(\n leaf: Leaf & ([SupportedQueryView<Leaf>] extends [never] ? never : unknown),\n input: InferInput<NoInfer<Leaf>>\n): PreparedInput<InferInput<Leaf>> => {\n const owner = owners.get(leaf.key);\n if (owner === undefined || owner.input._tag === \"Inputless\") {\n throw new TypeError(\n \"Prepared inputs require a generated input-bearing query leaf\"\n );\n }\n const prepared = owner.input.prepare(input, owner.encoder);\n let keyValue: JsonValue;\n try {\n keyValue = canonicalize(prepared.keyValue);\n } catch (error) {\n throw owner.input.invalidKey(error);\n }\n const token = Object.freeze({\n \"~effect-api-query/PreparedInput\": Object.freeze({}),\n });\n values.set(token, { owner: owner.input, input: prepared.input, keyValue });\n return token;\n};\n","import { skipToken } from \"@tanstack/query-core\";\nimport { Array as EffectArray, Effect, Exit, Predicate } from \"effect\";\nimport type { Cause } from \"effect\";\n\nimport { canonicalize, canonicalizeArray } from \"./canonical-key\";\nimport { prepareMetadataExecution } from \"./metadata-query\";\nimport type {\n BufferedOperation,\n OperationDescription,\n QueryPreparation,\n RuntimeKeyEncoder,\n StreamingOperation,\n TreeErrors,\n UnaryOperation,\n UnaryQueryOperation,\n} from \"./operation\";\nimport { readPreparedInput, registerInputOwner } from \"./prepared-input\";\nimport type { JsonValue, RunPromiseExit } from \"./types\";\n\nconst reservedPathSegments = new Set([\n \"__proto__\",\n \"constructor\",\n \"infiniteKey\",\n \"infiniteOptions\",\n \"key\",\n \"liveKey\",\n \"liveOptions\",\n \"metadataKey\",\n \"metadataOptions\",\n \"mutationKey\",\n \"mutationOptions\",\n \"prototype\",\n \"queryKey\",\n \"queryOptions\",\n \"streamedKey\",\n \"streamedOptions\",\n]);\n\ninterface PreparedQuery {\n readonly input: unknown;\n readonly key: readonly JsonValue[];\n}\n\ninterface ValidatedOperationPath {\n readonly operation: OperationDescription;\n readonly segments: readonly [string, ...string[]];\n}\n\nconst freezeKey = (parts: JsonValue[]) => Object.freeze(parts);\n\nconst normalizePrefix = (\n prefix: readonly [JsonValue, ...JsonValue[]],\n errors: TreeErrors\n): readonly JsonValue[] => {\n if (!Array.isArray(prefix) || prefix.length === 0) {\n throw errors.invalidPrefix(\"Shape\");\n }\n\n try {\n return canonicalizeArray(prefix);\n } catch (error) {\n throw errors.invalidPrefix(\"Value\", error);\n }\n};\n\nconst planPaths = (\n operations: readonly OperationDescription[],\n errors: TreeErrors\n) => {\n const branchPaths = new Map<string, readonly string[]>();\n const leafPaths = new Set<string>();\n const plan: ValidatedOperationPath[] = [];\n\n for (const operation of operations) {\n const segments = operation.path;\n if (\n !EffectArray.isReadonlyArrayNonEmpty(segments) ||\n segments.some(\n (segment) => segment.length === 0 || reservedPathSegments.has(segment)\n )\n ) {\n throw errors.invalidPath(operation.id);\n }\n const pathKey = JSON.stringify(segments);\n if (leafPaths.has(pathKey)) {\n throw errors.pathCollision(operation.id, segments, \"duplicates\");\n }\n const descendantPath = branchPaths.get(pathKey);\n if (descendantPath !== undefined) {\n throw errors.pathCollision(operation.id, descendantPath, \"collides with\");\n }\n const parents: string[] = [];\n for (let index = 1; index < segments.length; index += 1) {\n const parent = segments.slice(0, index);\n const parentKey = JSON.stringify(parent);\n if (leafPaths.has(parentKey)) {\n throw errors.pathCollision(operation.id, parent, \"collides with\");\n }\n parents.push(parentKey);\n }\n for (const parent of parents) {\n if (!branchPaths.has(parent)) {\n branchPaths.set(parent, segments);\n }\n }\n leafPaths.add(pathKey);\n plan.push({\n operation,\n segments,\n });\n }\n return plan;\n};\n\nconst execute = async <Operation extends UnaryQueryOperation | \"metadata\">(\n description: {\n readonly invoke: UnaryOperation[\"invoke\"];\n readonly executionError: (\n operation: Operation,\n cause: Cause.Cause<unknown>\n ) => Error;\n },\n operation: Operation,\n\n input: unknown,\n runPromiseExit: RunPromiseExit<unknown>,\n\n requestOptions?: unknown,\n signal?: AbortSignal\n) => {\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n const effect = description.invoke(input, requestOptions);\n const exit = await runPromiseExit(\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n effect,\n signal === undefined ? undefined : { signal }\n );\n\n if (Exit.isFailure(exit)) {\n throw description.executionError(operation, exit.cause);\n }\n\n return operation !== \"mutation\" && exit.value === undefined\n ? null\n : exit.value;\n};\n\nconst prepareQuery = (\n description: UnaryOperation | StreamingOperation,\n\n input: unknown,\n operationKey: readonly JsonValue[],\n keyEncoder: RuntimeKeyEncoder | undefined,\n identity: readonly JsonValue[] = []\n): PreparedQuery => {\n if (description.input._tag === \"Inputless\") {\n return {\n input: undefined,\n key:\n identity.length === 0\n ? operationKey\n : freezeKey([...operationKey, ...identity]),\n };\n }\n const reused = readPreparedInput(description.input, input);\n const prepared = reused ?? description.input.prepare(input, keyEncoder);\n try {\n return {\n input: prepared.input,\n key: freezeKey([\n ...operationKey,\n reused === undefined\n ? canonicalize(prepared.keyValue)\n : reused.keyValue,\n ...identity,\n ]),\n };\n } catch (error) {\n throw description.input.invalidKey(error);\n }\n};\n\nconst prepareQueryOptions = (\n description: OperationDescription,\n\n argument: unknown\n) => {\n if (argument !== undefined && !Predicate.isObject(argument)) {\n throw new TypeError(\"Query options must be an object\");\n }\n const options = { ...argument };\n for (const option of [\"queryKeyHashFn\", \"queryHash\"] as const) {\n if (Object.hasOwn(options, option)) {\n throw description.unsupportedQueryHash(option);\n }\n }\n const { input } = options;\n delete options[\"input\"];\n const requestOptions = description.takeOptions(options);\n return { input, options, requestOptions };\n};\n\nconst finalizeQueryOptions = <QueryFn>(\n options: Record<string, unknown>,\n queryKey: readonly JsonValue[],\n queryFn: QueryFn\n) => ({\n ...options,\n queryFn,\n queryKey,\n});\n\nconst createQueryBuilders = (\n description: UnaryOperation | StreamingOperation,\n operationKey: readonly JsonValue[],\n keyEncoder: RuntimeKeyEncoder | undefined,\n prepareOptions: (\n options: Record<string, unknown>,\n\n requestOptions: unknown,\n\n input: unknown\n ) => QueryPreparation,\n\n prepareIdentity?: (options: Record<string, unknown>) => readonly JsonValue[]\n) => ({\n key: (input?: unknown, policy?: Record<string, unknown>) => {\n const options = description.input._tag === \"Inputless\" ? input : policy;\n const identity =\n prepareIdentity?.(Predicate.isObject(options) ? { ...options } : {}) ??\n [];\n return prepareQuery(description, input, operationKey, keyEncoder, identity)\n .key;\n },\n\n options: (argument?: unknown) => {\n const { input, options, requestOptions } = prepareQueryOptions(\n description,\n argument\n );\n const { identity, makeQuery } = prepareOptions(\n options,\n requestOptions,\n input\n );\n if (description.input._tag !== \"Inputless\" && input === skipToken) {\n return finalizeQueryOptions(options, operationKey, skipToken);\n }\n const prepared = prepareQuery(\n description,\n input,\n operationKey,\n keyEncoder,\n identity\n );\n return finalizeQueryOptions(\n options,\n prepared.key,\n makeQuery(prepared.input)\n );\n },\n});\n\nconst createInfiniteBuilders = (\n description: UnaryOperation,\n operationKey: readonly JsonValue[],\n keyEncoder: RuntimeKeyEncoder | undefined,\n runPromiseExit: RunPromiseExit<unknown>\n) => {\n const infiniteOperationKey = freezeKey([...operationKey, \"infinite\"]);\n\n const infiniteKey = (input?: unknown) =>\n prepareQuery(description, input, infiniteOperationKey, keyEncoder).key;\n\n const infiniteOptions = (argument: Record<string, unknown>) => {\n const { input, options, requestOptions } = prepareQueryOptions(\n description,\n argument\n );\n if (description.input._tag !== \"Inputless\" && input === skipToken) {\n return finalizeQueryOptions(options, infiniteOperationKey, skipToken);\n }\n\n const { initialPageParam } = options;\n const inputForPage =\n // oxlint-disable-next-line unicorn/no-useless-undefined\n description.input._tag === \"Inputless\" ? () => undefined : input;\n if (!Predicate.isFunction(inputForPage)) {\n throw new TypeError(\"Infinite query input must be a page input function\");\n }\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const pageInput = inputForPage as (pageParam: unknown) => unknown;\n const initialInput = pageInput(initialPageParam);\n const prepared = prepareQuery(\n description,\n initialInput,\n infiniteOperationKey,\n keyEncoder\n );\n\n return finalizeQueryOptions(\n options,\n prepared.key,\n async ({\n pageParam,\n signal,\n }: {\n readonly pageParam: unknown;\n readonly signal: AbortSignal;\n }) => {\n const pageRequest = pageInput(pageParam);\n const executionInput =\n description.input._tag === \"Input\"\n ? description.input.pageInput(pageRequest)\n : undefined;\n return execute(\n description,\n \"infinite\",\n executionInput,\n runPromiseExit,\n requestOptions,\n signal\n );\n }\n );\n };\n\n return { infiniteKey, infiniteOptions };\n};\n\nconst createMutationBuilders = (\n description: BufferedOperation,\n operationKey: readonly JsonValue[],\n runPromiseExit: RunPromiseExit<unknown>\n) => {\n const mutationKey = freezeKey([...operationKey, \"mutation\"]);\n\n const mutationOptions = (argument: Record<string, unknown> = {}) => {\n const options = { ...argument };\n const requestOptions = description.takeOptions(options);\n return {\n ...options,\n\n mutationFn: async (variables: unknown) =>\n execute(\n description,\n \"mutation\",\n variables,\n runPromiseExit,\n requestOptions\n ),\n mutationKey,\n };\n };\n return { mutationKey: () => mutationKey, mutationOptions };\n};\n\nconst createUnaryBuilders = (\n description: UnaryOperation,\n operationKey: readonly JsonValue[],\n keyEncoder: RuntimeKeyEncoder | undefined,\n runPromiseExit: RunPromiseExit<unknown>\n) => {\n const queryOperationKey = freezeKey([...operationKey, \"query\"]);\n const query = createQueryBuilders(\n description,\n queryOperationKey,\n keyEncoder,\n (_options, requestOptions) => ({\n identity: [],\n makeQuery:\n (input) =>\n async ({ signal }) =>\n execute(\n description,\n \"query\",\n input,\n runPromiseExit,\n requestOptions,\n signal\n ),\n })\n );\n const { metadata } = description;\n const metadataQuery =\n metadata === undefined\n ? undefined\n : createQueryBuilders(\n description,\n freezeKey([...operationKey, \"metadata\"]),\n keyEncoder,\n (options, requestOptions, input) => ({\n identity: [],\n makeQuery: prepareMetadataExecution(\n metadata,\n options,\n runPromiseExit,\n requestOptions,\n description.input._tag !== \"Inputless\" && input === skipToken\n ),\n })\n );\n\n return {\n ...createInfiniteBuilders(\n description,\n operationKey,\n keyEncoder,\n runPromiseExit\n ),\n ...createMutationBuilders(description, operationKey, runPromiseExit),\n queryKey: query.key,\n queryOptions: query.options,\n ...(metadataQuery === undefined\n ? undefined\n : {\n metadataKey: metadataQuery.key,\n metadataOptions: metadataQuery.options,\n }),\n };\n};\n\nconst createStreamingBuilders = (\n description: StreamingOperation,\n operationKey: readonly JsonValue[],\n keyEncoder: RuntimeKeyEncoder | undefined,\n runPromiseExit: RunPromiseExit<unknown>\n) => {\n const createView = (operation: \"live\" | \"streamed\") => {\n const prepare = (\n options: Record<string, unknown>,\n\n requestOptions?: unknown\n ) =>\n description.prepareStream(\n options,\n operation,\n runPromiseExit,\n requestOptions\n );\n return createQueryBuilders(\n description,\n freezeKey([...operationKey, operation]),\n keyEncoder,\n prepare,\n (options) => prepare(options).identity\n );\n };\n const live = createView(\"live\");\n const streamed = createView(\"streamed\");\n\n return {\n liveKey: live.key,\n liveOptions: live.options,\n streamedKey: streamed.key,\n streamedOptions: streamed.options,\n };\n};\n\nconst deepFreezeTree = (value: Record<string, unknown>) => {\n for (const child of Object.values(value)) {\n if (Predicate.isObject(child)) {\n deepFreezeTree(child);\n }\n }\n return Object.freeze(value);\n};\n\nconst validateKeyEncoders = (\n operations: readonly OperationDescription[],\n keyEncoders: ReadonlyMap<string, RuntimeKeyEncoder>,\n errors: TreeErrors\n) => {\n const supportedIds = new Set(\n operations\n .filter(\n (operation) =>\n operation.kind !== \"Mutation\" && operation.input._tag !== \"Inputless\"\n )\n .map((operation) => operation.id)\n );\n for (const id of keyEncoders.keys()) {\n if (!supportedIds.has(id)) {\n throw errors.unknownEncoder(id);\n }\n }\n for (const operation of operations) {\n if (\n operation.kind !== \"Mutation\" &&\n operation.input._tag === \"Input\" &&\n operation.input.requiresEncoder &&\n !Predicate.isFunction(keyEncoders.get(operation.id))\n ) {\n throw errors.missingEncoder(operation.id);\n }\n }\n};\n\nconst insertLeaf = (\n tree: Record<string, unknown>,\n prefix: readonly JsonValue[],\n path: ValidatedOperationPath,\n keyEncoder: RuntimeKeyEncoder | undefined,\n runPromiseExit: RunPromiseExit<unknown>\n) => {\n const { segments } = path;\n const operation =\n path.operation.kind === \"Mutation\"\n ? path.operation\n : { ...path.operation, input: { ...path.operation.input } };\n let branch = tree;\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n if (segment === undefined) {\n throw new TypeError(\n \"Validated operation paths must have defined segments\"\n );\n }\n const candidate = Object.hasOwn(branch, segment)\n ? branch[segment]\n : undefined;\n let child = Predicate.isObject(candidate) ? candidate : undefined;\n if (child === undefined) {\n const key = freezeKey([...prefix, ...segments.slice(0, index + 1)]);\n child = { key: () => key };\n branch[segment] = child;\n }\n branch = child;\n }\n\n const leafName = segments.at(-1);\n if (leafName === undefined) {\n throw new TypeError(\"Validated operation paths must have a leaf\");\n }\n const operationKey = freezeKey([...prefix, ...segments]);\n let builders;\n if (operation.kind === \"Mutation\") {\n builders = createMutationBuilders(operation, operationKey, runPromiseExit);\n } else if (operation.kind === \"Streaming\") {\n builders = createStreamingBuilders(\n operation,\n operationKey,\n keyEncoder,\n runPromiseExit\n );\n } else {\n builders = createUnaryBuilders(\n operation,\n operationKey,\n keyEncoder,\n runPromiseExit\n );\n }\n const leaf = { key: () => operationKey, ...builders };\n if (operation.kind !== \"Mutation\") {\n registerInputOwner(leaf.key, operation.input, keyEncoder);\n }\n branch[leafName] = leaf;\n};\n\nconst createTree = (\n prefix: readonly JsonValue[],\n paths: readonly ValidatedOperationPath[],\n keyEncoders: ReadonlyMap<string, RuntimeKeyEncoder>,\n runPromiseExit: RunPromiseExit<unknown>\n) => {\n const tree = { key: () => prefix };\n\n for (const path of paths) {\n insertLeaf(\n tree,\n prefix,\n path,\n keyEncoders.get(path.operation.id),\n runPromiseExit\n );\n }\n return deepFreezeTree(tree);\n};\n\nexport const createUtilityTree = (\n operations: readonly OperationDescription[],\n options: {\n readonly keyPrefix: readonly [JsonValue, ...JsonValue[]];\n readonly keyNamespace: readonly string[];\n readonly keyEncoders: ReadonlyMap<string, RuntimeKeyEncoder>;\n readonly runPromiseExit: RunPromiseExit<unknown> | undefined;\n readonly errors: TreeErrors;\n }\n): Record<string, unknown> => {\n const prefix = freezeKey([\n ...normalizePrefix(options.keyPrefix, options.errors),\n ...options.keyNamespace,\n ]);\n const paths = planPaths(operations, options.errors);\n validateKeyEncoders(operations, options.keyEncoders, options.errors);\n const runner =\n options.runPromiseExit ??\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n (Effect.runPromiseExit as RunPromiseExit<unknown>);\n return createTree(prefix, paths, options.keyEncoders, runner);\n};\n","import { Function, Predicate, Schema, SchemaAST } from \"effect\";\n\nexport interface SchemaKeyEncoding {\n readonly requiresEncoder: boolean;\n readonly cacheable: boolean;\n // oxlint-disable-next-line anti-slop/no-unknown-parameters, anti-slop/no-unknown-returns\n readonly encode: (input: unknown) => unknown;\n}\n\nconst safeAsts = new WeakSet();\nconst encodings = new WeakMap<Schema.Top, SchemaKeyEncoding>();\ntype SchemaKeyAnalysis = \"Safe\" | \"RequiresEncoder\" | \"Retry\";\n\nconst inspectKeyEncoding = (\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n value: unknown,\n seen: Set<object>\n): SchemaKeyAnalysis => {\n if (\n !Predicate.isObjectOrArray(value) ||\n seen.has(value) ||\n safeAsts.has(value)\n ) {\n return \"Safe\";\n }\n seen.add(value);\n\n if (Predicate.hasProperty(value, \"_tag\") && value._tag === \"Middleware\") {\n return !Predicate.hasProperty(value, \"encode\") ||\n value.encode !== Function.identity\n ? \"RequiresEncoder\"\n : \"Safe\";\n }\n\n if (SchemaAST.isAST(value)) {\n const representation = value.annotations?.[\"representation\"];\n if (\n Predicate.hasProperty(representation, \"id\") &&\n representation.id === \"effect/schema/Redacted\"\n ) {\n return \"RequiresEncoder\";\n }\n if (SchemaAST.isSuspend(value)) {\n try {\n const analysis = inspectKeyEncoding(value.thunk(), seen);\n if (analysis !== \"Safe\") {\n return analysis;\n }\n } catch {\n return \"Retry\";\n }\n }\n }\n\n for (const child of Object.values(value)) {\n const analysis = inspectKeyEncoding(child, seen);\n if (analysis !== \"Safe\") {\n return analysis;\n }\n }\n return \"Safe\";\n};\n\nexport const createSchemaKeyEncoding = (\n schema: Schema.Top\n): SchemaKeyEncoding => {\n const cached = encodings.get(schema);\n if (cached !== undefined) {\n return cached;\n }\n const seen = new Set<object>();\n const analysis = inspectKeyEncoding(schema.ast, seen);\n let defaultEncode: SchemaKeyEncoding[\"encode\"] | undefined;\n\n const encoding: SchemaKeyEncoding = {\n requiresEncoder: analysis !== \"Safe\",\n cacheable: analysis !== \"Retry\",\n encode: (input) => {\n if (defaultEncode === undefined) {\n const encodingSchema =\n // oxlint-disable-next-line anti-slop/no-chained-type-assertions, anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n schema as unknown as Schema.ConstraintEncoder<unknown>;\n defaultEncode = Schema.encodeUnknownSync(encodingSchema);\n }\n return defaultEncode(input);\n },\n };\n if (analysis === \"Safe\") {\n for (const node of seen) {\n if (SchemaAST.isAST(node)) {\n safeAsts.add(node);\n }\n }\n }\n if (encoding.cacheable) {\n encodings.set(schema, encoding);\n }\n return encoding;\n};\n","import type { Cause } from \"effect\";\n\n/** Stable codes for invalid RPC utility configuration. */\nexport type EffectRpcQueryConfigErrorCode =\n | \"InvalidMaxChunks\"\n | \"InvalidRefetchMode\"\n | \"InvalidKeyPrefix\"\n | \"InvalidRpcPath\"\n | \"RpcPathCollision\"\n | \"MissingKeyEncoder\"\n | \"UnknownKeyEncoder\"\n | \"UnsupportedQueryHash\";\n\n/** Stable codes for synchronous query-key preparation failures. */\nexport type EffectRpcQueryKeyErrorCode =\n | \"PayloadConstructionFailed\"\n | \"PayloadEncodingFailed\"\n | \"KeyEncoderFailed\"\n | \"InvalidKeyValue\";\n\n/** The TanStack operation that executed an RPC. */\nexport type RpcOperation =\n | \"infinite\"\n | \"live\"\n | \"mutation\"\n | \"query\"\n | \"streamed\";\n\n/** Identifies the failed configuration entry and retains any underlying failure. */\nexport interface EffectRpcQueryConfigErrorOptions {\n /** The underlying failure, when one exists. */\n readonly cause?: unknown;\n\n /** The existing projected path associated with a collision. */\n readonly path?: string;\n\n /** The RPC or encoder tag associated with the invalid configuration. */\n readonly rpcTag?: string;\n}\n\n/**\n * Wraps a failed RPC Exit for TanStack while preserving its complete Effect Cause.\n *\n * Runner rejections pass through unchanged; this class wraps failed Exits.\n */\nexport class EffectRpcQueryError<E> extends Error {\n /** Identifies this error without relying on `instanceof`. */\n readonly _tag = \"EffectRpcQueryError\";\n\n /** The literal tag of the RPC that failed. */\n readonly rpcTag: string;\n\n /** The operation that ran the RPC. */\n readonly operation: RpcOperation;\n\n /** The original Cause returned by the Effect runner. */\n override readonly cause: Cause.Cause<E>;\n\n constructor(rpcTag: string, operation: RpcOperation, cause: Cause.Cause<E>) {\n super(`RPC ${rpcTag} ${operation} failed`, { cause });\n this.name = \"EffectRpcQueryError\";\n this.rpcTag = rpcTag;\n this.operation = operation;\n this.cause = cause;\n }\n}\n\n/** Reports a live RPC stream that completed before emitting its first value. */\nexport class EffectRpcQueryEmptyStreamError extends Error {\n /** Identifies this error without relying on `instanceof`. */\n readonly _tag = \"EffectRpcQueryEmptyStreamError\";\n\n /** The streaming RPC that completed empty. */\n readonly rpcTag: string;\n\n constructor(rpcTag: string) {\n super(`RPC ${rpcTag} live stream completed without a value`);\n this.name = \"EffectRpcQueryEmptyStreamError\";\n this.rpcTag = rpcTag;\n }\n}\n\n/** Reports invalid factory, builder, or stream cache configuration. */\nexport class EffectRpcQueryConfigError extends Error {\n /** Identifies this error without relying on `instanceof`. */\n readonly _tag = \"EffectRpcQueryConfigError\";\n\n /** A stable, machine-readable description of the failure. */\n readonly code: EffectRpcQueryConfigErrorCode;\n\n /** The underlying failure, when one exists. */\n override readonly cause?: unknown;\n\n /** The existing projected path associated with a collision. */\n readonly path: string | undefined;\n\n /** The RPC or encoder tag associated with the invalid configuration. */\n readonly rpcTag: string | undefined;\n\n constructor(\n code: EffectRpcQueryConfigErrorCode,\n message: string,\n options: EffectRpcQueryConfigErrorOptions = {}\n ) {\n super(\n message,\n options.cause === undefined ? undefined : { cause: options.cause }\n );\n this.name = \"EffectRpcQueryConfigError\";\n this.code = code;\n this.cause = options.cause;\n this.path = options.path;\n this.rpcTag = options.rpcTag;\n }\n}\n\n/** Reports synchronous payload construction, encoding, or canonicalization failures. */\nexport class EffectRpcQueryKeyError extends Error {\n /** Identifies this error without relying on `instanceof`. */\n readonly _tag = \"EffectRpcQueryKeyError\";\n\n /** A stable, machine-readable description of the failure. */\n readonly code: EffectRpcQueryKeyErrorCode;\n\n /** The RPC whose query key could not be prepared. */\n readonly rpcTag: string;\n\n /** The underlying failure, when one exists. */\n override readonly cause?: unknown;\n\n constructor(\n code: EffectRpcQueryKeyErrorCode,\n rpcTag: string,\n message: string,\n cause?: unknown\n ) {\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"EffectRpcQueryKeyError\";\n this.code = code;\n this.rpcTag = rpcTag;\n this.cause = cause;\n }\n}\n\n/** Returns whether a value is an RPC execution error from this JavaScript realm. */\nexport const isEffectRpcQueryError = (\n value: unknown\n): value is EffectRpcQueryError<unknown> =>\n value instanceof EffectRpcQueryError;\n","import { hashKey } from \"@tanstack/query-core\";\nimport type {\n Query,\n QueryCache,\n QueryFunctionContext,\n QueryKey,\n} from \"@tanstack/query-core\";\n\ntype HashFunction = ((key: QueryKey) => string) | undefined;\n\ninterface IndexedQuery {\n readonly query: Query;\n readonly order: number;\n readonly hash: HashFunction;\n}\n\ninterface HashIndex {\n readonly queries: Map<string, IndexedQuery>;\n readonly groups: Map<HashFunction, Map<string, IndexedQuery>>;\n}\n\nconst indexes = new WeakMap<QueryCache, HashIndex>();\n\nconst cacheIndex = (cache: QueryCache): HashIndex => {\n const existing = indexes.get(cache);\n if (existing !== undefined) {\n return existing;\n }\n const index: HashIndex = { queries: new Map(), groups: new Map() };\n let nextOrder = 0;\n const remove = (queryHash: string) => {\n const previous = index.queries.get(queryHash);\n if (previous === undefined) {\n return;\n }\n const group = index.groups.get(previous.hash);\n group?.delete(queryHash);\n if (group?.size === 0) {\n index.groups.delete(previous.hash);\n }\n index.queries.delete(queryHash);\n };\n const update = (query: Query) => {\n const previous = index.queries.get(query.queryHash);\n const hash = query.options.queryKeyHashFn;\n if (previous?.query === query && previous.hash === hash) {\n return;\n }\n remove(query.queryHash);\n const entry = {\n query,\n hash,\n order: previous?.query === query ? previous.order : nextOrder,\n };\n if (previous?.query !== query) {\n nextOrder += 1;\n }\n index.queries.set(query.queryHash, entry);\n let group = index.groups.get(hash);\n if (group === undefined) {\n group = new Map();\n index.groups.set(hash, group);\n }\n group.set(query.queryHash, entry);\n };\n for (const query of cache.getAll()) {\n update(query);\n }\n const unsubscribe = cache.subscribe((event) => {\n const query = cache.get(event.query.queryHash);\n if (query === undefined) {\n remove(event.query.queryHash);\n } else {\n update(query);\n }\n if (index.queries.size === 0) {\n unsubscribe();\n indexes.delete(cache);\n }\n });\n indexes.set(cache, index);\n return index;\n};\n\nexport const validateStreamHash = (\n { client, queryKey }: QueryFunctionContext,\n unsupportedHash: () => Error\n) => {\n const { queryHash, queryKeyHashFn } = client.defaultQueryOptions({\n queryKey,\n });\n if (queryHash !== (queryKeyHashFn ?? hashKey)(queryKey)) {\n throw unsupportedHash();\n }\n const cache = client.getQueryCache();\n const index = cacheIndex(cache);\n const current = cache.get(queryHash);\n const currentOrder =\n current === undefined\n ? Infinity\n : (index.queries.get(current.queryHash)?.order ?? Infinity);\n let canonical: string | undefined;\n for (const [hash, queries] of index.groups) {\n if (hash === queryKeyHashFn) {\n continue;\n }\n let candidate: IndexedQuery | undefined;\n try {\n candidate = queries.get((hash ?? hashKey)(queryKey));\n } catch (error) {\n for (const entry of queries.values()) {\n if (entry.order < currentOrder) {\n throw error;\n }\n }\n continue;\n }\n if (candidate === undefined || candidate.query === current) {\n continue;\n }\n if (candidate.order < currentOrder) {\n throw unsupportedHash();\n }\n try {\n canonical ??= hashKey(queryKey);\n if (hashKey(candidate.query.queryKey) !== canonical) {\n continue;\n }\n } catch {\n continue;\n }\n throw unsupportedHash();\n }\n return current;\n};\n","type PullResult<A> =\n | { readonly kind: \"value\"; readonly result: IteratorResult<A> }\n | { readonly kind: \"error\"; readonly error: unknown };\n\nexport const streamPublicationBatches =\n async function* streamPublicationBatches<A>(\n source: AsyncIterable<A>,\n batchSize: number,\n signal: AbortSignal,\n maxWaitMs?: number\n ): AsyncIterable<readonly A[]> {\n const iterator = source[Symbol.asyncIterator]();\n let first = true;\n let pending: A[] = [];\n let pull: Promise<PullResult<A>> | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let deadline: Promise<\"deadline\"> | undefined;\n let closing: Promise<void> | undefined;\n const close = async () => {\n closing ??= (async () => {\n await iterator.return?.();\n })();\n await closing;\n };\n const onAbort = () => {\n // The finally block awaits and propagates cleanup failures.\n // oxlint-disable-next-line promise/prefer-await-to-then\n void close().catch(() => {\n /* Awaited again in finally, which propagates the failure. */\n });\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n const clearDeadline = () => {\n clearTimeout(timer);\n timer = undefined;\n deadline = undefined;\n };\n const pullNext = async (): Promise<PullResult<A>> => {\n try {\n return { kind: \"value\", result: await iterator.next() };\n } catch (error) {\n return { kind: \"error\", error };\n }\n };\n const startDeadline = (milliseconds: number) => {\n // oxlint-disable-next-line promise/avoid-new\n deadline = new Promise((resolve) => {\n timer = setTimeout(() => {\n resolve(\"deadline\");\n }, milliseconds);\n });\n };\n try {\n while (!signal.aborted) {\n pull ??= pullNext();\n // Pull sequentially to preserve event order and bound in-flight work.\n // oxlint-disable-next-line eslint/no-await-in-loop\n const result = await (deadline === undefined\n ? pull\n : Promise.race([pull, deadline]));\n if (result !== \"deadline\" && result.kind === \"error\") {\n throw result.error;\n }\n if (signal.aborted) {\n return;\n }\n if (result === \"deadline\") {\n const batch = pending;\n pending = [];\n clearDeadline();\n yield batch;\n continue;\n }\n pull = undefined;\n if (result.result.done === true) {\n break;\n }\n pending.push(result.result.value);\n if (first || pending.length === batchSize) {\n first = false;\n const batch = pending;\n pending = [];\n clearDeadline();\n yield batch;\n } else if (deadline === undefined && maxWaitMs !== undefined) {\n startDeadline(maxWaitMs);\n }\n }\n } catch (error) {\n clearDeadline();\n if (pending.length > 0 && !signal.aborted) {\n yield pending;\n pending = [];\n }\n throw error;\n } finally {\n clearDeadline();\n signal.removeEventListener(\"abort\", onAbort);\n await close();\n // A deadline can win while cancellation's finalizer failure is still in the pull.\n const remaining = await pull;\n if (remaining?.kind === \"error\") {\n // Preserve pull failures even when cancellation or consumer return ended the generator.\n // oxlint-disable-next-line eslint/no-unsafe-finally\n throw remaining.error;\n }\n }\n if (pending.length > 0 && !signal.aborted) {\n yield pending;\n }\n };\n","import { experimental_streamedQuery } from \"@tanstack/query-core\";\nimport type { QueryFunctionContext } from \"@tanstack/query-core\";\nimport {\n Cause,\n Effect,\n Exit,\n Predicate,\n Pull,\n Result,\n Scope,\n Stream,\n} from \"effect\";\n\nimport { validateStreamHash } from \"./stream-hash-index\";\nimport { streamPublicationBatches } from \"./stream-publication\";\nimport type { RunPromiseExit, StreamRefetchMode } from \"./types\";\n\nexport type StreamQueryPolicy =\n | {\n readonly maxChunks: number | undefined;\n readonly _tag: \"Accumulated\";\n readonly refetchMode: StreamRefetchMode;\n readonly publicationBatchSize: number;\n readonly publicationMaxWaitMs: number | undefined;\n }\n | { readonly _tag: \"Live\" };\n\n// oxlint-disable-next-line anti-slop/no-unknown-parameters\nconst validatePublicationDeadline: (\n value: unknown\n) => asserts value is number | undefined = (publicationMaxWaitMs) => {\n if (\n publicationMaxWaitMs !== undefined &&\n (!Predicate.isNumber(publicationMaxWaitMs) ||\n !Number.isSafeInteger(publicationMaxWaitMs) ||\n publicationMaxWaitMs <= 0 ||\n publicationMaxWaitMs > 2_147_483_647)\n ) {\n throw new RangeError(\n \"publicationMaxWaitMs must be an integer from 1 to 2147483647\"\n );\n }\n};\n\nexport const prepareStreamPolicy = (\n // oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type\n options: Record<string, unknown>,\n operation: \"live\" | \"streamed\",\n invalid: (\n code: \"InvalidMaxChunks\" | \"InvalidRefetchMode\",\n message: string\n ) => Error\n) => {\n let policy: StreamQueryPolicy;\n if (operation === \"streamed\") {\n const {\n maxChunks,\n refetchMode = \"reset\",\n publicationBatchSize = 1,\n publicationMaxWaitMs,\n } = options;\n if (\n maxChunks !== \"unbounded\" &&\n (!Predicate.isNumber(maxChunks) ||\n !Number.isSafeInteger(maxChunks) ||\n maxChunks <= 0)\n ) {\n throw invalid(\n \"InvalidMaxChunks\",\n \"maxChunks must be a positive safe integer or 'unbounded'\"\n );\n }\n if (\n refetchMode !== \"reset\" &&\n refetchMode !== \"append\" &&\n refetchMode !== \"replace\"\n ) {\n throw invalid(\n \"InvalidRefetchMode\",\n \"refetchMode must be reset, append, or replace\"\n );\n }\n if (\n !Predicate.isNumber(publicationBatchSize) ||\n !Number.isSafeInteger(publicationBatchSize) ||\n publicationBatchSize <= 0\n ) {\n throw new RangeError(\n \"publicationBatchSize must be a positive safe integer\"\n );\n }\n validatePublicationDeadline(publicationMaxWaitMs);\n policy = {\n _tag: \"Accumulated\",\n maxChunks: maxChunks === \"unbounded\" ? undefined : maxChunks,\n refetchMode,\n publicationBatchSize,\n publicationMaxWaitMs,\n };\n } else {\n policy = { _tag: \"Live\" };\n }\n delete options[\"refetchMode\"];\n delete options[\"maxChunks\"];\n delete options[\"publicationBatchSize\"];\n delete options[\"publicationMaxWaitMs\"];\n return {\n policy,\n history:\n policy._tag === \"Live\"\n ? undefined\n : {\n maxChunks: policy.maxChunks ?? null,\n refetchMode: policy.refetchMode,\n ...(policy.publicationBatchSize === 1\n ? undefined\n : { publicationBatchSize: policy.publicationBatchSize }),\n ...(policy.publicationMaxWaitMs === undefined\n ? undefined\n : { publicationMaxWaitMs: policy.publicationMaxWaitMs }),\n },\n };\n};\n\nexport interface MakeStreamQueryOptions {\n readonly policy: StreamQueryPolicy;\n readonly source: Stream.Stream<unknown, unknown, unknown>;\n readonly executionError: (cause: Cause.Cause<unknown>) => Error;\n readonly unsupportedHash: () => Error;\n readonly emptyError?: (() => Error) | undefined;\n readonly runPromiseExit: RunPromiseExit<unknown>;\n}\n\nconst streamQueryIterable = <A>(\n source: AsyncIterable<A>,\n signal: AbortSignal,\n emptyError: (() => Error) | undefined\n): AsyncIterable<A> => ({\n [Symbol.asyncIterator]() {\n const iterator = source[Symbol.asyncIterator]();\n let closePromise: Promise<IteratorResult<A>> | undefined;\n let emitted = false;\n const detach = () => {\n // oxlint-disable-next-line eslint/no-use-before-define\n signal.removeEventListener(\"abort\", onAbort);\n };\n const close = async () => {\n closePromise ??= (async () => {\n try {\n return (\n (await iterator.return?.()) ?? { done: true, value: undefined }\n );\n } finally {\n detach();\n }\n })();\n return await closePromise;\n };\n const onAbort = () => {\n // oxlint-disable-next-line promise/prefer-await-to-then\n void Promise.resolve().then(close).catch(detach);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n return {\n async next() {\n let result: IteratorResult<A>;\n if (signal.aborted) {\n result = await close();\n } else {\n try {\n result = await iterator.next();\n } catch (error) {\n detach();\n throw error;\n }\n }\n if (result.done === true) {\n detach();\n if (!emitted && emptyError !== undefined) {\n throw emptyError();\n }\n }\n emitted = true;\n return result;\n },\n return: close,\n async throw(cause?: unknown) {\n detach();\n if (iterator.throw !== undefined) {\n return await iterator.throw(cause);\n }\n await close();\n throw cause;\n },\n };\n },\n});\n\nexport const makeStreamQuery = ({\n policy,\n source,\n executionError,\n unsupportedHash,\n emptyError,\n runPromiseExit,\n}: MakeStreamQueryOptions) => {\n const validateHash = (context: QueryFunctionContext) =>\n validateStreamHash(context, unsupportedHash);\n const streamFn = async ({ signal }: { readonly signal: AbortSignal }) => {\n const stream = Stream.unwrap(\n Effect.gen(function* consumeStream() {\n const scope = yield* Scope.make();\n yield* Effect.addFinalizer((exit) =>\n Scope.close(scope, exit).pipe(\n Effect.catchCause((cause) => Effect.die(executionError(cause)))\n )\n );\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n const pull = yield* Stream.toPull(source).pipe(Scope.provide(scope));\n return Stream.fromPull(\n Effect.succeed(\n Effect.uninterruptibleMask((restore) =>\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n restore(pull).pipe(\n Effect.onError((cause) =>\n Scope.close(scope, Pull.doneExitFromCause(cause))\n ),\n Effect.catchCause((cause) => {\n const completion = Pull.filterDone(cause);\n if (\n Result.isFailure(completion) &&\n (!signal.aborted ||\n !Cause.hasInterruptsOnly(completion.failure))\n ) {\n return Effect.fail(executionError(completion.failure));\n }\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n return Effect.failCause(cause);\n })\n )\n )\n )\n );\n })\n );\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n const exit = await runPromiseExit(Stream.toAsyncIterableEffect(stream), {\n signal,\n });\n if (Exit.isFailure(exit)) {\n throw executionError(exit.cause);\n }\n return streamQueryIterable(\n exit.value,\n signal,\n policy._tag === \"Live\" ? emptyError : undefined\n );\n };\n\n if (policy._tag === \"Live\") {\n const queryFn = experimental_streamedQuery({\n initialValue: null,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n reducer: (_latest: unknown, value: unknown) =>\n value === undefined ? null : value,\n streamFn,\n });\n return async (context: QueryFunctionContext) => {\n validateHash(context);\n return await queryFn(context);\n };\n }\n\n const { maxChunks, refetchMode, publicationBatchSize, publicationMaxWaitMs } =\n policy;\n return async (context: QueryFunctionContext) => {\n const query = validateHash(context);\n const reset = refetchMode === \"reset\" && query?.isFetched() === true;\n let emitted = false;\n const initialValue: unknown[] = [];\n const queryFn = experimental_streamedQuery({\n initialValue,\n reducer: (values: unknown[], batch: readonly unknown[]) => {\n const history = reset && !emitted ? [] : values;\n emitted = true;\n if (maxChunks === undefined) {\n return [...history, ...batch];\n }\n const start = Math.max(0, history.length + batch.length - maxChunks);\n // oxlint-disable-next-line unicorn/no-new-array\n const next = new Array<unknown>(history.length + batch.length - start);\n for (\n let index = start;\n index < history.length + batch.length;\n index += 1\n ) {\n next[index - start] =\n index < history.length\n ? history[index]\n : batch[index - history.length];\n }\n return next;\n },\n refetchMode,\n streamFn: async (streamContext) =>\n streamPublicationBatches(\n await streamFn(streamContext),\n publicationBatchSize,\n streamContext.signal,\n publicationMaxWaitMs\n ),\n });\n const result = await queryFn(context);\n return reset && !emitted ? [] : result;\n };\n};\n","import { Stream } from \"effect\";\n\nimport type { StreamingOperation } from \"../core/operation\";\nimport { makeStreamQuery, prepareStreamPolicy } from \"../core/streamed-query\";\nimport {\n EffectRpcQueryConfigError,\n EffectRpcQueryEmptyStreamError,\n EffectRpcQueryError,\n} from \"./errors\";\n\nexport interface RpcStreamInvocation {\n readonly tag: string;\n readonly invoke: (\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n input: unknown,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n options: unknown\n ) => Stream.Stream<unknown, unknown, unknown>;\n}\n\nexport const createStreamPreparation =\n (rpc: RpcStreamInvocation): StreamingOperation[\"prepareStream\"] =>\n (options, operation, runPromiseExit, requestOptions) => {\n const { policy, history } = prepareStreamPolicy(\n options,\n operation,\n (code, message) =>\n new EffectRpcQueryConfigError(code, message, { rpcTag: rpc.tag })\n );\n return {\n identity: history === undefined ? [] : [Object.freeze(history)],\n makeQuery: (input) =>\n makeStreamQuery({\n policy,\n source: Stream.suspend(() => rpc.invoke(input, requestOptions)),\n executionError: (cause) =>\n new EffectRpcQueryError(rpc.tag, operation, cause),\n unsupportedHash: () =>\n new EffectRpcQueryConfigError(\n \"UnsupportedQueryHash\",\n \"Stream queries require consistent QueryClient hashing\",\n { rpcTag: rpc.tag }\n ),\n emptyError: () => new EffectRpcQueryEmptyStreamError(rpc.tag),\n runPromiseExit,\n }),\n };\n };\n","import { Predicate, SchemaAST } from \"effect\";\nimport type { Effect, Stream } from \"effect\";\nimport type { RpcClient, RpcGroup } from \"effect/rpc\";\nimport { Rpc, RpcSchema } from \"effect/rpc\";\n\nimport type {\n OperationDescription,\n OperationInput,\n TreeErrors,\n} from \"../core/operation\";\nimport { createSchemaKeyEncoding } from \"../core/schema-key\";\nimport {\n EffectRpcQueryConfigError,\n EffectRpcQueryError,\n EffectRpcQueryKeyError,\n} from \"./errors\";\nimport { createStreamPreparation } from \"./streamed-query\";\n\ntype RpcRequest = Pick<\n Rpc.AnyWithProps,\n \"_tag\" | \"payloadSchema\" | \"successSchema\"\n>;\n\ntype RpcClientInvocation<Result> = (\n tag: string,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n input: unknown,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n options: unknown\n) => Result;\n\nconst rpcInputs = new WeakMap<RpcRequest, OperationInput>();\n\nconst compileRpcInput = (definition: RpcRequest): OperationInput => {\n const { payloadSchema, _tag: rpcTag } = definition;\n if (SchemaAST.isVoid(payloadSchema.ast)) {\n return { _tag: \"Inputless\" };\n }\n const keyEncoding = createSchemaKeyEncoding(payloadSchema);\n\n return {\n _tag: \"Input\",\n requiresEncoder: keyEncoding.requiresEncoder,\n cacheable: keyEncoding.cacheable,\n pageInput: (input) => payloadSchema.make(input),\n invalidKey: (cause) =>\n new EffectRpcQueryKeyError(\n \"InvalidKeyValue\",\n rpcTag,\n `The key payload for RPC ${rpcTag} is not JSON-safe`,\n cause\n ),\n prepare: (input, encoder) => {\n let normalized: unknown;\n try {\n normalized = payloadSchema.make(input);\n } catch (error) {\n throw new EffectRpcQueryKeyError(\n \"PayloadConstructionFailed\",\n rpcTag,\n `Could not construct the payload for RPC ${rpcTag}`,\n error\n );\n }\n let keyValue: unknown;\n try {\n keyValue = encoder\n ? encoder(normalized)\n : keyEncoding.encode(normalized);\n } catch (error) {\n throw new EffectRpcQueryKeyError(\n encoder ? \"KeyEncoderFailed\" : \"PayloadEncodingFailed\",\n rpcTag,\n `Could not encode the key payload for RPC ${rpcTag}`,\n error\n );\n }\n return { input: normalized, keyValue };\n },\n };\n};\n\nconst createRpcInput = (definition: RpcRequest): OperationInput => {\n let input = rpcInputs.get(definition);\n if (input === undefined) {\n input = compileRpcInput(definition);\n if (input._tag === \"Inputless\" || input.cacheable) {\n rpcInputs.set(definition, input);\n }\n }\n return input;\n};\n\n// oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type\nconst takeRpcOptions = (options: Record<string, unknown>) => {\n const { rpcOptions } = options;\n delete options[\"rpcOptions\"];\n return rpcOptions;\n};\n\nconst describeRpc = (\n definition: RpcRequest,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n client: unknown\n): OperationDescription => {\n const rpcTag = definition._tag;\n const identity = {\n id: rpcTag,\n path: rpcTag.split(\".\"),\n input: createRpcInput(definition),\n unsupportedQueryHash: (option: \"queryKeyHashFn\" | \"queryHash\") =>\n new EffectRpcQueryConfigError(\n \"UnsupportedQueryHash\",\n `${option} must be configured through QueryClient defaults`,\n { rpcTag }\n ),\n takeOptions: takeRpcOptions,\n };\n if (!RpcSchema.isStreamSchema(definition.successSchema)) {\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const invoke = client as RpcClientInvocation<\n Effect.Effect<unknown, unknown, unknown>\n >;\n return {\n ...identity,\n kind: \"Unary\",\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n invoke: (input, options) => invoke(rpcTag, input, options),\n executionError: (operation, cause) =>\n new EffectRpcQueryError(rpcTag, operation, cause),\n };\n }\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const invoke = client as RpcClientInvocation<\n Stream.Stream<unknown, unknown, unknown>\n >;\n return {\n ...identity,\n kind: \"Streaming\",\n prepareStream: createStreamPreparation({\n tag: rpcTag,\n invoke: (input, options) => invoke(rpcTag, input, options),\n }),\n };\n};\n\nexport const extractRpcs = <Rpcs extends Rpc.Any, ClientError>(\n group: RpcGroup.Any,\n client: RpcClient.RpcClient.Flat<Rpcs, ClientError>\n): readonly OperationDescription[] => {\n if (\n !Predicate.hasProperty(group, \"requests\") ||\n !Predicate.isMap(group.requests)\n ) {\n throw new TypeError(\"Expected an Effect RPC group with a request map\");\n }\n return Array.from(group.requests.values(), (value) => {\n if (!Rpc.isRpc(value)) {\n throw new TypeError(\"Expected an Effect RPC declaration\");\n }\n return describeRpc(value, client);\n });\n};\n\nexport const rpcTreeErrors: TreeErrors = {\n invalidPrefix: (reason, cause) =>\n new EffectRpcQueryConfigError(\n \"InvalidKeyPrefix\",\n reason === \"Shape\"\n ? \"keyPrefix must be a non-empty readonly tuple of JSON-safe values\"\n : \"keyPrefix must contain only JSON-safe values\",\n { cause }\n ),\n invalidPath: (rpcTag) =>\n new EffectRpcQueryConfigError(\n \"InvalidRpcPath\",\n `RPC tag ${rpcTag} cannot be projected into a utility path`,\n { rpcTag }\n ),\n pathCollision: (rpcTag, segments, relation) => {\n const path = segments.join(\".\");\n return new EffectRpcQueryConfigError(\n \"RpcPathCollision\",\n `RPC tag ${rpcTag} ${relation} utility path ${path}`,\n { path, rpcTag }\n );\n },\n unknownEncoder: (rpcTag) =>\n new EffectRpcQueryConfigError(\n \"UnknownKeyEncoder\",\n `No payload-bearing RPC exists for key encoder ${rpcTag}`,\n { rpcTag }\n ),\n missingEncoder: (rpcTag) =>\n new EffectRpcQueryConfigError(\n \"MissingKeyEncoder\",\n `RPC ${rpcTag} requires a safe custom key encoder`,\n { rpcTag }\n ),\n};\n","import type { RpcGroup } from \"effect/rpc\";\n\nimport type { JsonValue, RunPromiseExit } from \"../core/types\";\nimport { createUtilityTree } from \"../core/utility-tree\";\nimport { extractRpcs, rpcTreeErrors } from \"./operation\";\nimport type { CreateRpcQueryUtilsOptions, RpcQueryUtils } from \"./types\";\n\n/**\n * Derives an eager, frozen TanStack Query utility tree from an Effect RPC group.\n *\n * Dotted RPC tags become nested properties with unary or streaming utility leaves.\n * The caller retains ownership of the ready client's Scope and lifecycle.\n *\n * @throws {@link EffectRpcQueryConfigError} if the prefix, paths, or encoders are invalid.\n */\nexport const createRpcQueryUtils = <\n const Group extends RpcGroup.Any,\n const Prefix extends readonly [JsonValue, ...JsonValue[]],\n ClientError = never,\n>(\n group: Group,\n options: CreateRpcQueryUtilsOptions<Group, Prefix, ClientError>\n): RpcQueryUtils<Group, Prefix, ClientError> => {\n const rpcs = extractRpcs(group, options.client);\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const runPromiseExit = options.runPromiseExit as\n | RunPromiseExit<unknown>\n | undefined;\n const tree = createUtilityTree(rpcs, {\n keyPrefix: options.keyPrefix,\n keyNamespace: [\"rpc\"],\n keyEncoders: new Map(Object.entries(options.keyEncoders ?? {})),\n runPromiseExit,\n errors: rpcTreeErrors,\n });\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n return tree as RpcQueryUtils<Group, Prefix, ClientError>;\n};\n","import type { Cause } from \"effect\";\n\n/** Safe identity shared by HTTP execution and key errors. */\nexport interface HttpApiEndpointIdentity {\n readonly apiId: string;\n readonly groupId: string;\n readonly endpoint: string;\n readonly method: string;\n}\n\nexport type HttpApiOperation =\n | \"query\"\n | \"infinite\"\n | \"mutation\"\n | \"metadata\"\n | \"streamed\"\n | \"live\";\n\n/** Stable codes for invalid HTTP utility configuration. */\nexport type EffectHttpApiQueryConfigErrorCode =\n | \"InvalidKeyPrefix\"\n | \"InvalidEndpointPath\"\n | \"EndpointPathCollision\"\n | \"MissingKeyEncoder\"\n | \"UnknownKeyEncoder\"\n | \"UnsupportedEndpointMetadata\"\n | \"UnsupportedQueryHash\"\n | \"InvalidMaxChunks\"\n | \"InvalidRefetchMode\"\n | \"InvalidMaxEventSize\"\n | \"InvalidSseOptions\";\n\n/** Stable codes for synchronous HTTP key failures. */\nexport type EffectHttpApiQueryKeyErrorCode =\n | \"RequestEncodingFailed\"\n | \"KeyEncoderFailed\"\n | \"InvalidKeyValue\";\n\n/** Preserves the complete failed Exit Cause with declaration-only metadata. */\nexport class EffectHttpApiQueryError<E>\n extends Error\n implements HttpApiEndpointIdentity\n{\n readonly _tag = \"EffectHttpApiQueryError\";\n readonly apiId: string;\n readonly groupId: string;\n readonly endpoint: string;\n readonly method: string;\n readonly operation: HttpApiOperation;\n override readonly cause: Cause.Cause<E>;\n\n constructor(\n identity: HttpApiEndpointIdentity,\n operation: HttpApiOperation,\n cause: Cause.Cause<E>\n ) {\n super(\n `HTTP ${identity.method} ${identity.groupId}/${identity.endpoint} ${operation} failed`,\n {\n cause,\n }\n );\n this.name = \"EffectHttpApiQueryError\";\n this.apiId = identity.apiId;\n this.groupId = identity.groupId;\n this.endpoint = identity.endpoint;\n this.method = identity.method;\n this.operation = operation;\n this.cause = cause;\n }\n}\n\nexport class EffectHttpApiQueryEmptyStreamError\n extends Error\n implements HttpApiEndpointIdentity\n{\n readonly _tag = \"EffectHttpApiQueryEmptyStreamError\";\n readonly apiId: string;\n readonly groupId: string;\n readonly endpoint: string;\n readonly method: string;\n readonly operation = \"live\";\n\n constructor(identity: HttpApiEndpointIdentity) {\n super(\n `HTTP ${identity.method} ${identity.groupId}/${identity.endpoint} live stream completed without a value`\n );\n this.name = \"EffectHttpApiQueryEmptyStreamError\";\n this.apiId = identity.apiId;\n this.groupId = identity.groupId;\n this.endpoint = identity.endpoint;\n this.method = identity.method;\n }\n}\n\n/** Reports invalid factory, builder, or stream cache configuration. */\nexport class EffectHttpApiQueryConfigError extends Error {\n readonly _tag = \"EffectHttpApiQueryConfigError\";\n readonly code: EffectHttpApiQueryConfigErrorCode;\n readonly apiId: string;\n readonly groupId: string | undefined;\n readonly endpoint: string | undefined;\n readonly method: string | undefined;\n readonly path: readonly string[] | undefined;\n override readonly cause?: unknown;\n\n constructor(\n code: EffectHttpApiQueryConfigErrorCode,\n message: string,\n options: {\n readonly apiId: string;\n readonly groupId?: string;\n readonly endpoint?: string;\n readonly method?: string;\n readonly path?: readonly string[];\n readonly cause?: unknown;\n }\n ) {\n super(\n message,\n options.cause === undefined ? undefined : { cause: options.cause }\n );\n this.name = \"EffectHttpApiQueryConfigError\";\n this.code = code;\n this.apiId = options.apiId;\n this.groupId = options.groupId;\n this.endpoint = options.endpoint;\n this.method = options.method;\n this.path = options.path;\n this.cause = options.cause;\n }\n}\n\n/** Reports synchronous request encoding and key canonicalization failures. */\nexport class EffectHttpApiQueryKeyError\n extends Error\n implements HttpApiEndpointIdentity\n{\n readonly _tag = \"EffectHttpApiQueryKeyError\";\n readonly code: EffectHttpApiQueryKeyErrorCode;\n readonly apiId: string;\n readonly groupId: string;\n readonly endpoint: string;\n readonly method: string;\n override readonly cause?: unknown;\n\n constructor(\n code: EffectHttpApiQueryKeyErrorCode,\n identity: HttpApiEndpointIdentity,\n message: string,\n cause?: unknown\n ) {\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"EffectHttpApiQueryKeyError\";\n this.code = code;\n this.apiId = identity.apiId;\n this.groupId = identity.groupId;\n this.endpoint = identity.endpoint;\n this.method = identity.method;\n this.cause = cause;\n }\n}\n\n/** Recognizes HTTP execution errors from this JavaScript realm. */\nexport const isEffectHttpApiQueryError = (\n value: unknown\n): value is EffectHttpApiQueryError<unknown> =>\n value instanceof EffectHttpApiQueryError;\n","import { Predicate, Schema } from \"effect\";\nimport { HttpApiSchema } from \"effect/http-api\";\nimport type { HttpApiEndpoint } from \"effect/http-api\";\n\nimport type { OperationInput } from \"../core/operation\";\nimport { createSchemaKeyEncoding } from \"../core/schema-key\";\nimport {\n EffectHttpApiQueryConfigError,\n EffectHttpApiQueryKeyError,\n} from \"./errors\";\nimport type { HttpApiEndpointIdentity } from \"./errors\";\n\nconst multipartBrands = (schema: Schema.Top): ReadonlySet<string> => {\n const brands = new Set<string>();\n const visited = new WeakSet();\n let current: unknown = schema;\n while (Schema.isSchema(current) && !visited.has(current)) {\n visited.add(current);\n if (\n Predicate.hasProperty(current, \"identifier\") &&\n (current.identifier === HttpApiSchema.MultipartTypeId ||\n current.identifier === HttpApiSchema.MultipartStreamTypeId)\n ) {\n brands.add(current.identifier);\n }\n current = Predicate.hasProperty(current, \"schema\")\n ? current.schema\n : undefined;\n }\n return brands;\n};\n\nexport type HttpRequestDescription =\n | { readonly kind: \"Unary\"; readonly input: OperationInput }\n | { readonly kind: \"Streaming\"; readonly input: OperationInput }\n | { readonly kind: \"Mutation\" };\n\nconst classifyEndpoint = (\n endpoint: HttpApiEndpoint.Top,\n identity: HttpApiEndpointIdentity\n):\n | {\n readonly kind: \"Unary\" | \"Streaming\";\n readonly schemas: readonly Schema.Top[];\n }\n | { readonly kind: \"Mutation\" }\n | undefined => {\n const payloads: Schema.Top[] = [];\n let multipart = false;\n let multipartStream = false;\n for (const { encoding, schemas } of endpoint.payload.values()) {\n for (const schema of schemas) {\n const brands = multipartBrands(schema);\n const buffered = brands.has(HttpApiSchema.MultipartTypeId);\n const streamed = brands.has(HttpApiSchema.MultipartStreamTypeId);\n const expectedBuffered =\n encoding._tag === \"Multipart\" && encoding.mode === \"buffered\";\n const expectedStreamed =\n encoding._tag === \"Multipart\" && encoding.mode === \"stream\";\n const metadataAgrees =\n buffered === expectedBuffered && streamed === expectedStreamed;\n if (!metadataAgrees) {\n throw new EffectHttpApiQueryConfigError(\n \"UnsupportedEndpointMetadata\",\n `HTTP endpoint ${identity.groupId}/${identity.endpoint} has contradictory multipart metadata`,\n identity\n );\n }\n multipart ||= expectedBuffered;\n multipartStream ||= expectedStreamed;\n payloads.push(schema);\n }\n }\n if (multipartStream) {\n return undefined;\n }\n const successes = [...endpoint.success];\n const streams = successes.filter((schema) =>\n Predicate.hasProperty(\n HttpApiSchema.isWithHeaders(schema) ? schema.schema : schema,\n \"~effect/http-api/HttpApiSchema/Stream\"\n )\n );\n if (streams.length > 0) {\n const [success] = successes;\n const body = HttpApiSchema.isWithHeaders(success)\n ? success.schema\n : success;\n if (\n multipart ||\n successes.length !== 1 ||\n !Predicate.hasProperty(body, \"_tag\") ||\n body._tag !== \"StreamSse\"\n ) {\n return undefined;\n }\n return { kind: \"Streaming\", schemas: payloads };\n }\n return multipart\n ? { kind: \"Mutation\" }\n : { kind: \"Unary\", schemas: payloads };\n};\n\n// oxlint-disable-next-line anti-slop/no-unknown-parameters, anti-slop/no-unknown-returns\nconst omitUndefined = (value: unknown, seen = new WeakSet()): unknown => {\n if (!Predicate.isObjectOrArray(value)) {\n return value;\n }\n if (seen.has(value)) {\n throw new TypeError(\"Key values must not contain cycles\");\n }\n seen.add(value);\n let result: unknown = value;\n if (Array.isArray(value)) {\n let copy: unknown[] | undefined;\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.hasOwn(value, index)) {\n throw new TypeError(\"Key values must not contain sparse arrays\");\n }\n const item = value[index];\n const next = omitUndefined(item, seen);\n if (copy !== undefined) {\n copy.push(next);\n } else if (next !== item) {\n copy = Array.from({ length: index }, (_, offset) => value[offset]);\n copy.push(next);\n }\n }\n result = copy ?? value;\n } else if (\n Object.getPrototypeOf(value) === Object.prototype ||\n Object.getPrototypeOf(value) === null\n ) {\n let copy: [string, unknown][] | undefined;\n const entries = Object.entries(value);\n for (const [index, [name, item]] of entries.entries()) {\n if (item === undefined) {\n copy ??= entries.slice(0, index);\n } else {\n const next = omitUndefined(item, seen);\n if (next !== item) {\n copy ??= entries.slice(0, index);\n }\n copy?.push([name, next]);\n }\n }\n result = copy === undefined ? value : Object.fromEntries(copy);\n }\n seen.delete(value);\n return result;\n};\n\n// oxlint-disable-next-line anti-slop/no-unknown-parameters\nconst normalizeRequestKey = (value: unknown) => {\n const request = omitUndefined(value);\n if (!Predicate.isObject(request)) {\n throw new TypeError(\"Encoded HTTP requests must be objects\");\n }\n if (Predicate.isObject(request[\"headers\"])) {\n // oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type, typescript/no-unsafe-assignment\n const headers: Record<string, unknown> = Object.create(null);\n for (const [name, headerValue] of Object.entries(request[\"headers\"])) {\n const lower = name.toLowerCase();\n if (\n Object.hasOwn(headers, lower) &&\n JSON.stringify(headers[lower]) !== JSON.stringify(headerValue)\n ) {\n throw new TypeError(\n \"Encoded header names must not have conflicting values\"\n );\n }\n headers[lower] = headerValue;\n }\n return { ...request, headers };\n }\n return request;\n};\n\nexport const createHttpRequest = (\n endpoint: HttpApiEndpoint.Top,\n identity: HttpApiEndpointIdentity\n): HttpRequestDescription | undefined => {\n const classified = classifyEndpoint(endpoint, identity);\n if (classified === undefined || classified.kind === \"Mutation\") {\n return classified;\n }\n const payloads = classified.schemas;\n const fields: Record<string, Schema.Top> = {};\n if (endpoint.params !== undefined) {\n fields[\"params\"] = endpoint.params;\n }\n if (endpoint.query !== undefined) {\n fields[\"query\"] = endpoint.query;\n }\n if (endpoint.headers !== undefined) {\n fields[\"headers\"] = endpoint.headers;\n }\n if (payloads.length > 0) {\n fields[\"payload\"] = Schema.Union(payloads);\n }\n if (Object.keys(fields).length === 0) {\n return { kind: classified.kind, input: { _tag: \"Inputless\" } };\n }\n const schema = Schema.Struct(fields);\n const keyEncoding = createSchemaKeyEncoding(schema);\n const invalidKey = (cause: unknown) =>\n new EffectHttpApiQueryKeyError(\n \"InvalidKeyValue\",\n identity,\n `The HTTP key for ${identity.groupId}/${identity.endpoint} is not JSON-safe`,\n cause\n );\n return {\n kind: classified.kind,\n input: {\n _tag: \"Input\",\n requiresEncoder: payloads.length > 1 || keyEncoding.requiresEncoder,\n cacheable: keyEncoding.cacheable,\n pageInput: (input) => input,\n invalidKey,\n prepare: (input, encoder) => {\n let keyValue: unknown;\n try {\n keyValue = encoder ? encoder(input) : keyEncoding.encode(input);\n } catch (error) {\n throw new EffectHttpApiQueryKeyError(\n encoder ? \"KeyEncoderFailed\" : \"RequestEncodingFailed\",\n identity,\n `Could not encode the HTTP key for ${identity.groupId}/${identity.endpoint}`,\n error\n );\n }\n try {\n return {\n input,\n keyValue: encoder ? keyValue : normalizeRequestKey(keyValue),\n };\n } catch (error) {\n throw invalidKey(error);\n }\n },\n },\n };\n};\n","import { Effect, Predicate, Stream } from \"effect\";\nimport type { Sse } from \"effect/encoding\";\nimport { HttpApiSchema } from \"effect/http-api\";\n\nimport type { StreamingOperation } from \"../core/operation\";\nimport { makeStreamQuery, prepareStreamPolicy } from \"../core/streamed-query\";\nimport {\n EffectHttpApiQueryConfigError,\n EffectHttpApiQueryEmptyStreamError,\n EffectHttpApiQueryError,\n} from \"./errors\";\nimport type { HttpApiEndpointIdentity } from \"./errors\";\n\nconst decoderOptions = (\n identity: HttpApiEndpointIdentity,\n // oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type\n options: Record<string, unknown>\n): Sse.DecodeOptions & { readonly maxEventSize: number } => {\n const { sseOptions } = options;\n const decoder = Predicate.isObject(sseOptions) ? sseOptions : undefined;\n const maxEventSize = decoder?.[\"maxEventSize\"];\n const dispatchEmptyNamedEvents = decoder?.[\"dispatchEmptyNamedEvents\"];\n const limit = maxEventSize === undefined ? 10 * 1024 * 1024 : maxEventSize;\n if (\n !Predicate.isNumber(limit) ||\n !Number.isSafeInteger(limit) ||\n limit <= 0\n ) {\n throw new EffectHttpApiQueryConfigError(\n \"InvalidMaxEventSize\",\n \"sseOptions.maxEventSize must be a positive safe integer\",\n identity\n );\n }\n if (\n dispatchEmptyNamedEvents !== undefined &&\n !Predicate.isBoolean(dispatchEmptyNamedEvents)\n ) {\n throw new EffectHttpApiQueryConfigError(\n \"InvalidSseOptions\",\n \"sseOptions.dispatchEmptyNamedEvents must be a boolean\",\n identity\n );\n }\n return Object.freeze({\n maxEventSize: limit,\n dispatchEmptyNamedEvents: dispatchEmptyNamedEvents ?? false,\n });\n};\n\nexport const createHttpStreamPreparation =\n (\n identity: HttpApiEndpointIdentity,\n invoke: (\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n input: unknown,\n sseOptions: Sse.DecodeOptions\n ) => Effect.Effect<unknown, unknown, unknown>\n ): StreamingOperation[\"prepareStream\"] =>\n (options, operation, runPromiseExit) => {\n const { policy, history } = prepareStreamPolicy(\n options,\n operation,\n (code, message) =>\n new EffectHttpApiQueryConfigError(code, message, identity)\n );\n const sseOptions = decoderOptions(identity, options);\n delete options[\"sseOptions\"];\n return {\n identity: [\n Object.freeze({\n ...history,\n maxEventSize: sseOptions.maxEventSize,\n ...(sseOptions.dispatchEmptyNamedEvents === true\n ? { dispatchEmptyNamedEvents: true }\n : undefined),\n }),\n ],\n makeQuery: (input) =>\n makeStreamQuery({\n policy,\n source: Stream.unwrap(\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n Effect.suspend(() => invoke(input, sseOptions)).pipe(\n Effect.map((response) => {\n if (\n Predicate.hasProperty(response, \"body\") &&\n Predicate.hasProperty(response, \"headers\") &&\n Stream.isStream(response.body)\n ) {\n return response.body.pipe(\n Stream.map((body) =>\n HttpApiSchema.withHeaders({\n body,\n headers: response.headers,\n })\n )\n );\n }\n if (!Stream.isStream(response)) {\n throw new TypeError(\"HTTP SSE clients must return a Stream\");\n }\n return response;\n })\n )\n ),\n executionError: (cause) =>\n new EffectHttpApiQueryError(identity, operation, cause),\n unsupportedHash: () =>\n new EffectHttpApiQueryConfigError(\n \"UnsupportedQueryHash\",\n \"Stream queries require consistent QueryClient hashing\",\n identity\n ),\n emptyError: () => new EffectHttpApiQueryEmptyStreamError(identity),\n runPromiseExit,\n }),\n };\n };\n","import { Effect, Predicate } from \"effect\";\nimport type { Cause } from \"effect\";\nimport type { Sse } from \"effect/encoding\";\nimport type { HttpClientResponse } from \"effect/http\";\nimport type { HttpApi } from \"effect/http-api\";\n\nimport type {\n MutationOperation,\n StreamingOperation,\n RuntimeKeyEncoder,\n TreeErrors,\n UnaryOperation,\n} from \"../core/operation\";\nimport {\n EffectHttpApiQueryConfigError,\n EffectHttpApiQueryError,\n} from \"./errors\";\nimport type { HttpApiEndpointIdentity } from \"./errors\";\nimport { createHttpRequest } from \"./request\";\nimport type { HttpRequestDescription } from \"./request\";\nimport { createHttpStreamPreparation } from \"./streamed-query\";\n\ntype HttpOperation = (\n | UnaryOperation\n | MutationOperation\n | StreamingOperation\n) & {\n readonly identity: HttpApiEndpointIdentity;\n};\n\ntype RuntimeHttpMethod = <Mode extends \"decoded-only\" | \"decoded-and-response\">(\n // oxlint-disable-next-line anti-slop/no-unsafe-dictionary-type\n request: Record<string, unknown> & { readonly responseMode: Mode }\n) => Effect.Effect<\n Mode extends \"decoded-and-response\"\n ? readonly [unknown, HttpClientResponse.HttpClientResponse]\n : unknown,\n unknown,\n unknown\n>;\n\nexport interface CompiledHttpOperations {\n readonly operations: readonly (\n | UnaryOperation\n | MutationOperation\n | StreamingOperation\n )[];\n readonly errors: TreeErrors;\n readonly keyEncoders: ReadonlyMap<string, RuntimeKeyEncoder>;\n}\n\n// oxlint-disable-next-line anti-slop/no-unknown-parameters\nconst freezeMetadata = (data: unknown) => {\n if (!Predicate.isObject(data)) {\n return data;\n }\n const { headers } = data;\n const snapshot =\n Predicate.isObject(headers) &&\n (!Object.isFrozen(headers) ||\n Object.getPrototypeOf(headers) !== Object.prototype)\n ? Object.freeze({ ...headers })\n : headers;\n return Object.isFrozen(data) && snapshot === headers\n ? data\n : Object.freeze({ ...data, headers: snapshot });\n};\n\ninterface HttpEndpointDescription {\n readonly identity: HttpApiEndpointIdentity;\n readonly topLevel: boolean;\n readonly request: HttpRequestDescription;\n}\n\nconst httpContracts = new WeakMap<\n HttpApi.Top,\n readonly HttpEndpointDescription[]\n>();\n\nconst describeHttpEndpoints = (\n api: HttpApi.Top\n): readonly HttpEndpointDescription[] => {\n const cached = httpContracts.get(api);\n if (cached !== undefined) {\n return cached;\n }\n const descriptions: HttpEndpointDescription[] = [];\n for (const group of Object.values(api.groups)) {\n for (const endpoint of Object.values(group.endpoints)) {\n const identity = {\n apiId: api.identifier,\n groupId: group.identifier,\n endpoint: endpoint.identifier,\n method: endpoint.method,\n };\n const request = createHttpRequest(endpoint, identity);\n if (request === undefined) {\n continue;\n }\n descriptions.push({ identity, topLevel: group.topLevel, request });\n }\n }\n if (\n descriptions.every(\n ({ request }) =>\n request.kind === \"Mutation\" ||\n request.input._tag === \"Inputless\" ||\n request.input.cacheable\n )\n ) {\n httpContracts.set(api, descriptions);\n }\n return descriptions;\n};\n\nconst extractHttpEndpoints = (\n api: HttpApi.Top,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n client: unknown\n): readonly HttpOperation[] => {\n const operations: HttpOperation[] = [];\n for (const { identity, topLevel, request } of describeHttpEndpoints(api)) {\n let target = client;\n if (!topLevel) {\n target = Predicate.hasProperty(client, identity.groupId)\n ? client[identity.groupId]\n : undefined;\n }\n const invoke = <Mode extends \"decoded-only\" | \"decoded-and-response\">(\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n requestInput: unknown,\n responseMode: Mode,\n sseOptions?: Sse.DecodeOptions\n ) => {\n const method = Predicate.hasProperty(target, identity.endpoint)\n ? target[identity.endpoint]\n : undefined;\n if (method === undefined) {\n throw new TypeError(\n `Missing HTTP client endpoint ${identity.endpoint}`\n );\n }\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const call = method as RuntimeHttpMethod;\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n return call.bind(target)({\n ...(Predicate.isObject(requestInput) ? requestInput : undefined),\n responseMode,\n ...(sseOptions === undefined ? undefined : { sseOptions }),\n });\n };\n const common = {\n identity,\n id: JSON.stringify([identity.groupId, identity.endpoint]),\n path: topLevel\n ? [identity.endpoint]\n : [identity.groupId, identity.endpoint],\n unsupportedQueryHash: (option: \"queryKeyHashFn\" | \"queryHash\") =>\n new EffectHttpApiQueryConfigError(\n \"UnsupportedQueryHash\",\n `${option} must be configured through QueryClient defaults`,\n identity\n ),\n takeOptions: () => null,\n };\n if (request.kind === \"Streaming\") {\n operations.push({\n ...common,\n ...request,\n kind: \"Streaming\",\n prepareStream: createHttpStreamPreparation(\n identity,\n (requestInput, sseOptions) =>\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n invoke(requestInput, \"decoded-only\", sseOptions)\n ),\n });\n } else {\n operations.push({\n ...common,\n ...request,\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n invoke: (requestInput) => invoke(requestInput, \"decoded-only\"),\n ...(request.kind === \"Unary\"\n ? {\n metadata: {\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n invoke: (requestInput: unknown) =>\n Effect.map(\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n invoke(requestInput, \"decoded-and-response\"),\n ([data, response]) =>\n freezeMetadata({\n data: data === undefined ? null : data,\n status: response.status,\n headers: response.headers,\n })\n ),\n executionError: (\n operation: \"metadata\",\n cause: Cause.Cause<unknown>\n ) => new EffectHttpApiQueryError(identity, operation, cause),\n finalizeData: freezeMetadata,\n },\n }\n : undefined),\n executionError: (operation, cause) =>\n new EffectHttpApiQueryError(identity, operation, cause),\n });\n }\n }\n return operations;\n};\n\nconst httpTreeErrors = (\n api: HttpApi.Top,\n operations: readonly HttpOperation[]\n): TreeErrors => {\n const identities = new Map(\n operations.map((operation) => [operation.id, operation.identity])\n );\n const identity = (id: string) =>\n identities.get(id) ?? { apiId: api.identifier };\n return {\n invalidPrefix: (reason, cause) =>\n new EffectHttpApiQueryConfigError(\n \"InvalidKeyPrefix\",\n reason === \"Shape\"\n ? \"keyPrefix must be a non-empty readonly tuple of JSON-safe values\"\n : \"keyPrefix must contain only JSON-safe values\",\n { apiId: api.identifier, cause }\n ),\n invalidPath: (id) =>\n new EffectHttpApiQueryConfigError(\n \"InvalidEndpointPath\",\n `HTTP endpoint ${id} cannot be projected into a utility path`,\n identity(id)\n ),\n pathCollision: (id, path, relation) =>\n new EffectHttpApiQueryConfigError(\n \"EndpointPathCollision\",\n `HTTP endpoint ${id} ${relation} utility path ${JSON.stringify(path)}`,\n { ...identity(id), path }\n ),\n unknownEncoder: (id) =>\n new EffectHttpApiQueryConfigError(\n \"UnknownKeyEncoder\",\n `No query-enabled HTTP endpoint exists for key encoder ${id}`,\n identity(id)\n ),\n missingEncoder: (id) =>\n new EffectHttpApiQueryConfigError(\n \"MissingKeyEncoder\",\n `HTTP endpoint ${id} requires a safe custom key encoder`,\n identity(id)\n ),\n };\n};\n\nexport const compileHttpOperations = (\n api: HttpApi.Top,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n client: unknown,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n suppliedEncoders: unknown\n): CompiledHttpOperations => {\n const operations = extractHttpEndpoints(api, client);\n const errors = httpTreeErrors(api, operations);\n const encoderGroups = new Set(\n operations\n .filter(\n (operation) =>\n operation.kind !== \"Mutation\" && operation.input._tag === \"Input\"\n )\n .map((operation) => operation.identity.groupId)\n );\n const keyEncoders = new Map<string, RuntimeKeyEncoder>();\n for (const [groupId, endpoints] of Object.entries(\n Predicate.isObject(suppliedEncoders) ? suppliedEncoders : {}\n )) {\n if (!encoderGroups.has(groupId)) {\n throw errors.unknownEncoder(JSON.stringify([groupId]));\n }\n if (!Predicate.isObject(endpoints)) {\n throw new TypeError(\"HTTP key encoders must be grouped by endpoint\");\n }\n for (const [endpoint, encoder] of Object.entries(endpoints)) {\n keyEncoders.set(\n JSON.stringify([groupId, endpoint]),\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n encoder as RuntimeKeyEncoder\n );\n }\n }\n return { operations, errors, keyEncoders };\n};\n","import { HttpApi } from \"effect/http-api\";\nimport type { HttpApiClient } from \"effect/http-api\";\n\nimport type { JsonValue, RunPromiseExit } from \"../core/types\";\nimport { createUtilityTree } from \"../core/utility-tree\";\nimport { compileHttpOperations } from \"./operation\";\nimport type {\n CreateHttpApiQueryUtilsOptions,\n HttpApiQueryUtils,\n} from \"./types\";\n\nexport const createHttpApiQueryUtils = <\n const Api extends HttpApi.Constraint,\n const Prefix extends readonly [JsonValue, ...JsonValue[]],\n Client extends HttpApiClient.ForApi<Api, unknown, unknown>,\n>(\n api: Api,\n options: CreateHttpApiQueryUtilsOptions<Api, Prefix, Client>\n): HttpApiQueryUtils<Api, Prefix, Client> => {\n if (!HttpApi.isHttpApi(api)) {\n throw new TypeError(\"Expected an Effect HttpApi declaration\");\n }\n const { operations, errors, keyEncoders } = compileHttpOperations(\n api,\n options.client,\n options.keyEncoders\n );\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const runPromiseExit = options.runPromiseExit as\n | RunPromiseExit<unknown>\n | undefined;\n const tree = createUtilityTree(operations, {\n keyPrefix: options.keyPrefix,\n keyNamespace: [\"http\", api.identifier],\n keyEncoders,\n runPromiseExit,\n errors,\n });\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n return tree as HttpApiQueryUtils<Api, Prefix, Client>;\n};\n","import { CancelledError } from \"@tanstack/query-core\";\nimport type {\n DefaultError,\n QueryClient,\n QueryExecuteOptions,\n QueryFunction,\n QueryKey,\n} from \"@tanstack/query-core\";\nimport { Predicate } from \"effect\";\n\nexport interface StreamSnapshotOptions {\n readonly mode?: \"fresh\" | \"cached\";\n readonly signal?: AbortSignal;\n readonly timeoutMs?: number;\n}\n\nconst validateSnapshotControls = (\n options: Pick<QueryExecuteOptions, \"queryHash\" | \"queryKeyHashFn\">,\n timeoutMs: number\n): void => {\n if (\n Object.hasOwn(options, \"queryHash\") ||\n Object.hasOwn(options, \"queryKeyHashFn\")\n ) {\n throw new TypeError(\n \"Stream snapshots inherit hashing from QueryClient defaults\"\n );\n }\n if (\n !Number.isFinite(timeoutMs) ||\n timeoutMs <= 0 ||\n timeoutMs > 2_147_483_647\n ) {\n throw new RangeError(\"timeoutMs must be positive and at most 2147483647\");\n }\n};\n\nexport const fetchStreamSnapshot = async <\n TQueryFnData,\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>(\n queryClient: QueryClient,\n options: QueryExecuteOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryFnData,\n TQueryKey\n > & {\n readonly queryFn: QueryFunction<TQueryFnData, TQueryKey>;\n readonly queryHash?: never;\n readonly queryKeyHashFn?: never;\n },\n { mode = \"fresh\", signal, timeoutMs = 10_000 }: StreamSnapshotOptions = {}\n): Promise<TData> => {\n signal?.throwIfAborted();\n validateSnapshotControls(options, timeoutMs);\n if (!Predicate.isFunction(options.queryFn)) {\n throw new TypeError(\"Stream snapshots require a callable query function\");\n }\n const cache = queryClient.getQueryCache();\n const { queryHash } = queryClient.defaultQueryOptions(options);\n const existing = cache.get(queryHash);\n if (mode === \"cached\" && existing?.state.status === \"success\") {\n return await queryClient.query({\n ...options,\n queryHash,\n staleTime: \"static\",\n });\n }\n if (\n existing !== undefined &&\n (existing.state.fetchStatus !== \"idle\" || existing.getObserversCount() > 0)\n ) {\n throw new Error(\"Stream snapshots require an idle query without observers\");\n }\n let published = false;\n let started = false;\n let executionSignal: AbortSignal | undefined;\n let failed = false;\n let failure: unknown;\n let cleanup = Promise.resolve();\n let cancellation: Promise<void> | undefined;\n const cancel = async () => {\n cancellation ??= queryClient.cancelQueries({\n predicate: (query) => query.queryHash === queryHash,\n });\n await cancellation;\n };\n let ready!: () => void;\n let rejectPublication!: (reason: AbortSignal[\"reason\"]) => void;\n // oxlint-disable-next-line promise/avoid-new\n const publication = new Promise<void>((resolve, reject) => {\n ready = resolve;\n rejectPublication = reject;\n });\n const stop = cache.subscribe((event) => {\n if (\n event.query.queryHash === queryHash &&\n event.type === \"updated\" &&\n event.action.type === \"success\" &&\n event.action.manual === true\n ) {\n published = true;\n ready();\n void cancel();\n }\n });\n const onAbort = () => {\n rejectPublication(signal?.reason);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n const timer = setTimeout(() => {\n rejectPublication(\n new DOMException(\"Stream snapshot timed out\", \"TimeoutError\")\n );\n }, timeoutMs);\n let result: TData;\n try {\n void queryClient.invalidateQueries({\n predicate: (query) => query.queryHash === queryHash,\n refetchType: \"none\",\n });\n signal?.throwIfAborted();\n const fetching = queryClient.query({\n ...options,\n queryHash,\n staleTime: 0,\n initialDataUpdatedAt: 0,\n queryFn: async (context) => {\n started = true;\n failed = false;\n failure = undefined;\n executionSignal = context.signal;\n let finished!: () => void;\n // oxlint-disable-next-line promise/avoid-new\n cleanup = new Promise<void>((resolve) => {\n finished = resolve;\n });\n try {\n return await options.queryFn(context);\n } catch (error) {\n failed = true;\n failure = error;\n throw error;\n } finally {\n finished();\n }\n },\n });\n await Promise.race([publication, fetching]);\n result = await fetching;\n if (!published && (!started || executionSignal?.aborted === true)) {\n throw new CancelledError({ revert: true });\n }\n } finally {\n stop();\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n await cancel();\n await cleanup;\n }\n if (failed) {\n throw failure;\n }\n return result;\n};\n","import type { QueryKey } from \"@tanstack/query-core\";\n\nimport type { SupportedQueryView } from \"./inference\";\n\n/** Selects every input and stream policy for one leaf's query view. */\nexport const viewPrefix = <\n const Key extends QueryKey,\n Leaf extends { readonly key: () => Key },\n View extends SupportedQueryView<Leaf>,\n>(\n leaf: Leaf & { readonly key: () => Key },\n view: View\n): readonly [...Key, View] => Object.freeze([...leaf.key(), view]);\n","import type { QueryFilters, QueryKey } from \"@tanstack/query-core\";\n\nimport { canonicalize } from \"./canonical-key\";\nimport type { InferInput, SupportedQueryView } from \"./inference\";\nimport type { JsonValue } from \"./types\";\nimport { viewPrefix } from \"./view-prefix\";\n\n/** Native query filters with identity supplied by the generated leaf and view. */\nexport type QueryFilterOptions = Omit<QueryFilters, \"queryKey\"> & {\n readonly queryKey?: never;\n};\n\n/** A typed application projection into a partial canonical key payload. */\nexport type QueryFilterEncoder<Input> = (input: Input) => JsonValue;\n\n/** Builds native filters for every input of one supported query view. */\nexport function createQueryFilter<\n Leaf extends { readonly key: () => QueryKey },\n>(\n leaf: Leaf,\n view: SupportedQueryView<NoInfer<Leaf>>\n): (\n options?: QueryFilterOptions\n) => QueryFilters & { readonly queryKey: QueryKey };\n/** Builds partial-input filters without running full payload constructors or defaults. */\nexport function createQueryFilter<\n Leaf extends { readonly key: () => QueryKey },\n Input = InferInput<Leaf>,\n>(\n leaf: Leaf,\n view: SupportedQueryView<NoInfer<Leaf>>,\n encode: QueryFilterEncoder<Input>\n): (\n input: Input,\n options?: QueryFilterOptions\n) => QueryFilters & { readonly queryKey: QueryKey };\nexport function createQueryFilter<\n Leaf extends { readonly key: () => QueryKey },\n Input = InferInput<Leaf>,\n>(\n leaf: Leaf,\n view: SupportedQueryView<Leaf>,\n encode?: QueryFilterEncoder<Input>\n) {\n const prefix = viewPrefix(leaf, view);\n if (encode === undefined) {\n return (\n options?: QueryFilterOptions\n ): QueryFilters & { readonly queryKey: QueryKey } => ({\n ...options,\n queryKey: prefix,\n });\n }\n return (\n input: Input,\n options?: QueryFilterOptions\n ): QueryFilters & { readonly queryKey: QueryKey } => ({\n ...options,\n queryKey: Object.freeze([...prefix, canonicalize(encode(input))]),\n });\n}\n","import { hashKey } from \"@tanstack/query-core\";\nimport type { DehydratedState, QueryKey } from \"@tanstack/query-core\";\nimport { Array as EffectArray, Effect, Order, Schema } from \"effect\";\n\nimport type { InferQueryData, SupportedQueryView } from \"./inference\";\nimport { viewPrefix } from \"./view-prefix\";\n\n/** One generated leaf/view's cache-data codec, before observer selection. */\nexport interface HydrationCodec<\n Data,\n Encoded,\n DecodingServices = never,\n EncodingServices = never,\n> {\n readonly prefix: QueryKey;\n readonly schema: Schema.Codec<\n Data,\n Encoded,\n DecodingServices,\n EncodingServices\n >;\n readonly matches: (key: QueryKey) => boolean;\n}\n\nconst makeCodec = <S extends Schema.Codec<unknown, unknown, unknown, unknown>>(\n prefix: QueryKey,\n schema: S\n) => {\n const hash = hashKey(prefix);\n return Object.freeze({\n prefix,\n schema,\n matches: (key: QueryKey) =>\n key.length >= prefix.length &&\n hashKey(key.slice(0, prefix.length)) === hash,\n });\n};\n\n/** Registers a codec whose decoded type matches the generated cached representation. */\nexport const queryViewCodec = <\n L extends { readonly key: () => QueryKey },\n V extends Exclude<SupportedQueryView<L>, \"infinite\">,\n S extends Schema.Codec<unknown, unknown, unknown, unknown>,\n>(\n leaf: L,\n view: V,\n schema: S &\n ([S[\"Type\"]] extends [InferQueryData<NoInfer<L>, NoInfer<V>>]\n ? [InferQueryData<NoInfer<L>, NoInfer<V>>] extends [S[\"Type\"]]\n ? unknown\n : never\n : never)\n): HydrationCodec<\n S[\"Type\"],\n S[\"Encoded\"],\n S[\"DecodingServices\"],\n S[\"EncodingServices\"]\n> => makeCodec(viewPrefix(leaf, view), schema);\n\n/** Infinite data needs an explicit page-parameter codec in addition to its page codec. */\nexport const infiniteQueryCodec = <\n L extends { readonly key: () => QueryKey },\n Page extends Schema.Codec<unknown, unknown, unknown, unknown>,\n PageParam extends Schema.Codec<unknown, unknown, unknown, unknown>,\n>(\n leaf: L & (\"infinite\" extends SupportedQueryView<L> ? unknown : never),\n codecs: {\n readonly page: Page &\n ([Page[\"Type\"]] extends [\n InferQueryData<NoInfer<L>, Extract<\"query\", SupportedQueryView<L>>>,\n ]\n ? [\n InferQueryData<NoInfer<L>, Extract<\"query\", SupportedQueryView<L>>>,\n ] extends [Page[\"Type\"]]\n ? unknown\n : never\n : never);\n readonly pageParam: PageParam;\n }\n) =>\n makeCodec(\n Object.freeze([...leaf.key(), \"infinite\"]),\n Schema.Struct({\n pages: Schema.Array(codecs.page),\n pageParams: Schema.Array(codecs.pageParam),\n })\n );\n\n/** Native synchronous callbacks for a single service-free leaf/view snapshot. */\nexport const hydrationCallbacks = <Data, Encoded>(\n codec: HydrationCodec<Data, Encoded>\n) => ({\n serializeData: Schema.encodeUnknownSync(codec.schema),\n deserializeData: Schema.decodeUnknownSync(codec.schema),\n});\n\nexport class HydrationCodecError extends Error {\n readonly _tag = \"HydrationCodecError\";\n readonly code: \"DuplicateCodec\" | \"UnknownQuery\" | \"UnsettledQuery\";\n\n constructor(code: HydrationCodecError[\"code\"]) {\n super(\n {\n DuplicateCodec:\n \"A hydration codec is already registered for this leaf and view\",\n UnknownQuery: \"No hydration codec is registered for this query\",\n UnsettledQuery:\n \"Hydration codecs require successful queries without pending promises\",\n }[code]\n );\n this.name = \"HydrationCodecError\";\n this.code = code;\n }\n}\n\ntype Queries = DehydratedState[\"queries\"];\n\n/** Prepares all query data before the application calls native hydrate or serializes a snapshot. */\nexport interface HydrationRegistry<\n DecodingServices = never,\n EncodingServices = never,\n> {\n readonly matches: (key: QueryKey) => boolean;\n readonly encodeQueries: (\n queries: DehydratedState[\"queries\"]\n ) => Effect.Effect<\n DehydratedState[\"queries\"],\n Schema.SchemaError | HydrationCodecError,\n EncodingServices\n >;\n readonly decodeQueries: (\n queries: DehydratedState[\"queries\"]\n ) => Effect.Effect<\n DehydratedState[\"queries\"],\n Schema.SchemaError | HydrationCodecError,\n DecodingServices\n >;\n}\n\n/** Indexes explicit leaf/view codecs without owning a QueryClient, runner, or serialization. */\nexport const createHydrationRegistry = <\n const Entries extends readonly HydrationCodec<\n unknown,\n unknown,\n unknown,\n unknown\n >[],\n>(\n entries: Entries\n): HydrationRegistry<\n Entries[number][\"schema\"][\"DecodingServices\"],\n Entries[number][\"schema\"][\"EncodingServices\"]\n> => {\n type Entry = Entries[number];\n const byLength = new Map<number, Map<string, Entry>>();\n const codecs: readonly Entry[] = entries;\n for (const codec of codecs) {\n const lengthCodecs =\n byLength.get(codec.prefix.length) ?? new Map<string, Entry>();\n const hash = hashKey(codec.prefix);\n if (lengthCodecs.has(hash)) {\n throw new HydrationCodecError(\"DuplicateCodec\");\n }\n lengthCodecs.set(hash, codec);\n byLength.set(codec.prefix.length, lengthCodecs);\n }\n const lengths = EffectArray.sort(byLength.keys(), Order.flip(Order.Number));\n const codecFor = (key: QueryKey): Entry | undefined => {\n for (const length of lengths) {\n if (key.length >= length) {\n const codec = byLength.get(length)?.get(hashKey(key.slice(0, length)));\n if (codec !== undefined) {\n return codec;\n }\n }\n }\n return undefined;\n };\n const transform = <R>(\n queries: DehydratedState[\"queries\"],\n convert: (\n codec: Entry,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n data: unknown\n ) => Effect.Effect<unknown, Schema.SchemaError, R>\n ) =>\n Effect.forEach(\n Effect.fnUntraced(function* transformQuery(query: Queries[number]) {\n if (query.state.status !== \"success\" || query.promise !== undefined) {\n return yield* Effect.fail(new HydrationCodecError(\"UnsettledQuery\"));\n }\n const codec = codecFor(query.queryKey);\n if (codec === undefined) {\n return yield* Effect.fail(new HydrationCodecError(\"UnknownQuery\"));\n }\n const data = yield* convert(codec, query.state.data);\n return { ...query, state: { ...query.state, data } };\n })\n )(queries);\n return {\n matches: (key) => codecFor(key) !== undefined,\n encodeQueries: (queries) =>\n transform(queries, (codec, data) =>\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n Schema.encodeUnknownEffect(codec.schema)(data)\n ),\n decodeQueries: (queries) =>\n transform(queries, (codec, data) =>\n // oxlint-disable-next-line effecttsgo/any-unknown-in-error-context\n Schema.decodeUnknownEffect(codec.schema)(data)\n ),\n };\n};\n","import {\n Cause,\n Duration,\n Effect,\n Exit,\n Option,\n Pull,\n Result,\n Scope,\n Stream,\n} from \"effect\";\n\n/** Local delivery state; it does not acknowledge server-side persistence or cleanup. */\nexport type StreamConnectionState<E> =\n | {\n readonly status: \"connecting\" | \"connected\";\n readonly cursor: number;\n readonly attempt: number;\n }\n | {\n readonly status: \"backing-off\";\n readonly cursor: number;\n readonly attempt: number;\n readonly delay: Duration.Duration;\n readonly cause: Cause.Cause<E>;\n }\n | {\n readonly status: \"refreshing\";\n readonly cursor: number;\n readonly attempt: number;\n readonly cause: Cause.Cause<E>;\n }\n | { readonly status: \"completed\" | \"stopped\"; readonly cursor: number }\n | {\n readonly status: \"failed\";\n readonly cursor: number;\n readonly cause: Cause.Cause<E>;\n };\n\nexport interface RecoverStreamOptions<A, E, R = never> {\n /** Acquires an application-owned native stream using the last accepted cursor. */\n readonly connect: (cursor: number) => Stream.Stream<A, E, R>;\n /** One nonnegative safe-integer sequence per owner; older cursors are discarded. */\n readonly cursor: (value: A) => number;\n readonly initialCursor?: number | undefined;\n /** One-based retry count across this consumption. Undefined stops with the original Cause. */\n readonly retryDelay: (\n cause: Cause.Cause<E>,\n attempt: number\n ) => Duration.Input | undefined;\n readonly isReplayExpired?: ((cause: Cause.Cause<E>) => boolean) | undefined;\n /** Refreshes authoritative reads and returns their replay cursor before reconnecting. */\n readonly onReplayExpired?:\n | ((cause: Cause.Cause<E>) => Effect.Effect<number, E, R>)\n | undefined;\n /** Runs before accepting a gap; applications can refresh affected reads here. */\n readonly onGap?:\n | ((previous: number, next: number) => Effect.Effect<void, E, R>)\n | undefined;\n readonly onState?:\n | ((state: StreamConnectionState<E>) => Effect.Effect<void, never, R>)\n | undefined;\n}\n\nconst checkedCursor = (cursor: number): number => {\n if (!Number.isSafeInteger(cursor) || cursor < 0) {\n throw new RangeError(\n \"Stream recovery cursors must be nonnegative safe integers\"\n );\n }\n return cursor;\n};\n\n/** Restarts a decoded stream without putting attempt-specific resume state in a query key. */\nexport const recoverStream = <A, E, R = never>(\n options: RecoverStreamOptions<A, E, R>\n): Stream.Stream<A, E, R> =>\n Stream.suspend(() => {\n let cursor = checkedCursor(options.initialCursor ?? 0);\n const state = (value: StreamConnectionState<E>) =>\n options.onState?.(value) ?? Effect.void;\n const connect = (attempt: number): Stream.Stream<A, E, R> =>\n Stream.unwrap(\n Effect.gen(function* connectStream() {\n yield* state({ status: \"connecting\", cursor, attempt });\n const scope = yield* Scope.make();\n yield* Effect.addFinalizer((exit) => Scope.close(scope, exit));\n const source = Stream.suspend(() => options.connect(cursor)).pipe(\n Stream.rechunk(1),\n Stream.mapEffect(\n Effect.fnUntraced(function* trackCursor(value: A) {\n const next = checkedCursor(options.cursor(value));\n if (next <= cursor) {\n return Option.none<A>();\n }\n if (next > cursor + 1) {\n yield* options.onGap?.(cursor, next) ?? Effect.void;\n }\n cursor = next;\n yield* state({ status: \"connected\", cursor, attempt });\n return Option.some(value);\n })\n ),\n Stream.filter(Option.isSome),\n Stream.map((value) => value.value)\n );\n const pull = yield* Stream.toPull(source).pipe(Scope.provide(scope));\n return Stream.fromPull(\n Effect.succeed(\n Effect.uninterruptibleMask((restore) =>\n restore(pull).pipe(\n Effect.onError((cause) =>\n Scope.close(scope, Pull.doneExitFromCause(cause))\n ),\n Effect.catchCause((cause) => {\n const completion = Pull.filterDone(cause);\n return Effect.failCause(\n Result.isFailure(completion) ? completion.failure : cause\n );\n })\n )\n )\n )\n );\n })\n ).pipe(\n Stream.catchCause((cause) => {\n if (Cause.hasInterrupts(cause)) {\n return Stream.failCause(cause);\n }\n return Stream.unwrap(\n Effect.gen(function* recoverConnection() {\n const nextAttempt = attempt + 1;\n const delayInput = options.retryDelay(cause, nextAttempt);\n const expired = options.isReplayExpired?.(cause) === true;\n if (\n delayInput === undefined ||\n (expired && options.onReplayExpired === undefined)\n ) {\n return yield* Effect.failCause(cause);\n }\n const delay = Duration.fromInputUnsafe(delayInput);\n yield* state({\n status: \"backing-off\",\n cursor,\n attempt: nextAttempt,\n delay,\n cause,\n });\n yield* Effect.sleep(delay);\n if (expired && options.onReplayExpired !== undefined) {\n yield* state({\n status: \"refreshing\",\n cursor,\n attempt: nextAttempt,\n cause,\n });\n cursor = checkedCursor(yield* options.onReplayExpired(cause));\n }\n return connect(nextAttempt);\n })\n );\n })\n );\n return connect(0).pipe(\n Stream.onExit((exit) => {\n if (Exit.isSuccess(exit)) {\n return state({ status: \"completed\", cursor });\n }\n return state(\n Cause.hasInterrupts(exit.cause)\n ? { status: \"stopped\", cursor }\n : { status: \"failed\", cursor, cause: exit.cause }\n );\n })\n );\n });\n","import { skipToken } from \"@tanstack/query-core\";\nimport type {\n MutationFunctionContext,\n QueryFunctionContext,\n SkipToken,\n} from \"@tanstack/query-core\";\nimport { Array as EffectArray, Predicate } from \"effect\";\n\nimport { preserveMetadataPolicy } from \"./metadata-query\";\n\n/* oxlint-disable anti-slop/no-unsafe-dictionary-type, anti-slop/no-unknown-parameters, anti-slop/no-unknown-returns */\nexport type RuntimeOptions = Record<string, unknown>;\nexport type RuntimeQueryFunction = (\n context: QueryFunctionContext\n) => Promise<unknown>;\nexport type RuntimeMutationFunction = (\n input: unknown,\n context?: MutationFunctionContext\n) => Promise<unknown>;\nexport type RuntimeQueryBuilder = (\n options?: RuntimeOptions\n) => RuntimeOptions & { readonly queryFn: RuntimeQueryFunction | SkipToken };\nexport type RuntimeMutationBuilder = (\n options?: RuntimeOptions\n) => RuntimeOptions & { readonly mutationFn: RuntimeMutationFunction };\ntype QueryInterceptor = (execution: {\n readonly context: QueryFunctionContext;\n readonly next: () => Promise<unknown>;\n}) => Promise<unknown>;\ntype MutationInterceptor = (execution: {\n readonly input: unknown;\n readonly context: MutationFunctionContext | undefined;\n readonly next: () => Promise<unknown>;\n}) => Promise<unknown>;\ntype RuntimeCallback = (...args: unknown[]) => unknown;\n/* oxlint-enable anti-slop/no-unsafe-dictionary-type, anti-slop/no-unknown-parameters, anti-slop/no-unknown-returns */\n\nconst isCallback = (value: unknown): value is RuntimeCallback =>\n Predicate.isFunction(value);\n\nexport interface RuntimeViewConfiguration {\n readonly policy?: RuntimeOptions | undefined;\n readonly interceptors?: readonly unknown[] | undefined;\n readonly callbacks?: \"replace\" | \"compose\" | undefined;\n}\n\nconst once = <Data>(next: () => Promise<Data>) => {\n let called = false;\n return async () => {\n if (called) {\n throw new Error(\n \"An execution interceptor may call next only once per attempt\"\n );\n }\n called = true;\n return await next();\n };\n};\n\nexport const configureQuery = (\n builder: RuntimeQueryBuilder,\n view: string,\n configuration: RuntimeViewConfiguration\n): RuntimeQueryBuilder => {\n let build = builder;\n for (const candidate of EffectArray.reverse(\n configuration.interceptors ?? []\n )) {\n if (!Predicate.isFunction(candidate)) {\n throw new TypeError(\"Query interceptors must be functions\");\n }\n // SAFETY: Generated leaf types guarantee the interceptor's erased runtime signature.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion\n const interceptor = candidate as QueryInterceptor;\n const previous = build;\n build = (options) => {\n const built = previous(options);\n const { queryFn } = built;\n if (queryFn === skipToken) {\n return built;\n }\n return {\n ...built,\n queryFn: async (context: QueryFunctionContext) => {\n let original: unknown;\n const result = await interceptor({\n context,\n next: once(async () => {\n const data = await queryFn(context);\n original = data;\n return data;\n }),\n });\n return view === \"metadata\"\n ? preserveMetadataPolicy(original, result)\n : result;\n },\n };\n };\n }\n const { policy } = configuration;\n if (policy !== undefined && Object.keys(policy).length > 0) {\n const previous = build;\n build = (options) => previous({ ...policy, ...options });\n }\n return build;\n};\n\nexport const configureMutation = (\n builder: RuntimeMutationBuilder,\n configuration: RuntimeViewConfiguration\n): RuntimeMutationBuilder => {\n let build = builder;\n for (const candidate of EffectArray.reverse(\n configuration.interceptors ?? []\n )) {\n if (!Predicate.isFunction(candidate)) {\n throw new TypeError(\"Mutation interceptors must be functions\");\n }\n // SAFETY: Generated leaf types guarantee the interceptor's erased runtime signature.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion\n const interceptor = candidate as MutationInterceptor;\n const previous = build;\n build = (options) => {\n const built = previous(options);\n return {\n ...built,\n // oxlint-disable-next-line anti-slop/no-unknown-parameters\n mutationFn: async (input: unknown, context?: MutationFunctionContext) =>\n await interceptor({\n input,\n context,\n next: once(async () => await built.mutationFn(input, context)),\n }),\n };\n };\n }\n const { policy } = configuration;\n if (policy !== undefined && Object.keys(policy).length > 0) {\n const previous = build;\n build =\n configuration.callbacks === \"compose\"\n ? (options = {}) => {\n const merged = { ...policy, ...options };\n for (const name of [\"onSuccess\", \"onError\", \"onSettled\"] as const) {\n const before = policy[name];\n const after = options[name];\n if (Object.hasOwn(options, name) && after === undefined) {\n continue;\n }\n if (isCallback(before)) {\n merged[name] = async (...args: unknown[]) => {\n await before(...args);\n if (isCallback(after)) {\n await after(...args);\n }\n };\n }\n }\n return previous(merged);\n }\n : (options) => previous({ ...policy, ...options });\n }\n return build;\n};\n","import type {\n MutationObserverOptions,\n MutationFunctionContext,\n QueryFunctionContext,\n QueryKey,\n QueryObserverOptions,\n} from \"@tanstack/query-core\";\nimport { Array as EffectArray, Order, Predicate } from \"effect\";\n\nimport { configureMutation, configureQuery } from \"./configure\";\nimport type {\n RuntimeMutationBuilder,\n RuntimeQueryBuilder,\n RuntimeViewConfiguration,\n} from \"./configure\";\nimport type { MutationLeaf, QueryView, SupportedQueryView } from \"./inference\";\nimport type { MutationInterceptor, QueryInterceptor } from \"./interceptor\";\nimport type {\n LocalQueryOption,\n MutationPolicy,\n MutationPolicyOptions,\n QueryPolicy,\n} from \"./policy\";\nimport { inputKind } from \"./prepared-input\";\nimport type {\n OwnedMutationOption,\n StreamedPolicyOptions,\n KeysOfUnion,\n UnaryQueryBuilder,\n UnaryQueryBuilderDescriptor,\n} from \"./types\";\n\nexport interface UtilityNode {\n readonly key: () => QueryKey;\n}\n\nexport interface QueryConfiguration<\n Leaf,\n View extends SupportedQueryView<Leaf>,\n> {\n readonly policy?: QueryPolicy<Leaf, View> &\n (View extends \"streamed\" ? Partial<StreamedPolicyOptions> : unknown);\n readonly interceptors?: readonly QueryInterceptor<Leaf, View>[];\n}\n\nexport type MutationConfiguration<Leaf> = MutationPolicyOptions & {\n readonly policy?: MutationPolicy<Leaf>;\n readonly interceptors?: readonly MutationInterceptor<Leaf>[];\n};\n\nexport type SharedQueryInterceptor<View extends QueryView> = <Data>(execution: {\n readonly context: QueryFunctionContext<\n QueryKey,\n View extends \"infinite\" ? unknown : never\n >;\n readonly next: () => Promise<Data>;\n}) => Promise<Data>;\n\nexport type SharedMutationInterceptor = <Data>(execution: {\n readonly input: unknown;\n readonly context: MutationFunctionContext | undefined;\n readonly next: () => Promise<Data>;\n}) => Promise<Data>;\n\nexport interface SharedQueryConfiguration<View extends QueryView> {\n readonly policy?: Omit<\n QueryObserverOptions<unknown, unknown>,\n LocalQueryOption\n > &\n (View extends \"streamed\" ? Partial<StreamedPolicyOptions> : unknown);\n readonly interceptors?: readonly SharedQueryInterceptor<View>[];\n}\n\nexport type SharedMutationConfiguration = MutationPolicyOptions & {\n readonly policy?: Omit<\n MutationObserverOptions<unknown, unknown, unknown>,\n OwnedMutationOption | \"onMutate\"\n >;\n readonly interceptors?: readonly SharedMutationInterceptor[];\n};\n\nexport type InheritedMethods = {\n readonly [\n Key in\n | \"toString\"\n | \"toLocaleString\"\n | \"valueOf\"\n | \"hasOwnProperty\"\n | \"isPrototypeOf\"\n | \"propertyIsEnumerable\"\n ]: (...args: never[]) => unknown;\n};\n\n// Generated branches contain only their key builder and named children.\nexport type ChildNames<Node> = Exclude<Extract<keyof Node, string>, \"key\">;\n\nexport type Children<Node> = [ChildNames<Node>] extends [never]\n ? never\n : {\n readonly [Key in ChildNames<Node>]?:\n | UtilsConfiguration<Node[Key]>\n | (Key extends keyof InheritedMethods ? InheritedMethods[Key] : never);\n };\n\nexport type LeafMembers<Node> = Node extends MutationLeaf\n ? Node\n : [SupportedQueryView<Node>] extends [never]\n ? never\n : Node;\n\n/** Typed defaults and ordered interceptors for a generated tree, branch, or leaf. */\nexport type UtilsConfiguration<Node> = [LeafMembers<Node>] extends [never]\n ? {\n readonly [View in QueryView]?: SharedQueryConfiguration<View>;\n } & {\n readonly mutation?: SharedMutationConfiguration;\n readonly scoped?: Children<Node>;\n }\n : {\n readonly [View in QueryView]?: View extends SupportedQueryView<Node>\n ? QueryConfiguration<Node, Extract<View, SupportedQueryView<Node>>>\n : never;\n } & {\n readonly mutation?: [Node] extends [MutationLeaf]\n ? MutationConfiguration<Node>\n : never;\n readonly scoped?: never;\n };\n\nexport type ExtraProperties<Expected, Actual> = {\n readonly [Key in Exclude<KeysOfUnion<Actual>, keyof Expected>]: never;\n};\n\nexport type Property<Value, Key extends PropertyKey> = Value extends unknown\n ? Key extends keyof Value\n ? Value[Key]\n : never\n : never;\n\nexport type ExactView<Expected, Actual> = ExtraProperties<Expected, Actual> &\n (\"policy\" extends KeysOfUnion<Actual>\n ? {\n readonly policy?: ExtraProperties<\n NonNullable<Property<Expected, \"policy\">>,\n NonNullable<Property<Actual, \"policy\">>\n >;\n }\n : unknown);\n\nexport type ExactChildConfiguration<Node, Key, Actual> =\n Key extends keyof InheritedMethods\n ? [Exclude<Actual, InheritedMethods[Key]>] extends [never]\n ? never\n :\n | ExactConfiguration<Node, Exclude<Actual, InheritedMethods[Key]>>\n | Extract<Actual, InheritedMethods[Key]>\n : ExactConfiguration<Node, Actual>;\n\nexport type ExactConfiguration<Node, Actual> = [Actual] extends [\n UtilsConfiguration<Node>,\n]\n ? ExtraProperties<UtilsConfiguration<Node>, Actual> & {\n readonly [\n Key in KeysOfUnion<Actual> & keyof UtilsConfiguration<Node>\n ]?: Key extends \"scoped\"\n ? NonNullable<Property<Actual, Key>> extends object\n ? ExtraProperties<\n Children<Node>,\n NonNullable<Property<Actual, Key>>\n > & {\n readonly [\n Child in KeysOfUnion<NonNullable<Property<Actual, Key>>> &\n keyof Node\n ]?: ExactChildConfiguration<\n Node[Child],\n Child,\n NonNullable<Property<NonNullable<Property<Actual, Key>>, Child>>\n >;\n }\n : unknown\n : ExactView<\n NonNullable<UtilsConfiguration<Node>[Key]>,\n NonNullable<Property<Actual, Key>>\n >;\n }\n : never;\n\nexport type StreamPolicy<Configuration> = Configuration extends {\n readonly streamed: { readonly policy: infer Policy };\n}\n ? Policy\n : unknown;\n\nexport type ScopedConfiguration<\n Configuration,\n Key extends PropertyKey,\n> = Configuration extends { readonly scoped: infer Scoped }\n ? Key extends keyof Scoped\n ? Scoped[Key]\n : unknown\n : unknown;\n\nexport type RetentionDefault<Configuration, Inherited> =\n StreamPolicy<Configuration> extends { readonly maxChunks: infer MaxChunks }\n ? { readonly maxChunks: MaxChunks }\n : Inherited;\n\nexport type WithDefaultRetention<Builder> =\n UnaryQueryBuilderDescriptor<Builder> extends infer Descriptor\n ? Descriptor extends {\n readonly input: infer Input;\n readonly data: infer Data;\n readonly error: infer Error;\n readonly key: infer Key extends QueryKey;\n readonly skippedKey: infer SkippedKey extends QueryKey;\n readonly adapterOptions: (options: infer AdapterOptions) => void;\n readonly inputless: infer Inputless extends boolean;\n }\n ? UnaryQueryBuilder<\n Input,\n Data,\n Error,\n Key,\n SkippedKey,\n Omit<AdapterOptions, \"maxChunks\"> & {\n readonly maxChunks?: StreamedPolicyOptions[\"maxChunks\"];\n },\n Inputless\n >\n : Builder\n : Builder;\n\nexport type WithDefaultKeyRetention<KeyBuilder> = KeyBuilder extends (\n ...args: infer Args\n) => infer Key\n ? Args extends readonly [infer Input, infer Policy]\n ? (input: Input, policy?: Partial<Policy>) => Key\n : Args extends readonly [infer Policy]\n ? (policy?: Partial<Policy>) => Key\n : KeyBuilder\n : KeyBuilder;\n\n/** Preserves leaf builders and makes configured stream retention optional at call sites. */\nexport type ConfiguredUtils<Node, Configuration, Inherited = unknown> = {\n readonly [Key in keyof Node]: Node[Key] extends UtilityNode\n ? Key extends string\n ? ConfiguredUtils<\n Node[Key],\n ScopedConfiguration<Configuration, Key>,\n RetentionDefault<Configuration, Inherited>\n >\n : Node[Key]\n : RetentionDefault<Configuration, Inherited> extends {\n readonly maxChunks: StreamedPolicyOptions[\"maxChunks\"];\n }\n ? Key extends \"streamedOptions\"\n ? WithDefaultRetention<Node[Key]>\n : Key extends \"streamedKey\"\n ? WithDefaultKeyRetention<Node[Key]>\n : Node[Key]\n : Node[Key];\n};\n\ntype RuntimeConfiguration = Partial<\n Record<QueryView | \"mutation\", RuntimeViewConfiguration>\n> & {\n readonly scoped?: Readonly<Record<string, RuntimeConfiguration | undefined>>;\n};\n\ntype RuntimeNode = Record<string, unknown> & UtilityNode;\ntype RuntimeBuilder = (...args: unknown[]) => unknown;\n\ninterface ConfigurationLayer {\n readonly depth: number;\n readonly options: RuntimeConfiguration;\n}\n\nconst configuredLeaves = new WeakMap<\n RuntimeNode,\n {\n readonly original: RuntimeNode;\n readonly layers: readonly ConfigurationLayer[];\n }\n>();\n\nconst views: readonly QueryView[] = [\n \"query\",\n \"infinite\",\n \"metadata\",\n \"live\",\n \"streamed\",\n];\n\nconst snapshotConfiguration = (\n configuration: RuntimeConfiguration\n): RuntimeConfiguration => {\n const snapshot: RuntimeConfiguration = {};\n for (const view of [...views, \"mutation\"] as const) {\n const entry = configuration[view];\n if (entry !== undefined) {\n snapshot[view] = Object.freeze({\n ...entry,\n policy:\n entry.policy === undefined\n ? undefined\n : Object.freeze({ ...entry.policy }),\n interceptors:\n entry.interceptors === undefined\n ? undefined\n : Object.freeze([...entry.interceptors]),\n });\n }\n }\n return Object.freeze(snapshot);\n};\n\nconst scopeConfigurations = (\n layers: readonly ConfigurationLayer[]\n): readonly RuntimeConfiguration[] => {\n const scopes = new Map<number, RuntimeConfiguration>();\n for (const { depth, options } of layers) {\n const scope = scopes.get(depth) ?? {};\n for (const view of [...views, \"mutation\"] as const) {\n const entry = options[view];\n if (entry === undefined) {\n continue;\n }\n const previous = scope[view];\n scope[view] = {\n policy: { ...previous?.policy, ...entry.policy },\n interceptors: [\n ...(previous?.interceptors ?? []),\n ...(entry.interceptors ?? []),\n ],\n callbacks: entry.callbacks ?? previous?.callbacks,\n };\n }\n scopes.set(depth, scope);\n }\n return [...scopes.values()];\n};\n\nconst configureLeaf = (\n node: RuntimeNode,\n configurations: readonly RuntimeConfiguration[]\n): RuntimeNode => {\n const configured = { ...node };\n for (const view of views) {\n if (!Object.hasOwn(node, `${view}Options`)) {\n continue;\n }\n const inherited = configurations.flatMap((entry) =>\n entry[view] === undefined ? [] : [entry[view]]\n );\n if (inherited.length === 0) {\n continue;\n }\n const policy: Record<string, unknown> = {};\n for (const entry of inherited) {\n Object.assign(policy, entry.policy);\n }\n const name = `${view}Options`;\n const builder = node[name];\n if (!Predicate.isFunction(builder)) {\n throw new TypeError(`${name} must be a function`);\n }\n // SAFETY: Generated query builders return their owned query function and options.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion\n configured[name] = configureQuery(builder as RuntimeQueryBuilder, view, {\n policy,\n interceptors: inherited.flatMap((entry) => entry.interceptors ?? []),\n });\n if (view === \"streamed\") {\n const { streamedKey } = node;\n if (!Predicate.isFunction(streamedKey)) {\n throw new TypeError(\"Streamed queries require a key builder\");\n }\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const buildKey = streamedKey as RuntimeBuilder;\n const history = Object.fromEntries(\n Object.entries(policy).filter(([option]) =>\n [\n \"maxChunks\",\n \"refetchMode\",\n \"publicationBatchSize\",\n \"publicationMaxWaitMs\",\n ].includes(option)\n )\n );\n configured[\"streamedKey\"] =\n inputKind(node.key) === \"Inputless\"\n ? (options?: Partial<StreamedPolicyOptions>) =>\n buildKey({ ...history, ...options })\n : (input: unknown, options?: Partial<StreamedPolicyOptions>) =>\n buildKey(input, { ...history, ...options });\n }\n }\n if (Object.hasOwn(node, \"mutationOptions\")) {\n const mutations = configurations.flatMap((entry) =>\n entry.mutation === undefined ? [] : [entry.mutation]\n );\n if (mutations.length > 0) {\n const candidate = node[\"mutationOptions\"];\n if (!Predicate.isFunction(candidate)) {\n throw new TypeError(\"mutationOptions must be a function\");\n }\n // SAFETY: Generated mutation builders return their owned mutation function and options.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion\n let builder = candidate as RuntimeMutationBuilder;\n for (const entry of mutations) {\n builder = configureMutation(builder, {\n policy: entry.policy,\n callbacks: entry.callbacks,\n });\n }\n const interceptors = mutations.flatMap(\n (entry) => entry.interceptors ?? []\n );\n if (interceptors.length > 0) {\n builder = configureMutation(builder, { interceptors });\n }\n configured[\"mutationOptions\"] = builder;\n }\n }\n return configured;\n};\n\nconst configureNode = (\n node: RuntimeNode,\n inherited: readonly ConfigurationLayer[],\n configuration: RuntimeConfiguration\n): RuntimeNode => {\n const configurations = [\n ...inherited,\n {\n depth: node.key().length,\n options: snapshotConfiguration(configuration),\n },\n ];\n const children = Object.entries(node).filter(\n (entry): entry is [string, RuntimeNode] =>\n Predicate.hasProperty(entry[1], \"key\") &&\n Predicate.isFunction(entry[1].key)\n );\n for (const name of Object.keys(configuration.scoped ?? {})) {\n if (!children.some(([key]) => key === name)) {\n throw new TypeError(`Unknown utility scope: ${name}`);\n }\n }\n if (children.length === 0) {\n const previous = configuredLeaves.get(node);\n const original = previous?.original ?? node;\n const layers = EffectArray.sortWith(\n [...(previous?.layers ?? []), ...configurations],\n (layer) => layer.depth,\n Order.Number\n );\n const configured = Object.freeze({\n ...configureLeaf(original, scopeConfigurations(layers)),\n });\n configuredLeaves.set(configured, { original, layers });\n return configured;\n }\n return Object.freeze({\n ...node,\n ...Object.fromEntries(\n children.map(([key, child]) => [\n key,\n configureNode(\n child,\n configurations,\n configuration.scoped !== undefined &&\n Object.hasOwn(configuration.scoped, key)\n ? (configuration.scoped[key] ?? {})\n : {}\n ),\n ])\n ),\n });\n};\n\n/** Applies root, branch, and leaf configuration while preserving generated cache identity. */\nexport const configureUtils = <\n Node extends UtilityNode,\n const Configuration extends object,\n>(\n tree: Node,\n configuration: Configuration &\n NoInfer<UtilsConfiguration<Node>> &\n NoInfer<ExactConfiguration<Node, Configuration>>\n): ConfiguredUtils<Node, Configuration> => {\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const node = tree as RuntimeNode;\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const options = configuration as RuntimeConfiguration;\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n return configureNode(node, [], options) as ConfiguredUtils<\n Node,\n Configuration\n >;\n};\n","import { hashKey } from \"@tanstack/query-core\";\nimport type { QueryFilters, QueryKey } from \"@tanstack/query-core\";\nimport { Predicate } from \"effect\";\n\nimport type { QueryView } from \"./inference\";\nimport type { QueryFilterOptions } from \"./query-filter\";\n\ninterface BranchNode {\n readonly key: () => QueryKey;\n}\n// Generated branches and leaves expose a key function; other child properties are builders.\n// oxlint-disable-next-line anti-slop/no-unknown-parameters\nconst isBranchNode = (node: unknown): node is BranchNode =>\n Predicate.hasProperty(node, \"key\") && Predicate.isFunction(node.key);\n\n/** Selects one view across a generated root, branch or leaf without changing cache keys. */\nexport const createBranchQueryFilter = (\n branch: { readonly key: () => QueryKey },\n view: QueryView\n): ((\n options?: QueryFilterOptions\n) => QueryFilters & { readonly queryKey: QueryKey }) => {\n const byLength = new Map<number, Set<string>>();\n const seen = new WeakSet();\n const visit = (node: BranchNode) => {\n if (seen.has(node)) {\n return;\n }\n seen.add(node);\n if (Predicate.hasProperty(node, `${view}Options`)) {\n const prefix: QueryKey = [...node.key(), view];\n const entries = byLength.get(prefix.length) ?? new Set<string>();\n entries.add(hashKey(prefix));\n byLength.set(prefix.length, entries);\n }\n for (const child of Object.values(node)) {\n if (isBranchNode(child)) {\n visit(child);\n }\n }\n };\n visit(branch);\n const queryKey = branch.key();\n return (options = {}) => ({\n ...options,\n queryKey,\n predicate: (query) => {\n for (const [length, prefixes] of byLength) {\n if (\n query.queryKey.length >= length &&\n prefixes.has(hashKey(query.queryKey.slice(0, length)))\n ) {\n return options.predicate?.(query) ?? true;\n }\n }\n return false;\n },\n });\n};\n","import type { Cause } from \"effect\";\nimport { Option, Predicate } from \"effect\";\n\nimport { isEffectHttpApiQueryError } from \"../http/errors\";\nimport { isEffectRpcQueryError } from \"../rpc/errors\";\n\nexport type FailureOf<Error> = Error extends {\n readonly cause: Cause.Cause<infer Failure>;\n}\n ? Failure\n : never;\nexport type TaggedFailure<Error> = Extract<\n FailureOf<Error>,\n { readonly _tag: string }\n>;\n\n/** Matches one typed failure only; defects, interruptions and composite Causes never match. */\nexport const findDeclaredError = <\n Error,\n Tag extends TaggedFailure<Error>[\"_tag\"],\n>(\n error: Error,\n tag: Tag\n): Option.Option<Extract<TaggedFailure<Error>, { readonly _tag: Tag }>> => {\n if (!isEffectRpcQueryError(error) && !isEffectHttpApiQueryError(error)) {\n return Option.none();\n }\n const [reason] = error.cause.reasons;\n if (error.cause.reasons.length !== 1 || reason?._tag !== \"Fail\") {\n return Option.none();\n }\n const failure = reason.error;\n if (!Predicate.hasProperty(failure, \"_tag\") || failure._tag !== tag) {\n return Option.none();\n }\n // SAFETY: The wrapper's typed Cause and discriminant identify the declared union member.\n // oxlint-disable-next-line anti-slop/require-safety-comment-for-type-assertion, typescript/no-unsafe-type-assertion\n const matched = failure as Extract<\n TaggedFailure<Error>,\n { readonly _tag: Tag }\n >;\n return Option.some(matched);\n};\n","import { Effect, Stream } from \"effect\";\nimport type { Exit } from \"effect\";\n\nexport interface ConsumeEventsOptions<\n A,\n E,\n R,\n HandlerError = never,\n HandlerServices = never,\n> {\n readonly onEvent: (\n event: A\n ) => Effect.Effect<void, HandlerError, HandlerServices>;\n /** Runs before consuming; this is not a transport connection acknowledgement. */\n readonly onStart?: Effect.Effect<void, HandlerError, HandlerServices>;\n /** Runs after stream cleanup, including failure or interruption. */\n readonly onExit?: (\n exit: Exit.Exit<void, E | HandlerError>\n ) => Effect.Effect<void, never, R | HandlerServices>;\n}\n\n/** Consumes events sequentially without retaining history or owning a runtime or cache. */\nexport const consumeEvents = <\n A,\n E,\n R,\n HandlerError = never,\n HandlerServices = never,\n>(\n source: Stream.Stream<A, E, R>,\n options: ConsumeEventsOptions<A, E, R, HandlerError, HandlerServices>\n): Effect.Effect<void, E | HandlerError, R | HandlerServices> =>\n Effect.suspend(() =>\n (options.onStart ?? Effect.void).pipe(\n Effect.andThen(Stream.runForEach(source, options.onEvent)),\n Effect.onExit((exit) => options.onExit?.(exit) ?? Effect.void)\n )\n );\n"],"mappings":"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"}