@xylex-group/athena 1.6.2 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -11
- package/bin/athena-js.js +0 -0
- package/dist/cli/index.cjs +150 -53
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +150 -53
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +709 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +307 -41
- package/dist/index.d.ts +307 -41
- package/dist/index.js +703 -54
- package/dist/index.js.map +1 -1
- package/dist/model-form-Bm_kqCn2.d.ts +92 -0
- package/dist/model-form-DkS48fsh.d.cts +92 -0
- package/dist/pipeline-C-cN0ACi.d.cts +164 -0
- package/dist/pipeline-CQgV-Yfo.d.ts +164 -0
- package/dist/react.cjs +64 -0
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +3 -3
- package/dist/react.d.ts +3 -3
- package/dist/react.js +62 -1
- package/dist/react.js.map +1 -1
- package/dist/types-BnzoaNRC.d.cts +380 -0
- package/dist/types-BnzoaNRC.d.ts +380 -0
- package/package.json +15 -14
- package/dist/errors-1b-LSTum.d.ts +0 -31
- package/dist/errors-BYRK5phv.d.cts +0 -31
- package/dist/pipeline-BQzpSLD3.d.ts +0 -338
- package/dist/pipeline-CA2aexDl.d.cts +0 -338
- package/dist/types-v6UyGg-x.d.cts +0 -195
- package/dist/types-v6UyGg-x.d.ts +0 -195
package/dist/react.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/client.ts","../src/gateway/use-athena-gateway.ts","../src/react/utils.ts","../src/react/query-client.ts","../src/react/provider.ts","../src/react/use-query.ts","../src/react/use-mutation.ts"],"names":["useState","useMemo","useCallback","isRecord","serialized","sourceData","selectedData","createContext","createElement","useContext","useRef","useSyncExternalStore","useEffect"],"mappings":"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","file":"react.cjs","sourcesContent":["import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayMethod,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaRpcFilter,\r\n AthenaUpdatePayload,\r\n AthenaQueryPayload,\r\n} from \"./types.js\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://athena-db.com\";\r\nconst DEFAULT_CLIENT = \"railway_direct\";\r\nconst FALLBACK_SDK_VERSION = \"1.3.0\";\r\nconst SDK_NAME = \"xylex-group/athena\";\r\n\r\nconst SDK_VERSION =\r\n typeof process !== \"undefined\" && process?.env?.npm_package_version\r\n ? process.env.npm_package_version\r\n : FALLBACK_SDK_VERSION;\r\nconst SDK_HEADER_VALUE = `${SDK_NAME} ${SDK_VERSION}`;\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false };\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes(\"application/json\") ?? false;\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false };\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true };\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined;\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get(\"x-request-id\") ??\r\n headers.get(\"x-correlation-id\") ??\r\n headers.get(\"x-athena-request-id\") ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n if (isRecord(payload)) {\r\n const messageCandidates = [payload.error, payload.message, payload.details];\r\n for (const candidate of messageCandidates) {\r\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\r\n return candidate.trim();\r\n }\r\n }\r\n }\r\n\r\n if (typeof payload === \"string\" && payload.trim().length > 0) {\r\n return payload.trim();\r\n }\r\n\r\n return fallback;\r\n}\r\n\r\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\r\n return error.toDetails();\r\n}\r\n\r\nfunction toQueryScalar(value: unknown): string {\r\n if (value === null || value === undefined) return \"null\";\r\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\r\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\r\n return String(value);\r\n}\r\n\r\nfunction toQueryArray(values: unknown[]): string {\r\n return `{${values.map(toQueryScalar).join(\",\")}}`;\r\n}\r\n\r\nfunction toRpcArgumentQueryValue(value: unknown): string {\r\n if (Array.isArray(value)) return toQueryArray(value);\r\n if (value && typeof value === \"object\") return JSON.stringify(value);\r\n return toQueryScalar(value);\r\n}\r\n\r\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\r\n const value = filter.value;\r\n switch (filter.operator) {\r\n case \"in\": {\r\n if (!Array.isArray(value)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\r\n status: 0,\r\n });\r\n }\r\n return `in.${toQueryArray(value)}`;\r\n }\r\n case \"is\":\r\n return `is.${toQueryScalar(value)}`;\r\n case \"eq\":\r\n case \"neq\":\r\n case \"gt\":\r\n case \"gte\":\r\n case \"lt\":\r\n case \"lte\":\r\n case \"like\":\r\n case \"ilike\":\r\n return `${filter.operator}.${toQueryScalar(value)}`;\r\n }\r\n}\r\n\r\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\r\n const functionName = (payload.function_name ?? payload.function).trim();\r\n if (!functionName) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"rpc requires a function name\",\r\n status: 0,\r\n endpoint: \"/gateway/rpc\",\r\n method: \"GET\",\r\n });\r\n }\r\n\r\n const query = new URLSearchParams();\r\n if (payload.schema) query.set(\"schema\", payload.schema);\r\n if (payload.select) query.set(\"select\", payload.select);\r\n if (payload.count) query.set(\"count\", payload.count);\r\n if (payload.head) query.set(\"head\", \"true\");\r\n if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\r\n if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\r\n if (payload.order?.column) {\r\n query.set(\r\n \"order\",\r\n payload.order.ascending === false\r\n ? `${payload.order.column}.desc`\r\n : payload.order.column,\r\n );\r\n }\r\n\r\n if (payload.args) {\r\n for (const [key, value] of Object.entries(payload.args)) {\r\n query.set(key, toRpcArgumentQueryValue(value));\r\n }\r\n }\r\n\r\n if (payload.filters?.length) {\r\n for (const filter of payload.filters) {\r\n if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\r\n status: 0,\r\n });\r\n }\r\n query.set(filter.column, toRpcFilterQueryValue(filter));\r\n }\r\n }\r\n\r\n const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\r\n const queryText = query.toString();\r\n const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\r\n return withQuery as AthenaGatewayEndpointPath;\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? true;\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n };\r\n const headerClient =\r\n extraHeaders[\"x-athena-client\"] ?? extraHeaders[\"X-Athena-Client\"];\r\n const finalClient =\r\n options?.client ??\r\n config.client ??\r\n (typeof headerClient === \"string\" ? headerClient : undefined) ??\r\n DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Athena-Sdk\": SDK_HEADER_VALUE,\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n const finalBackend = options?.backend ?? config.backend;\r\n if (finalBackend) {\r\n const type =\r\n typeof finalBackend === \"string\" ? finalBackend : finalBackend.type;\r\n if (type) headers[\"X-Backend-Type\"] = type;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n const athenaClientKeys = [\"x-athena-client\", \"X-Athena-Client\"];\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n if (athenaClientKeys.includes(key)) return;\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) {\r\n headers[key] = normalized;\r\n }\r\n });\r\n\r\n return headers;\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n const baseUrl = (\r\n options?.baseUrl ??\r\n config.baseUrl ??\r\n DEFAULT_BASE_URL\r\n ).replace(/\\/$/, \"\");\r\n const url = `${baseUrl}${endpoint}`;\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n };\r\n if (method !== \"GET\") {\r\n requestInit.body = JSON.stringify(payload);\r\n }\r\n\r\n const response = await fetch(url, requestInit);\r\n\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway returned malformed JSON\",\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n const parsedPayload = isRecord(parsed) ? parsed : null;\r\n\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\r\n // vs raw array when uncached. Use inner data when present to avoid double nesting.\r\n const payloadData =\r\n parsedPayload && \"data\" in parsedPayload\r\n ? (parsedPayload.data as T)\r\n : (parsed as T);\r\n const payloadCount =\r\n parsedPayload && \"count\" in parsedPayload\r\n ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\r\n ? (parsedPayload.count as number | null)\r\n : undefined\r\n : undefined;\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n data: payloadData ?? null,\r\n count: payloadCount,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while calling ${method} ${endpoint}: ${message}`,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n rpcGateway<T>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n queryGateway<T>(\r\n payload: AthenaQueryPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n return {\r\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\"),\r\n buildHeaders(options) {\r\n return buildHeaders(config, options);\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(config, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(config, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(config, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(config, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n rpcGateway(payload, options) {\r\n if (options?.get) {\r\n const endpoint = buildRpcGetEndpoint(payload);\r\n return callAthena(config, endpoint, \"GET\", null, options);\r\n }\r\n return callAthena(config, \"/gateway/rpc\", \"POST\", payload, options);\r\n },\r\n queryGateway(payload, options) {\r\n return callAthena(config, \"/gateway/query\", \"POST\", payload, options);\r\n },\r\n };\r\n}\r\n","import { useCallback, useMemo, useState } from \"react\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaGatewayCallLog,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayHookConfig,\r\n AthenaGatewayHookResult,\r\n AthenaGatewayMethod,\r\n AthenaGatewayResponse,\r\n AthenaGatewayResponseLog,\r\n AthenaInsertPayload,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaUpdatePayload,\r\n} from \"./types.ts\";\r\nimport { createAthenaGatewayClient } from \"./client.ts\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\n\r\nexport function useAthenaGateway(\r\n config?: AthenaGatewayHookConfig,\r\n): AthenaGatewayHookResult {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [lastRequest, setLastRequest] = useState<AthenaGatewayCallLog | null>(\r\n null,\r\n );\r\n const [lastResponse, setLastResponse] =\r\n useState<AthenaGatewayResponseLog | null>(null);\r\n\r\n const client = useMemo(\r\n () =>\r\n createAthenaGatewayClient({\r\n client: config?.client,\r\n baseUrl: config?.baseUrl,\r\n apiKey: config?.apiKey,\r\n backend: config?.backend,\r\n publishEvent: config?.publishEvent,\r\n headers: config?.headers,\r\n userId: config?.userId,\r\n organizationId: config?.organizationId,\r\n }),\r\n [\r\n config?.baseUrl,\r\n config?.client,\r\n config?.apiKey,\r\n config?.backend,\r\n config?.publishEvent,\r\n config?.headers,\r\n config?.userId,\r\n config?.organizationId,\r\n ],\r\n );\r\n\r\n const callWithLifecycle = useCallback(\r\n async <T>(\r\n fn: () => Promise<AthenaGatewayResponse<T>>,\r\n metadata: {\r\n endpoint: string;\r\n method: string;\r\n payload: unknown;\r\n options?: AthenaGatewayCallOptions;\r\n },\r\n ): Promise<AthenaGatewayResponse<T>> => {\r\n const requestLog: AthenaGatewayCallLog = {\r\n endpoint: metadata.endpoint as AthenaGatewayEndpointPath,\r\n method: metadata.method as AthenaGatewayMethod,\r\n payload: metadata.payload,\r\n headers: client.buildHeaders(metadata.options),\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n setLastRequest(requestLog);\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n let response: AthenaGatewayResponse<T> | undefined;\r\n try {\r\n response = await fn();\r\n setLastResponse({ ...response, timestamp: new Date().toISOString() });\r\n\r\n if (!response.ok) {\r\n const failure = AthenaGatewayError.fromResponse(response, {\r\n endpoint: metadata.endpoint as AthenaGatewayEndpointPath,\r\n method: metadata.method as AthenaGatewayMethod,\r\n });\r\n setError(failure.message);\r\n throw failure;\r\n }\r\n\r\n return response;\r\n } catch (callError) {\r\n const message =\r\n callError instanceof Error ? callError.message : String(callError);\r\n const typedError =\r\n callError instanceof AthenaGatewayError\r\n ? callError\r\n : new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message,\r\n endpoint: metadata.endpoint as AthenaGatewayEndpointPath,\r\n method: metadata.method as AthenaGatewayMethod,\r\n cause: message,\r\n });\r\n setError(message);\r\n setLastResponse({\r\n timestamp: new Date().toISOString(),\r\n status: typedError.status || response?.status || 0,\r\n ok: false,\r\n data: null,\r\n raw: null,\r\n error: typedError.message,\r\n errorDetails: typedError.toDetails(),\r\n });\r\n throw typedError;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [client],\r\n );\r\n\r\n const defaultStripNulls = true;\r\n\r\n const fetchGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaFetchPayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ?? options?.stripNulls ?? defaultStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.fetchGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/fetch\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const insertGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) =>\r\n callWithLifecycle<T>(() => client.insertGateway<T>(payload, options), {\r\n endpoint: \"/gateway/insert\",\r\n method: \"PUT\",\r\n payload,\r\n options,\r\n }),\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const updateGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaUpdatePayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ?? options?.stripNulls ?? defaultStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.updateGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/update\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const deleteGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n if (!payload.resource_id) {\r\n throw new Error(\r\n \"deleteGateway requires resource_id (the unique identifier of the record to delete)\",\r\n );\r\n }\r\n return callWithLifecycle<T>(\r\n () => client.deleteGateway<T>(payload, options),\r\n { endpoint: \"/gateway/delete\", method: \"DELETE\", payload, options },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const rpcGateway = useCallback(\r\n <T = unknown>(payload: AthenaRpcPayload, options?: AthenaRpcCallOptions) =>\r\n callWithLifecycle<T>(() => client.rpcGateway<T>(payload, options), {\r\n endpoint: options?.get ? `/rpc/${payload.function}` : \"/gateway/rpc\",\r\n method: options?.get ? \"GET\" : \"POST\",\r\n payload,\r\n options,\r\n }),\r\n [callWithLifecycle, client],\r\n );\r\n\r\n return {\r\n fetchGateway,\r\n insertGateway,\r\n updateGateway,\r\n deleteGateway,\r\n rpcGateway,\r\n isLoading,\r\n error,\r\n lastRequest,\r\n lastResponse,\r\n baseUrl: client.baseUrl,\r\n };\r\n}\r\n","import { isAthenaGatewayError } from '../gateway/errors.ts'\r\nimport type {\r\n AthenaQueryError,\r\n AthenaQueryResult,\r\n AthenaResponseLike,\r\n AthenaRetryCount,\r\n AthenaRetryDelay,\r\n QueryKey,\r\n} from './types.ts'\r\n\r\ntype RetryOptions = {\r\n retry?: AthenaRetryCount\r\n retryDelay?: AthenaRetryDelay\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isPrimitive(value: unknown): value is string | number | boolean | null | undefined {\r\n return value == null || ['string', 'number', 'boolean'].includes(typeof value)\r\n}\r\n\r\nfunction encodePrimitive(value: string | number | boolean | null | undefined): string {\r\n if (value === null) return 'null:0:'\r\n if (value === undefined) return 'undefined:0:'\r\n if (typeof value === 'string') return `str:${value.length}:${value}`\r\n if (typeof value === 'number') {\r\n const serialized = Number.isFinite(value) ? String(value) : 'nan'\r\n return `num:${serialized.length}:${serialized}`\r\n }\r\n const serialized = value ? '1' : '0'\r\n return `bool:${serialized.length}:${serialized}`\r\n}\r\n\r\nfunction stableSerialize(value: unknown, seen: WeakSet<object>): string {\r\n if (value === null) return 'null'\r\n if (value === undefined) return 'undefined'\r\n\r\n const valueType = typeof value\r\n if (valueType === 'string') return `\"${value}\"`\r\n if (valueType === 'number') return Number.isFinite(value as number) ? String(value) : 'null'\r\n if (valueType === 'boolean') return (value as boolean) ? 'true' : 'false'\r\n if (valueType === 'bigint') return `${String(value)}n`\r\n if (valueType === 'symbol') return `symbol:${String(value)}`\r\n if (valueType === 'function') {\r\n const namedFunction = value as { name?: string }\r\n return `function:${namedFunction.name || 'anonymous'}`\r\n }\r\n\r\n if (value instanceof Date) return `date:${value.toISOString()}`\r\n\r\n if (Array.isArray(value)) {\r\n return `[${value.map(item => stableSerialize(item, seen)).join(',')}]`\r\n }\r\n\r\n if (valueType === 'object') {\r\n const objectValue = value as Record<string, unknown>\r\n if (seen.has(objectValue)) return '[circular]'\r\n seen.add(objectValue)\r\n const keys = Object.keys(objectValue).sort()\r\n const serialized = `{${keys\r\n .map(key => `${key}:${stableSerialize(objectValue[key], seen)}`)\r\n .join(',')}}`\r\n seen.delete(objectValue)\r\n return serialized\r\n }\r\n\r\n return String(value)\r\n}\r\n\r\nexport function safeSerializeQueryKey(queryKey: QueryKey): string {\r\n try {\r\n if (typeof queryKey === 'string') {\r\n return `key:${queryKey}`\r\n }\r\n\r\n if (Array.isArray(queryKey) && queryKey.every(isPrimitive)) {\r\n return `arr:${queryKey.map(item => encodePrimitive(item)).join('|')}`\r\n }\r\n\r\n return `ser:${stableSerialize(queryKey, new WeakSet<object>())}`\r\n } catch {\r\n try {\r\n return `fallback:${String(queryKey)}`\r\n } catch {\r\n return 'fallback:[unserializable-query-key]'\r\n }\r\n }\r\n}\r\n\r\nexport function sleep(ms: number): Promise<void> {\r\n if (ms <= 0) return Promise.resolve()\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms)\r\n })\r\n}\r\n\r\nfunction resolveRetryCount(retry: AthenaRetryCount | undefined): number {\r\n if (retry === false || retry == null) return 0\r\n if (!Number.isFinite(retry)) return 0\r\n return Math.max(0, Math.trunc(retry))\r\n}\r\n\r\nfunction resolveRetryDelay(retryDelay: AthenaRetryDelay | undefined, attempt: number): number {\r\n if (typeof retryDelay === 'function') {\r\n const resolved = retryDelay(attempt)\r\n if (!Number.isFinite(resolved)) return 0\r\n return Math.max(0, resolved)\r\n }\r\n if (typeof retryDelay === 'number') {\r\n if (!Number.isFinite(retryDelay)) return 0\r\n return Math.max(0, retryDelay)\r\n }\r\n return 0\r\n}\r\n\r\nexport async function runWithRetry<T>(\r\n execute: (attempt: number) => Promise<T>,\r\n options?: RetryOptions,\r\n): Promise<T> {\r\n const retries = resolveRetryCount(options?.retry)\r\n let attempt = 0\r\n\r\n for (;;) {\r\n attempt += 1\r\n try {\r\n return await execute(attempt)\r\n } catch (error) {\r\n if (attempt > retries) {\r\n throw error\r\n }\r\n const delay = resolveRetryDelay(options?.retryDelay, attempt)\r\n await sleep(delay)\r\n }\r\n }\r\n}\r\n\r\nfunction errorMessageFromUnknown(error: unknown): string {\r\n if (typeof error === 'string' && error.trim()) return error.trim()\r\n if (error instanceof Error && error.message.trim()) return error.message.trim()\r\n if (isRecord(error)) {\r\n const messageCandidate = error.message ?? error.error\r\n if (typeof messageCandidate === 'string' && messageCandidate.trim()) {\r\n return messageCandidate.trim()\r\n }\r\n }\r\n return 'Athena request failed'\r\n}\r\n\r\nexport function normalizeAthenaError(\r\n error: unknown,\r\n source?: unknown,\r\n): AthenaQueryError {\r\n if (\r\n isRecord(error) &&\r\n typeof error.message === 'string' &&\r\n (error.status === undefined || typeof error.status === 'number') &&\r\n (error.code === undefined || typeof error.code === 'string')\r\n ) {\r\n return {\r\n message: error.message,\r\n status: typeof error.status === 'number' ? error.status : undefined,\r\n code: typeof error.code === 'string' ? error.code : undefined,\r\n details: error.details,\r\n raw: error.raw ?? source ?? error,\r\n }\r\n }\r\n\r\n if (isAthenaGatewayError(error)) {\r\n const details = error.toDetails()\r\n return {\r\n message: details.message,\r\n status: details.status,\r\n code: details.code,\r\n details,\r\n raw: source ?? error,\r\n }\r\n }\r\n\r\n if (isRecord(source) && source.errorDetails && isRecord(source.errorDetails)) {\r\n const details = source.errorDetails\r\n return {\r\n message: errorMessageFromUnknown(error ?? source.error),\r\n status: typeof source.status === 'number' ? source.status : undefined,\r\n code: typeof details.code === 'string' ? details.code : undefined,\r\n details,\r\n raw: source,\r\n }\r\n }\r\n\r\n if (isRecord(source) && typeof source.status === 'number') {\r\n return {\r\n message: errorMessageFromUnknown(error),\r\n status: source.status,\r\n details: source,\r\n raw: source,\r\n }\r\n }\r\n\r\n return {\r\n message: errorMessageFromUnknown(error),\r\n raw: source ?? error,\r\n }\r\n}\r\n\r\nexport function isAthenaResponseLike<T>(value: unknown): value is AthenaResponseLike<T> {\r\n if (!isRecord(value)) return false\r\n if ('error' in value || 'errorDetails' in value) return true\r\n if ('status' in value && typeof value.status === 'number') {\r\n return 'data' in value || 'raw' in value\r\n }\r\n return (\r\n 'data' in value &&\r\n ('raw' in value || 'status' in value)\r\n )\r\n}\r\n\r\nexport function normalizeAthenaResult<TQueryFnData, TData = TQueryFnData>(\r\n value: unknown,\r\n select?: (data: TQueryFnData) => TData,\r\n): AthenaQueryResult<TData> {\r\n if (isAthenaResponseLike<TQueryFnData>(value)) {\r\n const status = typeof value.status === 'number' ? value.status : value.error != null ? 500 : 200\r\n if (value.error != null) {\r\n return {\r\n data: undefined,\r\n error: normalizeAthenaError(value.error, value),\r\n status,\r\n raw: value.raw ?? value,\r\n }\r\n }\r\n\r\n const hasData = 'data' in value\r\n const sourceData = hasData\r\n ? (value.data as TQueryFnData | null | undefined)\r\n : undefined\r\n const selectedData =\r\n sourceData === undefined\r\n ? undefined\r\n : sourceData === null\r\n ? (null as unknown as TData)\r\n : select\r\n ? select(sourceData)\r\n : (sourceData as unknown as TData)\r\n\r\n return {\r\n data: selectedData,\r\n error: null,\r\n status,\r\n raw: value.raw ?? value,\r\n }\r\n }\r\n\r\n const sourceData = value as TQueryFnData\r\n const selectedData = select\r\n ? select(sourceData)\r\n : (sourceData as unknown as TData)\r\n\r\n return {\r\n data: selectedData,\r\n error: null,\r\n status: 200,\r\n raw: value,\r\n }\r\n}\r\n","import type {\r\n AthenaMutationDefaults,\r\n AthenaMutationEvent,\r\n AthenaMutationRequestLog,\r\n AthenaMutationResultData,\r\n AthenaMutationState,\r\n AthenaQueryClientConfig,\r\n AthenaQueryDefaults,\r\n AthenaQueryEvent,\r\n AthenaQueryRequestLog,\r\n AthenaQueryResult,\r\n AthenaQueryState,\r\n AthenaRuntimeEvent,\r\n AthenaStateAdapter,\r\n AthenaUnsubscribe,\r\n QueryKey,\r\n} from './types.ts'\r\nimport { normalizeAthenaError, normalizeAthenaResult, runWithRetry, safeSerializeQueryKey } from './utils.ts'\r\n\r\ntype ExecuteQueryInput<TQueryFnData, TData> = {\r\n queryKey: QueryKey\r\n queryKeyToken: string\r\n queryFn: () => Promise<TQueryFnData>\r\n select?: (data: TQueryFnData) => TData\r\n retry?: number | false\r\n retryDelay?: number | ((attempt: number) => number)\r\n dedupe?: boolean\r\n force?: boolean\r\n}\r\n\r\ntype ExecuteMutationInput<TVariables, TMutationFnData, TData> = {\r\n mutationKey?: QueryKey\r\n mutationKeyToken: string\r\n variables: TVariables\r\n mutationFn: (variables: TVariables) => Promise<TMutationFnData>\r\n select?: (data: TMutationFnData) => TData\r\n retry?: number | false\r\n retryDelay?: number | ((attempt: number) => number)\r\n}\r\n\r\ntype QueryEntry = {\r\n key: string\r\n state: AthenaQueryState<unknown>\r\n listeners: Set<() => void>\r\n gcTimer?: ReturnType<typeof setTimeout>\r\n activeRequestId: number\r\n}\r\n\r\ntype MutationEntry = {\r\n key: string\r\n state: AthenaMutationState<unknown, unknown>\r\n listeners: Set<() => void>\r\n gcTimer?: ReturnType<typeof setTimeout>\r\n activeRequestId: number\r\n}\r\n\r\nfunction createInitialQueryState<TData>(initialData?: TData): AthenaQueryState<TData> {\r\n return {\r\n status: initialData === undefined ? 'idle' : 'success',\r\n isFetching: false,\r\n data: initialData,\r\n error: null,\r\n updatedAt: initialData === undefined ? undefined : Date.now(),\r\n }\r\n}\r\n\r\nfunction createInitialMutationState<TVariables, TData>(): AthenaMutationState<TVariables, TData> {\r\n return {\r\n status: 'idle',\r\n data: undefined,\r\n error: null,\r\n isLoading: false,\r\n lastVariables: undefined,\r\n lastResponse: undefined,\r\n updatedAt: undefined,\r\n }\r\n}\r\n\r\nfunction shouldUseMemoryCache(config: AthenaQueryClientConfig): boolean {\r\n return config.cache?.mode === 'memory'\r\n}\r\n\r\nexport class AthenaQueryClient {\r\n private readonly queryEntries = new Map<string, QueryEntry>()\r\n private readonly mutationEntries = new Map<string, MutationEntry>()\r\n private readonly inflightQueries = new Map<string, Promise<AthenaQueryResult<unknown>>>()\r\n private readonly eventSubscribers = new Set<(event: AthenaRuntimeEvent) => void>()\r\n private readonly adapters = new Set<AthenaStateAdapter>()\r\n private requestCounter = 0\r\n\r\n readonly config: AthenaQueryClientConfig\r\n readonly defaultQueryOptions: AthenaQueryDefaults\r\n readonly defaultMutationOptions: AthenaMutationDefaults\r\n\r\n constructor(config: AthenaQueryClientConfig = {}) {\r\n this.config = {\r\n cache: {\r\n mode: config.cache?.mode ?? 'none',\r\n staleTime: config.cache?.staleTime,\r\n gcTime: config.cache?.gcTime,\r\n },\r\n defaultQueryOptions: config.defaultQueryOptions,\r\n defaultMutationOptions: config.defaultMutationOptions,\r\n }\r\n this.defaultQueryOptions = {\r\n retry: config.defaultQueryOptions?.retry ?? 0,\r\n retryDelay: config.defaultQueryOptions?.retryDelay,\r\n refetchOnMount: config.defaultQueryOptions?.refetchOnMount ?? true,\r\n refetchOnWindowFocus: config.defaultQueryOptions?.refetchOnWindowFocus ?? false,\r\n refetchOnReconnect: config.defaultQueryOptions?.refetchOnReconnect ?? false,\r\n }\r\n this.defaultMutationOptions = {\r\n retry: config.defaultMutationOptions?.retry ?? 0,\r\n retryDelay: config.defaultMutationOptions?.retryDelay,\r\n }\r\n }\r\n\r\n getQueryKeyToken(queryKey: QueryKey): string {\r\n return safeSerializeQueryKey(queryKey)\r\n }\r\n\r\n getMutationKeyToken(mutationKey?: QueryKey): string {\r\n if (mutationKey == null) {\r\n return '__mutation__default__'\r\n }\r\n return safeSerializeQueryKey(mutationKey)\r\n }\r\n\r\n getQueryState<TData = unknown>(key: string): AthenaQueryState<TData> {\r\n const entry = this.ensureQueryEntry(key)\r\n return entry.state as AthenaQueryState<TData>\r\n }\r\n\r\n getMutationState<TVariables = unknown, TData = unknown>(\r\n key: string,\r\n ): AthenaMutationState<TVariables, TData> {\r\n const entry = this.ensureMutationEntry(key)\r\n return entry.state as AthenaMutationState<TVariables, TData>\r\n }\r\n\r\n subscribeQuery(key: string, listener: () => void): AthenaUnsubscribe {\r\n const entry = this.ensureQueryEntry(key)\r\n if (entry.gcTimer) {\r\n clearTimeout(entry.gcTimer)\r\n entry.gcTimer = undefined\r\n }\r\n entry.listeners.add(listener)\r\n return () => {\r\n const current = this.queryEntries.get(key)\r\n if (!current) return\r\n current.listeners.delete(listener)\r\n if (current.listeners.size === 0) {\r\n this.scheduleQueryGc(current)\r\n }\r\n }\r\n }\r\n\r\n subscribeMutation(key: string, listener: () => void): AthenaUnsubscribe {\r\n const entry = this.ensureMutationEntry(key)\r\n if (entry.gcTimer) {\r\n clearTimeout(entry.gcTimer)\r\n entry.gcTimer = undefined\r\n }\r\n entry.listeners.add(listener)\r\n return () => {\r\n const current = this.mutationEntries.get(key)\r\n if (!current) return\r\n current.listeners.delete(listener)\r\n if (current.listeners.size === 0) {\r\n this.scheduleMutationGc(current)\r\n }\r\n }\r\n }\r\n\r\n subscribeEvents(listener: (event: AthenaRuntimeEvent) => void): AthenaUnsubscribe {\r\n this.eventSubscribers.add(listener)\r\n return () => {\r\n this.eventSubscribers.delete(listener)\r\n }\r\n }\r\n\r\n attachAdapter(adapter: AthenaStateAdapter): AthenaUnsubscribe {\r\n this.adapters.add(adapter)\r\n return () => {\r\n this.adapters.delete(adapter)\r\n }\r\n }\r\n\r\n resetQuery(queryKey: QueryKey): void {\r\n const key = this.getQueryKeyToken(queryKey)\r\n const entry = this.ensureQueryEntry(key)\r\n entry.activeRequestId = ++this.requestCounter\r\n this.setQueryState(entry, createInitialQueryState(), 'query_reset')\r\n this.inflightQueries.delete(key)\r\n }\r\n\r\n resetMutation(mutationKey?: QueryKey): void {\r\n const key = this.getMutationKeyToken(mutationKey)\r\n const entry = this.ensureMutationEntry(key)\r\n entry.activeRequestId = ++this.requestCounter\r\n this.setMutationState(entry, createInitialMutationState(), 'mutation_reset')\r\n }\r\n\r\n async executeQuery<TQueryFnData, TData = TQueryFnData>(\r\n input: ExecuteQueryInput<TQueryFnData, TData>,\r\n ): Promise<AthenaQueryResult<TData>> {\r\n const entry = this.ensureQueryEntry(input.queryKeyToken)\r\n\r\n if (input.dedupe !== false) {\r\n const existing = this.inflightQueries.get(input.queryKeyToken)\r\n if (existing) {\r\n return existing as Promise<AthenaQueryResult<TData>>\r\n }\r\n }\r\n\r\n if (!input.force && shouldUseMemoryCache(this.config)) {\r\n const staleTime = this.config.cache?.staleTime ?? 0\r\n const hasFreshData =\r\n entry.state.status === 'success' &&\r\n entry.state.data !== undefined &&\r\n entry.state.updatedAt !== undefined &&\r\n Date.now() - entry.state.updatedAt <= staleTime\r\n if (hasFreshData) {\r\n return {\r\n data: entry.state.data as TData,\r\n error: null,\r\n status: 200,\r\n raw: entry.state.lastResponse ?? entry.state.data,\r\n __applied: true,\r\n } as AthenaQueryResult<TData>\r\n }\r\n }\r\n\r\n const requestId = ++this.requestCounter\r\n entry.activeRequestId = requestId\r\n\r\n const startRequestLog: AthenaQueryRequestLog = {\r\n requestId,\r\n queryKey: input.queryKey,\r\n queryKeyToken: input.queryKeyToken,\r\n attempt: 1,\r\n startedAt: Date.now(),\r\n }\r\n\r\n const loadingStatus = entry.state.data === undefined ? 'loading' : entry.state.status\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: loadingStatus,\r\n isFetching: true,\r\n error: null,\r\n lastRequest: startRequestLog,\r\n },\r\n 'query_updated',\r\n )\r\n\r\n const executionPromise = runWithRetry(\r\n async attempt => {\r\n const attemptRequestLog: AthenaQueryRequestLog = {\r\n ...startRequestLog,\r\n attempt,\r\n }\r\n\r\n if (entry.activeRequestId === requestId) {\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n lastRequest: attemptRequestLog,\r\n isFetching: true,\r\n },\r\n 'query_updated',\r\n )\r\n }\r\n\r\n const rawResult = await input.queryFn()\r\n const normalized = normalizeAthenaResult<TQueryFnData, TData>(rawResult, input.select)\r\n\r\n if (normalized.error) {\r\n throw {\r\n __athenaNormalizedError: normalized.error,\r\n __athenaStatus: normalized.status,\r\n __athenaRaw: normalized.raw,\r\n __athenaResponse: rawResult,\r\n }\r\n }\r\n\r\n return {\r\n normalized,\r\n response: rawResult,\r\n attempt,\r\n }\r\n },\r\n {\r\n retry: input.retry,\r\n retryDelay: input.retryDelay,\r\n },\r\n )\r\n .then(result => {\r\n const applied = entry.activeRequestId === requestId\r\n if (applied) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaQueryRequestLog = {\r\n ...startRequestLog,\r\n attempt: result.attempt,\r\n endedAt: finishedAt,\r\n }\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'success',\r\n isFetching: false,\r\n error: null,\r\n data: result.normalized.data,\r\n lastRequest: doneRequestLog,\r\n lastResponse: result.response,\r\n updatedAt: finishedAt,\r\n },\r\n 'query_updated',\r\n )\r\n }\r\n\r\n return {\r\n ...result.normalized,\r\n __applied: applied,\r\n } as AthenaQueryResult<TData>\r\n })\r\n .catch(error => {\r\n const wrapped =\r\n typeof error === 'object' && error !== null ? (error as Record<string, unknown>) : undefined\r\n\r\n const normalizedError = wrapped?.__athenaNormalizedError\r\n ? (wrapped.__athenaNormalizedError as ReturnType<typeof normalizeAthenaError>)\r\n : normalizeAthenaError(error)\r\n\r\n const status =\r\n typeof wrapped?.__athenaStatus === 'number'\r\n ? (wrapped.__athenaStatus as number)\r\n : normalizedError.status ?? 500\r\n\r\n const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null\r\n const response = wrapped?.__athenaResponse ?? raw\r\n\r\n const applied = entry.activeRequestId === requestId\r\n if (applied) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaQueryRequestLog = {\r\n ...startRequestLog,\r\n endedAt: finishedAt,\r\n attempt:\r\n entry.state.lastRequest?.requestId === requestId\r\n ? entry.state.lastRequest.attempt\r\n : startRequestLog.attempt,\r\n }\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'error',\r\n isFetching: false,\r\n error: normalizedError,\r\n lastRequest: doneRequestLog,\r\n lastResponse: response,\r\n updatedAt: finishedAt,\r\n },\r\n 'query_updated',\r\n )\r\n }\r\n\r\n return {\r\n data: undefined,\r\n error: normalizedError,\r\n status,\r\n raw,\r\n __applied: applied,\r\n } as AthenaQueryResult<TData>\r\n })\r\n .finally(() => {\r\n const inflight = this.inflightQueries.get(input.queryKeyToken)\r\n if (inflight === executionPromise) {\r\n this.inflightQueries.delete(input.queryKeyToken)\r\n }\r\n })\r\n\r\n this.inflightQueries.set(input.queryKeyToken, executionPromise as Promise<AthenaQueryResult<unknown>>)\r\n\r\n return executionPromise\r\n }\r\n\r\n async executeMutation<TVariables, TMutationFnData, TData = TMutationFnData>(\r\n input: ExecuteMutationInput<TVariables, TMutationFnData, TData>,\r\n ): Promise<AthenaMutationResultData<TData>> {\r\n const entry = this.ensureMutationEntry(input.mutationKeyToken)\r\n const requestId = ++this.requestCounter\r\n entry.activeRequestId = requestId\r\n\r\n const startRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n requestId,\r\n mutationKey: input.mutationKey,\r\n mutationKeyToken: input.mutationKeyToken,\r\n attempt: 1,\r\n startedAt: Date.now(),\r\n variables: input.variables,\r\n }\r\n\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'loading',\r\n isLoading: true,\r\n error: null,\r\n lastVariables: input.variables,\r\n lastRequest: startRequestLog,\r\n },\r\n 'mutation_updated',\r\n )\r\n\r\n try {\r\n const result = await runWithRetry(\r\n async attempt => {\r\n const attemptRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n ...startRequestLog,\r\n attempt,\r\n }\r\n\r\n if (entry.activeRequestId === requestId) {\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n lastRequest: attemptRequestLog,\r\n isLoading: true,\r\n },\r\n 'mutation_updated',\r\n )\r\n }\r\n\r\n const rawResult = await input.mutationFn(input.variables)\r\n const normalized = normalizeAthenaResult<TMutationFnData, TData>(rawResult, input.select)\r\n if (normalized.error) {\r\n throw {\r\n __athenaNormalizedError: normalized.error,\r\n __athenaStatus: normalized.status,\r\n __athenaRaw: normalized.raw,\r\n __athenaResponse: rawResult,\r\n }\r\n }\r\n\r\n return {\r\n normalized,\r\n response: rawResult,\r\n attempt,\r\n }\r\n },\r\n {\r\n retry: input.retry,\r\n retryDelay: input.retryDelay,\r\n },\r\n )\r\n\r\n if (entry.activeRequestId === requestId) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n ...startRequestLog,\r\n attempt: result.attempt,\r\n endedAt: finishedAt,\r\n }\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'success',\r\n isLoading: false,\r\n data: result.normalized.data,\r\n error: null,\r\n lastVariables: input.variables,\r\n lastRequest: doneRequestLog,\r\n lastResponse: result.response,\r\n updatedAt: finishedAt,\r\n },\r\n 'mutation_updated',\r\n )\r\n }\r\n\r\n return result.normalized\r\n } catch (error) {\r\n const wrapped =\r\n typeof error === 'object' && error !== null ? (error as Record<string, unknown>) : undefined\r\n const normalizedError = wrapped?.__athenaNormalizedError\r\n ? (wrapped.__athenaNormalizedError as ReturnType<typeof normalizeAthenaError>)\r\n : normalizeAthenaError(error)\r\n\r\n const status =\r\n typeof wrapped?.__athenaStatus === 'number'\r\n ? (wrapped.__athenaStatus as number)\r\n : normalizedError.status ?? 500\r\n const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null\r\n const response = wrapped?.__athenaResponse ?? raw\r\n\r\n if (entry.activeRequestId === requestId) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n ...startRequestLog,\r\n endedAt: finishedAt,\r\n attempt:\r\n entry.state.lastRequest?.requestId === requestId\r\n ? entry.state.lastRequest.attempt\r\n : startRequestLog.attempt,\r\n }\r\n\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'error',\r\n isLoading: false,\r\n error: normalizedError,\r\n lastVariables: input.variables,\r\n lastRequest: doneRequestLog,\r\n lastResponse: response,\r\n updatedAt: finishedAt,\r\n },\r\n 'mutation_updated',\r\n )\r\n }\r\n\r\n return {\r\n data: undefined,\r\n error: normalizedError,\r\n status,\r\n raw,\r\n }\r\n }\r\n }\r\n\r\n private ensureQueryEntry(key: string): QueryEntry {\r\n let entry = this.queryEntries.get(key)\r\n if (entry) return entry\r\n\r\n entry = {\r\n key,\r\n state: createInitialQueryState(),\r\n listeners: new Set(),\r\n activeRequestId: 0,\r\n }\r\n this.queryEntries.set(key, entry)\r\n return entry\r\n }\r\n\r\n private ensureMutationEntry(key: string): MutationEntry {\r\n let entry = this.mutationEntries.get(key)\r\n if (entry) return entry\r\n\r\n entry = {\r\n key,\r\n state: createInitialMutationState(),\r\n listeners: new Set(),\r\n activeRequestId: 0,\r\n }\r\n this.mutationEntries.set(key, entry)\r\n return entry\r\n }\r\n\r\n private scheduleQueryGc(entry: QueryEntry): void {\r\n const gcTime = shouldUseMemoryCache(this.config)\r\n ? Math.max(0, this.config.cache?.gcTime ?? 300_000)\r\n : Math.max(0, this.config.cache?.gcTime ?? 0)\r\n\r\n entry.gcTimer = setTimeout(() => {\r\n const current = this.queryEntries.get(entry.key)\r\n if (!current || current.listeners.size > 0) return\r\n this.queryEntries.delete(entry.key)\r\n this.inflightQueries.delete(entry.key)\r\n this.emitEvent({\r\n type: 'query_gc',\r\n key: entry.key,\r\n state: current.state,\r\n timestamp: Date.now(),\r\n })\r\n }, gcTime)\r\n }\r\n\r\n private scheduleMutationGc(entry: MutationEntry): void {\r\n const gcTime = shouldUseMemoryCache(this.config)\r\n ? Math.max(0, this.config.cache?.gcTime ?? 300_000)\r\n : Math.max(0, this.config.cache?.gcTime ?? 0)\r\n\r\n entry.gcTimer = setTimeout(() => {\r\n const current = this.mutationEntries.get(entry.key)\r\n if (!current || current.listeners.size > 0) return\r\n this.mutationEntries.delete(entry.key)\r\n }, gcTime)\r\n }\r\n\r\n private setQueryState(\r\n entry: QueryEntry,\r\n state: AthenaQueryState<unknown>,\r\n eventType: AthenaQueryEvent['type'],\r\n ): void {\r\n entry.state = state\r\n for (const listener of entry.listeners) {\r\n listener()\r\n }\r\n\r\n this.emitEvent({\r\n type: eventType,\r\n key: entry.key,\r\n state,\r\n timestamp: Date.now(),\r\n })\r\n }\r\n\r\n private setMutationState(\r\n entry: MutationEntry,\r\n state: AthenaMutationState<unknown, unknown>,\r\n eventType: AthenaMutationEvent['type'],\r\n ): void {\r\n entry.state = state\r\n for (const listener of entry.listeners) {\r\n listener()\r\n }\r\n\r\n this.emitEvent({\r\n type: eventType,\r\n key: entry.key,\r\n state,\r\n timestamp: Date.now(),\r\n })\r\n }\r\n\r\n private emitEvent(event: AthenaRuntimeEvent): void {\r\n for (const listener of this.eventSubscribers) {\r\n listener(event)\r\n }\r\n\r\n for (const adapter of this.adapters) {\r\n adapter.onEvent?.(event)\r\n if (event.type === 'query_updated' || event.type === 'query_reset' || event.type === 'query_gc') {\r\n adapter.onQueryUpdated?.(event)\r\n }\r\n if (event.type === 'mutation_updated' || event.type === 'mutation_reset') {\r\n adapter.onMutationUpdated?.(event)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function createAthenaQueryClient(config?: AthenaQueryClientConfig): AthenaQueryClient {\r\n return new AthenaQueryClient(config)\r\n}\r\n\r\nexport function attachStateAdapter(\r\n client: AthenaQueryClient,\r\n adapter: AthenaStateAdapter,\r\n): AthenaUnsubscribe {\r\n return client.attachAdapter(adapter)\r\n}\r\n","import { createContext, createElement, useContext, useMemo, type ReactNode } from 'react'\r\nimport type { AthenaQueryClientConfig } from './types.ts'\r\nimport { AthenaQueryClient, createAthenaQueryClient } from './query-client.ts'\r\n\r\nconst AthenaQueryClientContext = createContext<AthenaQueryClient | null>(null)\r\n\r\nexport interface AthenaQueryClientProviderProps {\r\n client?: AthenaQueryClient\r\n config?: AthenaQueryClientConfig\r\n children: ReactNode\r\n}\r\n\r\nexport function AthenaQueryClientProvider(props: AthenaQueryClientProviderProps) {\r\n const memoizedClient = useMemo(() => {\r\n if (props.client) {\r\n return props.client\r\n }\r\n return createAthenaQueryClient(props.config)\r\n }, [props.client, props.config])\r\n\r\n return createElement(\r\n AthenaQueryClientContext.Provider,\r\n { value: memoizedClient },\r\n props.children,\r\n )\r\n}\r\n\r\nexport function useAthenaQueryClient(): AthenaQueryClient {\r\n const client = useContext(AthenaQueryClientContext)\r\n if (!client) {\r\n throw new Error(\r\n 'No AthenaQueryClient found. Wrap your component tree with AthenaQueryClientProvider.',\r\n )\r\n }\r\n return client\r\n}\r\n\r\nexport { AthenaQueryClientContext }\r\n","import {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n} from 'react'\r\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\r\nimport type {\r\n AthenaQueryResult,\r\n AthenaQueryState,\r\n UseQueryOptions,\r\n UseQueryResult,\r\n} from './types.ts'\r\nimport { useAthenaQueryClient } from './provider.ts'\r\n\r\ntype BrowserEventName = 'focus' | 'online'\r\n\r\ntype BrowserTarget = {\r\n addEventListener: (event: BrowserEventName, listener: () => void) => void\r\n removeEventListener: (event: BrowserEventName, listener: () => void) => void\r\n}\r\n\r\nfunction getBrowserTarget(): BrowserTarget | null {\r\n const maybeGlobal = globalThis as unknown as {\r\n addEventListener?: unknown\r\n removeEventListener?: unknown\r\n window?: unknown\r\n }\r\n\r\n const hasListeners = (value: unknown): value is BrowserTarget =>\r\n Boolean(value) &&\r\n typeof value === 'object' &&\r\n typeof (value as BrowserTarget).addEventListener === 'function' &&\r\n typeof (value as BrowserTarget).removeEventListener === 'function'\r\n\r\n if (hasListeners(maybeGlobal.window)) {\r\n return maybeGlobal.window\r\n }\r\n\r\n if (hasListeners(maybeGlobal)) {\r\n return maybeGlobal\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport function useQuery<TQueryFnData, TData = TQueryFnData>(\r\n options: UseQueryOptions<TQueryFnData, TData>,\r\n): UseQueryResult<TData> {\r\n const client = useAthenaQueryClient()\r\n\r\n const queryKeyRef = useRef(options.queryKey)\r\n queryKeyRef.current = options.queryKey\r\n\r\n const queryFnRef = useRef(options.queryFn)\r\n queryFnRef.current = options.queryFn\r\n\r\n const selectRef = useRef(options.select)\r\n selectRef.current = options.select\r\n\r\n const onSuccessRef = useRef(options.onSuccess)\r\n onSuccessRef.current = options.onSuccess\r\n\r\n const onErrorRef = useRef(options.onError)\r\n onErrorRef.current = options.onError\r\n\r\n const onSettledRef = useRef(options.onSettled)\r\n onSettledRef.current = options.onSettled\r\n\r\n const enabledRef = useRef(options.enabled ?? true)\r\n enabledRef.current = options.enabled ?? true\r\n\r\n const retryRef = useRef(options.retry)\r\n retryRef.current = options.retry\r\n\r\n const retryDelayRef = useRef(options.retryDelay)\r\n retryDelayRef.current = options.retryDelay\r\n\r\n const initialDataRef = useRef(options.initialData)\r\n initialDataRef.current = options.initialData\r\n\r\n const refetchOnMountRef = useRef(options.refetchOnMount)\r\n refetchOnMountRef.current = options.refetchOnMount\r\n\r\n const refetchOnWindowFocusRef = useRef(options.refetchOnWindowFocus)\r\n refetchOnWindowFocusRef.current = options.refetchOnWindowFocus\r\n\r\n const refetchOnReconnectRef = useRef(options.refetchOnReconnect)\r\n refetchOnReconnectRef.current = options.refetchOnReconnect\r\n\r\n const queryKeyToken = useMemo(\r\n () => client.getQueryKeyToken(options.queryKey),\r\n [client, options.queryKey],\r\n )\r\n const activeQueryKeyTokenRef = useRef(queryKeyToken)\r\n activeQueryKeyTokenRef.current = queryKeyToken\r\n\r\n const subscribe = useCallback(\r\n (listener: () => void) => client.subscribeQuery(queryKeyToken, listener),\r\n [client, queryKeyToken],\r\n )\r\n\r\n const getSnapshot = useCallback(\r\n () => client.getQueryState<TData>(queryKeyToken),\r\n [client, queryKeyToken],\r\n )\r\n\r\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\r\n\r\n const effectiveSnapshot = useMemo<AthenaQueryState<TData>>(() => {\r\n if (\r\n snapshot.status === 'idle' &&\r\n snapshot.data === undefined &&\r\n initialDataRef.current !== undefined\r\n ) {\r\n return {\r\n ...snapshot,\r\n status: 'success',\r\n data: initialDataRef.current,\r\n error: null,\r\n }\r\n }\r\n return snapshot\r\n }, [snapshot])\r\n\r\n const runQuery = useCallback(\r\n async (force = false): Promise<AthenaQueryResult<TData>> => {\r\n const result = await client.executeQuery<TQueryFnData, TData>({\r\n queryKey: queryKeyRef.current,\r\n queryKeyToken,\r\n queryFn: () => queryFnRef.current(),\r\n select: selectRef.current,\r\n retry:\r\n retryRef.current ??\r\n client.defaultQueryOptions.retry ??\r\n 0,\r\n retryDelay:\r\n retryDelayRef.current ??\r\n client.defaultQueryOptions.retryDelay,\r\n dedupe: true,\r\n force,\r\n })\r\n\r\n const internalResult = result as AthenaQueryResult<TData> & {\r\n __applied?: boolean\r\n }\r\n if (activeQueryKeyTokenRef.current !== queryKeyToken || internalResult.__applied === false) {\r\n return result\r\n }\r\n\r\n if (result.error) {\r\n onErrorRef.current?.(result.error)\r\n onSettledRef.current?.(result.data, result.error)\r\n return result\r\n }\r\n\r\n onSuccessRef.current?.(result.data as TData)\r\n onSettledRef.current?.(result.data, null)\r\n return result\r\n },\r\n [client, queryKeyToken],\r\n )\r\n\r\n const lastAutoKeyRef = useRef<string | null>(null)\r\n\r\n useEffect(() => {\r\n const refetchOnMount =\r\n refetchOnMountRef.current ?? client.defaultQueryOptions.refetchOnMount ?? true\r\n\r\n const isFirstRenderForKey = lastAutoKeyRef.current !== queryKeyToken\r\n lastAutoKeyRef.current = queryKeyToken\r\n\r\n if (!enabledRef.current) {\r\n return\r\n }\r\n\r\n const state = client.getQueryState(queryKeyToken)\r\n const shouldFetch = state.status === 'idle' || (isFirstRenderForKey && refetchOnMount)\r\n\r\n if (shouldFetch) {\r\n void runQuery(false)\r\n }\r\n }, [client, queryKeyToken, runQuery])\r\n\r\n useEffect(() => {\r\n const browser = getBrowserTarget()\r\n if (!browser || !enabledRef.current) {\r\n return undefined\r\n }\r\n\r\n const refetchOnWindowFocus =\r\n refetchOnWindowFocusRef.current ??\r\n client.defaultQueryOptions.refetchOnWindowFocus ??\r\n false\r\n\r\n if (!refetchOnWindowFocus) {\r\n return undefined\r\n }\r\n\r\n const onFocus = () => {\r\n if (!enabledRef.current) return\r\n void runQuery(true)\r\n }\r\n\r\n browser.addEventListener('focus', onFocus)\r\n return () => {\r\n browser.removeEventListener('focus', onFocus)\r\n }\r\n }, [client, runQuery])\r\n\r\n useEffect(() => {\r\n const browser = getBrowserTarget()\r\n if (!browser || !enabledRef.current) {\r\n return undefined\r\n }\r\n\r\n const refetchOnReconnect =\r\n refetchOnReconnectRef.current ??\r\n client.defaultQueryOptions.refetchOnReconnect ??\r\n false\r\n\r\n if (!refetchOnReconnect) {\r\n return undefined\r\n }\r\n\r\n const onReconnect = () => {\r\n if (!enabledRef.current) return\r\n void runQuery(true)\r\n }\r\n\r\n browser.addEventListener('online', onReconnect)\r\n return () => {\r\n browser.removeEventListener('online', onReconnect)\r\n }\r\n }, [client, runQuery])\r\n\r\n const refetch = useCallback(() => runQuery(true), [runQuery])\r\n\r\n const reset = useCallback(() => {\r\n client.resetQuery(queryKeyRef.current)\r\n }, [client])\r\n\r\n return {\r\n data: effectiveSnapshot.data,\r\n error: effectiveSnapshot.error,\r\n isLoading:\r\n effectiveSnapshot.status === 'loading' && effectiveSnapshot.data === undefined,\r\n isFetching: effectiveSnapshot.isFetching,\r\n isSuccess: effectiveSnapshot.status === 'success',\r\n isError: effectiveSnapshot.status === 'error',\r\n status: effectiveSnapshot.status,\r\n refetch,\r\n reset,\r\n lastResponse: effectiveSnapshot.lastResponse,\r\n lastRequest: effectiveSnapshot.lastRequest,\r\n }\r\n}\r\n","import { useCallback, useMemo, useRef } from 'react'\r\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\r\nimport type {\r\n UseMutationOptions,\r\n UseMutationResult,\r\n} from './types.ts'\r\nimport { useAthenaQueryClient } from './provider.ts'\r\n\r\nexport function useMutation<TVariables, TMutationFnData, TData = TMutationFnData>(\r\n options: UseMutationOptions<TVariables, TMutationFnData, TData>,\r\n): UseMutationResult<TVariables, TData> {\r\n const client = useAthenaQueryClient()\r\n\r\n const mutationKeyRef = useRef(options.mutationKey)\r\n mutationKeyRef.current = options.mutationKey\r\n\r\n const mutationFnRef = useRef(options.mutationFn)\r\n mutationFnRef.current = options.mutationFn\r\n\r\n const selectRef = useRef(options.select)\r\n selectRef.current = options.select\r\n\r\n const retryRef = useRef(options.retry)\r\n retryRef.current = options.retry\r\n\r\n const retryDelayRef = useRef(options.retryDelay)\r\n retryDelayRef.current = options.retryDelay\r\n\r\n const onMutateRef = useRef(options.onMutate)\r\n onMutateRef.current = options.onMutate\r\n\r\n const onSuccessRef = useRef(options.onSuccess)\r\n onSuccessRef.current = options.onSuccess\r\n\r\n const onErrorRef = useRef(options.onError)\r\n onErrorRef.current = options.onError\r\n\r\n const onSettledRef = useRef(options.onSettled)\r\n onSettledRef.current = options.onSettled\r\n\r\n const mutationKeyToken = useMemo(\r\n () => client.getMutationKeyToken(options.mutationKey),\r\n [client, options.mutationKey],\r\n )\r\n\r\n const subscribe = useCallback(\r\n (listener: () => void) => client.subscribeMutation(mutationKeyToken, listener),\r\n [client, mutationKeyToken],\r\n )\r\n\r\n const getSnapshot = useCallback(\r\n () => client.getMutationState<TVariables, TData>(mutationKeyToken),\r\n [client, mutationKeyToken],\r\n )\r\n\r\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\r\n\r\n const mutateAsync = useCallback(\r\n async (variables: TVariables): Promise<TData> => {\r\n await onMutateRef.current?.(variables)\r\n\r\n const result = await client.executeMutation<TVariables, TMutationFnData, TData>({\r\n mutationKey: mutationKeyRef.current,\r\n mutationKeyToken,\r\n variables,\r\n mutationFn: currentVariables => mutationFnRef.current(currentVariables),\r\n select: selectRef.current,\r\n retry:\r\n retryRef.current ??\r\n client.defaultMutationOptions.retry ??\r\n 0,\r\n retryDelay:\r\n retryDelayRef.current ??\r\n client.defaultMutationOptions.retryDelay,\r\n })\r\n\r\n if (result.error) {\r\n onErrorRef.current?.(result.error, variables)\r\n onSettledRef.current?.(result.data, result.error, variables)\r\n throw result.error\r\n }\r\n\r\n const data = result.data as TData\r\n onSuccessRef.current?.(data, variables)\r\n onSettledRef.current?.(data, null, variables)\r\n return data\r\n },\r\n [client, mutationKeyToken],\r\n )\r\n\r\n const mutate = useCallback(\r\n (variables: TVariables) => {\r\n void mutateAsync(variables).catch(() => undefined)\r\n },\r\n [mutateAsync],\r\n )\r\n\r\n const reset = useCallback(() => {\r\n client.resetMutation(mutationKeyRef.current)\r\n }, [client])\r\n\r\n return {\r\n mutate,\r\n mutateAsync,\r\n data: snapshot.data,\r\n error: snapshot.error,\r\n isIdle: snapshot.status === 'idle',\r\n isLoading: snapshot.status === 'loading',\r\n isSuccess: snapshot.status === 'success',\r\n isError: snapshot.status === 'error',\r\n status: snapshot.status,\r\n reset,\r\n lastResponse: snapshot.lastResponse,\r\n lastVariables: snapshot.lastVariables,\r\n lastRequest: snapshot.lastRequest,\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/client.ts","../src/gateway/use-athena-gateway.ts","../src/react/utils.ts","../src/react/query-client.ts","../src/react/provider.ts","../src/react/use-query.ts","../src/react/use-mutation.ts","../src/schema/model-form.ts"],"names":["useState","useMemo","useCallback","isRecord","serialized","sourceData","selectedData","createContext","createElement","useContext","useRef","useSyncExternalStore","useEffect"],"mappings":"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","file":"react.cjs","sourcesContent":["import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayMethod,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaRpcFilter,\r\n AthenaUpdatePayload,\r\n AthenaQueryPayload,\r\n} from \"./types.js\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://athena-db.com\";\r\nconst DEFAULT_CLIENT = \"railway_direct\";\r\nconst FALLBACK_SDK_VERSION = \"1.3.0\";\r\nconst SDK_NAME = \"xylex-group/athena\";\r\n\r\nconst SDK_VERSION =\r\n typeof process !== \"undefined\" && process?.env?.npm_package_version\r\n ? process.env.npm_package_version\r\n : FALLBACK_SDK_VERSION;\r\nconst SDK_HEADER_VALUE = `${SDK_NAME} ${SDK_VERSION}`;\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false };\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes(\"application/json\") ?? false;\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false };\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true };\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined;\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get(\"x-request-id\") ??\r\n headers.get(\"x-correlation-id\") ??\r\n headers.get(\"x-athena-request-id\") ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n if (isRecord(payload)) {\r\n const messageCandidates = [payload.error, payload.message, payload.details];\r\n for (const candidate of messageCandidates) {\r\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\r\n return candidate.trim();\r\n }\r\n }\r\n }\r\n\r\n if (typeof payload === \"string\" && payload.trim().length > 0) {\r\n return payload.trim();\r\n }\r\n\r\n return fallback;\r\n}\r\n\r\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\r\n return error.toDetails();\r\n}\r\n\r\nfunction toQueryScalar(value: unknown): string {\r\n if (value === null || value === undefined) return \"null\";\r\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\r\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\r\n return String(value);\r\n}\r\n\r\nfunction toQueryArray(values: unknown[]): string {\r\n return `{${values.map(toQueryScalar).join(\",\")}}`;\r\n}\r\n\r\nfunction toRpcArgumentQueryValue(value: unknown): string {\r\n if (Array.isArray(value)) return toQueryArray(value);\r\n if (value && typeof value === \"object\") return JSON.stringify(value);\r\n return toQueryScalar(value);\r\n}\r\n\r\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\r\n const value = filter.value;\r\n switch (filter.operator) {\r\n case \"in\": {\r\n if (!Array.isArray(value)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\r\n status: 0,\r\n });\r\n }\r\n return `in.${toQueryArray(value)}`;\r\n }\r\n case \"is\":\r\n return `is.${toQueryScalar(value)}`;\r\n case \"eq\":\r\n case \"neq\":\r\n case \"gt\":\r\n case \"gte\":\r\n case \"lt\":\r\n case \"lte\":\r\n case \"like\":\r\n case \"ilike\":\r\n return `${filter.operator}.${toQueryScalar(value)}`;\r\n }\r\n}\r\n\r\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\r\n const functionName = (payload.function_name ?? payload.function).trim();\r\n if (!functionName) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"rpc requires a function name\",\r\n status: 0,\r\n endpoint: \"/gateway/rpc\",\r\n method: \"GET\",\r\n });\r\n }\r\n\r\n const query = new URLSearchParams();\r\n if (payload.schema) query.set(\"schema\", payload.schema);\r\n if (payload.select) query.set(\"select\", payload.select);\r\n if (payload.count) query.set(\"count\", payload.count);\r\n if (payload.head) query.set(\"head\", \"true\");\r\n if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\r\n if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\r\n if (payload.order?.column) {\r\n query.set(\r\n \"order\",\r\n payload.order.ascending === false\r\n ? `${payload.order.column}.desc`\r\n : payload.order.column,\r\n );\r\n }\r\n\r\n if (payload.args) {\r\n for (const [key, value] of Object.entries(payload.args)) {\r\n query.set(key, toRpcArgumentQueryValue(value));\r\n }\r\n }\r\n\r\n if (payload.filters?.length) {\r\n for (const filter of payload.filters) {\r\n if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\r\n status: 0,\r\n });\r\n }\r\n query.set(filter.column, toRpcFilterQueryValue(filter));\r\n }\r\n }\r\n\r\n const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\r\n const queryText = query.toString();\r\n const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\r\n return withQuery as AthenaGatewayEndpointPath;\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? true;\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n };\r\n const headerClient =\r\n extraHeaders[\"x-athena-client\"] ?? extraHeaders[\"X-Athena-Client\"];\r\n const finalClient =\r\n options?.client ??\r\n config.client ??\r\n (typeof headerClient === \"string\" ? headerClient : undefined) ??\r\n DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Athena-Sdk\": SDK_HEADER_VALUE,\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n const finalBackend = options?.backend ?? config.backend;\r\n if (finalBackend) {\r\n const type =\r\n typeof finalBackend === \"string\" ? finalBackend : finalBackend.type;\r\n if (type) headers[\"X-Backend-Type\"] = type;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n const athenaClientKeys = [\"x-athena-client\", \"X-Athena-Client\"];\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n if (athenaClientKeys.includes(key)) return;\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) {\r\n headers[key] = normalized;\r\n }\r\n });\r\n\r\n return headers;\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n const baseUrl = (\r\n options?.baseUrl ??\r\n config.baseUrl ??\r\n DEFAULT_BASE_URL\r\n ).replace(/\\/$/, \"\");\r\n const url = `${baseUrl}${endpoint}`;\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n };\r\n if (method !== \"GET\") {\r\n requestInit.body = JSON.stringify(payload);\r\n }\r\n\r\n const response = await fetch(url, requestInit);\r\n\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway returned malformed JSON\",\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n const parsedPayload = isRecord(parsed) ? parsed : null;\r\n\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\r\n // vs raw array when uncached. Use inner data when present to avoid double nesting.\r\n const payloadData =\r\n parsedPayload && \"data\" in parsedPayload\r\n ? (parsedPayload.data as T)\r\n : (parsed as T);\r\n const payloadCount =\r\n parsedPayload && \"count\" in parsedPayload\r\n ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\r\n ? (parsedPayload.count as number | null)\r\n : undefined\r\n : undefined;\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n data: payloadData ?? null,\r\n count: payloadCount,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while calling ${method} ${endpoint}: ${message}`,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n rpcGateway<T>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n queryGateway<T>(\r\n payload: AthenaQueryPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n return {\r\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\"),\r\n buildHeaders(options) {\r\n return buildHeaders(config, options);\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(config, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(config, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(config, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(config, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n rpcGateway(payload, options) {\r\n if (options?.get) {\r\n const endpoint = buildRpcGetEndpoint(payload);\r\n return callAthena(config, endpoint, \"GET\", null, options);\r\n }\r\n return callAthena(config, \"/gateway/rpc\", \"POST\", payload, options);\r\n },\r\n queryGateway(payload, options) {\r\n return callAthena(config, \"/gateway/query\", \"POST\", payload, options);\r\n },\r\n };\r\n}\r\n","import { useCallback, useMemo, useState } from \"react\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaGatewayCallLog,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayHookConfig,\r\n AthenaGatewayHookResult,\r\n AthenaGatewayMethod,\r\n AthenaGatewayResponse,\r\n AthenaGatewayResponseLog,\r\n AthenaInsertPayload,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaUpdatePayload,\r\n} from \"./types.ts\";\r\nimport { createAthenaGatewayClient } from \"./client.ts\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\n\r\nexport function useAthenaGateway(\r\n config?: AthenaGatewayHookConfig,\r\n): AthenaGatewayHookResult {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [lastRequest, setLastRequest] = useState<AthenaGatewayCallLog | null>(\r\n null,\r\n );\r\n const [lastResponse, setLastResponse] =\r\n useState<AthenaGatewayResponseLog | null>(null);\r\n\r\n const client = useMemo(\r\n () =>\r\n createAthenaGatewayClient({\r\n client: config?.client,\r\n baseUrl: config?.baseUrl,\r\n apiKey: config?.apiKey,\r\n backend: config?.backend,\r\n publishEvent: config?.publishEvent,\r\n headers: config?.headers,\r\n userId: config?.userId,\r\n organizationId: config?.organizationId,\r\n }),\r\n [\r\n config?.baseUrl,\r\n config?.client,\r\n config?.apiKey,\r\n config?.backend,\r\n config?.publishEvent,\r\n config?.headers,\r\n config?.userId,\r\n config?.organizationId,\r\n ],\r\n );\r\n\r\n const callWithLifecycle = useCallback(\r\n async <T>(\r\n fn: () => Promise<AthenaGatewayResponse<T>>,\r\n metadata: {\r\n endpoint: string;\r\n method: string;\r\n payload: unknown;\r\n options?: AthenaGatewayCallOptions;\r\n },\r\n ): Promise<AthenaGatewayResponse<T>> => {\r\n const requestLog: AthenaGatewayCallLog = {\r\n endpoint: metadata.endpoint as AthenaGatewayEndpointPath,\r\n method: metadata.method as AthenaGatewayMethod,\r\n payload: metadata.payload,\r\n headers: client.buildHeaders(metadata.options),\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n setLastRequest(requestLog);\r\n setIsLoading(true);\r\n setError(null);\r\n\r\n let response: AthenaGatewayResponse<T> | undefined;\r\n try {\r\n response = await fn();\r\n setLastResponse({ ...response, timestamp: new Date().toISOString() });\r\n\r\n if (!response.ok) {\r\n const failure = AthenaGatewayError.fromResponse(response, {\r\n endpoint: metadata.endpoint as AthenaGatewayEndpointPath,\r\n method: metadata.method as AthenaGatewayMethod,\r\n });\r\n setError(failure.message);\r\n throw failure;\r\n }\r\n\r\n return response;\r\n } catch (callError) {\r\n const message =\r\n callError instanceof Error ? callError.message : String(callError);\r\n const typedError =\r\n callError instanceof AthenaGatewayError\r\n ? callError\r\n : new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message,\r\n endpoint: metadata.endpoint as AthenaGatewayEndpointPath,\r\n method: metadata.method as AthenaGatewayMethod,\r\n cause: message,\r\n });\r\n setError(message);\r\n setLastResponse({\r\n timestamp: new Date().toISOString(),\r\n status: typedError.status || response?.status || 0,\r\n ok: false,\r\n data: null,\r\n raw: null,\r\n error: typedError.message,\r\n errorDetails: typedError.toDetails(),\r\n });\r\n throw typedError;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n },\r\n [client],\r\n );\r\n\r\n const defaultStripNulls = true;\r\n\r\n const fetchGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaFetchPayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ?? options?.stripNulls ?? defaultStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.fetchGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/fetch\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const insertGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) =>\r\n callWithLifecycle<T>(() => client.insertGateway<T>(payload, options), {\r\n endpoint: \"/gateway/insert\",\r\n method: \"PUT\",\r\n payload,\r\n options,\r\n }),\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const updateGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const normalizedPayload: AthenaUpdatePayload = {\r\n ...payload,\r\n conditions: payload.conditions ?? [],\r\n strip_nulls:\r\n payload.strip_nulls ?? options?.stripNulls ?? defaultStripNulls,\r\n };\r\n return callWithLifecycle<T>(\r\n () => client.updateGateway<T>(normalizedPayload, options),\r\n {\r\n endpoint: \"/gateway/update\",\r\n method: \"POST\",\r\n payload: normalizedPayload,\r\n options,\r\n },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const deleteGateway = useCallback(\r\n <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n if (!payload.resource_id) {\r\n throw new Error(\r\n \"deleteGateway requires resource_id (the unique identifier of the record to delete)\",\r\n );\r\n }\r\n return callWithLifecycle<T>(\r\n () => client.deleteGateway<T>(payload, options),\r\n { endpoint: \"/gateway/delete\", method: \"DELETE\", payload, options },\r\n );\r\n },\r\n [callWithLifecycle, client],\r\n );\r\n\r\n const rpcGateway = useCallback(\r\n <T = unknown>(payload: AthenaRpcPayload, options?: AthenaRpcCallOptions) =>\r\n callWithLifecycle<T>(() => client.rpcGateway<T>(payload, options), {\r\n endpoint: options?.get ? `/rpc/${payload.function}` : \"/gateway/rpc\",\r\n method: options?.get ? \"GET\" : \"POST\",\r\n payload,\r\n options,\r\n }),\r\n [callWithLifecycle, client],\r\n );\r\n\r\n return {\r\n fetchGateway,\r\n insertGateway,\r\n updateGateway,\r\n deleteGateway,\r\n rpcGateway,\r\n isLoading,\r\n error,\r\n lastRequest,\r\n lastResponse,\r\n baseUrl: client.baseUrl,\r\n };\r\n}\r\n","import { isAthenaGatewayError } from '../gateway/errors.ts'\r\nimport type {\r\n AthenaQueryError,\r\n AthenaQueryResult,\r\n AthenaResponseLike,\r\n AthenaRetryCount,\r\n AthenaRetryDelay,\r\n QueryKey,\r\n} from './types.ts'\r\n\r\ntype RetryOptions = {\r\n retry?: AthenaRetryCount\r\n retryDelay?: AthenaRetryDelay\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isPrimitive(value: unknown): value is string | number | boolean | null | undefined {\r\n return value == null || ['string', 'number', 'boolean'].includes(typeof value)\r\n}\r\n\r\nfunction encodePrimitive(value: string | number | boolean | null | undefined): string {\r\n if (value === null) return 'null:0:'\r\n if (value === undefined) return 'undefined:0:'\r\n if (typeof value === 'string') return `str:${value.length}:${value}`\r\n if (typeof value === 'number') {\r\n const serialized = Number.isFinite(value) ? String(value) : 'nan'\r\n return `num:${serialized.length}:${serialized}`\r\n }\r\n const serialized = value ? '1' : '0'\r\n return `bool:${serialized.length}:${serialized}`\r\n}\r\n\r\nfunction stableSerialize(value: unknown, seen: WeakSet<object>): string {\r\n if (value === null) return 'null'\r\n if (value === undefined) return 'undefined'\r\n\r\n const valueType = typeof value\r\n if (valueType === 'string') return `\"${value}\"`\r\n if (valueType === 'number') return Number.isFinite(value as number) ? String(value) : 'null'\r\n if (valueType === 'boolean') return (value as boolean) ? 'true' : 'false'\r\n if (valueType === 'bigint') return `${String(value)}n`\r\n if (valueType === 'symbol') return `symbol:${String(value)}`\r\n if (valueType === 'function') {\r\n const namedFunction = value as { name?: string }\r\n return `function:${namedFunction.name || 'anonymous'}`\r\n }\r\n\r\n if (value instanceof Date) return `date:${value.toISOString()}`\r\n\r\n if (Array.isArray(value)) {\r\n return `[${value.map(item => stableSerialize(item, seen)).join(',')}]`\r\n }\r\n\r\n if (valueType === 'object') {\r\n const objectValue = value as Record<string, unknown>\r\n if (seen.has(objectValue)) return '[circular]'\r\n seen.add(objectValue)\r\n const keys = Object.keys(objectValue).sort()\r\n const serialized = `{${keys\r\n .map(key => `${key}:${stableSerialize(objectValue[key], seen)}`)\r\n .join(',')}}`\r\n seen.delete(objectValue)\r\n return serialized\r\n }\r\n\r\n return String(value)\r\n}\r\n\r\nexport function safeSerializeQueryKey(queryKey: QueryKey): string {\r\n try {\r\n if (typeof queryKey === 'string') {\r\n return `key:${queryKey}`\r\n }\r\n\r\n if (Array.isArray(queryKey) && queryKey.every(isPrimitive)) {\r\n return `arr:${queryKey.map(item => encodePrimitive(item)).join('|')}`\r\n }\r\n\r\n return `ser:${stableSerialize(queryKey, new WeakSet<object>())}`\r\n } catch {\r\n try {\r\n return `fallback:${String(queryKey)}`\r\n } catch {\r\n return 'fallback:[unserializable-query-key]'\r\n }\r\n }\r\n}\r\n\r\nexport function sleep(ms: number): Promise<void> {\r\n if (ms <= 0) return Promise.resolve()\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms)\r\n })\r\n}\r\n\r\nfunction resolveRetryCount(retry: AthenaRetryCount | undefined): number {\r\n if (retry === false || retry == null) return 0\r\n if (!Number.isFinite(retry)) return 0\r\n return Math.max(0, Math.trunc(retry))\r\n}\r\n\r\nfunction resolveRetryDelay(retryDelay: AthenaRetryDelay | undefined, attempt: number): number {\r\n if (typeof retryDelay === 'function') {\r\n const resolved = retryDelay(attempt)\r\n if (!Number.isFinite(resolved)) return 0\r\n return Math.max(0, resolved)\r\n }\r\n if (typeof retryDelay === 'number') {\r\n if (!Number.isFinite(retryDelay)) return 0\r\n return Math.max(0, retryDelay)\r\n }\r\n return 0\r\n}\r\n\r\nexport async function runWithRetry<T>(\r\n execute: (attempt: number) => Promise<T>,\r\n options?: RetryOptions,\r\n): Promise<T> {\r\n const retries = resolveRetryCount(options?.retry)\r\n let attempt = 0\r\n\r\n for (;;) {\r\n attempt += 1\r\n try {\r\n return await execute(attempt)\r\n } catch (error) {\r\n if (attempt > retries) {\r\n throw error\r\n }\r\n const delay = resolveRetryDelay(options?.retryDelay, attempt)\r\n await sleep(delay)\r\n }\r\n }\r\n}\r\n\r\nfunction errorMessageFromUnknown(error: unknown): string {\r\n if (typeof error === 'string' && error.trim()) return error.trim()\r\n if (error instanceof Error && error.message.trim()) return error.message.trim()\r\n if (isRecord(error)) {\r\n const messageCandidate = error.message ?? error.error\r\n if (typeof messageCandidate === 'string' && messageCandidate.trim()) {\r\n return messageCandidate.trim()\r\n }\r\n }\r\n return 'Athena request failed'\r\n}\r\n\r\nexport function normalizeAthenaError(\r\n error: unknown,\r\n source?: unknown,\r\n): AthenaQueryError {\r\n if (\r\n isRecord(error) &&\r\n typeof error.message === 'string' &&\r\n (error.status === undefined || typeof error.status === 'number') &&\r\n (error.code === undefined || typeof error.code === 'string')\r\n ) {\r\n return {\r\n message: error.message,\r\n status: typeof error.status === 'number' ? error.status : undefined,\r\n code: typeof error.code === 'string' ? error.code : undefined,\r\n details: error.details,\r\n raw: error.raw ?? source ?? error,\r\n }\r\n }\r\n\r\n if (isAthenaGatewayError(error)) {\r\n const details = error.toDetails()\r\n return {\r\n message: details.message,\r\n status: details.status,\r\n code: details.code,\r\n details,\r\n raw: source ?? error,\r\n }\r\n }\r\n\r\n if (isRecord(source) && source.errorDetails && isRecord(source.errorDetails)) {\r\n const details = source.errorDetails\r\n return {\r\n message: errorMessageFromUnknown(error ?? source.error),\r\n status: typeof source.status === 'number' ? source.status : undefined,\r\n code: typeof details.code === 'string' ? details.code : undefined,\r\n details,\r\n raw: source,\r\n }\r\n }\r\n\r\n if (isRecord(source) && typeof source.status === 'number') {\r\n return {\r\n message: errorMessageFromUnknown(error),\r\n status: source.status,\r\n details: source,\r\n raw: source,\r\n }\r\n }\r\n\r\n return {\r\n message: errorMessageFromUnknown(error),\r\n raw: source ?? error,\r\n }\r\n}\r\n\r\nexport function isAthenaResponseLike<T>(value: unknown): value is AthenaResponseLike<T> {\r\n if (!isRecord(value)) return false\r\n if ('error' in value || 'errorDetails' in value) return true\r\n if ('status' in value && typeof value.status === 'number') {\r\n return 'data' in value || 'raw' in value\r\n }\r\n return (\r\n 'data' in value &&\r\n ('raw' in value || 'status' in value)\r\n )\r\n}\r\n\r\nexport function normalizeAthenaResult<TQueryFnData, TData = TQueryFnData>(\r\n value: unknown,\r\n select?: (data: TQueryFnData) => TData,\r\n): AthenaQueryResult<TData> {\r\n if (isAthenaResponseLike<TQueryFnData>(value)) {\r\n const status = typeof value.status === 'number' ? value.status : value.error != null ? 500 : 200\r\n if (value.error != null) {\r\n return {\r\n data: undefined,\r\n error: normalizeAthenaError(value.error, value),\r\n status,\r\n raw: value.raw ?? value,\r\n }\r\n }\r\n\r\n const hasData = 'data' in value\r\n const sourceData = hasData\r\n ? (value.data as TQueryFnData | null | undefined)\r\n : undefined\r\n const selectedData =\r\n sourceData === undefined\r\n ? undefined\r\n : sourceData === null\r\n ? (null as unknown as TData)\r\n : select\r\n ? select(sourceData)\r\n : (sourceData as unknown as TData)\r\n\r\n return {\r\n data: selectedData,\r\n error: null,\r\n status,\r\n raw: value.raw ?? value,\r\n }\r\n }\r\n\r\n const sourceData = value as TQueryFnData\r\n const selectedData = select\r\n ? select(sourceData)\r\n : (sourceData as unknown as TData)\r\n\r\n return {\r\n data: selectedData,\r\n error: null,\r\n status: 200,\r\n raw: value,\r\n }\r\n}\r\n","import type {\r\n AthenaMutationDefaults,\r\n AthenaMutationEvent,\r\n AthenaMutationRequestLog,\r\n AthenaMutationResultData,\r\n AthenaMutationState,\r\n AthenaQueryClientConfig,\r\n AthenaQueryDefaults,\r\n AthenaQueryEvent,\r\n AthenaQueryRequestLog,\r\n AthenaQueryResult,\r\n AthenaQueryState,\r\n AthenaRuntimeEvent,\r\n AthenaStateAdapter,\r\n AthenaUnsubscribe,\r\n QueryKey,\r\n} from './types.ts'\r\nimport { normalizeAthenaError, normalizeAthenaResult, runWithRetry, safeSerializeQueryKey } from './utils.ts'\r\n\r\ntype ExecuteQueryInput<TQueryFnData, TData> = {\r\n queryKey: QueryKey\r\n queryKeyToken: string\r\n queryFn: () => Promise<TQueryFnData>\r\n select?: (data: TQueryFnData) => TData\r\n retry?: number | false\r\n retryDelay?: number | ((attempt: number) => number)\r\n dedupe?: boolean\r\n force?: boolean\r\n}\r\n\r\ntype ExecuteMutationInput<TVariables, TMutationFnData, TData> = {\r\n mutationKey?: QueryKey\r\n mutationKeyToken: string\r\n variables: TVariables\r\n mutationFn: (variables: TVariables) => Promise<TMutationFnData>\r\n select?: (data: TMutationFnData) => TData\r\n retry?: number | false\r\n retryDelay?: number | ((attempt: number) => number)\r\n}\r\n\r\ntype QueryEntry = {\r\n key: string\r\n state: AthenaQueryState<unknown>\r\n listeners: Set<() => void>\r\n gcTimer?: ReturnType<typeof setTimeout>\r\n activeRequestId: number\r\n}\r\n\r\ntype MutationEntry = {\r\n key: string\r\n state: AthenaMutationState<unknown, unknown>\r\n listeners: Set<() => void>\r\n gcTimer?: ReturnType<typeof setTimeout>\r\n activeRequestId: number\r\n}\r\n\r\nfunction createInitialQueryState<TData>(initialData?: TData): AthenaQueryState<TData> {\r\n return {\r\n status: initialData === undefined ? 'idle' : 'success',\r\n isFetching: false,\r\n data: initialData,\r\n error: null,\r\n updatedAt: initialData === undefined ? undefined : Date.now(),\r\n }\r\n}\r\n\r\nfunction createInitialMutationState<TVariables, TData>(): AthenaMutationState<TVariables, TData> {\r\n return {\r\n status: 'idle',\r\n data: undefined,\r\n error: null,\r\n isLoading: false,\r\n lastVariables: undefined,\r\n lastResponse: undefined,\r\n updatedAt: undefined,\r\n }\r\n}\r\n\r\nfunction shouldUseMemoryCache(config: AthenaQueryClientConfig): boolean {\r\n return config.cache?.mode === 'memory'\r\n}\r\n\r\nexport class AthenaQueryClient {\r\n private readonly queryEntries = new Map<string, QueryEntry>()\r\n private readonly mutationEntries = new Map<string, MutationEntry>()\r\n private readonly inflightQueries = new Map<string, Promise<AthenaQueryResult<unknown>>>()\r\n private readonly eventSubscribers = new Set<(event: AthenaRuntimeEvent) => void>()\r\n private readonly adapters = new Set<AthenaStateAdapter>()\r\n private requestCounter = 0\r\n\r\n readonly config: AthenaQueryClientConfig\r\n readonly defaultQueryOptions: AthenaQueryDefaults\r\n readonly defaultMutationOptions: AthenaMutationDefaults\r\n\r\n constructor(config: AthenaQueryClientConfig = {}) {\r\n this.config = {\r\n cache: {\r\n mode: config.cache?.mode ?? 'none',\r\n staleTime: config.cache?.staleTime,\r\n gcTime: config.cache?.gcTime,\r\n },\r\n defaultQueryOptions: config.defaultQueryOptions,\r\n defaultMutationOptions: config.defaultMutationOptions,\r\n }\r\n this.defaultQueryOptions = {\r\n retry: config.defaultQueryOptions?.retry ?? 0,\r\n retryDelay: config.defaultQueryOptions?.retryDelay,\r\n refetchOnMount: config.defaultQueryOptions?.refetchOnMount ?? true,\r\n refetchOnWindowFocus: config.defaultQueryOptions?.refetchOnWindowFocus ?? false,\r\n refetchOnReconnect: config.defaultQueryOptions?.refetchOnReconnect ?? false,\r\n }\r\n this.defaultMutationOptions = {\r\n retry: config.defaultMutationOptions?.retry ?? 0,\r\n retryDelay: config.defaultMutationOptions?.retryDelay,\r\n }\r\n }\r\n\r\n getQueryKeyToken(queryKey: QueryKey): string {\r\n return safeSerializeQueryKey(queryKey)\r\n }\r\n\r\n getMutationKeyToken(mutationKey?: QueryKey): string {\r\n if (mutationKey == null) {\r\n return '__mutation__default__'\r\n }\r\n return safeSerializeQueryKey(mutationKey)\r\n }\r\n\r\n getQueryState<TData = unknown>(key: string): AthenaQueryState<TData> {\r\n const entry = this.ensureQueryEntry(key)\r\n return entry.state as AthenaQueryState<TData>\r\n }\r\n\r\n getMutationState<TVariables = unknown, TData = unknown>(\r\n key: string,\r\n ): AthenaMutationState<TVariables, TData> {\r\n const entry = this.ensureMutationEntry(key)\r\n return entry.state as AthenaMutationState<TVariables, TData>\r\n }\r\n\r\n subscribeQuery(key: string, listener: () => void): AthenaUnsubscribe {\r\n const entry = this.ensureQueryEntry(key)\r\n if (entry.gcTimer) {\r\n clearTimeout(entry.gcTimer)\r\n entry.gcTimer = undefined\r\n }\r\n entry.listeners.add(listener)\r\n return () => {\r\n const current = this.queryEntries.get(key)\r\n if (!current) return\r\n current.listeners.delete(listener)\r\n if (current.listeners.size === 0) {\r\n this.scheduleQueryGc(current)\r\n }\r\n }\r\n }\r\n\r\n subscribeMutation(key: string, listener: () => void): AthenaUnsubscribe {\r\n const entry = this.ensureMutationEntry(key)\r\n if (entry.gcTimer) {\r\n clearTimeout(entry.gcTimer)\r\n entry.gcTimer = undefined\r\n }\r\n entry.listeners.add(listener)\r\n return () => {\r\n const current = this.mutationEntries.get(key)\r\n if (!current) return\r\n current.listeners.delete(listener)\r\n if (current.listeners.size === 0) {\r\n this.scheduleMutationGc(current)\r\n }\r\n }\r\n }\r\n\r\n subscribeEvents(listener: (event: AthenaRuntimeEvent) => void): AthenaUnsubscribe {\r\n this.eventSubscribers.add(listener)\r\n return () => {\r\n this.eventSubscribers.delete(listener)\r\n }\r\n }\r\n\r\n attachAdapter(adapter: AthenaStateAdapter): AthenaUnsubscribe {\r\n this.adapters.add(adapter)\r\n return () => {\r\n this.adapters.delete(adapter)\r\n }\r\n }\r\n\r\n resetQuery(queryKey: QueryKey): void {\r\n const key = this.getQueryKeyToken(queryKey)\r\n const entry = this.ensureQueryEntry(key)\r\n entry.activeRequestId = ++this.requestCounter\r\n this.setQueryState(entry, createInitialQueryState(), 'query_reset')\r\n this.inflightQueries.delete(key)\r\n }\r\n\r\n resetMutation(mutationKey?: QueryKey): void {\r\n const key = this.getMutationKeyToken(mutationKey)\r\n const entry = this.ensureMutationEntry(key)\r\n entry.activeRequestId = ++this.requestCounter\r\n this.setMutationState(entry, createInitialMutationState(), 'mutation_reset')\r\n }\r\n\r\n async executeQuery<TQueryFnData, TData = TQueryFnData>(\r\n input: ExecuteQueryInput<TQueryFnData, TData>,\r\n ): Promise<AthenaQueryResult<TData>> {\r\n const entry = this.ensureQueryEntry(input.queryKeyToken)\r\n\r\n if (input.dedupe !== false) {\r\n const existing = this.inflightQueries.get(input.queryKeyToken)\r\n if (existing) {\r\n return existing as Promise<AthenaQueryResult<TData>>\r\n }\r\n }\r\n\r\n if (!input.force && shouldUseMemoryCache(this.config)) {\r\n const staleTime = this.config.cache?.staleTime ?? 0\r\n const hasFreshData =\r\n entry.state.status === 'success' &&\r\n entry.state.data !== undefined &&\r\n entry.state.updatedAt !== undefined &&\r\n Date.now() - entry.state.updatedAt <= staleTime\r\n if (hasFreshData) {\r\n return {\r\n data: entry.state.data as TData,\r\n error: null,\r\n status: 200,\r\n raw: entry.state.lastResponse ?? entry.state.data,\r\n __applied: true,\r\n } as AthenaQueryResult<TData>\r\n }\r\n }\r\n\r\n const requestId = ++this.requestCounter\r\n entry.activeRequestId = requestId\r\n\r\n const startRequestLog: AthenaQueryRequestLog = {\r\n requestId,\r\n queryKey: input.queryKey,\r\n queryKeyToken: input.queryKeyToken,\r\n attempt: 1,\r\n startedAt: Date.now(),\r\n }\r\n\r\n const loadingStatus = entry.state.data === undefined ? 'loading' : entry.state.status\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: loadingStatus,\r\n isFetching: true,\r\n error: null,\r\n lastRequest: startRequestLog,\r\n },\r\n 'query_updated',\r\n )\r\n\r\n const executionPromise = runWithRetry(\r\n async attempt => {\r\n const attemptRequestLog: AthenaQueryRequestLog = {\r\n ...startRequestLog,\r\n attempt,\r\n }\r\n\r\n if (entry.activeRequestId === requestId) {\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n lastRequest: attemptRequestLog,\r\n isFetching: true,\r\n },\r\n 'query_updated',\r\n )\r\n }\r\n\r\n const rawResult = await input.queryFn()\r\n const normalized = normalizeAthenaResult<TQueryFnData, TData>(rawResult, input.select)\r\n\r\n if (normalized.error) {\r\n throw {\r\n __athenaNormalizedError: normalized.error,\r\n __athenaStatus: normalized.status,\r\n __athenaRaw: normalized.raw,\r\n __athenaResponse: rawResult,\r\n }\r\n }\r\n\r\n return {\r\n normalized,\r\n response: rawResult,\r\n attempt,\r\n }\r\n },\r\n {\r\n retry: input.retry,\r\n retryDelay: input.retryDelay,\r\n },\r\n )\r\n .then(result => {\r\n const applied = entry.activeRequestId === requestId\r\n if (applied) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaQueryRequestLog = {\r\n ...startRequestLog,\r\n attempt: result.attempt,\r\n endedAt: finishedAt,\r\n }\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'success',\r\n isFetching: false,\r\n error: null,\r\n data: result.normalized.data,\r\n lastRequest: doneRequestLog,\r\n lastResponse: result.response,\r\n updatedAt: finishedAt,\r\n },\r\n 'query_updated',\r\n )\r\n }\r\n\r\n return {\r\n ...result.normalized,\r\n __applied: applied,\r\n } as AthenaQueryResult<TData>\r\n })\r\n .catch(error => {\r\n const wrapped =\r\n typeof error === 'object' && error !== null ? (error as Record<string, unknown>) : undefined\r\n\r\n const normalizedError = wrapped?.__athenaNormalizedError\r\n ? (wrapped.__athenaNormalizedError as ReturnType<typeof normalizeAthenaError>)\r\n : normalizeAthenaError(error)\r\n\r\n const status =\r\n typeof wrapped?.__athenaStatus === 'number'\r\n ? (wrapped.__athenaStatus as number)\r\n : normalizedError.status ?? 500\r\n\r\n const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null\r\n const response = wrapped?.__athenaResponse ?? raw\r\n\r\n const applied = entry.activeRequestId === requestId\r\n if (applied) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaQueryRequestLog = {\r\n ...startRequestLog,\r\n endedAt: finishedAt,\r\n attempt:\r\n entry.state.lastRequest?.requestId === requestId\r\n ? entry.state.lastRequest.attempt\r\n : startRequestLog.attempt,\r\n }\r\n this.setQueryState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'error',\r\n isFetching: false,\r\n error: normalizedError,\r\n lastRequest: doneRequestLog,\r\n lastResponse: response,\r\n updatedAt: finishedAt,\r\n },\r\n 'query_updated',\r\n )\r\n }\r\n\r\n return {\r\n data: undefined,\r\n error: normalizedError,\r\n status,\r\n raw,\r\n __applied: applied,\r\n } as AthenaQueryResult<TData>\r\n })\r\n .finally(() => {\r\n const inflight = this.inflightQueries.get(input.queryKeyToken)\r\n if (inflight === executionPromise) {\r\n this.inflightQueries.delete(input.queryKeyToken)\r\n }\r\n })\r\n\r\n this.inflightQueries.set(input.queryKeyToken, executionPromise as Promise<AthenaQueryResult<unknown>>)\r\n\r\n return executionPromise\r\n }\r\n\r\n async executeMutation<TVariables, TMutationFnData, TData = TMutationFnData>(\r\n input: ExecuteMutationInput<TVariables, TMutationFnData, TData>,\r\n ): Promise<AthenaMutationResultData<TData>> {\r\n const entry = this.ensureMutationEntry(input.mutationKeyToken)\r\n const requestId = ++this.requestCounter\r\n entry.activeRequestId = requestId\r\n\r\n const startRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n requestId,\r\n mutationKey: input.mutationKey,\r\n mutationKeyToken: input.mutationKeyToken,\r\n attempt: 1,\r\n startedAt: Date.now(),\r\n variables: input.variables,\r\n }\r\n\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'loading',\r\n isLoading: true,\r\n error: null,\r\n lastVariables: input.variables,\r\n lastRequest: startRequestLog,\r\n },\r\n 'mutation_updated',\r\n )\r\n\r\n try {\r\n const result = await runWithRetry(\r\n async attempt => {\r\n const attemptRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n ...startRequestLog,\r\n attempt,\r\n }\r\n\r\n if (entry.activeRequestId === requestId) {\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n lastRequest: attemptRequestLog,\r\n isLoading: true,\r\n },\r\n 'mutation_updated',\r\n )\r\n }\r\n\r\n const rawResult = await input.mutationFn(input.variables)\r\n const normalized = normalizeAthenaResult<TMutationFnData, TData>(rawResult, input.select)\r\n if (normalized.error) {\r\n throw {\r\n __athenaNormalizedError: normalized.error,\r\n __athenaStatus: normalized.status,\r\n __athenaRaw: normalized.raw,\r\n __athenaResponse: rawResult,\r\n }\r\n }\r\n\r\n return {\r\n normalized,\r\n response: rawResult,\r\n attempt,\r\n }\r\n },\r\n {\r\n retry: input.retry,\r\n retryDelay: input.retryDelay,\r\n },\r\n )\r\n\r\n if (entry.activeRequestId === requestId) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n ...startRequestLog,\r\n attempt: result.attempt,\r\n endedAt: finishedAt,\r\n }\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'success',\r\n isLoading: false,\r\n data: result.normalized.data,\r\n error: null,\r\n lastVariables: input.variables,\r\n lastRequest: doneRequestLog,\r\n lastResponse: result.response,\r\n updatedAt: finishedAt,\r\n },\r\n 'mutation_updated',\r\n )\r\n }\r\n\r\n return result.normalized\r\n } catch (error) {\r\n const wrapped =\r\n typeof error === 'object' && error !== null ? (error as Record<string, unknown>) : undefined\r\n const normalizedError = wrapped?.__athenaNormalizedError\r\n ? (wrapped.__athenaNormalizedError as ReturnType<typeof normalizeAthenaError>)\r\n : normalizeAthenaError(error)\r\n\r\n const status =\r\n typeof wrapped?.__athenaStatus === 'number'\r\n ? (wrapped.__athenaStatus as number)\r\n : normalizedError.status ?? 500\r\n const raw = wrapped?.__athenaRaw ?? normalizedError.raw ?? null\r\n const response = wrapped?.__athenaResponse ?? raw\r\n\r\n if (entry.activeRequestId === requestId) {\r\n const finishedAt = Date.now()\r\n const doneRequestLog: AthenaMutationRequestLog<TVariables> = {\r\n ...startRequestLog,\r\n endedAt: finishedAt,\r\n attempt:\r\n entry.state.lastRequest?.requestId === requestId\r\n ? entry.state.lastRequest.attempt\r\n : startRequestLog.attempt,\r\n }\r\n\r\n this.setMutationState(\r\n entry,\r\n {\r\n ...entry.state,\r\n status: 'error',\r\n isLoading: false,\r\n error: normalizedError,\r\n lastVariables: input.variables,\r\n lastRequest: doneRequestLog,\r\n lastResponse: response,\r\n updatedAt: finishedAt,\r\n },\r\n 'mutation_updated',\r\n )\r\n }\r\n\r\n return {\r\n data: undefined,\r\n error: normalizedError,\r\n status,\r\n raw,\r\n }\r\n }\r\n }\r\n\r\n private ensureQueryEntry(key: string): QueryEntry {\r\n let entry = this.queryEntries.get(key)\r\n if (entry) return entry\r\n\r\n entry = {\r\n key,\r\n state: createInitialQueryState(),\r\n listeners: new Set(),\r\n activeRequestId: 0,\r\n }\r\n this.queryEntries.set(key, entry)\r\n return entry\r\n }\r\n\r\n private ensureMutationEntry(key: string): MutationEntry {\r\n let entry = this.mutationEntries.get(key)\r\n if (entry) return entry\r\n\r\n entry = {\r\n key,\r\n state: createInitialMutationState(),\r\n listeners: new Set(),\r\n activeRequestId: 0,\r\n }\r\n this.mutationEntries.set(key, entry)\r\n return entry\r\n }\r\n\r\n private scheduleQueryGc(entry: QueryEntry): void {\r\n const gcTime = shouldUseMemoryCache(this.config)\r\n ? Math.max(0, this.config.cache?.gcTime ?? 300_000)\r\n : Math.max(0, this.config.cache?.gcTime ?? 0)\r\n\r\n entry.gcTimer = setTimeout(() => {\r\n const current = this.queryEntries.get(entry.key)\r\n if (!current || current.listeners.size > 0) return\r\n this.queryEntries.delete(entry.key)\r\n this.inflightQueries.delete(entry.key)\r\n this.emitEvent({\r\n type: 'query_gc',\r\n key: entry.key,\r\n state: current.state,\r\n timestamp: Date.now(),\r\n })\r\n }, gcTime)\r\n }\r\n\r\n private scheduleMutationGc(entry: MutationEntry): void {\r\n const gcTime = shouldUseMemoryCache(this.config)\r\n ? Math.max(0, this.config.cache?.gcTime ?? 300_000)\r\n : Math.max(0, this.config.cache?.gcTime ?? 0)\r\n\r\n entry.gcTimer = setTimeout(() => {\r\n const current = this.mutationEntries.get(entry.key)\r\n if (!current || current.listeners.size > 0) return\r\n this.mutationEntries.delete(entry.key)\r\n }, gcTime)\r\n }\r\n\r\n private setQueryState(\r\n entry: QueryEntry,\r\n state: AthenaQueryState<unknown>,\r\n eventType: AthenaQueryEvent['type'],\r\n ): void {\r\n entry.state = state\r\n for (const listener of entry.listeners) {\r\n listener()\r\n }\r\n\r\n this.emitEvent({\r\n type: eventType,\r\n key: entry.key,\r\n state,\r\n timestamp: Date.now(),\r\n })\r\n }\r\n\r\n private setMutationState(\r\n entry: MutationEntry,\r\n state: AthenaMutationState<unknown, unknown>,\r\n eventType: AthenaMutationEvent['type'],\r\n ): void {\r\n entry.state = state\r\n for (const listener of entry.listeners) {\r\n listener()\r\n }\r\n\r\n this.emitEvent({\r\n type: eventType,\r\n key: entry.key,\r\n state,\r\n timestamp: Date.now(),\r\n })\r\n }\r\n\r\n private emitEvent(event: AthenaRuntimeEvent): void {\r\n for (const listener of this.eventSubscribers) {\r\n listener(event)\r\n }\r\n\r\n for (const adapter of this.adapters) {\r\n adapter.onEvent?.(event)\r\n if (event.type === 'query_updated' || event.type === 'query_reset' || event.type === 'query_gc') {\r\n adapter.onQueryUpdated?.(event)\r\n }\r\n if (event.type === 'mutation_updated' || event.type === 'mutation_reset') {\r\n adapter.onMutationUpdated?.(event)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function createAthenaQueryClient(config?: AthenaQueryClientConfig): AthenaQueryClient {\r\n return new AthenaQueryClient(config)\r\n}\r\n\r\nexport function attachStateAdapter(\r\n client: AthenaQueryClient,\r\n adapter: AthenaStateAdapter,\r\n): AthenaUnsubscribe {\r\n return client.attachAdapter(adapter)\r\n}\r\n","import { createContext, createElement, useContext, useMemo, type ReactNode } from 'react'\r\nimport type { AthenaQueryClientConfig } from './types.ts'\r\nimport { AthenaQueryClient, createAthenaQueryClient } from './query-client.ts'\r\n\r\nconst AthenaQueryClientContext = createContext<AthenaQueryClient | null>(null)\r\n\r\nexport interface AthenaQueryClientProviderProps {\r\n client?: AthenaQueryClient\r\n config?: AthenaQueryClientConfig\r\n children: ReactNode\r\n}\r\n\r\nexport function AthenaQueryClientProvider(props: AthenaQueryClientProviderProps) {\r\n const memoizedClient = useMemo(() => {\r\n if (props.client) {\r\n return props.client\r\n }\r\n return createAthenaQueryClient(props.config)\r\n }, [props.client, props.config])\r\n\r\n return createElement(\r\n AthenaQueryClientContext.Provider,\r\n { value: memoizedClient },\r\n props.children,\r\n )\r\n}\r\n\r\nexport function useAthenaQueryClient(): AthenaQueryClient {\r\n const client = useContext(AthenaQueryClientContext)\r\n if (!client) {\r\n throw new Error(\r\n 'No AthenaQueryClient found. Wrap your component tree with AthenaQueryClientProvider.',\r\n )\r\n }\r\n return client\r\n}\r\n\r\nexport { AthenaQueryClientContext }\r\n","import {\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n} from 'react'\r\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\r\nimport type {\r\n AthenaQueryResult,\r\n AthenaQueryState,\r\n UseQueryOptions,\r\n UseQueryResult,\r\n} from './types.ts'\r\nimport { useAthenaQueryClient } from './provider.ts'\r\n\r\ntype BrowserEventName = 'focus' | 'online'\r\n\r\ntype BrowserTarget = {\r\n addEventListener: (event: BrowserEventName, listener: () => void) => void\r\n removeEventListener: (event: BrowserEventName, listener: () => void) => void\r\n}\r\n\r\nfunction getBrowserTarget(): BrowserTarget | null {\r\n const maybeGlobal = globalThis as unknown as {\r\n addEventListener?: unknown\r\n removeEventListener?: unknown\r\n window?: unknown\r\n }\r\n\r\n const hasListeners = (value: unknown): value is BrowserTarget =>\r\n Boolean(value) &&\r\n typeof value === 'object' &&\r\n typeof (value as BrowserTarget).addEventListener === 'function' &&\r\n typeof (value as BrowserTarget).removeEventListener === 'function'\r\n\r\n if (hasListeners(maybeGlobal.window)) {\r\n return maybeGlobal.window\r\n }\r\n\r\n if (hasListeners(maybeGlobal)) {\r\n return maybeGlobal\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport function useQuery<TQueryFnData, TData = TQueryFnData>(\r\n options: UseQueryOptions<TQueryFnData, TData>,\r\n): UseQueryResult<TData> {\r\n const client = useAthenaQueryClient()\r\n\r\n const queryKeyRef = useRef(options.queryKey)\r\n queryKeyRef.current = options.queryKey\r\n\r\n const queryFnRef = useRef(options.queryFn)\r\n queryFnRef.current = options.queryFn\r\n\r\n const selectRef = useRef(options.select)\r\n selectRef.current = options.select\r\n\r\n const onSuccessRef = useRef(options.onSuccess)\r\n onSuccessRef.current = options.onSuccess\r\n\r\n const onErrorRef = useRef(options.onError)\r\n onErrorRef.current = options.onError\r\n\r\n const onSettledRef = useRef(options.onSettled)\r\n onSettledRef.current = options.onSettled\r\n\r\n const enabledRef = useRef(options.enabled ?? true)\r\n enabledRef.current = options.enabled ?? true\r\n\r\n const retryRef = useRef(options.retry)\r\n retryRef.current = options.retry\r\n\r\n const retryDelayRef = useRef(options.retryDelay)\r\n retryDelayRef.current = options.retryDelay\r\n\r\n const initialDataRef = useRef(options.initialData)\r\n initialDataRef.current = options.initialData\r\n\r\n const refetchOnMountRef = useRef(options.refetchOnMount)\r\n refetchOnMountRef.current = options.refetchOnMount\r\n\r\n const refetchOnWindowFocusRef = useRef(options.refetchOnWindowFocus)\r\n refetchOnWindowFocusRef.current = options.refetchOnWindowFocus\r\n\r\n const refetchOnReconnectRef = useRef(options.refetchOnReconnect)\r\n refetchOnReconnectRef.current = options.refetchOnReconnect\r\n\r\n const queryKeyToken = useMemo(\r\n () => client.getQueryKeyToken(options.queryKey),\r\n [client, options.queryKey],\r\n )\r\n const activeQueryKeyTokenRef = useRef(queryKeyToken)\r\n activeQueryKeyTokenRef.current = queryKeyToken\r\n\r\n const subscribe = useCallback(\r\n (listener: () => void) => client.subscribeQuery(queryKeyToken, listener),\r\n [client, queryKeyToken],\r\n )\r\n\r\n const getSnapshot = useCallback(\r\n () => client.getQueryState<TData>(queryKeyToken),\r\n [client, queryKeyToken],\r\n )\r\n\r\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\r\n\r\n const effectiveSnapshot = useMemo<AthenaQueryState<TData>>(() => {\r\n if (\r\n snapshot.status === 'idle' &&\r\n snapshot.data === undefined &&\r\n initialDataRef.current !== undefined\r\n ) {\r\n return {\r\n ...snapshot,\r\n status: 'success',\r\n data: initialDataRef.current,\r\n error: null,\r\n }\r\n }\r\n return snapshot\r\n }, [snapshot])\r\n\r\n const runQuery = useCallback(\r\n async (force = false): Promise<AthenaQueryResult<TData>> => {\r\n const result = await client.executeQuery<TQueryFnData, TData>({\r\n queryKey: queryKeyRef.current,\r\n queryKeyToken,\r\n queryFn: () => queryFnRef.current(),\r\n select: selectRef.current,\r\n retry:\r\n retryRef.current ??\r\n client.defaultQueryOptions.retry ??\r\n 0,\r\n retryDelay:\r\n retryDelayRef.current ??\r\n client.defaultQueryOptions.retryDelay,\r\n dedupe: true,\r\n force,\r\n })\r\n\r\n const internalResult = result as AthenaQueryResult<TData> & {\r\n __applied?: boolean\r\n }\r\n if (activeQueryKeyTokenRef.current !== queryKeyToken || internalResult.__applied === false) {\r\n return result\r\n }\r\n\r\n if (result.error) {\r\n onErrorRef.current?.(result.error)\r\n onSettledRef.current?.(result.data, result.error)\r\n return result\r\n }\r\n\r\n onSuccessRef.current?.(result.data as TData)\r\n onSettledRef.current?.(result.data, null)\r\n return result\r\n },\r\n [client, queryKeyToken],\r\n )\r\n\r\n const lastAutoKeyRef = useRef<string | null>(null)\r\n\r\n useEffect(() => {\r\n const refetchOnMount =\r\n refetchOnMountRef.current ?? client.defaultQueryOptions.refetchOnMount ?? true\r\n\r\n const isFirstRenderForKey = lastAutoKeyRef.current !== queryKeyToken\r\n lastAutoKeyRef.current = queryKeyToken\r\n\r\n if (!enabledRef.current) {\r\n return\r\n }\r\n\r\n const state = client.getQueryState(queryKeyToken)\r\n const shouldFetch = state.status === 'idle' || (isFirstRenderForKey && refetchOnMount)\r\n\r\n if (shouldFetch) {\r\n void runQuery(false)\r\n }\r\n }, [client, queryKeyToken, runQuery])\r\n\r\n useEffect(() => {\r\n const browser = getBrowserTarget()\r\n if (!browser || !enabledRef.current) {\r\n return undefined\r\n }\r\n\r\n const refetchOnWindowFocus =\r\n refetchOnWindowFocusRef.current ??\r\n client.defaultQueryOptions.refetchOnWindowFocus ??\r\n false\r\n\r\n if (!refetchOnWindowFocus) {\r\n return undefined\r\n }\r\n\r\n const onFocus = () => {\r\n if (!enabledRef.current) return\r\n void runQuery(true)\r\n }\r\n\r\n browser.addEventListener('focus', onFocus)\r\n return () => {\r\n browser.removeEventListener('focus', onFocus)\r\n }\r\n }, [client, runQuery])\r\n\r\n useEffect(() => {\r\n const browser = getBrowserTarget()\r\n if (!browser || !enabledRef.current) {\r\n return undefined\r\n }\r\n\r\n const refetchOnReconnect =\r\n refetchOnReconnectRef.current ??\r\n client.defaultQueryOptions.refetchOnReconnect ??\r\n false\r\n\r\n if (!refetchOnReconnect) {\r\n return undefined\r\n }\r\n\r\n const onReconnect = () => {\r\n if (!enabledRef.current) return\r\n void runQuery(true)\r\n }\r\n\r\n browser.addEventListener('online', onReconnect)\r\n return () => {\r\n browser.removeEventListener('online', onReconnect)\r\n }\r\n }, [client, runQuery])\r\n\r\n const refetch = useCallback(() => runQuery(true), [runQuery])\r\n\r\n const reset = useCallback(() => {\r\n client.resetQuery(queryKeyRef.current)\r\n }, [client])\r\n\r\n return {\r\n data: effectiveSnapshot.data,\r\n error: effectiveSnapshot.error,\r\n isLoading:\r\n effectiveSnapshot.status === 'loading' && effectiveSnapshot.data === undefined,\r\n isFetching: effectiveSnapshot.isFetching,\r\n isSuccess: effectiveSnapshot.status === 'success',\r\n isError: effectiveSnapshot.status === 'error',\r\n status: effectiveSnapshot.status,\r\n refetch,\r\n reset,\r\n lastResponse: effectiveSnapshot.lastResponse,\r\n lastRequest: effectiveSnapshot.lastRequest,\r\n }\r\n}\r\n","import { useCallback, useMemo, useRef } from 'react'\r\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\r\nimport type {\r\n UseMutationOptions,\r\n UseMutationResult,\r\n} from './types.ts'\r\nimport { useAthenaQueryClient } from './provider.ts'\r\n\r\nexport function useMutation<TVariables, TMutationFnData, TData = TMutationFnData>(\r\n options: UseMutationOptions<TVariables, TMutationFnData, TData>,\r\n): UseMutationResult<TVariables, TData> {\r\n const client = useAthenaQueryClient()\r\n\r\n const mutationKeyRef = useRef(options.mutationKey)\r\n mutationKeyRef.current = options.mutationKey\r\n\r\n const mutationFnRef = useRef(options.mutationFn)\r\n mutationFnRef.current = options.mutationFn\r\n\r\n const selectRef = useRef(options.select)\r\n selectRef.current = options.select\r\n\r\n const retryRef = useRef(options.retry)\r\n retryRef.current = options.retry\r\n\r\n const retryDelayRef = useRef(options.retryDelay)\r\n retryDelayRef.current = options.retryDelay\r\n\r\n const onMutateRef = useRef(options.onMutate)\r\n onMutateRef.current = options.onMutate\r\n\r\n const onSuccessRef = useRef(options.onSuccess)\r\n onSuccessRef.current = options.onSuccess\r\n\r\n const onErrorRef = useRef(options.onError)\r\n onErrorRef.current = options.onError\r\n\r\n const onSettledRef = useRef(options.onSettled)\r\n onSettledRef.current = options.onSettled\r\n\r\n const mutationKeyToken = useMemo(\r\n () => client.getMutationKeyToken(options.mutationKey),\r\n [client, options.mutationKey],\r\n )\r\n\r\n const subscribe = useCallback(\r\n (listener: () => void) => client.subscribeMutation(mutationKeyToken, listener),\r\n [client, mutationKeyToken],\r\n )\r\n\r\n const getSnapshot = useCallback(\r\n () => client.getMutationState<TVariables, TData>(mutationKeyToken),\r\n [client, mutationKeyToken],\r\n )\r\n\r\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\r\n\r\n const mutateAsync = useCallback(\r\n async (variables: TVariables): Promise<TData> => {\r\n await onMutateRef.current?.(variables)\r\n\r\n const result = await client.executeMutation<TVariables, TMutationFnData, TData>({\r\n mutationKey: mutationKeyRef.current,\r\n mutationKeyToken,\r\n variables,\r\n mutationFn: currentVariables => mutationFnRef.current(currentVariables),\r\n select: selectRef.current,\r\n retry:\r\n retryRef.current ??\r\n client.defaultMutationOptions.retry ??\r\n 0,\r\n retryDelay:\r\n retryDelayRef.current ??\r\n client.defaultMutationOptions.retryDelay,\r\n })\r\n\r\n if (result.error) {\r\n onErrorRef.current?.(result.error, variables)\r\n onSettledRef.current?.(result.data, result.error, variables)\r\n throw result.error\r\n }\r\n\r\n const data = result.data as TData\r\n onSuccessRef.current?.(data, variables)\r\n onSettledRef.current?.(data, null, variables)\r\n return data\r\n },\r\n [client, mutationKeyToken],\r\n )\r\n\r\n const mutate = useCallback(\r\n (variables: TVariables) => {\r\n void mutateAsync(variables).catch(() => undefined)\r\n },\r\n [mutateAsync],\r\n )\r\n\r\n const reset = useCallback(() => {\r\n client.resetMutation(mutationKeyRef.current)\r\n }, [client])\r\n\r\n return {\r\n mutate,\r\n mutateAsync,\r\n data: snapshot.data,\r\n error: snapshot.error,\r\n isIdle: snapshot.status === 'idle',\r\n isLoading: snapshot.status === 'loading',\r\n isSuccess: snapshot.status === 'success',\r\n isError: snapshot.status === 'error',\r\n status: snapshot.status,\r\n reset,\r\n lastResponse: snapshot.lastResponse,\r\n lastVariables: snapshot.lastVariables,\r\n lastRequest: snapshot.lastRequest,\r\n }\r\n}\r\n","import type { AnyModelDef, InsertOf, RowOf, UpdateOf } from './types.ts'\r\n\r\ntype ModelValueRecord = Record<string, unknown>\r\n\r\nexport type ModelFormNullishMode = 'empty-string' | 'undefined' | 'null'\r\n\r\ntype NullishValueByMode = {\r\n 'empty-string': ''\r\n undefined: undefined\r\n null: null\r\n}\r\n\r\ntype MapNullableToFormValue<TField, TMode extends ModelFormNullishMode> =\r\n null extends TField\r\n ? Exclude<TField, null> | NullishValueByMode[TMode]\r\n : TField\r\n\r\n/**\r\n * Form value shape derived from a model insert payload.\r\n * Nullable fields are remapped to the selected nullish representation.\r\n */\r\nexport type ModelFormValues<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = {\r\n [K in keyof InsertOf<TModel>]: MapNullableToFormValue<InsertOf<TModel>[K], TMode>\r\n}\r\n\r\n/**\r\n * Default value shape for form initialization.\r\n */\r\nexport type ModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = Partial<ModelFormValues<TModel, TMode>>\r\n\r\nexport interface ToModelFormDefaultsOptions<TMode extends ModelFormNullishMode = 'empty-string'> {\r\n /**\r\n * Controls how nullable model values are represented in form defaults.\r\n * - `empty-string` (default): `null -> \"\"`\r\n * - `undefined`: `null -> undefined`\r\n * - `null`: keeps `null`\r\n */\r\n nullishMode?: TMode\r\n}\r\n\r\nexport interface ToModelPayloadOptions {\r\n /**\r\n * Converts `\"\"` into `null` for nullable model fields.\r\n * Defaults to `true`.\r\n */\r\n emptyStringAsNull?: boolean\r\n /**\r\n * Omits `undefined` keys from the outgoing payload.\r\n * Defaults to `true`.\r\n */\r\n stripUndefined?: boolean\r\n}\r\n\r\nfunction resolveNullishValue(mode: ModelFormNullishMode): '' | undefined | null {\r\n if (mode === 'undefined') return undefined\r\n if (mode === 'null') return null\r\n return ''\r\n}\r\n\r\nfunction isRecord(value: unknown): value is ModelValueRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isNullableColumn(model: AnyModelDef, key: string): boolean {\r\n const nullable = model.meta.nullable as Partial<Record<string, boolean>> | undefined\r\n return nullable?.[key] === true\r\n}\r\n\r\n/**\r\n * Normalizes model data into form-safe defaults using model nullability metadata.\r\n */\r\nexport function toModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n>(\r\n model: TModel,\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n): ModelFormDefaults<TModel, TMode> {\r\n const source = values as ModelValueRecord | null | undefined\r\n if (!isRecord(source)) {\r\n return {} as ModelFormDefaults<TModel, TMode>\r\n }\r\n\r\n const mode = options?.nullishMode ?? ('empty-string' as TMode)\r\n const nullishValue = resolveNullishValue(mode)\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value === null && isNullableColumn(model, key)) {\r\n result[key] = nullishValue\r\n continue\r\n }\r\n result[key] = value\r\n }\r\n\r\n return result as ModelFormDefaults<TModel, TMode>\r\n}\r\n\r\n/**\r\n * Normalizes form values back into model-compatible insert/update payloads.\r\n */\r\nexport function toModelPayload<TModel extends AnyModelDef>(\r\n model: TModel,\r\n formValues: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n): Partial<InsertOf<TModel>> {\r\n const emptyStringAsNull = options?.emptyStringAsNull ?? true\r\n const stripUndefined = options?.stripUndefined ?? true\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, rawValue] of Object.entries(formValues as ModelValueRecord)) {\r\n if (rawValue === undefined && stripUndefined) {\r\n continue\r\n }\r\n\r\n if (emptyStringAsNull && rawValue === '' && isNullableColumn(model, key)) {\r\n result[key] = null\r\n continue\r\n }\r\n\r\n result[key] = rawValue\r\n }\r\n\r\n return result as Partial<InsertOf<TModel>>\r\n}\r\n\r\n/**\r\n * Runtime form adapter bound to a model contract.\r\n */\r\nexport interface ModelFormAdapter<TModel extends AnyModelDef> {\r\n model: TModel\r\n toDefaults<TMode extends ModelFormNullishMode = 'empty-string'>(\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n ): ModelFormDefaults<TModel, TMode>\r\n toInsert(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<InsertOf<TModel>>\r\n toUpdate(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<UpdateOf<TModel>>\r\n}\r\n\r\n/**\r\n * Creates a small model-aware adapter for form defaults and payload normalization.\r\n */\r\nexport function createModelFormAdapter<TModel extends AnyModelDef>(model: TModel): ModelFormAdapter<TModel> {\r\n return {\r\n model,\r\n toDefaults(values, options) {\r\n return toModelFormDefaults(model, values, options)\r\n },\r\n toInsert(values, options) {\r\n return toModelPayload(model, values, options) as Partial<InsertOf<TModel>>\r\n },\r\n toUpdate(values, options) {\r\n return toModelPayload(model, values, options) as Partial<UpdateOf<TModel>>\r\n },\r\n }\r\n}\r\n"]}
|
package/dist/react.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
export { A as AthenaGatewayError, i as isAthenaGatewayError } from './
|
|
1
|
+
import { L as AthenaGatewayHookConfig, N as AthenaGatewayHookResult } from './types-BnzoaNRC.cjs';
|
|
2
|
+
export { O as AthenaDeletePayload, P as AthenaFetchPayload, f as AthenaGatewayCallOptions, r as AthenaGatewayErrorCode, g as AthenaGatewayErrorDetails, Q as AthenaGatewayResponse, V as AthenaInsertPayload, s as AthenaJsonArray, h as AthenaJsonObject, t as AthenaJsonPrimitive, A as AthenaJsonValue, i as AthenaRpcCallOptions, u as AthenaRpcFilter, v as AthenaRpcFilterOperator, w as AthenaRpcOrder, x as AthenaRpcPayload, W as AthenaUpdatePayload } from './types-BnzoaNRC.cjs';
|
|
3
|
+
export { A as AthenaGatewayError, M as ModelFormAdapter, a as ModelFormDefaults, b as ModelFormNullishMode, c as ModelFormValues, T as ToModelFormDefaultsOptions, d as ToModelPayloadOptions, e as createModelFormAdapter, i as isAthenaGatewayError, t as toModelFormDefaults, f as toModelPayload } from './model-form-DkS48fsh.cjs';
|
|
4
4
|
import * as react from 'react';
|
|
5
5
|
import { ReactNode } from 'react';
|
|
6
6
|
|