ponder 0.9.2 → 0.9.4-debug.1

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.
Files changed (58) hide show
  1. package/dist/bin/ponder.js +2470 -3762
  2. package/dist/bin/ponder.js.map +1 -1
  3. package/dist/chunk-6AOFLZJ4.js +1692 -0
  4. package/dist/chunk-6AOFLZJ4.js.map +1 -0
  5. package/dist/chunk-DZFRP3KH.js +70 -0
  6. package/dist/chunk-DZFRP3KH.js.map +1 -0
  7. package/dist/{chunk-IFTUFVCL.js → chunk-MJKRYIBO.js} +3 -73
  8. package/dist/chunk-MJKRYIBO.js.map +1 -0
  9. package/dist/db-in86nyw7.d.ts +625 -0
  10. package/dist/experimental_unsafe_stores.d.ts +375 -0
  11. package/dist/experimental_unsafe_stores.js +11 -0
  12. package/dist/experimental_unsafe_stores.js.map +1 -0
  13. package/dist/index.d.ts +17 -429
  14. package/dist/index.js +4 -2
  15. package/dist/index.js.map +1 -1
  16. package/package.json +5 -1
  17. package/src/bin/commands/codegen.ts +8 -10
  18. package/src/bin/commands/dev.ts +30 -42
  19. package/src/bin/commands/list.ts +9 -14
  20. package/src/bin/commands/serve.ts +26 -39
  21. package/src/bin/commands/start.ts +29 -42
  22. package/src/bin/utils/{shutdown.ts → exit.ts} +23 -37
  23. package/src/bin/utils/run.ts +275 -175
  24. package/src/bin/utils/runServer.ts +1 -5
  25. package/src/build/configAndIndexingFunctions.ts +547 -512
  26. package/src/build/index.ts +5 -8
  27. package/src/build/pre.ts +3 -0
  28. package/src/config/index.ts +9 -6
  29. package/src/database/index.ts +72 -72
  30. package/src/drizzle/kit/index.ts +3 -3
  31. package/src/experimental_unsafe_stores.ts +4 -0
  32. package/src/indexing/index.ts +0 -4
  33. package/src/indexing/service.ts +31 -93
  34. package/src/indexing-store/historical.ts +2 -4
  35. package/src/internal/common.ts +2 -0
  36. package/src/internal/errors.ts +9 -9
  37. package/src/internal/logger.ts +1 -1
  38. package/src/internal/metrics.ts +75 -103
  39. package/src/internal/shutdown.ts +25 -0
  40. package/src/internal/telemetry.ts +16 -18
  41. package/src/internal/types.ts +9 -1
  42. package/src/server/index.ts +3 -5
  43. package/src/sync/events.ts +4 -4
  44. package/src/sync/filter.ts +1 -0
  45. package/src/sync/index.ts +1046 -805
  46. package/src/sync-historical/index.ts +0 -37
  47. package/src/sync-realtime/index.ts +48 -48
  48. package/src/sync-store/encoding.ts +5 -5
  49. package/src/sync-store/index.ts +5 -23
  50. package/src/ui/index.ts +2 -11
  51. package/src/utils/checkpoint.ts +17 -3
  52. package/src/utils/chunk.ts +7 -0
  53. package/src/utils/generators.ts +66 -0
  54. package/src/utils/mutex.ts +34 -0
  55. package/src/utils/partition.ts +41 -0
  56. package/src/utils/requestQueue.ts +19 -10
  57. package/src/utils/zipper.ts +80 -0
  58. package/dist/chunk-IFTUFVCL.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/index.ts","../src/config/address.ts","../src/index.ts","../src/client/index.ts","../src/client/validate.ts","../src/ui/graphiql.html.ts","../src/graphql/middleware.ts","../src/graphql/index.ts","../src/graphql/json.ts"],"sourcesContent":["import type { Prettify } from \"@/types/utils.js\";\nimport type { Abi } from \"abitype\";\nimport type { Narrow, Transport } from \"viem\";\nimport type { AddressConfig } from \"./address.js\";\nimport type { GetEventFilter } from \"./eventFilter.js\";\n\nexport type Config = {\n networks: { [networkName: string]: NetworkConfig<unknown> };\n contracts: { [contractName: string]: GetContract };\n accounts: { [accountName: string]: AccountConfig<unknown> };\n database?: DatabaseConfig;\n blocks: {\n [sourceName: string]: GetBlockFilter<unknown>;\n };\n};\n\nexport type CreateConfigReturnType<networks, contracts, accounts, blocks> = {\n networks: networks;\n contracts: contracts;\n accounts: accounts;\n database?: DatabaseConfig;\n blocks: blocks;\n};\n\nexport const createConfig = <\n const networks,\n const contracts = {},\n const accounts = {},\n const blocks = {},\n>(config: {\n database?: DatabaseConfig;\n // TODO: add jsdoc to these properties.\n networks: NetworksConfig<Narrow<networks>>;\n contracts?: ContractsConfig<networks, Narrow<contracts>>;\n accounts?: AccountsConfig<networks, Narrow<accounts>>;\n blocks?: BlockFiltersConfig<networks, blocks>;\n}): CreateConfigReturnType<networks, contracts, accounts, blocks> =>\n config as Prettify<\n CreateConfigReturnType<networks, contracts, accounts, blocks>\n >;\n\n// database\n\ntype DatabaseConfig =\n | {\n kind: \"pglite\";\n /** Directory path to use for PGlite database files. Default: `\".ponder/pglite\"`. */\n directory?: string;\n }\n | {\n kind: \"postgres\";\n /** Postgres database connection string. Default: `DATABASE_PRIVATE_URL` > `DATABASE_URL` environment variable. */\n connectionString?: string;\n /** Postgres pool configuration passed to `node-postgres`. */\n poolConfig?: {\n /** Maximum number of clients in the pool. Default: `30`. */\n max?: number;\n };\n };\n\n// base\n\ntype BlockConfig = {\n /** Block number at which to start indexing events (inclusive). If `undefined`, events will be processed from block 0. Default: `undefined`. */\n startBlock?: number;\n /** Block number at which to stop indexing events (inclusive). If `undefined`, events will be processed in real-time. Default: `undefined`. */\n endBlock?: number;\n};\n\ntype TransactionReceiptConfig = {\n includeTransactionReceipts?: boolean;\n};\n\ntype FunctionCallConfig = {\n /*\n * Enable call trace indexing for this contract.\n *\n * - Docs: https://ponder.sh/docs/indexing/call-traces\n */\n includeCallTraces?: boolean;\n};\n\n// network\n\ntype NetworkConfig<network> = {\n /** Chain ID of the network. */\n chainId: network extends { chainId: infer chainId extends number }\n ? chainId | number\n : number;\n /** A viem `http`, `webSocket`, or `fallback` [Transport](https://viem.sh/docs/clients/transports/http.html).\n *\n * __To avoid rate limiting, include a custom RPC URL.__ Usage:\n *\n * ```ts\n * import { http } from \"viem\";\n *\n * const network = {\n * name: \"mainnet\",\n * chainId: 1,\n * transport: http(\"https://eth-mainnet.g.alchemy.com/v2/...\"),\n * }\n * ```\n */\n transport: Transport;\n /** Polling interval (in ms). Default: `1_000`. */\n pollingInterval?: number;\n /** Maximum number of RPC requests per second. Default: `50`. */\n maxRequestsPerSecond?: number;\n /** Disable RPC request caching. Default: `false`. */\n disableCache?: boolean;\n};\n\ntype NetworksConfig<networks> = {} extends networks\n ? {}\n : {\n [networkName in keyof networks]: NetworkConfig<networks[networkName]>;\n };\n\n// contracts\n\ntype AbiConfig<abi extends Abi | readonly unknown[]> = {\n /** Contract application byte interface. */\n abi: abi;\n};\n\ntype GetContractNetwork<\n networks,\n abi extends Abi,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = {\n /**\n * Network that this contract is deployed to. Must match a network name in `networks`.\n * Any filter information overrides the values in the higher level \"contracts\" property.\n */\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: Prettify<\n AddressConfig &\n GetEventFilter<abi> &\n TransactionReceiptConfig &\n FunctionCallConfig &\n BlockConfig\n >;\n };\n};\n\ntype ContractConfig<networks, abi extends Abi> = Prettify<\n AbiConfig<abi> &\n GetContractNetwork<networks, abi> &\n AddressConfig &\n GetEventFilter<abi> &\n TransactionReceiptConfig &\n FunctionCallConfig &\n BlockConfig\n>;\n\ntype GetContract<networks = unknown, contract = unknown> = contract extends {\n abi: infer abi extends Abi;\n}\n ? // 1. Contract has a valid abi\n ContractConfig<networks, abi>\n : // 2. Contract has an invalid abi\n ContractConfig<networks, Abi>;\n\ntype ContractsConfig<networks, contracts> = {} extends contracts\n ? // contracts empty, return empty\n {}\n : {\n [name in keyof contracts]: GetContract<networks, contracts[name]>;\n };\n\n// accounts\n\ntype GetAccountNetwork<\n networks,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = {\n /**\n * Network that this account is deployed to. Must match a network name in `networks`.\n * Any filter information overrides the values in the higher level \"accounts\" property.\n */\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: Prettify<\n AddressConfig & TransactionReceiptConfig & BlockConfig\n >;\n };\n};\n\ntype AccountConfig<networks> = Prettify<\n GetAccountNetwork<networks> &\n Required<AddressConfig> &\n TransactionReceiptConfig &\n BlockConfig\n>;\n\ntype AccountsConfig<networks, accounts> = {} extends accounts\n ? {}\n : {\n [name in keyof accounts]: AccountConfig<networks>;\n };\n\n// blocks\n\ntype BlockFilterConfig = {\n /** Block number at which to start indexing events (inclusive). If `undefined`, events will be processed from block 0. Default: `undefined`. */\n startBlock?: number;\n /** Block number at which to stop indexing events (inclusive). If `undefined`, events will be processed in real-time. Default: `undefined`. */\n endBlock?: number;\n interval?: number;\n};\n\ntype GetBlockFilter<\n networks,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = BlockFilterConfig & {\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: BlockFilterConfig;\n };\n};\n\ntype BlockFiltersConfig<\n networks = unknown,\n blocks = unknown,\n> = {} extends blocks\n ? {}\n : {\n [name in keyof blocks]: GetBlockFilter<networks>;\n };\n","import type { AbiEvent } from \"viem\";\n\nexport type Factory<event extends AbiEvent = AbiEvent> = {\n /** Address of the factory contract that creates this contract. */\n address: `0x${string}` | readonly `0x${string}`[];\n /** ABI event that announces the creation of a new instance of this contract. */\n event: event;\n /** Name of the factory event parameter that contains the new child contract address. */\n parameter: Exclude<event[\"inputs\"][number][\"name\"], undefined>;\n};\n\nexport const factory = <event extends AbiEvent>(factory: Factory<event>) =>\n factory;\n\nexport type AddressConfig = {\n address?: `0x${string}` | readonly `0x${string}`[] | Factory;\n};\n","export { createConfig } from \"@/config/index.js\";\nexport { factory } from \"@/config/address.js\";\nexport type {\n Block,\n Log,\n Transaction,\n TransactionReceipt,\n} from \"@/types/eth.js\";\nexport type { Virtual } from \"@/types/virtual.js\";\nexport {\n type MergeAbis,\n type ReplaceBigInts,\n mergeAbis,\n loadBalance,\n rateLimit,\n replaceBigInts,\n} from \"@ponder/utils\";\n\nimport type { Config } from \"@/config/index.js\";\nimport type { Prettify } from \"./types/utils.js\";\n\nexport type ContractConfig = Prettify<Config[\"contracts\"][string]>;\nexport type NetworkConfig = Prettify<Config[\"networks\"][string]>;\nexport type BlockConfig = Prettify<Config[\"blocks\"][string]>;\nexport type DatabaseConfig = Prettify<Config[\"database\"]>;\n\nexport {\n onchainTable,\n onchainEnum,\n primaryKey,\n hex,\n bigint,\n} from \"@/drizzle/onchain.js\";\n\nexport type { ReadonlyDrizzle } from \"@/types/db.js\";\n\nexport { client } from \"@/client/index.js\";\n\nexport { graphql } from \"@/graphql/middleware.js\";\n\nexport {\n sql,\n eq,\n gt,\n gte,\n lt,\n lte,\n ne,\n isNull,\n isNotNull,\n inArray,\n notInArray,\n exists,\n notExists,\n between,\n notBetween,\n like,\n notLike,\n ilike,\n notIlike,\n not,\n asc,\n desc,\n and,\n or,\n count,\n countDistinct,\n avg,\n avgDistinct,\n sum,\n sumDistinct,\n max,\n min,\n relations,\n} from \"drizzle-orm\";\n\nexport {\n bigint as int8,\n boolean,\n char,\n cidr,\n date,\n doublePrecision,\n inet,\n integer,\n interval,\n json,\n jsonb,\n line,\n macaddr,\n macaddr8,\n numeric,\n point,\n real,\n smallint,\n text,\n time,\n timestamp,\n uuid,\n varchar,\n index,\n uniqueIndex,\n alias,\n foreignKey,\n union,\n unionAll,\n intersect,\n intersectAll,\n except,\n exceptAll,\n} from \"drizzle-orm/pg-core\";\n","import type { Schema } from \"@/internal/types.js\";\nimport type { ReadonlyDrizzle } from \"@/types/db.js\";\nimport { promiseWithResolvers } from \"@ponder/common\";\nimport type { QueryWithTypings } from \"drizzle-orm\";\nimport { type PgSession, pgTable } from \"drizzle-orm/pg-core\";\nimport { createMiddleware } from \"hono/factory\";\nimport { streamSSE } from \"hono/streaming\";\nimport superjson from \"superjson\";\nimport { validateQuery } from \"./validate.js\";\n\nconst status = pgTable(\"_ponder_status\", (t) => ({\n chainId: t.bigint({ mode: \"number\" }).primaryKey(),\n blockNumber: t.bigint({ mode: \"number\" }),\n blockTimestamp: t.bigint({ mode: \"number\" }),\n ready: t.boolean().notNull(),\n}));\n\n/**\n * Middleware for `@ponder/client`.\n *\n * @param db - Drizzle database instance\n * @param schema - Ponder schema\n *\n * @example\n * ```ts\n * import { db } from \"ponder:api\";\n * import schema from \"ponder:schema\";\n * import { Hono } from \"hono\";\n * import { client } from \"ponder\";\n *\n * const app = new Hono();\n *\n * app.use(\"/sql/*\", client({ db, schema }));\n *\n * export default app;\n * ```\n */\nexport const client = ({\n db,\n}: { db: ReadonlyDrizzle<Schema>; schema: Schema }) => {\n // @ts-ignore\n const session: PgSession = db._.session;\n const driver = globalThis.PONDER_DATABASE.driver;\n let statusResolver = promiseWithResolvers<void>();\n\n const channel = `${globalThis.PONDER_NAMESPACE_BUILD}_status_channel`;\n\n if (\"instance\" in driver) {\n driver.instance.query(`LISTEN \"${channel}\"`).then(() => {\n driver.instance.onNotification(async () => {\n statusResolver.resolve();\n statusResolver = promiseWithResolvers();\n });\n });\n } else {\n const pool = driver.internal;\n\n const connectAndListen = async () => {\n driver.listen = await pool.connect();\n\n await driver.listen.query(`LISTEN \"${channel}\"`);\n\n driver.listen.on(\"error\", async () => {\n driver.listen?.release();\n await connectAndListen();\n });\n\n driver.listen.on(\"notification\", () => {\n statusResolver.resolve();\n statusResolver = promiseWithResolvers();\n });\n };\n\n connectAndListen();\n }\n\n return createMiddleware(async (c, next) => {\n if (c.req.path === \"/sql/db\") {\n const queryString = c.req.query(\"sql\");\n if (queryString === undefined) {\n return c.text('Missing \"sql\" query parameter', 400);\n }\n const query = superjson.parse(queryString) as QueryWithTypings;\n\n if (\"instance\" in driver) {\n try {\n await validateQuery(query.sql);\n const result = await session\n .prepareQuery(query, undefined, undefined, false)\n .execute();\n return c.json(result as object);\n } catch (error) {\n (error as Error).stack = undefined;\n return c.text((error as Error).message, 500);\n }\n } else {\n const client = await driver.internal.connect();\n\n try {\n await validateQuery(query.sql);\n await client.query(\"BEGIN READ ONLY\");\n const result = await session\n .prepareQuery(query, undefined, undefined, false)\n .execute();\n return c.json(result as object);\n } catch (error) {\n (error as Error).stack = undefined;\n return c.text((error as Error).message, 500);\n } finally {\n await client.query(\"ROLLBACK\");\n client.release();\n }\n }\n }\n\n if (c.req.path === \"/sql/live\") {\n c.header(\"Content-Type\", \"text/event-stream\");\n c.header(\"Cache-Control\", \"no-cache\");\n c.header(\"Connection\", \"keep-alive\");\n\n return streamSSE(c, async (stream) => {\n while (stream.closed === false && stream.aborted === false) {\n try {\n await stream.writeSSE({ data: \"\" });\n } catch {}\n await statusResolver.promise;\n }\n });\n }\n\n if (c.req.path === \"/sql/status\") {\n const statusResult = await db.select().from(status);\n return c.json(statusResult);\n }\n\n return next();\n });\n};\n","import type { Node, RawStmt } from \"@pgsql/types\";\n\ntype ValidatorNode<\n node extends Node extends infer T ? (T extends T ? keyof T : never) : never,\n> = {\n node: node | (string & {});\n children: (node: Extract<Node, { [key in node]: unknown }>[node]) => Node[];\n validate?: (node: Extract<Node, { [key in node]: unknown }>[node]) => void;\n};\n\nconst getNodeType = (node: Node) => Object.keys(node)[0]!;\n\nconst ALLOW_CACHE = new Map<string, boolean>();\n\nexport const validateQuery = async (sql: string) => {\n // @ts-ignore\n const Parser = await import(/* webpackIgnore: true */ \"pg-query-emscripten\");\n const crypto = await import(/* webpackIgnore: true */ \"node:crypto\");\n\n const hash = crypto\n .createHash(\"sha256\")\n .update(sql)\n .digest(\"hex\")\n .slice(0, 10);\n\n if (ALLOW_CACHE.has(hash)) {\n const result = ALLOW_CACHE.get(hash)!;\n\n ALLOW_CACHE.delete(hash);\n ALLOW_CACHE.set(hash, result);\n\n if (result) return;\n throw new Error(\"Invalid query\");\n } else {\n ALLOW_CACHE.set(hash, false);\n }\n\n const { parse } = await Parser.default();\n const parseResult = parse(sql) as {\n parse_tree: { stmts: RawStmt[] };\n error: string | null;\n };\n\n if (parseResult.error !== null) {\n throw new Error(parseResult.error);\n }\n\n if (parseResult.parse_tree.stmts.length === 0) {\n throw new Error(\"Invalid query\");\n }\n\n if (parseResult.parse_tree.stmts.length > 1) {\n throw new Error(\"Multiple statements not supported\");\n }\n\n const stmt = parseResult.parse_tree.stmts[0]!;\n\n if (stmt.stmt === undefined) {\n throw new Error(\"Invalid query\");\n }\n\n const validate = (node: Node) => {\n if (ALLOW_LIST.has(getNodeType(node)) === false) {\n throw new Error(`${getNodeType(node)} not supported`);\n }\n\n // @ts-ignore\n ALLOW_LIST.get(getNodeType(node))!.validate?.(node[getNodeType(node)]);\n\n for (const child of ALLOW_LIST.get(getNodeType(node))!.children(\n // @ts-ignore\n node[getNodeType(node)],\n )) {\n validate(child);\n }\n };\n\n validate(stmt.stmt);\n\n ALLOW_CACHE.set(hash, true);\n if (ALLOW_CACHE.size > 1_000_000) {\n const firstKey = ALLOW_CACHE.keys().next().value;\n if (firstKey) ALLOW_CACHE.delete(firstKey);\n }\n};\n\n// https://github.com/launchql/pgsql-parser/blob/f1df82ed4358e47c682e007bc5aa306b58f25514/packages/types/src/types.ts#L38\n\nconst INTEGER_VALIDATOR: ValidatorNode<\"Integer\"> = {\n node: \"Integer\",\n children: () => [],\n};\n\nconst FLOAT_VALIDATOR: ValidatorNode<\"Float\"> = {\n node: \"Float\",\n children: () => [],\n};\n\nconst BOOLEAN_VALIDATOR: ValidatorNode<\"Boolean\"> = {\n node: \"Boolean\",\n children: () => [],\n};\n\nconst STRING_VALIDATOR: ValidatorNode<\"String\"> = {\n node: \"String\",\n children: () => [],\n};\n\nconst BIT_STRING_VALIDATOR: ValidatorNode<\"BitString\"> = {\n node: \"BitString\",\n children: () => [],\n};\n\nconst LIST_VALIDATOR: ValidatorNode<\"List\"> = {\n node: \"List\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst OID_LIST_VALIDATOR: ValidatorNode<\"OidList\"> = {\n node: \"OidList\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst INT_LIST_VALIDATOR: ValidatorNode<\"IntList\"> = {\n node: \"IntList\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst A_CONST_VALIDATOR: ValidatorNode<\"A_Const\"> = {\n node: \"A_Const\",\n children: () => [],\n};\n\nconst ALIAS_VALIDATOR: ValidatorNode<\"Alias\"> = {\n node: \"Alias\",\n children: (node) => [...(node.colnames ?? [])],\n};\n\nconst RANGE_VAR_VALIDATOR: ValidatorNode<\"RangeVar\"> = {\n node: \"RangeVar\",\n children: (node) => [...(node.alias ? [{ Alias: node.alias }] : [])],\n validate: (node) => {\n if (node.schemaname) {\n throw new Error(\"Schema name not supported\");\n }\n\n if (node.relname && SYSTEM_TABLES.has(node.relname)) {\n throw new Error(\"System tables not supported\");\n }\n },\n};\n\nconst VAR_VALIDATOR: ValidatorNode<\"Var\"> = {\n node: \"Var\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst PARAM_VALIDATOR: ValidatorNode<\"Param\"> = {\n node: \"Param\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst AGGREF_VALIDATOR: ValidatorNode<\"Aggref\"> = {\n node: \"Aggref\",\n children: (node) => [\n ...(node.aggargtypes ?? []),\n ...(node.aggdirectargs ?? []),\n ...(node.args ?? []),\n ...(node.aggorder ?? []),\n ...(node.aggdistinct ?? []),\n ...(node.aggfilter ? [node.aggfilter] : []),\n ],\n};\n\nconst GROUPING_FUNC_VALIDATOR: ValidatorNode<\"GroupingFunc\"> = {\n node: \"GroupingFunc\",\n children: (node) => [...(node.args ?? []), ...(node.refs ?? [])],\n};\n\nconst WINDOW_FUNC_VALIDATOR: ValidatorNode<\"WindowFunc\"> = {\n node: \"WindowFunc\",\n children: (node) => [\n ...(node.args ?? []),\n ...(node.aggfilter ? [node.aggfilter] : []),\n ],\n};\n\nconst NAMED_ARG_EXPR_VALIDATOR: ValidatorNode<\"NamedArgExpr\"> = {\n node: \"NamedArgExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst OP_EXPR_VALIDATOR: ValidatorNode<\"OpExpr\"> = {\n node: \"OpExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst DISTINCT_EXPR_VALIDATOR: ValidatorNode<\"DistinctExpr\"> = {\n node: \"DistinctExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst NULL_IF_EXPR_VALIDATOR: ValidatorNode<\"NullIfExpr\"> = {\n node: \"NullIfExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst SCALAR_ARRAY_OP_EXPR_VALIDATOR: ValidatorNode<\"ScalarArrayOpExpr\"> = {\n node: \"ScalarArrayOpExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst BOOL_EXPR_VALIDATOR: ValidatorNode<\"BoolExpr\"> = {\n node: \"BoolExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst FIELD_SELECT_VALIDATOR: ValidatorNode<\"FieldSelect\"> = {\n node: \"FieldSelect\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst RELABEL_TYPE_VALIDATOR: ValidatorNode<\"RelabelType\"> = {\n node: \"RelabelType\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst ARRAY_COERCE_EXPR_VALIDATOR: ValidatorNode<\"ArrayCoerceExpr\"> = {\n node: \"ArrayCoerceExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ...(node.elemexpr ? [node.elemexpr] : []),\n ],\n};\n\nconst CONVERT_ROWTYPE_EXPR_VALIDATOR: ValidatorNode<\"ConvertRowtypeExpr\"> = {\n node: \"ConvertRowtypeExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COLLATE_EXPR_VALIDATOR: ValidatorNode<\"CollateExpr\"> = {\n node: \"CollateExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst CASE_EXPR_VALIDATOR: ValidatorNode<\"CaseExpr\"> = {\n node: \"CaseExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ...(node.args ?? []),\n ...(node.defresult ? [node.defresult] : []),\n ],\n};\n\nconst CASE_WHEN_VALIDATOR: ValidatorNode<\"CaseWhen\"> = {\n node: \"CaseWhen\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ...(node.result ? [node.result] : []),\n ],\n};\n\nconst CASE_TEST_EXPR_VALIDATOR: ValidatorNode<\"CaseTestExpr\"> = {\n node: \"CaseTestExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst ARRAY_EXPR_VALIDATOR: ValidatorNode<\"ArrayExpr\"> = {\n node: \"ArrayExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.elements ?? []),\n ],\n};\n\nconst ROW_EXPR_VALIDATOR: ValidatorNode<\"RowExpr\"> = {\n node: \"RowExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.args ?? []),\n ...(node.colnames ?? []),\n ],\n};\n\nconst ROW_COMPARE_EXPR_VALIDATOR: ValidatorNode<\"RowCompareExpr\"> = {\n node: \"RowCompareExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.opnos ?? []),\n ...(node.opfamilies ?? []),\n ...(node.inputcollids ?? []),\n ...(node.largs ?? []),\n ...(node.rargs ?? []),\n ],\n};\n\nconst COALESC_EXPR_VALIDATOR: ValidatorNode<\"CoalesceExpr\"> = {\n node: \"CoalesceExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst MIN_MAX_EXPR_VALIDATOR: ValidatorNode<\"MinMaxExpr\"> = {\n node: \"MinMaxExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst SQL_VALUE_FUNCTION_VALIDATOR: ValidatorNode<\"SQLValueFunction\"> = {\n node: \"SQLValueFunction\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst JSON_FORMAT_VALIDATOR: ValidatorNode<\"JsonFormat\"> = {\n node: \"JsonFormat\",\n children: () => [],\n};\n\nconst JSON_RETURNING_VALIDATOR: ValidatorNode<\"JsonReturning\"> = {\n node: \"JsonReturning\",\n children: (node) => [...(node.format ? [{ JsonFormat: node.format }] : [])],\n};\n\nconst JSON_VALUE_EXPR_VALIDATOR: ValidatorNode<\"JsonValueExpr\"> = {\n node: \"JsonValueExpr\",\n children: (node) => [\n ...(node.raw_expr ? [node.raw_expr] : []),\n ...(node.formatted_expr ? [node.formatted_expr] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n};\n\nconst JSON_CONSTRUCTOR_EXPR_VALIDATOR: ValidatorNode<\"JsonConstructorExpr\"> = {\n node: \"JsonConstructorExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.args ?? []),\n ...(node.func ? [node.func] : []),\n ...(node.coercion ? [node.coercion] : []),\n ...(node.returning ? [{ JsonReturning: node.returning }] : []),\n ],\n};\n\nconst JSON_IS_PREDICATE_VALIDATOR: ValidatorNode<\"JsonIsPredicate\"> = {\n node: \"JsonIsPredicate\",\n children: (node) => [\n ...(node.expr ? [node.expr] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n};\n\nconst NULL_TEST_VALIDATOR: ValidatorNode<\"NullTest\"> = {\n node: \"NullTest\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst BOOLEAN_TEST_VALIDATOR: ValidatorNode<\"BooleanTest\"> = {\n node: \"BooleanTest\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COERCE_TO_DOMAIN_VALIDATOR: ValidatorNode<\"CoerceToDomain\"> = {\n node: \"CoerceToDomain\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COERCE_TO_DOMAIN_VALUE_VALIDATOR: ValidatorNode<\"CoerceToDomainValue\"> = {\n node: \"CoerceToDomainValue\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst CURRENT_OF_EXPR_VALIDATOR: ValidatorNode<\"CurrentOfExpr\"> = {\n node: \"CurrentOfExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst NEXT_VALUE_EXPR_VALIDATOR: ValidatorNode<\"NextValueExpr\"> = {\n node: \"NextValueExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst INFERENCE_ELEM_VALIDATOR: ValidatorNode<\"InferenceElem\"> = {\n node: \"InferenceElem\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ],\n};\n\nconst TARGET_ENTRY_VALIDATOR: ValidatorNode<\"TargetEntry\"> = {\n node: \"TargetEntry\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ],\n};\n\nconst RANGE_TBL_REF_VALIDATOR: ValidatorNode<\"RangeTblRef\"> = {\n node: \"RangeTblRef\",\n children: () => [],\n};\n\nconst JOIN_EXPR_VALIDATOR: ValidatorNode<\"JoinExpr\"> = {\n node: \"JoinExpr\",\n children: (node) => [\n ...(node.larg ? [node.larg] : []),\n ...(node.rarg ? [node.rarg] : []),\n ...(node.usingClause ?? []),\n ...(node.join_using_alias ? [{ Alias: node.join_using_alias }] : []),\n ...(node.quals ? [node.quals] : []),\n ...(node.alias ? [{ Alias: node.alias }] : []),\n ],\n};\n\nconst FROM_EXPR_VALIDATOR: ValidatorNode<\"FromExpr\"> = {\n node: \"FromExpr\",\n children: (node) => [\n ...(node.fromlist ?? []),\n ...(node.quals ? [node.quals] : []),\n ],\n};\n\nconst ON_CONFLICT_EXPR_VALIDATOR: ValidatorNode<\"OnConflictExpr\"> = {\n node: \"OnConflictExpr\",\n children: (node) => [\n ...(node.arbiterElems ?? []),\n ...(node.arbiterWhere ? [node.arbiterWhere] : []),\n ...(node.onConflictSet ?? []),\n ...(node.onConflictWhere ? [node.onConflictWhere] : []),\n ...(node.exclRelTlist ?? []),\n ],\n};\n\nconst TYPE_NAME_VALIDATOR: ValidatorNode<\"TypeName\"> = {\n node: \"TypeName\",\n children: (node) => [\n ...(node.names ?? []),\n ...(node.typmods ?? []),\n ...(node.arrayBounds ?? []),\n ],\n};\n\nconst COLUMN_REF_VALIDATOR: ValidatorNode<\"ColumnRef\"> = {\n node: \"ColumnRef\",\n children: (node) => [...(node.fields ?? [])],\n};\n\nconst PARAM_REF_VALIDATOR: ValidatorNode<\"ParamRef\"> = {\n node: \"ParamRef\",\n children: () => [],\n};\n\nconst A_EXPR_VALIDATOR: ValidatorNode<\"A_Expr\"> = {\n node: \"A_Expr\",\n children: (node) => [\n ...(node.name ?? []),\n ...(node.lexpr ? [node.lexpr] : []),\n ...(node.rexpr ? [node.rexpr] : []),\n ],\n};\n\nconst TYPE_CAST_VALIDATOR: ValidatorNode<\"TypeCast\"> = {\n node: \"TypeCast\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.typeName ? [{ TypeName: node.typeName }] : []),\n ],\n};\n\nconst COLLATE_CLAUSE_VALIDATOR: ValidatorNode<\"CollateClause\"> = {\n node: \"CollateClause\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.collname ?? []),\n ],\n};\n\nconst ALLOWED_FUNCTIONS = new Set([\n \"count\",\n \"sum\",\n \"avg\",\n \"min\",\n \"max\",\n \"lower\",\n \"upper\",\n \"length\",\n \"trim\",\n \"replace\",\n \"substring\",\n \"cast\",\n \"concat\",\n \"now\",\n \"current_timestamp\",\n \"current_date\",\n \"current_time\",\n \"coalesce\",\n \"json_agg\",\n \"json_object\",\n \"json_array\",\n \"json_object_agg\",\n \"json_array_agg\",\n]);\n\nconst FUNC_CALL_VALIDATOR: ValidatorNode<\"FuncCall\"> = {\n node: \"FuncCall\",\n children: (node) => [\n ...(node.funcname ?? []),\n ...(node.args ?? []),\n ...(node.agg_order ?? []),\n ...(node.agg_filter ? [node.agg_filter] : []),\n ...(node.over ? [{ WindowDef: node.over }] : []),\n ],\n validate: (node) => {\n if (\n node.funcname?.every(\n (name) =>\n getNodeType(name) === \"String\" &&\n // @ts-ignore\n ALLOWED_FUNCTIONS.has(name.String.sval),\n )\n ) {\n return;\n }\n throw new Error(\"Function call not supported\");\n },\n};\n\nconst A_STAR_VALIDATOR: ValidatorNode<\"A_Star\"> = {\n node: \"A_Star\",\n children: () => [],\n};\n\nconst A_INDICES_VALIDATOR: ValidatorNode<\"A_Indices\"> = {\n node: \"A_Indices\",\n children: (node) => [\n ...(node.lidx ? [node.lidx] : []),\n ...(node.uidx ? [node.uidx] : []),\n ],\n};\n\nconst A_INDIRECTION_VALIDATOR: ValidatorNode<\"A_Indirection\"> = {\n node: \"A_Indirection\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.indirection ?? []),\n ],\n};\n\nconst A_ARRAY_EXPR_VALIDATOR: ValidatorNode<\"A_ArrayExpr\"> = {\n node: \"A_ArrayExpr\",\n children: (node) => [...(node.elements ?? [])],\n};\n\nconst RES_TARGET_VALIDATOR: ValidatorNode<\"ResTarget\"> = {\n node: \"ResTarget\",\n children: (node) => [\n ...(node.indirection ?? []),\n ...(node.val ? [node.val] : []),\n ],\n};\n\nconst MULTI_ASSIGN_REF_VALIDATOR: ValidatorNode<\"MultiAssignRef\"> = {\n node: \"MultiAssignRef\",\n children: (node) => [...(node.source ? [node.source] : [])],\n};\n\nconst SORT_BY_VALIDATOR: ValidatorNode<\"SortBy\"> = {\n node: \"SortBy\",\n children: (node) => [\n ...(node.node ? [node.node] : []),\n ...(node.useOp ?? []),\n ],\n};\n\nconst RANGE_SUBSELECT_VALIDATOR: ValidatorNode<\"RangeSubselect\"> = {\n node: \"RangeSubselect\",\n children: (node) => [\n ...(node.subquery ? [node.subquery] : []),\n ...(node.alias ? [{ Alias: node.alias }] : []),\n ],\n};\n\nconst SORT_GROUP_CLAUSE_VALIDATOR: ValidatorNode<\"SortGroupClause\"> = {\n node: \"SortGroupClause\",\n children: () => [],\n};\n\nconst GROUPING_SET_VALIDATOR: ValidatorNode<\"GroupingSet\"> = {\n node: \"GroupingSet\",\n children: (node) => [...(node.content ?? [])],\n};\n\nconst WITH_CLAUSE_VALIDATOR: ValidatorNode<\"WithClause\"> = {\n node: \"WithClause\",\n children: (node) => [...(node.ctes ?? [])],\n validate: (node) => {\n if (node.recursive) {\n throw new Error(\"Recursive CTEs not supported\");\n }\n },\n};\n\nconst COMMON_TABLE_EXPR_VALIDATOR: ValidatorNode<\"CommonTableExpr\"> = {\n node: \"CommonTableExpr\",\n children: (node) => [\n ...(node.aliascolnames ?? []),\n ...(node.ctequery ? [node.ctequery] : []),\n ...(node.search_clause ? [{ CTESearchClause: node.search_clause }] : []),\n ...(node.cycle_clause ? [{ CTECycleClause: node.cycle_clause }] : []),\n ...(node.ctecolnames ?? []),\n ...(node.ctecoltypes ?? []),\n ...(node.ctecoltypmods ?? []),\n ...(node.ctecolcollations ?? []),\n ],\n validate: (node) => {\n if (node.ctematerialized === \"CTEMaterializeAlways\" || node.cterecursive) {\n throw new Error(\"Invalid CTE\");\n }\n },\n};\n\nconst JSON_OUTPUT_VALIDATOR: ValidatorNode<\"JsonOutput\"> = {\n node: \"JsonOutput\",\n children: (node) => [\n ...(node.returning ? [{ JsonReturning: node.returning }] : []),\n ],\n};\n\nconst JSON_KEY_VALUE_VALIDATOR: ValidatorNode<\"JsonKeyValue\"> = {\n node: \"JsonKeyValue\",\n children: (node) => [\n ...(node.key ? [node.key] : []),\n ...(node.value ? [{ JsonValueExpr: node.value }] : []),\n ],\n};\n\nconst JSON_OBJECT_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonObjectConstructor\"> =\n {\n node: \"JsonObjectConstructor\",\n children: (node) => [\n ...(node.exprs ?? []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ],\n };\n\nconst JSON_ARRAY_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonArrayConstructor\"> =\n {\n node: \"JsonArrayConstructor\",\n children: (node) => [\n ...(node.exprs ?? []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ],\n };\n\nconst JSON_ARRAY_QUERY_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonArrayQueryConstructor\"> =\n {\n node: \"JsonArrayQueryConstructor\",\n children: (node) => [\n ...(node.query ? [node.query] : []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n };\n\nconst JSON_AGG_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonAggConstructor\"> = {\n node: \"JsonAggConstructor\",\n children: (node) => [\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ...(node.agg_filter ? [node.agg_filter] : []),\n ...(node.agg_order ?? []),\n ...(node.over ? [{ WindowDef: node.over }] : []),\n ],\n};\n\nconst JSON_OBJECT_AGG_VALIDATOR: ValidatorNode<\"JsonObjectAgg\"> = {\n node: \"JsonObjectAgg\",\n children: (node) => [\n ...(node.constructor ? [{ JsonAggConstructor: node.constructor }] : []),\n ...(node.arg ? [{ JsonKeyValue: node.arg }] : []),\n ],\n};\n\nconst JSON_ARRAY_AGG_VALIDATOR: ValidatorNode<\"JsonArrayAgg\"> = {\n node: \"JsonArrayAgg\",\n children: (node) => [\n ...(node.constructor ? [{ JsonAggConstructor: node.constructor }] : []),\n ...(node.arg ? [{ JsonValueExpr: node.arg }] : []),\n ],\n};\n\nconst SELECT_STMT_VALIDATOR: ValidatorNode<\"SelectStmt\"> = {\n node: \"SelectStmt\",\n children: (node) => [\n ...(node.distinctClause ?? []),\n ...(node.intoClause ? [{ IntoClause: node.intoClause }] : []),\n ...(node.targetList ?? []),\n ...(node.fromClause ?? []),\n ...(node.whereClause ? [node.whereClause] : []),\n ...(node.groupClause ?? []),\n ...(node.havingClause ? [node.havingClause] : []),\n ...(node.windowClause ?? []),\n ...(node.valuesLists ?? []),\n ...(node.sortClause ?? []),\n ...(node.limitOffset ? [node.limitOffset] : []),\n ...(node.limitCount ? [node.limitCount] : []),\n ...(node.lockingClause ?? []),\n ...(node.withClause ? [{ WithClause: node.withClause }] : []),\n ...(node.larg ? [{ SelectStmt: node.larg }] : []),\n ...(node.rarg ? [{ SelectStmt: node.rarg }] : []),\n ],\n validate: (node) => {\n if (node.lockingClause) {\n throw new Error(\"Invalid query\");\n }\n },\n};\n\nconst COMMENT_STMT_VALIDATOR: ValidatorNode<\"CommentStmt\"> = {\n node: \"CommentStmt\",\n children: (node) => [...(node.object ? [node.object] : [])],\n};\n\n/** Validation rules for allowed Postgres SQL AST nodes. */\nconst ALLOW_LIST = new Map(\n [\n INTEGER_VALIDATOR,\n FLOAT_VALIDATOR,\n BOOLEAN_VALIDATOR,\n STRING_VALIDATOR,\n BIT_STRING_VALIDATOR,\n LIST_VALIDATOR,\n OID_LIST_VALIDATOR,\n INT_LIST_VALIDATOR,\n A_CONST_VALIDATOR,\n ALIAS_VALIDATOR,\n RANGE_VAR_VALIDATOR,\n VAR_VALIDATOR,\n PARAM_VALIDATOR,\n AGGREF_VALIDATOR,\n GROUPING_FUNC_VALIDATOR,\n WINDOW_FUNC_VALIDATOR,\n NAMED_ARG_EXPR_VALIDATOR,\n OP_EXPR_VALIDATOR,\n DISTINCT_EXPR_VALIDATOR,\n NULL_IF_EXPR_VALIDATOR,\n SCALAR_ARRAY_OP_EXPR_VALIDATOR,\n BOOL_EXPR_VALIDATOR,\n FIELD_SELECT_VALIDATOR,\n RELABEL_TYPE_VALIDATOR,\n ARRAY_COERCE_EXPR_VALIDATOR,\n CONVERT_ROWTYPE_EXPR_VALIDATOR,\n COLLATE_EXPR_VALIDATOR,\n CASE_EXPR_VALIDATOR,\n CASE_WHEN_VALIDATOR,\n CASE_TEST_EXPR_VALIDATOR,\n ARRAY_EXPR_VALIDATOR,\n ROW_EXPR_VALIDATOR,\n ROW_COMPARE_EXPR_VALIDATOR,\n COALESC_EXPR_VALIDATOR,\n MIN_MAX_EXPR_VALIDATOR,\n SQL_VALUE_FUNCTION_VALIDATOR,\n JSON_FORMAT_VALIDATOR,\n JSON_RETURNING_VALIDATOR,\n JSON_VALUE_EXPR_VALIDATOR,\n JSON_CONSTRUCTOR_EXPR_VALIDATOR,\n JSON_IS_PREDICATE_VALIDATOR,\n NULL_TEST_VALIDATOR,\n BOOLEAN_TEST_VALIDATOR,\n COERCE_TO_DOMAIN_VALIDATOR,\n COERCE_TO_DOMAIN_VALUE_VALIDATOR,\n CURRENT_OF_EXPR_VALIDATOR,\n NEXT_VALUE_EXPR_VALIDATOR,\n INFERENCE_ELEM_VALIDATOR,\n TARGET_ENTRY_VALIDATOR,\n RANGE_TBL_REF_VALIDATOR,\n JOIN_EXPR_VALIDATOR,\n FROM_EXPR_VALIDATOR,\n ON_CONFLICT_EXPR_VALIDATOR,\n TYPE_NAME_VALIDATOR,\n COLUMN_REF_VALIDATOR,\n PARAM_REF_VALIDATOR,\n A_EXPR_VALIDATOR,\n TYPE_CAST_VALIDATOR,\n COLLATE_CLAUSE_VALIDATOR,\n FUNC_CALL_VALIDATOR,\n A_STAR_VALIDATOR,\n A_INDICES_VALIDATOR,\n A_INDIRECTION_VALIDATOR,\n A_ARRAY_EXPR_VALIDATOR,\n RES_TARGET_VALIDATOR,\n MULTI_ASSIGN_REF_VALIDATOR,\n SORT_BY_VALIDATOR,\n RANGE_SUBSELECT_VALIDATOR,\n SORT_GROUP_CLAUSE_VALIDATOR,\n GROUPING_SET_VALIDATOR,\n WITH_CLAUSE_VALIDATOR,\n COMMON_TABLE_EXPR_VALIDATOR,\n JSON_OUTPUT_VALIDATOR,\n JSON_KEY_VALUE_VALIDATOR,\n JSON_OBJECT_CONSTRUCTOR_VALIDATOR,\n JSON_ARRAY_CONSTRUCTOR_VALIDATOR,\n JSON_ARRAY_QUERY_CONSTRUCTOR_VALIDATOR,\n JSON_AGG_CONSTRUCTOR_VALIDATOR,\n JSON_OBJECT_AGG_VALIDATOR,\n JSON_ARRAY_AGG_VALIDATOR,\n SELECT_STMT_VALIDATOR,\n COMMENT_STMT_VALIDATOR,\n ].map((node) => [node.node, node]),\n);\n\n// NOT_ALLOW_LIST\n// ParseResult\n// ScanResult\n// TableFunc\n// IntoClause\n// SubscriptingRef\n// FuncExpr\n// SubLink\n// SubPlan\n// AlternativeSubPlan\n// FieldStore\n// CoerceViaIO\n// XmlExpr\n// SetToDefault\n// Query\n// RoleSpec\n// WindowDef\n// RangeFunction\n// RangeTableFunc\n// RangeTableFuncCol\n// RangeTableSample\n// ColumnDef\n// TableLikeClause\n// IndexElem\n// DefElem\n// LockingClause\n// XmlSerialize\n// PartitionElem\n// PartitionSpec\n// PartitionBounSpec\n// PartitionRangeDatum\n// PartitionCmd\n// RangeTableEntry\n// RTEPermissionInfo\n// RangeTblFunction\n// TableSampleClause\n// WithCheckOption\n// WindowClause\n// RowMarkClause\n// InferClausej\n// OnConflictClause\n// CTESearchClause\n// CTECycleClause\n// MergeWhenClause\n// MergeAction\n// TriggerTransition\n// RawStmt\n// InsertStmt\n// DeleteStmt\n// UpdateStmt\n// MergeStmt\n// SetOperationStmt\n// ReturnStmt\n// PLAssignStmt\n// CreateSchemaStmt\n// AlterTableStmt\n// ReplicaIdentityStmt\n// AlterTableCmd\n// AlterCollationStmt\n// AlterDomainStmt\n// GrantStmt\n// ObjectWithArgs\n// AccessPriv\n// GrantRoleStmt\n// AlterDefaultPrivilegesStmt\n// CopyStmt\n// VariableSetStmt\n// VariableShowStmt\n// CreateStmt\n// Constraint\n// CreateTableSpaceStmt\n// DropTableSpaceStmt\n// AlterTableSpaceOptionsStmt\n// AlterTableMoveAllStmt\n// CreateExtensionStmt\n// AlterExtensionStmt\n// AlterExtensionContentsStmt\n// CreateFdwStmt\n// AlterFdwStmt\n// CreateForeignServerStmt\n// AlterForeignServerStmt\n// CreateForeignTableStmt\n// CreateUserMappingStmt\n// AlterUserMappingStmt\n// DropUserMappingStmt\n// ImportForeignSchemaStmt\n// CreatePolicyStmt\n// AlterPolicyStmt\n// CreateAmStmt\n// CreateTrigStmt\n// CreateEventTrigStmt\n// AlterEventTrigStmt\n// CreatePLangStmt\n// CreateRoleStmt\n// AlterRoleStmt\n// AlterRoleSetStmt\n// DropRoleStmt\n// CreateSeqStmt\n// AlterSeqStmt\n// DefineStmt\n// CreateDomainStmt\n// CreateOpClassStmt\n// CreateOpClassItem\n// CreateOpFamilyStmt\n// AlterOpFamilyStmt\n// DropStmt\n// TruncateStmt\n// SecLabelStmt\n// DeclareCursorStmt\n// ClosePortalStmt\n// FetchStmt\n// IndexStmt\n// CreateStatsStmt\n// StatsElem\n// AlterStatsStmt\n// CreateFunctionStmt\n// FunctionParameter\n// AlterFunctionStmt\n// DoStmt\n// InlineCodeBlock\n// CallStmt\n// CallContext\n// RenameStmt\n// AlterObjectDependsStmt\n// AlterObjectSchemaStmt\n// AlterOwnerStmt\n// AlterOperatorStmt\n// AlterTypeStmt\n// RuleStmt\n// NotifyStmt\n// ListenStmt\n// UnlistenStmt\n// TransactionStmt\n// CompositeTypeStmt\n// CreateEnumStmt\n// CreateRangeStmt\n// AlterEnumStmt\n// ViewStmt\n// LoadStmt\n// CreatedbStmt\n// AlterDatabaseStmt\n// AlterDatabaseRefreshCollStmt\n// AlterDatabaseSetStmt\n// DropdbStmt\n// AlterSystemStmt\n// ClusterStmt\n// VacuumStmt\n// VacuumRelation\n// ExplainStmt\n// CreateTableAsStmt\n// RefreshMatViewStmt\n// CheckPointStmt\n// DiscardStmt\n// LockStmt\n// ConstraintsSetStmt\n// ReindexStmt\n// CreateConversionStmt\n// CreateCastStmt\n// CreateTransformStmt\n// PrepareStmt\n// ExecuteStmt\n// DeallocateStmt\n// DropOwnedStmt\n// ReassignOwnedStmt\n// AlterTSDictionaryStmt\n// AlterTSConfigurationStmt\n// PublicationTable\n// PublicationObjSpec\n// CreatePublicationStmt\n// AlterPublicationStmt\n// CreateSubscriptionStmt\n// AlterSubscriptionStmt\n// DropSubscriptionStmt\n// ScanToken\n\nconst SYSTEM_TABLES = new Set([\n \"pg_statistic\",\n \"pg_type\",\n \"pg_foreign_table\",\n \"pg_proc_oid_index\",\n \"pg_proc_proname_args_nsp_index\",\n \"pg_type_oid_index\",\n \"pg_type_typname_nsp_index\",\n \"pg_attribute_relid_attnam_index\",\n \"pg_attribute_relid_attnum_index\",\n \"pg_class_oid_index\",\n \"pg_class_relname_nsp_index\",\n \"pg_class_tblspc_relfilenode_index\",\n \"pg_attrdef_adrelid_adnum_index\",\n \"pg_attrdef_oid_index\",\n \"pg_constraint_conname_nsp_index\",\n \"pg_constraint_conrelid_contypid_conname_index\",\n \"pg_constraint_contypid_index\",\n \"pg_constraint_oid_index\",\n \"pg_constraint_conparentid_index\",\n \"pg_inherits_relid_seqno_index\",\n \"pg_inherits_parent_index\",\n \"pg_index_indrelid_index\",\n \"pg_index_indexrelid_index\",\n \"pg_operator_oid_index\",\n \"pg_operator_oprname_l_r_n_index\",\n \"pg_opfamily_am_name_nsp_index\",\n \"pg_opfamily_oid_index\",\n \"pg_opclass_am_name_nsp_index\",\n \"pg_opclass_oid_index\",\n \"pg_am_name_index\",\n \"pg_am_oid_index\",\n \"pg_amop_fam_strat_index\",\n \"pg_amop_opr_fam_index\",\n \"pg_amop_oid_index\",\n \"pg_amproc_fam_proc_index\",\n \"pg_amproc_oid_index\",\n \"pg_language_name_index\",\n \"pg_language_oid_index\",\n \"pg_largeobject_metadata_oid_index\",\n \"pg_largeobject_loid_pn_index\",\n \"pg_aggregate_fnoid_index\",\n \"pg_statistic_relid_att_inh_index\",\n \"pg_statistic_ext_oid_index\",\n \"pg_statistic_ext_name_index\",\n \"pg_statistic_ext_relid_index\",\n \"pg_statistic_ext_data_stxoid_inh_index\",\n \"pg_rewrite_oid_index\",\n \"pg_rewrite_rel_rulename_index\",\n \"pg_trigger_tgconstraint_index\",\n \"pg_trigger_tgrelid_tgname_index\",\n \"pg_trigger_oid_index\",\n \"pg_event_trigger_evtname_index\",\n \"pg_event_trigger_oid_index\",\n \"pg_description_o_c_o_index\",\n \"pg_cast_oid_index\",\n \"pg_cast_source_target_index\",\n \"pg_enum_oid_index\",\n \"pg_enum_typid_label_index\",\n \"pg_enum_typid_sortorder_index\",\n \"pg_namespace_nspname_index\",\n \"pg_namespace_oid_index\",\n \"pg_conversion_default_index\",\n \"pg_conversion_name_nsp_index\",\n \"pg_conversion_oid_index\",\n \"pg_depend_depender_index\",\n \"pg_depend_reference_index\",\n \"pg_database_datname_index\",\n \"pg_database_oid_index\",\n \"pg_db_role_setting_databaseid_rol_index\",\n \"pg_tablespace_oid_index\",\n \"pg_tablespace_spcname_index\",\n \"pg_authid_rolname_index\",\n \"pg_authid_oid_index\",\n \"pg_auth_members_oid_index\",\n \"pg_auth_members_role_member_index\",\n \"pg_auth_members_member_role_index\",\n \"pg_auth_members_grantor_index\",\n \"pg_shdepend_depender_index\",\n \"pg_shdepend_reference_index\",\n \"pg_shdescription_o_c_index\",\n \"pg_ts_config_cfgname_index\",\n \"pg_ts_config_oid_index\",\n \"pg_ts_config_map_index\",\n \"pg_ts_dict_dictname_index\",\n \"pg_ts_dict_oid_index\",\n \"pg_ts_parser_prsname_index\",\n \"pg_ts_parser_oid_index\",\n \"pg_ts_template_tmplname_index\",\n \"pg_ts_template_oid_index\",\n \"pg_extension_oid_index\",\n \"pg_extension_name_index\",\n \"pg_foreign_data_wrapper_oid_index\",\n \"pg_foreign_data_wrapper_name_index\",\n \"pg_foreign_server_oid_index\",\n \"pg_foreign_server_name_index\",\n \"pg_user_mapping_oid_index\",\n \"pg_user_mapping_user_server_index\",\n \"pg_foreign_table_relid_index\",\n \"pg_policy_oid_index\",\n \"pg_policy_polrelid_polname_index\",\n \"pg_replication_origin_roiident_index\",\n \"pg_replication_origin_roname_index\",\n \"pg_default_acl_role_nsp_obj_index\",\n \"pg_default_acl_oid_index\",\n \"pg_init_privs_o_c_o_index\",\n \"pg_seclabel_object_index\",\n \"pg_shseclabel_object_index\",\n \"pg_collation_name_enc_nsp_index\",\n \"pg_collation_oid_index\",\n \"pg_parameter_acl_parname_index\",\n \"pg_parameter_acl_oid_index\",\n \"pg_partitioned_table_partrelid_index\",\n \"pg_range_rngtypid_index\",\n \"pg_range_rngmultitypid_index\",\n \"pg_transform_oid_index\",\n \"pg_transform_type_lang_index\",\n \"pg_sequence_seqrelid_index\",\n \"pg_publication_oid_index\",\n \"pg_publication_pubname_index\",\n \"pg_publication_namespace_oid_index\",\n \"pg_publication_namespace_pnnspid_pnpubid_index\",\n \"pg_publication_rel_oid_index\",\n \"pg_publication_rel_prrelid_prpubid_index\",\n \"pg_publication_rel_prpubid_index\",\n \"pg_subscription_oid_index\",\n \"pg_subscription_subname_index\",\n \"pg_subscription_rel_srrelid_srsubid_index\",\n \"pg_authid\",\n \"pg_shadow\",\n \"pg_roles\",\n \"pg_statistic_ext_data\",\n \"pg_hba_file_rules\",\n \"pg_settings\",\n \"pg_file_settings\",\n \"pg_backend_memory_contexts\",\n \"pg_ident_file_mappings\",\n \"pg_config\",\n \"pg_shmem_allocations\",\n \"pg_tables\",\n \"pg_user_mapping\",\n \"pg_replication_origin_status\",\n \"pg_subscription\",\n \"pg_attribute\",\n \"pg_proc\",\n \"pg_class\",\n \"pg_attrdef\",\n \"pg_constraint\",\n \"pg_inherits\",\n \"pg_index\",\n \"pg_operator\",\n \"pg_statio_all_sequences\",\n \"pg_opfamily\",\n \"pg_opclass\",\n \"pg_am\",\n \"pg_amop\",\n \"pg_amproc\",\n \"pg_language\",\n \"pg_largeobject_metadata\",\n \"pg_aggregate\",\n \"pg_statistic_ext\",\n \"pg_rewrite\",\n \"pg_trigger\",\n \"pg_event_trigger\",\n \"pg_description\",\n \"pg_cast\",\n \"pg_enum\",\n \"pg_namespace\",\n \"pg_conversion\",\n \"pg_depend\",\n \"pg_database\",\n \"pg_db_role_setting\",\n \"pg_tablespace\",\n \"pg_auth_members\",\n \"pg_shdepend\",\n \"pg_shdescription\",\n \"pg_ts_config\",\n \"pg_ts_config_map\",\n \"pg_ts_dict\",\n \"pg_ts_parser\",\n \"pg_ts_template\",\n \"pg_extension\",\n \"pg_foreign_data_wrapper\",\n \"pg_foreign_server\",\n \"pg_policy\",\n \"pg_replication_origin\",\n \"pg_default_acl\",\n \"pg_init_privs\",\n \"pg_seclabel\",\n \"pg_shseclabel\",\n \"pg_collation\",\n \"pg_parameter_acl\",\n \"pg_partitioned_table\",\n \"pg_range\",\n \"pg_transform\",\n \"pg_sequence\",\n \"pg_publication\",\n \"pg_publication_namespace\",\n \"pg_publication_rel\",\n \"pg_subscription_rel\",\n \"pg_group\",\n \"pg_user\",\n \"pg_policies\",\n \"pg_rules\",\n \"pg_views\",\n \"pg_matviews\",\n \"pg_indexes\",\n \"pg_sequences\",\n \"pg_stats\",\n \"pg_stats_ext\",\n \"pg_stats_ext_exprs\",\n \"pg_publication_tables\",\n \"pg_locks\",\n \"pg_cursors\",\n \"pg_available_extensions\",\n \"pg_available_extension_versions\",\n \"pg_prepared_xacts\",\n \"pg_prepared_statements\",\n \"pg_seclabels\",\n \"pg_timezone_abbrevs\",\n \"pg_timezone_names\",\n \"pg_stat_all_tables\",\n \"pg_stat_xact_all_tables\",\n \"pg_stat_xact_user_tables\",\n \"pg_stat_sys_tables\",\n \"pg_stat_xact_sys_tables\",\n \"pg_stat_user_tables\",\n \"pg_statio_all_tables\",\n \"pg_statio_sys_tables\",\n \"pg_statio_user_tables\",\n \"pg_stat_all_indexes\",\n \"pg_stat_sys_indexes\",\n \"pg_stat_user_indexes\",\n \"pg_statio_all_indexes\",\n \"pg_statio_sys_indexes\",\n \"pg_statio_user_indexes\",\n \"pg_statio_sys_sequences\",\n \"pg_statio_user_sequences\",\n \"pg_stat_activity\",\n \"pg_stat_replication\",\n \"pg_stat_slru\",\n \"pg_stat_wal_receiver\",\n \"pg_stat_recovery_prefetch\",\n \"pg_stat_subscription\",\n \"pg_stat_ssl\",\n \"pg_stat_gssapi\",\n \"pg_replication_slots\",\n \"pg_stat_replication_slots\",\n \"pg_stat_database\",\n \"pg_stat_database_conflicts\",\n \"pg_stat_user_functions\",\n \"pg_stat_xact_user_functions\",\n \"pg_stat_archiver\",\n \"pg_stat_bgwriter\",\n \"pg_stat_io\",\n \"pg_stat_wal\",\n \"pg_stat_progress_analyze\",\n \"pg_stat_progress_vacuum\",\n \"pg_stat_progress_cluster\",\n \"pg_stat_progress_create_index\",\n \"pg_stat_progress_basebackup\",\n \"pg_stat_progress_copy\",\n \"pg_user_mappings\",\n \"pg_stat_subscription_stats\",\n \"pg_largeobject\",\n]);\n","// https://github.com/graphql/graphiql/blob/main/examples/graphiql-cdn/index.html\n\nexport const graphiQLHtml = (path: string) => `<!--\n * Copyright (c) 2021 GraphQL Contributors\n * All rights reserved.\n *\n * This source code is licensed under the license found in the\n * LICENSE file in the root directory of this source tree.\n-->\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Ponder Playground</title>\n <style>\n body {\n height: 100%;\n margin: 0;\n width: 100%;\n overflow: hidden;\n }\n #graphiql {\n height: 100vh;\n }\n *::-webkit-scrollbar {\n height: 0.3rem;\n width: 0.5rem;\n }\n *::-webkit-scrollbar-track {\n -ms-overflow-style: none;\n overflow: -moz-scrollbars-none;\n }\n *::-webkit-scrollbar-thumb {\n -ms-overflow-style: none;\n overflow: -moz-scrollbars-none;\n }\n </style>\n <link rel=\"stylesheet\" href=\"https://unpkg.com/graphiql@3.7.2/graphiql.min.css\" />\n <link rel=\"stylesheet\" href=\"https://unpkg.com/@graphiql/plugin-explorer@3.2.3/dist/style.css\" />\n </head>\n <body>\n <div id=\"graphiql\">Loading...</div>\n <script crossorigin src=\"https://unpkg.com/react@18.3.1/umd/react.development.js\"></script>1\n <script crossorigin src=\"https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js\"></script>\n <script src=\"https://unpkg.com/graphiql@3.7.2/graphiql.min.js\" crossorigin=\"anonymous\"></script>\n <script src=\"https://unpkg.com/@graphiql/plugin-explorer@3.2.3/dist/index.umd.js\" crossorigin=\"anonymous\"></script>\n <script>\n const fetcher = GraphiQL.createFetcher({ url: \"${path}\" });\n const explorerPlugin = GraphiQLPluginExplorer.explorerPlugin();\n const root = ReactDOM.createRoot(document.getElementById(\"graphiql\"));\n root.render(\n React.createElement(GraphiQL, {\n fetcher,\n plugins: [explorerPlugin],\n defaultEditorToolsVisibility: false,\n })\n );\n </script>\n </body>\n</html>`;\n","import { getMetadataStore } from \"@/indexing-store/metadata.js\";\nimport type { Schema } from \"@/internal/types.js\";\nimport type { ReadonlyDrizzle } from \"@/types/db.js\";\nimport { graphiQLHtml } from \"@/ui/graphiql.html.js\";\nimport { maxAliasesPlugin } from \"@escape.tech/graphql-armor-max-aliases\";\nimport { maxDepthPlugin } from \"@escape.tech/graphql-armor-max-depth\";\nimport { maxTokensPlugin } from \"@escape.tech/graphql-armor-max-tokens\";\nimport { type GraphQLSchema, printSchema } from \"graphql\";\nimport { createYoga } from \"graphql-yoga\";\nimport { createMiddleware } from \"hono/factory\";\nimport { buildDataLoaderCache, buildGraphQLSchema } from \"./index.js\";\n\n/**\n * Middleware for GraphQL with an interactive web view.\n *\n * - Docs: https://ponder.sh/docs/query/api-functions#register-graphql-middleware\n *\n * @example\n * import { db } from \"ponder:api\";\n * import schema from \"ponder:schema\";\n * import { graphql } from \"@/index.js\";\n * import { Hono } from \"hono\";\n *\n * const app = new Hono();\n *\n * app.use(\"/graphql\", graphql({ db, schema }));\n *\n * export default app;\n *\n */\nexport const graphql = (\n { db, schema }: { db: ReadonlyDrizzle<Schema>; schema: Schema },\n {\n maxOperationTokens = 1000,\n maxOperationDepth = 100,\n maxOperationAliases = 30,\n }: {\n maxOperationTokens?: number;\n maxOperationDepth?: number;\n maxOperationAliases?: number;\n } = {\n // Default limits are from Apollo:\n // https://www.apollographql.com/blog/prevent-graph-misuse-with-operation-size-and-complexity-limit\n maxOperationTokens: 1000,\n maxOperationDepth: 100,\n maxOperationAliases: 30,\n },\n) => {\n const graphqlSchema = buildGraphQLSchema({ schema });\n\n generateSchema({ graphqlSchema }).catch(() => {});\n\n const metadataStore = getMetadataStore({\n database: globalThis.PONDER_DATABASE,\n });\n\n const yoga = createYoga({\n graphqlEndpoint: \"*\", // Disable built-in route validation, use Hono routing instead\n schema: graphqlSchema,\n context: () => {\n const getDataLoader = buildDataLoaderCache({ drizzle: db });\n\n return { drizzle: db, metadataStore, getDataLoader };\n },\n maskedErrors: process.env.NODE_ENV === \"production\",\n logging: false,\n graphiql: false,\n parserAndValidationCache: false,\n plugins: [\n maxTokensPlugin({ n: maxOperationTokens }),\n maxDepthPlugin({ n: maxOperationDepth, ignoreIntrospection: false }),\n maxAliasesPlugin({ n: maxOperationAliases, allowList: [] }),\n ],\n });\n\n return createMiddleware(async (c) => {\n if (c.req.method === \"GET\") {\n return c.html(graphiQLHtml(c.req.path));\n }\n\n const response = await yoga.handle(c.req.raw);\n // TODO: Figure out why Yoga is returning 500 status codes for GraphQL errors.\n // @ts-expect-error\n response.status = 200;\n // @ts-expect-error\n response.statusText = \"OK\";\n\n return response;\n });\n};\n\nasync function generateSchema({\n graphqlSchema,\n}: { graphqlSchema: GraphQLSchema }) {\n const fs = await import(/* webpackIgnore: true */ \"node:fs\");\n const path = await import(/* webpackIgnore: true */ \"node:path\");\n\n fs.mkdirSync(path.join(process.cwd(), \"generated\"), { recursive: true });\n fs.writeFileSync(\n path.join(process.cwd(), \"generated\", \"schema.graphql\"),\n printSchema(graphqlSchema),\n \"utf-8\",\n );\n\n // common.logger.debug({\n // service: \"codegen\",\n // msg: \"Wrote new file at generated/schema.graphql\",\n // });\n}\n","import type { OnchainTable } from \"@/drizzle/onchain.js\";\nimport type { MetadataStore } from \"@/indexing-store/metadata.js\";\nimport type { Schema } from \"@/internal/types.js\";\nimport type { Drizzle, ReadonlyDrizzle } from \"@/types/db.js\";\nimport { never } from \"@/utils/never.js\";\nimport { deserialize, serialize } from \"@/utils/serialize.js\";\nimport DataLoader from \"dataloader\";\nimport {\n type Column,\n Many,\n One,\n type SQL,\n type TableRelationalConfig,\n and,\n arrayContained,\n arrayContains,\n asc,\n count,\n createTableRelationsHelpers,\n desc,\n eq,\n extractTablesRelationalConfig,\n getTableColumns,\n gt,\n gte,\n inArray,\n is,\n like,\n lt,\n lte,\n ne,\n not,\n notInArray,\n notLike,\n or,\n} from \"drizzle-orm\";\nimport {\n type PgEnum,\n PgEnumColumn,\n PgInteger,\n PgSerial,\n isPgEnum,\n} from \"drizzle-orm/pg-core\";\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n type GraphQLFieldConfig,\n type GraphQLFieldConfigMap,\n GraphQLFloat,\n type GraphQLInputFieldConfigMap,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n type GraphQLResolveInfo,\n GraphQLScalarType,\n GraphQLSchema,\n GraphQLString,\n} from \"graphql\";\nimport { GraphQLJSON } from \"./json.js\";\n\ntype Parent = Record<string, any>;\ntype Context = {\n getDataLoader: ReturnType<typeof buildDataLoaderCache>;\n metadataStore: MetadataStore;\n drizzle: Drizzle<{ [key: string]: OnchainTable }>;\n};\n\ntype PluralArgs = {\n where?: { [key: string]: number | string };\n after?: string;\n before?: string;\n limit?: number;\n orderBy?: string;\n orderDirection?: \"asc\" | \"desc\";\n};\n\nconst DEFAULT_LIMIT = 50 as const;\nconst MAX_LIMIT = 1000 as const;\n\nexport function buildGraphQLSchema({\n schema,\n}: { schema: Schema }): GraphQLSchema {\n const tablesConfig = extractTablesRelationalConfig(\n schema,\n createTableRelationsHelpers,\n );\n\n const tables = Object.values(tablesConfig.tables) as TableRelationalConfig[];\n\n const enums = Object.entries(schema).filter(\n (el): el is [string, PgEnum<[string, ...string[]]>] => isPgEnum(el[1]),\n );\n const enumTypes: Record<string, GraphQLEnumType> = {};\n for (const [enumTsName, enumObject] of enums) {\n // Note that this is keyed by enumName (the SQL name) because that's what is\n // available on the PgEnumColumn type. See `columnToGraphQLCore` for context.\n enumTypes[enumObject.enumName] = new GraphQLEnumType({\n name: enumTsName,\n values: enumObject.enumValues.reduce(\n (acc: Record<string, {}>, cur) => ({ ...acc, [cur]: {} }),\n {},\n ),\n });\n }\n\n const entityFilterTypes: Record<string, GraphQLInputObjectType> = {};\n for (const table of tables) {\n const filterType = new GraphQLInputObjectType({\n name: `${table.tsName}Filter`,\n fields: () => {\n const filterFields: GraphQLInputFieldConfigMap = {\n // Logical operators\n AND: { type: new GraphQLList(filterType) },\n OR: { type: new GraphQLList(filterType) },\n };\n\n for (const [columnName, column] of Object.entries(table.columns)) {\n const type = columnToGraphQLCore(column, enumTypes);\n\n // List fields => universal, plural\n if (type instanceof GraphQLList) {\n const baseType = innerType(type);\n\n conditionSuffixes.universal.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: new GraphQLList(baseType),\n };\n });\n\n conditionSuffixes.plural.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = { type: baseType };\n });\n }\n\n // JSON => no filters.\n // Boolean => universal and singular only.\n // All other scalar => universal, singular, numeric OR string depending on type\n if (\n type instanceof GraphQLScalarType ||\n type instanceof GraphQLEnumType\n ) {\n if (type.name === \"JSON\") continue;\n\n conditionSuffixes.universal.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type,\n };\n });\n\n conditionSuffixes.singular.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: new GraphQLList(type),\n };\n });\n\n if ([\"String\", \"ID\"].includes(type.name)) {\n conditionSuffixes.string.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: type,\n };\n });\n }\n\n if ([\"Int\", \"Float\", \"BigInt\"].includes(type.name)) {\n conditionSuffixes.numeric.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: type,\n };\n });\n }\n }\n }\n\n return filterFields;\n },\n });\n entityFilterTypes[table.tsName] = filterType;\n }\n\n const entityTypes: Record<string, GraphQLObjectType<Parent, Context>> = {};\n const entityPageTypes: Record<string, GraphQLObjectType> = {};\n\n for (const table of tables) {\n entityTypes[table.tsName] = new GraphQLObjectType({\n name: table.tsName,\n fields: () => {\n const fieldConfigMap: GraphQLFieldConfigMap<Parent, Context> = {};\n\n // Scalar fields\n for (const [columnName, column] of Object.entries(table.columns)) {\n const type = columnToGraphQLCore(column, enumTypes);\n fieldConfigMap[columnName] = {\n type: column.notNull ? new GraphQLNonNull(type) : type,\n };\n }\n\n // Relations\n const relations = Object.entries(table.relations);\n for (const [relationName, relation] of relations) {\n const referencedTable = tables.find(\n (table) => table.dbName === relation.referencedTableName,\n );\n if (!referencedTable)\n throw new Error(\n `Internal error: Referenced table \"${relation.referencedTableName}\" not found`,\n );\n\n const referencedEntityType = entityTypes[referencedTable.tsName];\n const referencedEntityPageType =\n entityPageTypes[referencedTable.tsName];\n const referencedEntityFilterType =\n entityFilterTypes[referencedTable.tsName];\n if (\n referencedEntityType === undefined ||\n referencedEntityPageType === undefined ||\n referencedEntityFilterType === undefined\n )\n throw new Error(\n `Internal error: Referenced entity types not found for table \"${referencedTable.tsName}\" `,\n );\n\n if (is(relation, One)) {\n const fields = relation.config?.fields ?? [];\n const references = relation.config?.references ?? [];\n\n if (fields.length !== references.length) {\n throw new Error(\n \"Internal error: Fields and references arrays must be the same length\",\n );\n }\n\n fieldConfigMap[relationName] = {\n // Note: There is a `relation.isNullable` field here but it appears\n // to be internal / incorrect. Until we have support for foriegn\n // key constraints, all `one` relations must be nullable.\n type: referencedEntityType,\n resolve: (parent, _args, context) => {\n const loader = context.getDataLoader({\n table: referencedTable,\n });\n\n const rowFragment: Record<string, unknown> = {};\n for (let i = 0; i < references.length; i++) {\n const referenceColumn = references[i]!;\n const fieldColumn = fields[i]!;\n\n const fieldColumnTsName = getColumnTsName(fieldColumn);\n const referenceColumnTsName =\n getColumnTsName(referenceColumn);\n\n rowFragment[referenceColumnTsName] =\n parent[fieldColumnTsName];\n }\n const encodedId = encodeRowFragment(rowFragment);\n\n return loader.load(encodedId);\n },\n };\n } else if (is(relation, Many)) {\n // Search the relations of the referenced table for the corresponding `one` relation.\n // If \"relationName\" is not provided, use the first `one` relation that references this table.\n const oneRelation = Object.values(referencedTable.relations).find(\n (relation) =>\n relation.relationName === relationName ||\n (is(relation, One) &&\n relation.referencedTableName === table.dbName),\n ) as One | undefined;\n if (!oneRelation)\n throw new Error(\n `Internal error: Relation \"${relationName}\" not found in table \"${referencedTable.tsName}\"`,\n );\n\n const fields = oneRelation.config?.fields ?? [];\n const references = oneRelation.config?.references ?? [];\n\n fieldConfigMap[relationName] = {\n type: referencedEntityPageType,\n args: {\n where: { type: referencedEntityFilterType },\n orderBy: { type: GraphQLString },\n orderDirection: { type: GraphQLString },\n before: { type: GraphQLString },\n after: { type: GraphQLString },\n limit: { type: GraphQLInt },\n },\n resolve: (parent, args: PluralArgs, context, info) => {\n const relationalConditions = [];\n for (let i = 0; i < references.length; i++) {\n const column = fields[i]!;\n const value = parent[references[i]!.name];\n relationalConditions.push(eq(column, value));\n }\n\n const includeTotalCount = selectionIncludesField(\n info,\n \"totalCount\",\n );\n\n return executePluralQuery(\n referencedTable,\n context.drizzle,\n args,\n includeTotalCount,\n relationalConditions,\n );\n },\n };\n } else {\n throw new Error(\n `Internal error: Relation \"${relationName}\" is unsupported, expected One or Many`,\n );\n }\n }\n\n return fieldConfigMap;\n },\n });\n\n entityPageTypes[table.tsName] = new GraphQLObjectType({\n name: `${table.tsName}Page`,\n fields: () => ({\n items: {\n type: new GraphQLNonNull(\n new GraphQLList(new GraphQLNonNull(entityTypes[table.tsName]!)),\n ),\n },\n pageInfo: { type: new GraphQLNonNull(GraphQLPageInfo) },\n totalCount: { type: new GraphQLNonNull(GraphQLInt) },\n }),\n });\n }\n\n const queryFields: Record<string, GraphQLFieldConfig<Parent, Context>> = {};\n for (const table of tables) {\n const entityType = entityTypes[table.tsName]!;\n const entityPageType = entityPageTypes[table.tsName]!;\n const entityFilterType = entityFilterTypes[table.tsName]!;\n\n const singularFieldName =\n table.tsName.charAt(0).toLowerCase() + table.tsName.slice(1);\n const pluralFieldName = `${singularFieldName}s`;\n\n queryFields[singularFieldName] = {\n type: entityType,\n // Find the primary key columns and GraphQL core types and include them\n // as arguments to the singular query type.\n args: Object.fromEntries(\n table.primaryKey.map((column) => [\n getColumnTsName(column),\n {\n type: new GraphQLNonNull(\n columnToGraphQLCore(column, enumTypes) as GraphQLInputType,\n ),\n },\n ]),\n ),\n resolve: async (_parent, args, context) => {\n const loader = context.getDataLoader({ table });\n\n // The `args` object here should be a valid `where` argument that\n // uses the `eq` shorthand for each primary key column.\n const encodedId = encodeRowFragment(args);\n\n return loader.load(encodedId);\n },\n };\n\n queryFields[pluralFieldName] = {\n type: new GraphQLNonNull(entityPageType),\n args: {\n where: { type: entityFilterType },\n orderBy: { type: GraphQLString },\n orderDirection: { type: GraphQLString },\n before: { type: GraphQLString },\n after: { type: GraphQLString },\n limit: { type: GraphQLInt },\n },\n resolve: async (_parent, args: PluralArgs, context, info) => {\n const includeTotalCount = selectionIncludesField(info, \"totalCount\");\n\n return executePluralQuery(\n table,\n context.drizzle,\n args,\n includeTotalCount,\n );\n },\n };\n }\n\n queryFields._meta = {\n type: GraphQLMeta,\n resolve: async (_source, _args, context) => {\n const status = await context.metadataStore.getStatus();\n return { status };\n },\n };\n\n return new GraphQLSchema({\n // Include these here so they are listed first in the printed schema.\n types: [GraphQLJSON, GraphQLBigInt, GraphQLPageInfo, GraphQLMeta],\n query: new GraphQLObjectType({\n name: \"Query\",\n fields: queryFields,\n }),\n });\n}\n\nconst GraphQLPageInfo = new GraphQLObjectType({\n name: \"PageInfo\",\n fields: {\n hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n hasPreviousPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n startCursor: { type: GraphQLString },\n endCursor: { type: GraphQLString },\n },\n});\n\nconst GraphQLBigInt = new GraphQLScalarType({\n name: \"BigInt\",\n serialize: (value) => String(value),\n parseValue: (value) => BigInt(value as any),\n parseLiteral: (value) => {\n if (value.kind === \"StringValue\") {\n return BigInt(value.value);\n } else {\n throw new Error(\n `Invalid value kind provided for field of type BigInt: ${value.kind}. Expected: StringValue`,\n );\n }\n },\n});\n\nconst GraphQLMeta = new GraphQLObjectType({\n name: \"Meta\",\n fields: { status: { type: GraphQLJSON } },\n});\n\nconst columnToGraphQLCore = (\n column: Column,\n enumTypes: Record<string, GraphQLEnumType>,\n): GraphQLOutputType => {\n if (column.columnType === \"PgEvmBigint\") {\n return GraphQLBigInt;\n }\n\n if (column instanceof PgEnumColumn) {\n if (column.enum === undefined) {\n throw new Error(\n `Internal error: Expected enum column \"${getColumnTsName(column)}\" to have an \"enum\" property`,\n );\n }\n const enumType = enumTypes[column.enum.enumName];\n if (enumType === undefined) {\n throw new Error(\n `Internal error: Expected to find a GraphQL enum named \"${column.enum.enumName}\"`,\n );\n }\n\n return enumType;\n }\n\n switch (column.dataType) {\n case \"boolean\":\n return GraphQLBoolean;\n case \"json\":\n return GraphQLJSON;\n case \"date\":\n return GraphQLString;\n case \"string\":\n return GraphQLString;\n case \"bigint\":\n return GraphQLString;\n case \"number\":\n return is(column, PgInteger) || is(column, PgSerial)\n ? GraphQLInt\n : GraphQLFloat;\n case \"buffer\":\n return new GraphQLList(new GraphQLNonNull(GraphQLInt));\n case \"array\": {\n if (column.columnType === \"PgVector\") {\n return new GraphQLList(new GraphQLNonNull(GraphQLFloat));\n }\n\n if (column.columnType === \"PgGeometry\") {\n return new GraphQLList(new GraphQLNonNull(GraphQLFloat));\n }\n\n const innerType = columnToGraphQLCore(\n (column as any).baseColumn,\n enumTypes,\n );\n\n return new GraphQLList(new GraphQLNonNull(innerType));\n }\n default:\n throw new Error(`Type ${column.dataType} is not implemented`);\n }\n};\n\nconst innerType = (\n type: GraphQLOutputType,\n): GraphQLScalarType | GraphQLEnumType => {\n if (type instanceof GraphQLScalarType || type instanceof GraphQLEnumType)\n return type;\n if (type instanceof GraphQLList || type instanceof GraphQLNonNull)\n return innerType(type.ofType);\n throw new Error(`Type ${type.toString()} is not implemented`);\n};\n\nasync function executePluralQuery(\n table: TableRelationalConfig,\n drizzle: Drizzle<{ [key: string]: OnchainTable }>,\n args: PluralArgs,\n includeTotalCount: boolean,\n extraConditions: (SQL | undefined)[] = [],\n) {\n const rawTable = drizzle._.fullSchema[table.tsName];\n const baseQuery = drizzle.query[table.tsName];\n if (rawTable === undefined || baseQuery === undefined)\n throw new Error(`Internal error: Table \"${table.tsName}\" not found in RQB`);\n\n const limit = args.limit ?? DEFAULT_LIMIT;\n if (limit > MAX_LIMIT) {\n throw new Error(`Invalid limit. Got ${limit}, expected <=${MAX_LIMIT}.`);\n }\n\n const orderBySchema = buildOrderBySchema(table, args);\n const orderBy = orderBySchema.map(([columnName, direction]) => {\n const column = table.columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n }\n return direction === \"asc\" ? asc(column) : desc(column);\n });\n const orderByReversed = orderBySchema.map(([columnName, direction]) => {\n const column = table.columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n }\n return direction === \"asc\" ? desc(column) : asc(column);\n });\n\n const whereConditions = buildWhereConditions(args.where, table.columns);\n\n const after = args.after ?? null;\n const before = args.before ?? null;\n\n if (after !== null && before !== null) {\n throw new Error(\"Cannot specify both before and after cursors.\");\n }\n\n let startCursor = null;\n let endCursor = null;\n let hasPreviousPage = false;\n let hasNextPage = false;\n\n const totalCountPromise = includeTotalCount\n ? drizzle\n .select({ count: count() })\n .from(rawTable)\n .where(and(...whereConditions, ...extraConditions))\n .then((rows) => rows[0]?.count ?? null)\n : Promise.resolve(null);\n\n // Neither cursors are specified, apply the order conditions and execute.\n if (after === null && before === null) {\n const [rows, totalCount] = await Promise.all([\n baseQuery.findMany({\n where: and(...whereConditions, ...extraConditions),\n orderBy,\n limit: limit + 1,\n }),\n totalCountPromise,\n ]);\n\n if (rows.length === limit + 1) {\n rows.pop();\n hasNextPage = true;\n }\n\n startCursor =\n rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n if (after !== null) {\n // User specified an 'after' cursor.\n const cursorObject = decodeCursor(after);\n const cursorCondition = buildCursorCondition(\n table,\n orderBySchema,\n \"after\",\n cursorObject,\n );\n\n const [rows, totalCount] = await Promise.all([\n baseQuery.findMany({\n where: and(...whereConditions, cursorCondition, ...extraConditions),\n orderBy,\n limit: limit + 2,\n }),\n totalCountPromise,\n ]);\n\n if (rows.length === 0) {\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // If the cursor of the first returned record equals the `after` cursor,\n // `hasPreviousPage` is true. Remove that record.\n if (encodeCursor(orderBySchema, rows[0]!) === after) {\n rows.shift();\n hasPreviousPage = true;\n } else {\n // Otherwise, remove the last record.\n rows.pop();\n }\n\n // Now if the length of the records is still equal to limit + 1,\n // there is a next page.\n if (rows.length === limit + 1) {\n rows.pop();\n hasNextPage = true;\n }\n\n // Now calculate the cursors.\n startCursor =\n rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // User specified a 'before' cursor.\n const cursorObject = decodeCursor(before!);\n const cursorCondition = buildCursorCondition(\n table,\n orderBySchema,\n \"before\",\n cursorObject,\n );\n\n // Reverse the order by conditions to get the previous page,\n // then reverse the results back to the original order.\n const [rows, totalCount] = await Promise.all([\n baseQuery\n .findMany({\n where: and(...whereConditions, cursorCondition, ...extraConditions),\n orderBy: orderByReversed,\n limit: limit + 2,\n })\n .then((rows) => rows.reverse()),\n totalCountPromise,\n ]);\n\n if (rows.length === 0) {\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // If the cursor of the last returned record equals the `before` cursor,\n // `hasNextPage` is true. Remove that record.\n if (encodeCursor(orderBySchema, rows[rows.length - 1]!) === before) {\n rows.pop();\n hasNextPage = true;\n } else {\n // Otherwise, remove the first record.\n rows.shift();\n }\n\n // Now if the length of the records is equal to limit + 1, we know\n // there is a previous page.\n if (rows.length === limit + 1) {\n rows.shift();\n hasPreviousPage = true;\n }\n\n // Now calculate the cursors.\n startCursor = rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n}\n\nconst conditionSuffixes = {\n universal: [\"\", \"_not\"],\n singular: [\"_in\", \"_not_in\"],\n plural: [\"_has\", \"_not_has\"],\n numeric: [\"_gt\", \"_lt\", \"_gte\", \"_lte\"],\n string: [\n \"_contains\",\n \"_not_contains\",\n \"_starts_with\",\n \"_ends_with\",\n \"_not_starts_with\",\n \"_not_ends_with\",\n ],\n} as const;\n\nconst conditionSuffixesByLengthDesc = Object.values(conditionSuffixes)\n .flat()\n .sort((a, b) => b.length - a.length);\n\nfunction buildWhereConditions(\n where: Record<string, any> | undefined,\n columns: Record<string, Column>,\n): (SQL | undefined)[] {\n const conditions: (SQL | undefined)[] = [];\n\n if (where === undefined) return conditions;\n\n for (const [whereKey, rawValue] of Object.entries(where)) {\n // Handle the `AND` and `OR` operators\n if (whereKey === \"AND\" || whereKey === \"OR\") {\n if (!Array.isArray(rawValue)) {\n throw new Error(\n `Invalid query: Expected an array for the ${whereKey} operator. Got: ${rawValue}`,\n );\n }\n\n const nestedConditions = rawValue.flatMap((subWhere) =>\n buildWhereConditions(subWhere, columns),\n );\n\n if (nestedConditions.length > 0) {\n conditions.push(\n whereKey === \"AND\"\n ? and(...nestedConditions)\n : or(...nestedConditions),\n );\n }\n continue;\n }\n\n // Search for a valid filter suffix, traversing the list from longest to shortest\n // to avoid ambiguity between cases like `_not_in` and `_in`.\n const conditionSuffix = conditionSuffixesByLengthDesc.find((s) =>\n whereKey.endsWith(s),\n );\n if (conditionSuffix === undefined) {\n throw new Error(\n `Invariant violation: Condition suffix not found for where key ${whereKey}`,\n );\n }\n\n // Remove the condition suffix and use the remaining string as the column name.\n const columnName = whereKey.slice(\n 0,\n whereKey.length - conditionSuffix.length,\n );\n\n // Validate that the column name is present in the table.\n const column = columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Invalid query: Where clause contains unknown column ${columnName}`,\n );\n }\n\n switch (conditionSuffix) {\n case \"\":\n if (column.columnType === \"PgArray\") {\n conditions.push(\n and(\n arrayContains(column, rawValue),\n arrayContained(column, rawValue),\n ),\n );\n } else {\n conditions.push(eq(column, rawValue));\n }\n break;\n case \"_not\":\n if (column.columnType === \"PgArray\") {\n conditions.push(\n not(\n and(\n arrayContains(column, rawValue),\n arrayContained(column, rawValue),\n )!,\n ),\n );\n } else {\n conditions.push(ne(column, rawValue));\n }\n break;\n case \"_in\":\n conditions.push(inArray(column, rawValue));\n break;\n case \"_not_in\":\n conditions.push(notInArray(column, rawValue));\n break;\n case \"_has\":\n conditions.push(arrayContains(column, [rawValue]));\n break;\n case \"_not_has\":\n conditions.push(not(arrayContains(column, [rawValue])));\n break;\n case \"_gt\":\n conditions.push(gt(column, rawValue));\n break;\n case \"_lt\":\n conditions.push(lt(column, rawValue));\n break;\n case \"_gte\":\n conditions.push(gte(column, rawValue));\n break;\n case \"_lte\":\n conditions.push(lte(column, rawValue));\n break;\n case \"_contains\":\n conditions.push(like(column, `%${rawValue}%`));\n break;\n case \"_not_contains\":\n conditions.push(notLike(column, `%${rawValue}%`));\n break;\n case \"_starts_with\":\n conditions.push(like(column, `${rawValue}%`));\n break;\n case \"_ends_with\":\n conditions.push(like(column, `%${rawValue}`));\n break;\n case \"_not_starts_with\":\n conditions.push(notLike(column, `${rawValue}%`));\n break;\n case \"_not_ends_with\":\n conditions.push(notLike(column, `%${rawValue}`));\n break;\n default:\n never(conditionSuffix);\n }\n }\n\n return conditions;\n}\n\nfunction buildOrderBySchema(table: TableRelationalConfig, args: PluralArgs) {\n // If the user-provided order by does not include the ALL of the ID columns,\n // add any missing ID columns to the end of the order by clause (asc).\n // This ensures a consistent sort order to unblock cursor pagination.\n const userDirection = args.orderDirection ?? \"asc\";\n const userColumns: [string, \"asc\" | \"desc\"][] =\n args.orderBy !== undefined ? [[args.orderBy, userDirection]] : [];\n const pkColumns = table.primaryKey.map((column) => [\n getColumnTsName(column),\n userDirection,\n ]);\n const missingPkColumns = pkColumns.filter(\n (pkColumn) =>\n !userColumns.some((userColumn) => userColumn[0] === pkColumn[0]),\n ) as [string, \"asc\" | \"desc\"][];\n return [...userColumns, ...missingPkColumns];\n}\n\nfunction encodeCursor(\n orderBySchema: [string, \"asc\" | \"desc\"][],\n row: { [k: string]: unknown },\n): string {\n const cursorObject = Object.fromEntries(\n orderBySchema.map(([columnName, _]) => [columnName, row[columnName]]),\n );\n return encodeRowFragment(cursorObject);\n}\nfunction decodeCursor(cursor: string): { [k: string]: unknown } {\n return decodeRowFragment(cursor);\n}\n\nfunction encodeRowFragment(rowFragment: { [k: string]: unknown }): string {\n return Buffer.from(serialize(rowFragment)).toString(\"base64\");\n}\nfunction decodeRowFragment(encodedRowFragment: string): {\n [k: string]: unknown;\n} {\n return deserialize(Buffer.from(encodedRowFragment, \"base64\").toString());\n}\n\nfunction buildCursorCondition(\n table: TableRelationalConfig,\n orderBySchema: [string, \"asc\" | \"desc\"][],\n direction: \"after\" | \"before\",\n cursorObject: { [k: string]: unknown },\n): SQL | undefined {\n const cursorColumns = orderBySchema.map(([columnName, orderDirection]) => {\n const column = table.columns[columnName];\n if (column === undefined)\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n\n const value = cursorObject[columnName];\n\n let comparator: typeof gt | typeof lt;\n let comparatorOrEquals: typeof gte | typeof lte;\n if (direction === \"after\") {\n [comparator, comparatorOrEquals] =\n orderDirection === \"asc\" ? [gt, gte] : [lt, lte];\n } else {\n [comparator, comparatorOrEquals] =\n orderDirection === \"asc\" ? [lt, lte] : [gt, gte];\n }\n\n return { column, value, comparator, comparatorOrEquals };\n });\n\n const buildCondition = (index: number): SQL | undefined => {\n if (index === cursorColumns.length - 1) {\n const { column, value, comparatorOrEquals } = cursorColumns[index]!;\n return comparatorOrEquals(column, value);\n }\n\n const currentColumn = cursorColumns[index]!;\n const nextCondition = buildCondition(index + 1);\n\n return or(\n currentColumn.comparator(currentColumn.column, currentColumn.value),\n and(eq(currentColumn.column, currentColumn.value), nextCondition),\n );\n };\n\n return buildCondition(0);\n}\n\nexport function buildDataLoaderCache({\n drizzle,\n}: { drizzle: ReadonlyDrizzle<Schema> }) {\n const dataLoaderMap = new Map<\n TableRelationalConfig,\n DataLoader<string, any> | undefined\n >();\n return ({ table }: { table: TableRelationalConfig }) => {\n const baseQuery = (drizzle as Drizzle<{ [key: string]: OnchainTable }>)\n .query[table.tsName];\n if (baseQuery === undefined)\n throw new Error(\n `Internal error: Unknown table \"${table.tsName}\" in data loader cache`,\n );\n\n let dataLoader = dataLoaderMap.get(table);\n if (dataLoader === undefined) {\n dataLoader = new DataLoader(\n async (encodedIds) => {\n const decodedRowFragments = encodedIds.map(decodeRowFragment);\n\n // The decoded row fragments should be valid `where` objects\n // which use the `eq` object shorthand for each primary key column.\n const idConditions = decodedRowFragments.map((decodedRowFragment) =>\n and(...buildWhereConditions(decodedRowFragment, table.columns)),\n );\n\n const rows = await baseQuery.findMany({\n where: or(...idConditions),\n limit: encodedIds.length,\n });\n\n return decodedRowFragments.map((decodedRowFragment) => {\n return rows.find((row) =>\n Object.entries(decodedRowFragment).every(\n ([col, val]) => row[col] === val,\n ),\n );\n });\n },\n { maxBatchSize: 1_000 },\n );\n dataLoaderMap.set(table, dataLoader);\n }\n\n return dataLoader;\n };\n}\n\nfunction getColumnTsName(column: Column) {\n const tableColumns = getTableColumns(column.table);\n return Object.entries(tableColumns).find(\n ([_, c]) => c.name === column.name,\n )![0];\n}\n\n/**\n * Returns `true` if the query includes a specific field.\n * Does not consider nested selections; only works one \"layer\" deep.\n */\nfunction selectionIncludesField(\n info: GraphQLResolveInfo,\n fieldName: string,\n): boolean {\n for (const fieldNode of info.fieldNodes) {\n for (const selection of fieldNode.selectionSet?.selections ?? []) {\n if (selection.kind === \"Field\" && selection.name.value === fieldName) {\n return true;\n }\n }\n }\n return false;\n}\n","// Modified from https://github.com/taion/graphql-type-json/blob/master/src/index.js\nimport {\n type GraphQLScalarLiteralParser,\n GraphQLScalarType,\n Kind,\n type ObjectValueNode,\n type ValueNode,\n print,\n} from \"graphql\";\n\nexport const GraphQLJSON = new GraphQLScalarType({\n name: \"JSON\",\n description:\n \"The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).\",\n serialize: (x) => x,\n parseValue: (x) => x,\n parseLiteral: (ast, variables) => {\n if (ast.kind !== Kind.OBJECT) {\n throw new TypeError(\n `JSONObject cannot represent non-object value: ${print(ast)}`,\n );\n }\n\n return parseObject(ast, variables);\n },\n});\n\nconst parseLiteral = (\n ast: ValueNode,\n variables: Parameters<GraphQLScalarType[\"parseLiteral\"]>[1],\n): ReturnType<GraphQLScalarLiteralParser<unknown>> => {\n switch (ast.kind) {\n case Kind.STRING:\n case Kind.BOOLEAN:\n return ast.value;\n case Kind.INT:\n case Kind.FLOAT:\n return Number.parseFloat(ast.value);\n case Kind.OBJECT:\n return parseObject(ast, variables);\n case Kind.LIST:\n return ast.values.map((n) => parseLiteral(n, variables));\n case Kind.NULL:\n return null;\n case Kind.VARIABLE:\n return variables ? variables[ast.name.value] : undefined;\n default:\n throw new TypeError(`JSON cannot represent value: ${print(ast)}`);\n }\n};\n\nconst parseObject = (\n ast: ObjectValueNode,\n variables: Parameters<GraphQLScalarType[\"parseLiteral\"]>[1],\n) => {\n const value = Object.create(null);\n ast.fields.forEach((field) => {\n value[field.name.value] = parseLiteral(field.value, variables);\n });\n\n return value;\n};\n"],"mappings":"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A;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC;AACnC;AAiLA,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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","names":["factory","sql","client","createMiddleware","GraphQLScalarType","GraphQLScalarType","relations","table","relation","status","innerType","rows","totalCount","cursorObject","cursorCondition","index","createMiddleware","eq","gt","gte","lt","lte","ne","inArray","notInArray","like","notLike","not","asc","desc","and","or","count","bigint"]}
1
+ {"version":3,"sources":["../src/config/index.ts","../src/config/address.ts","../src/index.ts","../src/client/index.ts","../src/client/validate.ts","../src/ui/graphiql.html.ts","../src/graphql/middleware.ts","../src/graphql/index.ts","../src/graphql/json.ts"],"sourcesContent":["import type { Prettify } from \"@/types/utils.js\";\nimport type { Abi } from \"abitype\";\nimport type { Narrow, Transport } from \"viem\";\nimport type { AddressConfig } from \"./address.js\";\nimport type { GetEventFilter } from \"./eventFilter.js\";\n\nexport type Config = {\n database?: DatabaseConfig;\n ordering?: \"omnichain\" | \"multichain\";\n networks: { [networkName: string]: NetworkConfig<unknown> };\n contracts: { [contractName: string]: GetContract };\n accounts: { [accountName: string]: AccountConfig<unknown> };\n blocks: {\n [sourceName: string]: GetBlockFilter<unknown>;\n };\n};\n\nexport type CreateConfigReturnType<networks, contracts, accounts, blocks> = {\n database?: DatabaseConfig;\n ordering?: \"omnichain\" | \"multichain\";\n networks: networks;\n contracts: contracts;\n accounts: accounts;\n blocks: blocks;\n};\n\nexport const createConfig = <\n const networks,\n const contracts = {},\n const accounts = {},\n const blocks = {},\n>(config: {\n database?: DatabaseConfig;\n ordering?: \"omnichain\" | \"multichain\";\n // TODO: add jsdoc to these properties.\n networks: NetworksConfig<Narrow<networks>>;\n contracts?: ContractsConfig<networks, Narrow<contracts>>;\n accounts?: AccountsConfig<networks, Narrow<accounts>>;\n blocks?: BlockFiltersConfig<networks, blocks>;\n}): CreateConfigReturnType<networks, contracts, accounts, blocks> =>\n config as Prettify<\n CreateConfigReturnType<networks, contracts, accounts, blocks>\n >;\n\n// database\n\ntype DatabaseConfig =\n | {\n kind: \"pglite\";\n /** Directory path to use for PGlite database files. Default: `\".ponder/pglite\"`. */\n directory?: string;\n }\n | {\n kind: \"postgres\";\n /** Postgres database connection string. Default: `DATABASE_PRIVATE_URL` > `DATABASE_URL` environment variable. */\n connectionString?: string;\n /** Postgres pool configuration passed to `node-postgres`. */\n poolConfig?: {\n /** Maximum number of clients in the pool. Default: `30`. */\n max?: number;\n };\n };\n\n// base\n\ntype BlockConfig = {\n /** Block number at which to start indexing events (inclusive). If `undefined`, events will be processed from block 0. Default: `undefined`. */\n startBlock?: number | \"latest\";\n /** Block number at which to stop indexing events (inclusive). If `undefined`, events will be processed in real-time. Default: `undefined`. */\n endBlock?: number | \"latest\";\n};\n\ntype TransactionReceiptConfig = {\n includeTransactionReceipts?: boolean;\n};\n\ntype FunctionCallConfig = {\n /*\n * Enable call trace indexing for this contract.\n *\n * - Docs: https://ponder.sh/docs/indexing/call-traces\n */\n includeCallTraces?: boolean;\n};\n\n// network\n\ntype NetworkConfig<network> = {\n /** Chain ID of the network. */\n chainId: network extends { chainId: infer chainId extends number }\n ? chainId | number\n : number;\n /** A viem `http`, `webSocket`, or `fallback` [Transport](https://viem.sh/docs/clients/transports/http.html).\n *\n * __To avoid rate limiting, include a custom RPC URL.__ Usage:\n *\n * ```ts\n * import { http } from \"viem\";\n *\n * const network = {\n * name: \"mainnet\",\n * chainId: 1,\n * transport: http(\"https://eth-mainnet.g.alchemy.com/v2/...\"),\n * }\n * ```\n */\n transport: Transport;\n /** Polling interval (in ms). Default: `1_000`. */\n pollingInterval?: number;\n /** Maximum number of RPC requests per second. Default: `50`. */\n maxRequestsPerSecond?: number;\n /** Disable RPC request caching. Default: `false`. */\n disableCache?: boolean;\n};\n\ntype NetworksConfig<networks> = {} extends networks\n ? {}\n : {\n [networkName in keyof networks]: NetworkConfig<networks[networkName]>;\n };\n\n// contracts\n\ntype AbiConfig<abi extends Abi | readonly unknown[]> = {\n /** Contract application byte interface. */\n abi: abi;\n};\n\ntype GetContractNetwork<\n networks,\n abi extends Abi,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = {\n /**\n * Network that this contract is deployed to. Must match a network name in `networks`.\n * Any filter information overrides the values in the higher level \"contracts\" property.\n */\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: Prettify<\n AddressConfig &\n GetEventFilter<abi> &\n TransactionReceiptConfig &\n FunctionCallConfig &\n BlockConfig\n >;\n };\n};\n\ntype ContractConfig<networks, abi extends Abi> = Prettify<\n AbiConfig<abi> &\n GetContractNetwork<networks, abi> &\n AddressConfig &\n GetEventFilter<abi> &\n TransactionReceiptConfig &\n FunctionCallConfig &\n BlockConfig\n>;\n\ntype GetContract<networks = unknown, contract = unknown> = contract extends {\n abi: infer abi extends Abi;\n}\n ? // 1. Contract has a valid abi\n ContractConfig<networks, abi>\n : // 2. Contract has an invalid abi\n ContractConfig<networks, Abi>;\n\ntype ContractsConfig<networks, contracts> = {} extends contracts\n ? // contracts empty, return empty\n {}\n : {\n [name in keyof contracts]: GetContract<networks, contracts[name]>;\n };\n\n// accounts\n\ntype GetAccountNetwork<\n networks,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = {\n /**\n * Network that this account is deployed to. Must match a network name in `networks`.\n * Any filter information overrides the values in the higher level \"accounts\" property.\n */\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: Prettify<\n AddressConfig & TransactionReceiptConfig & BlockConfig\n >;\n };\n};\n\ntype AccountConfig<networks> = Prettify<\n GetAccountNetwork<networks> &\n Required<AddressConfig> &\n TransactionReceiptConfig &\n BlockConfig\n>;\n\ntype AccountsConfig<networks, accounts> = {} extends accounts\n ? {}\n : {\n [name in keyof accounts]: AccountConfig<networks>;\n };\n\n// blocks\n\ntype BlockFilterConfig = {\n /** Block number at which to start indexing events (inclusive). If `undefined`, events will be processed from block 0. Default: `undefined`. */\n startBlock?: number | \"latest\";\n /** Block number at which to stop indexing events (inclusive). If `undefined`, events will be processed in real-time. Default: `undefined`. */\n endBlock?: number | \"latest\";\n interval?: number;\n};\n\ntype GetBlockFilter<\n networks,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = BlockFilterConfig & {\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: BlockFilterConfig;\n };\n};\n\ntype BlockFiltersConfig<\n networks = unknown,\n blocks = unknown,\n> = {} extends blocks\n ? {}\n : {\n [name in keyof blocks]: GetBlockFilter<networks>;\n };\n","import type { AbiEvent } from \"viem\";\n\nexport type Factory<event extends AbiEvent = AbiEvent> = {\n /** Address of the factory contract that creates this contract. */\n address: `0x${string}` | readonly `0x${string}`[];\n /** ABI event that announces the creation of a new instance of this contract. */\n event: event;\n /** Name of the factory event parameter that contains the new child contract address. */\n parameter: Exclude<event[\"inputs\"][number][\"name\"], undefined>;\n};\n\nexport const factory = <event extends AbiEvent>(factory: Factory<event>) =>\n factory;\n\nexport type AddressConfig = {\n address?: `0x${string}` | readonly `0x${string}`[] | Factory;\n};\n","export { createConfig } from \"@/config/index.js\";\nexport { factory } from \"@/config/address.js\";\nexport type {\n Block,\n Log,\n Transaction,\n TransactionReceipt,\n} from \"@/types/eth.js\";\nexport type { Virtual } from \"@/types/virtual.js\";\nexport {\n type MergeAbis,\n type ReplaceBigInts,\n mergeAbis,\n loadBalance,\n rateLimit,\n replaceBigInts,\n} from \"@ponder/utils\";\n\nimport type { Config } from \"@/config/index.js\";\nimport type { Prettify } from \"./types/utils.js\";\n\nexport type ContractConfig = Prettify<Config[\"contracts\"][string]>;\nexport type NetworkConfig = Prettify<Config[\"networks\"][string]>;\nexport type BlockConfig = Prettify<Config[\"blocks\"][string]>;\nexport type DatabaseConfig = Prettify<Config[\"database\"]>;\n\nexport {\n onchainTable,\n onchainEnum,\n primaryKey,\n hex,\n bigint,\n} from \"@/drizzle/onchain.js\";\n\nexport type { ReadonlyDrizzle } from \"@/types/db.js\";\n\nexport { client } from \"@/client/index.js\";\n\nexport { graphql } from \"@/graphql/middleware.js\";\n\nexport {\n sql,\n eq,\n gt,\n gte,\n lt,\n lte,\n ne,\n isNull,\n isNotNull,\n inArray,\n notInArray,\n exists,\n notExists,\n between,\n notBetween,\n like,\n notLike,\n ilike,\n notIlike,\n not,\n asc,\n desc,\n and,\n or,\n count,\n countDistinct,\n avg,\n avgDistinct,\n sum,\n sumDistinct,\n max,\n min,\n relations,\n} from \"drizzle-orm\";\n\nexport {\n bigint as int8,\n boolean,\n char,\n cidr,\n date,\n doublePrecision,\n inet,\n integer,\n interval,\n json,\n jsonb,\n line,\n macaddr,\n macaddr8,\n numeric,\n point,\n real,\n smallint,\n text,\n time,\n timestamp,\n uuid,\n varchar,\n index,\n uniqueIndex,\n alias,\n foreignKey,\n union,\n unionAll,\n intersect,\n intersectAll,\n except,\n exceptAll,\n} from \"drizzle-orm/pg-core\";\n","import type { Schema } from \"@/internal/types.js\";\nimport type { ReadonlyDrizzle } from \"@/types/db.js\";\nimport { promiseWithResolvers } from \"@ponder/common\";\nimport type { QueryWithTypings } from \"drizzle-orm\";\nimport { type PgSession, pgTable } from \"drizzle-orm/pg-core\";\nimport { createMiddleware } from \"hono/factory\";\nimport { streamSSE } from \"hono/streaming\";\nimport superjson from \"superjson\";\nimport { validateQuery } from \"./validate.js\";\n\nconst status = pgTable(\"_ponder_status\", (t) => ({\n chainId: t.bigint({ mode: \"number\" }).primaryKey(),\n blockNumber: t.bigint({ mode: \"number\" }),\n blockTimestamp: t.bigint({ mode: \"number\" }),\n ready: t.boolean().notNull(),\n}));\n\n/**\n * Middleware for `@ponder/client`.\n *\n * @param db - Drizzle database instance\n * @param schema - Ponder schema\n *\n * @example\n * ```ts\n * import { db } from \"ponder:api\";\n * import schema from \"ponder:schema\";\n * import { Hono } from \"hono\";\n * import { client } from \"ponder\";\n *\n * const app = new Hono();\n *\n * app.use(\"/sql/*\", client({ db, schema }));\n *\n * export default app;\n * ```\n */\nexport const client = ({\n db,\n}: { db: ReadonlyDrizzle<Schema>; schema: Schema }) => {\n // @ts-ignore\n const session: PgSession = db._.session;\n const driver = globalThis.PONDER_DATABASE.driver;\n let statusResolver = promiseWithResolvers<void>();\n\n const channel = `${globalThis.PONDER_NAMESPACE_BUILD}_status_channel`;\n\n if (\"instance\" in driver) {\n driver.instance.query(`LISTEN \"${channel}\"`).then(() => {\n driver.instance.onNotification(async () => {\n statusResolver.resolve();\n statusResolver = promiseWithResolvers();\n });\n });\n } else {\n const pool = driver.internal;\n\n const connectAndListen = async () => {\n driver.listen = await pool.connect();\n\n await driver.listen.query(`LISTEN \"${channel}\"`);\n\n driver.listen.on(\"error\", async () => {\n driver.listen?.release();\n await connectAndListen();\n });\n\n driver.listen.on(\"notification\", () => {\n statusResolver.resolve();\n statusResolver = promiseWithResolvers();\n });\n };\n\n connectAndListen();\n }\n\n return createMiddleware(async (c, next) => {\n if (c.req.path === \"/sql/db\") {\n const queryString = c.req.query(\"sql\");\n if (queryString === undefined) {\n return c.text('Missing \"sql\" query parameter', 400);\n }\n const query = superjson.parse(queryString) as QueryWithTypings;\n\n if (\"instance\" in driver) {\n try {\n await validateQuery(query.sql);\n const result = await session\n .prepareQuery(query, undefined, undefined, false)\n .execute();\n return c.json(result as object);\n } catch (error) {\n (error as Error).stack = undefined;\n return c.text((error as Error).message, 500);\n }\n } else {\n const client = await driver.internal.connect();\n\n try {\n await validateQuery(query.sql);\n await client.query(\"BEGIN READ ONLY\");\n const result = await session\n .prepareQuery(query, undefined, undefined, false)\n .execute();\n return c.json(result as object);\n } catch (error) {\n (error as Error).stack = undefined;\n return c.text((error as Error).message, 500);\n } finally {\n await client.query(\"ROLLBACK\");\n client.release();\n }\n }\n }\n\n if (c.req.path === \"/sql/live\") {\n c.header(\"Content-Type\", \"text/event-stream\");\n c.header(\"Cache-Control\", \"no-cache\");\n c.header(\"Connection\", \"keep-alive\");\n\n return streamSSE(c, async (stream) => {\n while (stream.closed === false && stream.aborted === false) {\n try {\n await stream.writeSSE({ data: \"\" });\n } catch {}\n await statusResolver.promise;\n }\n });\n }\n\n if (c.req.path === \"/sql/status\") {\n const statusResult = await db.select().from(status);\n return c.json(statusResult);\n }\n\n return next();\n });\n};\n","import type { Node, RawStmt } from \"@pgsql/types\";\n\ntype ValidatorNode<\n node extends Node extends infer T ? (T extends T ? keyof T : never) : never,\n> = {\n node: node | (string & {});\n children: (node: Extract<Node, { [key in node]: unknown }>[node]) => Node[];\n validate?: (node: Extract<Node, { [key in node]: unknown }>[node]) => void;\n};\n\nconst getNodeType = (node: Node) => Object.keys(node)[0]!;\n\nconst ALLOW_CACHE = new Map<string, boolean>();\n\nexport const validateQuery = async (sql: string) => {\n // @ts-ignore\n const Parser = await import(/* webpackIgnore: true */ \"pg-query-emscripten\");\n const crypto = await import(/* webpackIgnore: true */ \"node:crypto\");\n\n const hash = crypto\n .createHash(\"sha256\")\n .update(sql)\n .digest(\"hex\")\n .slice(0, 10);\n\n if (ALLOW_CACHE.has(hash)) {\n const result = ALLOW_CACHE.get(hash)!;\n\n ALLOW_CACHE.delete(hash);\n ALLOW_CACHE.set(hash, result);\n\n if (result) return;\n throw new Error(\"Invalid query\");\n } else {\n ALLOW_CACHE.set(hash, false);\n }\n\n const { parse } = await Parser.default();\n const parseResult = parse(sql) as {\n parse_tree: { stmts: RawStmt[] };\n error: string | null;\n };\n\n if (parseResult.error !== null) {\n throw new Error(parseResult.error);\n }\n\n if (parseResult.parse_tree.stmts.length === 0) {\n throw new Error(\"Invalid query\");\n }\n\n if (parseResult.parse_tree.stmts.length > 1) {\n throw new Error(\"Multiple statements not supported\");\n }\n\n const stmt = parseResult.parse_tree.stmts[0]!;\n\n if (stmt.stmt === undefined) {\n throw new Error(\"Invalid query\");\n }\n\n const validate = (node: Node) => {\n if (ALLOW_LIST.has(getNodeType(node)) === false) {\n throw new Error(`${getNodeType(node)} not supported`);\n }\n\n // @ts-ignore\n ALLOW_LIST.get(getNodeType(node))!.validate?.(node[getNodeType(node)]);\n\n for (const child of ALLOW_LIST.get(getNodeType(node))!.children(\n // @ts-ignore\n node[getNodeType(node)],\n )) {\n validate(child);\n }\n };\n\n validate(stmt.stmt);\n\n ALLOW_CACHE.set(hash, true);\n if (ALLOW_CACHE.size > 1_000_000) {\n const firstKey = ALLOW_CACHE.keys().next().value;\n if (firstKey) ALLOW_CACHE.delete(firstKey);\n }\n};\n\n// https://github.com/launchql/pgsql-parser/blob/f1df82ed4358e47c682e007bc5aa306b58f25514/packages/types/src/types.ts#L38\n\nconst INTEGER_VALIDATOR: ValidatorNode<\"Integer\"> = {\n node: \"Integer\",\n children: () => [],\n};\n\nconst FLOAT_VALIDATOR: ValidatorNode<\"Float\"> = {\n node: \"Float\",\n children: () => [],\n};\n\nconst BOOLEAN_VALIDATOR: ValidatorNode<\"Boolean\"> = {\n node: \"Boolean\",\n children: () => [],\n};\n\nconst STRING_VALIDATOR: ValidatorNode<\"String\"> = {\n node: \"String\",\n children: () => [],\n};\n\nconst BIT_STRING_VALIDATOR: ValidatorNode<\"BitString\"> = {\n node: \"BitString\",\n children: () => [],\n};\n\nconst LIST_VALIDATOR: ValidatorNode<\"List\"> = {\n node: \"List\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst OID_LIST_VALIDATOR: ValidatorNode<\"OidList\"> = {\n node: \"OidList\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst INT_LIST_VALIDATOR: ValidatorNode<\"IntList\"> = {\n node: \"IntList\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst A_CONST_VALIDATOR: ValidatorNode<\"A_Const\"> = {\n node: \"A_Const\",\n children: () => [],\n};\n\nconst ALIAS_VALIDATOR: ValidatorNode<\"Alias\"> = {\n node: \"Alias\",\n children: (node) => [...(node.colnames ?? [])],\n};\n\nconst RANGE_VAR_VALIDATOR: ValidatorNode<\"RangeVar\"> = {\n node: \"RangeVar\",\n children: (node) => [...(node.alias ? [{ Alias: node.alias }] : [])],\n validate: (node) => {\n if (node.schemaname) {\n throw new Error(\"Schema name not supported\");\n }\n\n if (node.relname && SYSTEM_TABLES.has(node.relname)) {\n throw new Error(\"System tables not supported\");\n }\n },\n};\n\nconst VAR_VALIDATOR: ValidatorNode<\"Var\"> = {\n node: \"Var\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst PARAM_VALIDATOR: ValidatorNode<\"Param\"> = {\n node: \"Param\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst AGGREF_VALIDATOR: ValidatorNode<\"Aggref\"> = {\n node: \"Aggref\",\n children: (node) => [\n ...(node.aggargtypes ?? []),\n ...(node.aggdirectargs ?? []),\n ...(node.args ?? []),\n ...(node.aggorder ?? []),\n ...(node.aggdistinct ?? []),\n ...(node.aggfilter ? [node.aggfilter] : []),\n ],\n};\n\nconst GROUPING_FUNC_VALIDATOR: ValidatorNode<\"GroupingFunc\"> = {\n node: \"GroupingFunc\",\n children: (node) => [...(node.args ?? []), ...(node.refs ?? [])],\n};\n\nconst WINDOW_FUNC_VALIDATOR: ValidatorNode<\"WindowFunc\"> = {\n node: \"WindowFunc\",\n children: (node) => [\n ...(node.args ?? []),\n ...(node.aggfilter ? [node.aggfilter] : []),\n ],\n};\n\nconst NAMED_ARG_EXPR_VALIDATOR: ValidatorNode<\"NamedArgExpr\"> = {\n node: \"NamedArgExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst OP_EXPR_VALIDATOR: ValidatorNode<\"OpExpr\"> = {\n node: \"OpExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst DISTINCT_EXPR_VALIDATOR: ValidatorNode<\"DistinctExpr\"> = {\n node: \"DistinctExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst NULL_IF_EXPR_VALIDATOR: ValidatorNode<\"NullIfExpr\"> = {\n node: \"NullIfExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst SCALAR_ARRAY_OP_EXPR_VALIDATOR: ValidatorNode<\"ScalarArrayOpExpr\"> = {\n node: \"ScalarArrayOpExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst BOOL_EXPR_VALIDATOR: ValidatorNode<\"BoolExpr\"> = {\n node: \"BoolExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst FIELD_SELECT_VALIDATOR: ValidatorNode<\"FieldSelect\"> = {\n node: \"FieldSelect\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst RELABEL_TYPE_VALIDATOR: ValidatorNode<\"RelabelType\"> = {\n node: \"RelabelType\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst ARRAY_COERCE_EXPR_VALIDATOR: ValidatorNode<\"ArrayCoerceExpr\"> = {\n node: \"ArrayCoerceExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ...(node.elemexpr ? [node.elemexpr] : []),\n ],\n};\n\nconst CONVERT_ROWTYPE_EXPR_VALIDATOR: ValidatorNode<\"ConvertRowtypeExpr\"> = {\n node: \"ConvertRowtypeExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COLLATE_EXPR_VALIDATOR: ValidatorNode<\"CollateExpr\"> = {\n node: \"CollateExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst CASE_EXPR_VALIDATOR: ValidatorNode<\"CaseExpr\"> = {\n node: \"CaseExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ...(node.args ?? []),\n ...(node.defresult ? [node.defresult] : []),\n ],\n};\n\nconst CASE_WHEN_VALIDATOR: ValidatorNode<\"CaseWhen\"> = {\n node: \"CaseWhen\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ...(node.result ? [node.result] : []),\n ],\n};\n\nconst CASE_TEST_EXPR_VALIDATOR: ValidatorNode<\"CaseTestExpr\"> = {\n node: \"CaseTestExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst ARRAY_EXPR_VALIDATOR: ValidatorNode<\"ArrayExpr\"> = {\n node: \"ArrayExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.elements ?? []),\n ],\n};\n\nconst ROW_EXPR_VALIDATOR: ValidatorNode<\"RowExpr\"> = {\n node: \"RowExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.args ?? []),\n ...(node.colnames ?? []),\n ],\n};\n\nconst ROW_COMPARE_EXPR_VALIDATOR: ValidatorNode<\"RowCompareExpr\"> = {\n node: \"RowCompareExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.opnos ?? []),\n ...(node.opfamilies ?? []),\n ...(node.inputcollids ?? []),\n ...(node.largs ?? []),\n ...(node.rargs ?? []),\n ],\n};\n\nconst COALESC_EXPR_VALIDATOR: ValidatorNode<\"CoalesceExpr\"> = {\n node: \"CoalesceExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst MIN_MAX_EXPR_VALIDATOR: ValidatorNode<\"MinMaxExpr\"> = {\n node: \"MinMaxExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst SQL_VALUE_FUNCTION_VALIDATOR: ValidatorNode<\"SQLValueFunction\"> = {\n node: \"SQLValueFunction\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst JSON_FORMAT_VALIDATOR: ValidatorNode<\"JsonFormat\"> = {\n node: \"JsonFormat\",\n children: () => [],\n};\n\nconst JSON_RETURNING_VALIDATOR: ValidatorNode<\"JsonReturning\"> = {\n node: \"JsonReturning\",\n children: (node) => [...(node.format ? [{ JsonFormat: node.format }] : [])],\n};\n\nconst JSON_VALUE_EXPR_VALIDATOR: ValidatorNode<\"JsonValueExpr\"> = {\n node: \"JsonValueExpr\",\n children: (node) => [\n ...(node.raw_expr ? [node.raw_expr] : []),\n ...(node.formatted_expr ? [node.formatted_expr] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n};\n\nconst JSON_CONSTRUCTOR_EXPR_VALIDATOR: ValidatorNode<\"JsonConstructorExpr\"> = {\n node: \"JsonConstructorExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.args ?? []),\n ...(node.func ? [node.func] : []),\n ...(node.coercion ? [node.coercion] : []),\n ...(node.returning ? [{ JsonReturning: node.returning }] : []),\n ],\n};\n\nconst JSON_IS_PREDICATE_VALIDATOR: ValidatorNode<\"JsonIsPredicate\"> = {\n node: \"JsonIsPredicate\",\n children: (node) => [\n ...(node.expr ? [node.expr] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n};\n\nconst NULL_TEST_VALIDATOR: ValidatorNode<\"NullTest\"> = {\n node: \"NullTest\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst BOOLEAN_TEST_VALIDATOR: ValidatorNode<\"BooleanTest\"> = {\n node: \"BooleanTest\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COERCE_TO_DOMAIN_VALIDATOR: ValidatorNode<\"CoerceToDomain\"> = {\n node: \"CoerceToDomain\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COERCE_TO_DOMAIN_VALUE_VALIDATOR: ValidatorNode<\"CoerceToDomainValue\"> = {\n node: \"CoerceToDomainValue\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst CURRENT_OF_EXPR_VALIDATOR: ValidatorNode<\"CurrentOfExpr\"> = {\n node: \"CurrentOfExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst NEXT_VALUE_EXPR_VALIDATOR: ValidatorNode<\"NextValueExpr\"> = {\n node: \"NextValueExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst INFERENCE_ELEM_VALIDATOR: ValidatorNode<\"InferenceElem\"> = {\n node: \"InferenceElem\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ],\n};\n\nconst TARGET_ENTRY_VALIDATOR: ValidatorNode<\"TargetEntry\"> = {\n node: \"TargetEntry\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ],\n};\n\nconst RANGE_TBL_REF_VALIDATOR: ValidatorNode<\"RangeTblRef\"> = {\n node: \"RangeTblRef\",\n children: () => [],\n};\n\nconst JOIN_EXPR_VALIDATOR: ValidatorNode<\"JoinExpr\"> = {\n node: \"JoinExpr\",\n children: (node) => [\n ...(node.larg ? [node.larg] : []),\n ...(node.rarg ? [node.rarg] : []),\n ...(node.usingClause ?? []),\n ...(node.join_using_alias ? [{ Alias: node.join_using_alias }] : []),\n ...(node.quals ? [node.quals] : []),\n ...(node.alias ? [{ Alias: node.alias }] : []),\n ],\n};\n\nconst FROM_EXPR_VALIDATOR: ValidatorNode<\"FromExpr\"> = {\n node: \"FromExpr\",\n children: (node) => [\n ...(node.fromlist ?? []),\n ...(node.quals ? [node.quals] : []),\n ],\n};\n\nconst ON_CONFLICT_EXPR_VALIDATOR: ValidatorNode<\"OnConflictExpr\"> = {\n node: \"OnConflictExpr\",\n children: (node) => [\n ...(node.arbiterElems ?? []),\n ...(node.arbiterWhere ? [node.arbiterWhere] : []),\n ...(node.onConflictSet ?? []),\n ...(node.onConflictWhere ? [node.onConflictWhere] : []),\n ...(node.exclRelTlist ?? []),\n ],\n};\n\nconst TYPE_NAME_VALIDATOR: ValidatorNode<\"TypeName\"> = {\n node: \"TypeName\",\n children: (node) => [\n ...(node.names ?? []),\n ...(node.typmods ?? []),\n ...(node.arrayBounds ?? []),\n ],\n};\n\nconst COLUMN_REF_VALIDATOR: ValidatorNode<\"ColumnRef\"> = {\n node: \"ColumnRef\",\n children: (node) => [...(node.fields ?? [])],\n};\n\nconst PARAM_REF_VALIDATOR: ValidatorNode<\"ParamRef\"> = {\n node: \"ParamRef\",\n children: () => [],\n};\n\nconst A_EXPR_VALIDATOR: ValidatorNode<\"A_Expr\"> = {\n node: \"A_Expr\",\n children: (node) => [\n ...(node.name ?? []),\n ...(node.lexpr ? [node.lexpr] : []),\n ...(node.rexpr ? [node.rexpr] : []),\n ],\n};\n\nconst TYPE_CAST_VALIDATOR: ValidatorNode<\"TypeCast\"> = {\n node: \"TypeCast\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.typeName ? [{ TypeName: node.typeName }] : []),\n ],\n};\n\nconst COLLATE_CLAUSE_VALIDATOR: ValidatorNode<\"CollateClause\"> = {\n node: \"CollateClause\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.collname ?? []),\n ],\n};\n\nconst ALLOWED_FUNCTIONS = new Set([\n \"count\",\n \"sum\",\n \"avg\",\n \"min\",\n \"max\",\n \"lower\",\n \"upper\",\n \"length\",\n \"trim\",\n \"replace\",\n \"substring\",\n \"cast\",\n \"concat\",\n \"now\",\n \"current_timestamp\",\n \"current_date\",\n \"current_time\",\n \"coalesce\",\n \"json_agg\",\n \"json_object\",\n \"json_array\",\n \"json_object_agg\",\n \"json_array_agg\",\n]);\n\nconst FUNC_CALL_VALIDATOR: ValidatorNode<\"FuncCall\"> = {\n node: \"FuncCall\",\n children: (node) => [\n ...(node.funcname ?? []),\n ...(node.args ?? []),\n ...(node.agg_order ?? []),\n ...(node.agg_filter ? [node.agg_filter] : []),\n ...(node.over ? [{ WindowDef: node.over }] : []),\n ],\n validate: (node) => {\n if (\n node.funcname?.every(\n (name) =>\n getNodeType(name) === \"String\" &&\n // @ts-ignore\n ALLOWED_FUNCTIONS.has(name.String.sval),\n )\n ) {\n return;\n }\n throw new Error(\"Function call not supported\");\n },\n};\n\nconst A_STAR_VALIDATOR: ValidatorNode<\"A_Star\"> = {\n node: \"A_Star\",\n children: () => [],\n};\n\nconst A_INDICES_VALIDATOR: ValidatorNode<\"A_Indices\"> = {\n node: \"A_Indices\",\n children: (node) => [\n ...(node.lidx ? [node.lidx] : []),\n ...(node.uidx ? [node.uidx] : []),\n ],\n};\n\nconst A_INDIRECTION_VALIDATOR: ValidatorNode<\"A_Indirection\"> = {\n node: \"A_Indirection\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.indirection ?? []),\n ],\n};\n\nconst A_ARRAY_EXPR_VALIDATOR: ValidatorNode<\"A_ArrayExpr\"> = {\n node: \"A_ArrayExpr\",\n children: (node) => [...(node.elements ?? [])],\n};\n\nconst RES_TARGET_VALIDATOR: ValidatorNode<\"ResTarget\"> = {\n node: \"ResTarget\",\n children: (node) => [\n ...(node.indirection ?? []),\n ...(node.val ? [node.val] : []),\n ],\n};\n\nconst MULTI_ASSIGN_REF_VALIDATOR: ValidatorNode<\"MultiAssignRef\"> = {\n node: \"MultiAssignRef\",\n children: (node) => [...(node.source ? [node.source] : [])],\n};\n\nconst SORT_BY_VALIDATOR: ValidatorNode<\"SortBy\"> = {\n node: \"SortBy\",\n children: (node) => [\n ...(node.node ? [node.node] : []),\n ...(node.useOp ?? []),\n ],\n};\n\nconst RANGE_SUBSELECT_VALIDATOR: ValidatorNode<\"RangeSubselect\"> = {\n node: \"RangeSubselect\",\n children: (node) => [\n ...(node.subquery ? [node.subquery] : []),\n ...(node.alias ? [{ Alias: node.alias }] : []),\n ],\n};\n\nconst SORT_GROUP_CLAUSE_VALIDATOR: ValidatorNode<\"SortGroupClause\"> = {\n node: \"SortGroupClause\",\n children: () => [],\n};\n\nconst GROUPING_SET_VALIDATOR: ValidatorNode<\"GroupingSet\"> = {\n node: \"GroupingSet\",\n children: (node) => [...(node.content ?? [])],\n};\n\nconst WITH_CLAUSE_VALIDATOR: ValidatorNode<\"WithClause\"> = {\n node: \"WithClause\",\n children: (node) => [...(node.ctes ?? [])],\n validate: (node) => {\n if (node.recursive) {\n throw new Error(\"Recursive CTEs not supported\");\n }\n },\n};\n\nconst COMMON_TABLE_EXPR_VALIDATOR: ValidatorNode<\"CommonTableExpr\"> = {\n node: \"CommonTableExpr\",\n children: (node) => [\n ...(node.aliascolnames ?? []),\n ...(node.ctequery ? [node.ctequery] : []),\n ...(node.search_clause ? [{ CTESearchClause: node.search_clause }] : []),\n ...(node.cycle_clause ? [{ CTECycleClause: node.cycle_clause }] : []),\n ...(node.ctecolnames ?? []),\n ...(node.ctecoltypes ?? []),\n ...(node.ctecoltypmods ?? []),\n ...(node.ctecolcollations ?? []),\n ],\n validate: (node) => {\n if (node.ctematerialized === \"CTEMaterializeAlways\" || node.cterecursive) {\n throw new Error(\"Invalid CTE\");\n }\n },\n};\n\nconst JSON_OUTPUT_VALIDATOR: ValidatorNode<\"JsonOutput\"> = {\n node: \"JsonOutput\",\n children: (node) => [\n ...(node.returning ? [{ JsonReturning: node.returning }] : []),\n ],\n};\n\nconst JSON_KEY_VALUE_VALIDATOR: ValidatorNode<\"JsonKeyValue\"> = {\n node: \"JsonKeyValue\",\n children: (node) => [\n ...(node.key ? [node.key] : []),\n ...(node.value ? [{ JsonValueExpr: node.value }] : []),\n ],\n};\n\nconst JSON_OBJECT_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonObjectConstructor\"> =\n {\n node: \"JsonObjectConstructor\",\n children: (node) => [\n ...(node.exprs ?? []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ],\n };\n\nconst JSON_ARRAY_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonArrayConstructor\"> =\n {\n node: \"JsonArrayConstructor\",\n children: (node) => [\n ...(node.exprs ?? []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ],\n };\n\nconst JSON_ARRAY_QUERY_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonArrayQueryConstructor\"> =\n {\n node: \"JsonArrayQueryConstructor\",\n children: (node) => [\n ...(node.query ? [node.query] : []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n };\n\nconst JSON_AGG_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonAggConstructor\"> = {\n node: \"JsonAggConstructor\",\n children: (node) => [\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ...(node.agg_filter ? [node.agg_filter] : []),\n ...(node.agg_order ?? []),\n ...(node.over ? [{ WindowDef: node.over }] : []),\n ],\n};\n\nconst JSON_OBJECT_AGG_VALIDATOR: ValidatorNode<\"JsonObjectAgg\"> = {\n node: \"JsonObjectAgg\",\n children: (node) => [\n ...(node.constructor ? [{ JsonAggConstructor: node.constructor }] : []),\n ...(node.arg ? [{ JsonKeyValue: node.arg }] : []),\n ],\n};\n\nconst JSON_ARRAY_AGG_VALIDATOR: ValidatorNode<\"JsonArrayAgg\"> = {\n node: \"JsonArrayAgg\",\n children: (node) => [\n ...(node.constructor ? [{ JsonAggConstructor: node.constructor }] : []),\n ...(node.arg ? [{ JsonValueExpr: node.arg }] : []),\n ],\n};\n\nconst SELECT_STMT_VALIDATOR: ValidatorNode<\"SelectStmt\"> = {\n node: \"SelectStmt\",\n children: (node) => [\n ...(node.distinctClause ?? []),\n ...(node.intoClause ? [{ IntoClause: node.intoClause }] : []),\n ...(node.targetList ?? []),\n ...(node.fromClause ?? []),\n ...(node.whereClause ? [node.whereClause] : []),\n ...(node.groupClause ?? []),\n ...(node.havingClause ? [node.havingClause] : []),\n ...(node.windowClause ?? []),\n ...(node.valuesLists ?? []),\n ...(node.sortClause ?? []),\n ...(node.limitOffset ? [node.limitOffset] : []),\n ...(node.limitCount ? [node.limitCount] : []),\n ...(node.lockingClause ?? []),\n ...(node.withClause ? [{ WithClause: node.withClause }] : []),\n ...(node.larg ? [{ SelectStmt: node.larg }] : []),\n ...(node.rarg ? [{ SelectStmt: node.rarg }] : []),\n ],\n validate: (node) => {\n if (node.lockingClause) {\n throw new Error(\"Invalid query\");\n }\n },\n};\n\nconst COMMENT_STMT_VALIDATOR: ValidatorNode<\"CommentStmt\"> = {\n node: \"CommentStmt\",\n children: (node) => [...(node.object ? [node.object] : [])],\n};\n\n/** Validation rules for allowed Postgres SQL AST nodes. */\nconst ALLOW_LIST = new Map(\n [\n INTEGER_VALIDATOR,\n FLOAT_VALIDATOR,\n BOOLEAN_VALIDATOR,\n STRING_VALIDATOR,\n BIT_STRING_VALIDATOR,\n LIST_VALIDATOR,\n OID_LIST_VALIDATOR,\n INT_LIST_VALIDATOR,\n A_CONST_VALIDATOR,\n ALIAS_VALIDATOR,\n RANGE_VAR_VALIDATOR,\n VAR_VALIDATOR,\n PARAM_VALIDATOR,\n AGGREF_VALIDATOR,\n GROUPING_FUNC_VALIDATOR,\n WINDOW_FUNC_VALIDATOR,\n NAMED_ARG_EXPR_VALIDATOR,\n OP_EXPR_VALIDATOR,\n DISTINCT_EXPR_VALIDATOR,\n NULL_IF_EXPR_VALIDATOR,\n SCALAR_ARRAY_OP_EXPR_VALIDATOR,\n BOOL_EXPR_VALIDATOR,\n FIELD_SELECT_VALIDATOR,\n RELABEL_TYPE_VALIDATOR,\n ARRAY_COERCE_EXPR_VALIDATOR,\n CONVERT_ROWTYPE_EXPR_VALIDATOR,\n COLLATE_EXPR_VALIDATOR,\n CASE_EXPR_VALIDATOR,\n CASE_WHEN_VALIDATOR,\n CASE_TEST_EXPR_VALIDATOR,\n ARRAY_EXPR_VALIDATOR,\n ROW_EXPR_VALIDATOR,\n ROW_COMPARE_EXPR_VALIDATOR,\n COALESC_EXPR_VALIDATOR,\n MIN_MAX_EXPR_VALIDATOR,\n SQL_VALUE_FUNCTION_VALIDATOR,\n JSON_FORMAT_VALIDATOR,\n JSON_RETURNING_VALIDATOR,\n JSON_VALUE_EXPR_VALIDATOR,\n JSON_CONSTRUCTOR_EXPR_VALIDATOR,\n JSON_IS_PREDICATE_VALIDATOR,\n NULL_TEST_VALIDATOR,\n BOOLEAN_TEST_VALIDATOR,\n COERCE_TO_DOMAIN_VALIDATOR,\n COERCE_TO_DOMAIN_VALUE_VALIDATOR,\n CURRENT_OF_EXPR_VALIDATOR,\n NEXT_VALUE_EXPR_VALIDATOR,\n INFERENCE_ELEM_VALIDATOR,\n TARGET_ENTRY_VALIDATOR,\n RANGE_TBL_REF_VALIDATOR,\n JOIN_EXPR_VALIDATOR,\n FROM_EXPR_VALIDATOR,\n ON_CONFLICT_EXPR_VALIDATOR,\n TYPE_NAME_VALIDATOR,\n COLUMN_REF_VALIDATOR,\n PARAM_REF_VALIDATOR,\n A_EXPR_VALIDATOR,\n TYPE_CAST_VALIDATOR,\n COLLATE_CLAUSE_VALIDATOR,\n FUNC_CALL_VALIDATOR,\n A_STAR_VALIDATOR,\n A_INDICES_VALIDATOR,\n A_INDIRECTION_VALIDATOR,\n A_ARRAY_EXPR_VALIDATOR,\n RES_TARGET_VALIDATOR,\n MULTI_ASSIGN_REF_VALIDATOR,\n SORT_BY_VALIDATOR,\n RANGE_SUBSELECT_VALIDATOR,\n SORT_GROUP_CLAUSE_VALIDATOR,\n GROUPING_SET_VALIDATOR,\n WITH_CLAUSE_VALIDATOR,\n COMMON_TABLE_EXPR_VALIDATOR,\n JSON_OUTPUT_VALIDATOR,\n JSON_KEY_VALUE_VALIDATOR,\n JSON_OBJECT_CONSTRUCTOR_VALIDATOR,\n JSON_ARRAY_CONSTRUCTOR_VALIDATOR,\n JSON_ARRAY_QUERY_CONSTRUCTOR_VALIDATOR,\n JSON_AGG_CONSTRUCTOR_VALIDATOR,\n JSON_OBJECT_AGG_VALIDATOR,\n JSON_ARRAY_AGG_VALIDATOR,\n SELECT_STMT_VALIDATOR,\n COMMENT_STMT_VALIDATOR,\n ].map((node) => [node.node, node]),\n);\n\n// NOT_ALLOW_LIST\n// ParseResult\n// ScanResult\n// TableFunc\n// IntoClause\n// SubscriptingRef\n// FuncExpr\n// SubLink\n// SubPlan\n// AlternativeSubPlan\n// FieldStore\n// CoerceViaIO\n// XmlExpr\n// SetToDefault\n// Query\n// RoleSpec\n// WindowDef\n// RangeFunction\n// RangeTableFunc\n// RangeTableFuncCol\n// RangeTableSample\n// ColumnDef\n// TableLikeClause\n// IndexElem\n// DefElem\n// LockingClause\n// XmlSerialize\n// PartitionElem\n// PartitionSpec\n// PartitionBounSpec\n// PartitionRangeDatum\n// PartitionCmd\n// RangeTableEntry\n// RTEPermissionInfo\n// RangeTblFunction\n// TableSampleClause\n// WithCheckOption\n// WindowClause\n// RowMarkClause\n// InferClausej\n// OnConflictClause\n// CTESearchClause\n// CTECycleClause\n// MergeWhenClause\n// MergeAction\n// TriggerTransition\n// RawStmt\n// InsertStmt\n// DeleteStmt\n// UpdateStmt\n// MergeStmt\n// SetOperationStmt\n// ReturnStmt\n// PLAssignStmt\n// CreateSchemaStmt\n// AlterTableStmt\n// ReplicaIdentityStmt\n// AlterTableCmd\n// AlterCollationStmt\n// AlterDomainStmt\n// GrantStmt\n// ObjectWithArgs\n// AccessPriv\n// GrantRoleStmt\n// AlterDefaultPrivilegesStmt\n// CopyStmt\n// VariableSetStmt\n// VariableShowStmt\n// CreateStmt\n// Constraint\n// CreateTableSpaceStmt\n// DropTableSpaceStmt\n// AlterTableSpaceOptionsStmt\n// AlterTableMoveAllStmt\n// CreateExtensionStmt\n// AlterExtensionStmt\n// AlterExtensionContentsStmt\n// CreateFdwStmt\n// AlterFdwStmt\n// CreateForeignServerStmt\n// AlterForeignServerStmt\n// CreateForeignTableStmt\n// CreateUserMappingStmt\n// AlterUserMappingStmt\n// DropUserMappingStmt\n// ImportForeignSchemaStmt\n// CreatePolicyStmt\n// AlterPolicyStmt\n// CreateAmStmt\n// CreateTrigStmt\n// CreateEventTrigStmt\n// AlterEventTrigStmt\n// CreatePLangStmt\n// CreateRoleStmt\n// AlterRoleStmt\n// AlterRoleSetStmt\n// DropRoleStmt\n// CreateSeqStmt\n// AlterSeqStmt\n// DefineStmt\n// CreateDomainStmt\n// CreateOpClassStmt\n// CreateOpClassItem\n// CreateOpFamilyStmt\n// AlterOpFamilyStmt\n// DropStmt\n// TruncateStmt\n// SecLabelStmt\n// DeclareCursorStmt\n// ClosePortalStmt\n// FetchStmt\n// IndexStmt\n// CreateStatsStmt\n// StatsElem\n// AlterStatsStmt\n// CreateFunctionStmt\n// FunctionParameter\n// AlterFunctionStmt\n// DoStmt\n// InlineCodeBlock\n// CallStmt\n// CallContext\n// RenameStmt\n// AlterObjectDependsStmt\n// AlterObjectSchemaStmt\n// AlterOwnerStmt\n// AlterOperatorStmt\n// AlterTypeStmt\n// RuleStmt\n// NotifyStmt\n// ListenStmt\n// UnlistenStmt\n// TransactionStmt\n// CompositeTypeStmt\n// CreateEnumStmt\n// CreateRangeStmt\n// AlterEnumStmt\n// ViewStmt\n// LoadStmt\n// CreatedbStmt\n// AlterDatabaseStmt\n// AlterDatabaseRefreshCollStmt\n// AlterDatabaseSetStmt\n// DropdbStmt\n// AlterSystemStmt\n// ClusterStmt\n// VacuumStmt\n// VacuumRelation\n// ExplainStmt\n// CreateTableAsStmt\n// RefreshMatViewStmt\n// CheckPointStmt\n// DiscardStmt\n// LockStmt\n// ConstraintsSetStmt\n// ReindexStmt\n// CreateConversionStmt\n// CreateCastStmt\n// CreateTransformStmt\n// PrepareStmt\n// ExecuteStmt\n// DeallocateStmt\n// DropOwnedStmt\n// ReassignOwnedStmt\n// AlterTSDictionaryStmt\n// AlterTSConfigurationStmt\n// PublicationTable\n// PublicationObjSpec\n// CreatePublicationStmt\n// AlterPublicationStmt\n// CreateSubscriptionStmt\n// AlterSubscriptionStmt\n// DropSubscriptionStmt\n// ScanToken\n\nconst SYSTEM_TABLES = new Set([\n \"pg_statistic\",\n \"pg_type\",\n \"pg_foreign_table\",\n \"pg_proc_oid_index\",\n \"pg_proc_proname_args_nsp_index\",\n \"pg_type_oid_index\",\n \"pg_type_typname_nsp_index\",\n \"pg_attribute_relid_attnam_index\",\n \"pg_attribute_relid_attnum_index\",\n \"pg_class_oid_index\",\n \"pg_class_relname_nsp_index\",\n \"pg_class_tblspc_relfilenode_index\",\n \"pg_attrdef_adrelid_adnum_index\",\n \"pg_attrdef_oid_index\",\n \"pg_constraint_conname_nsp_index\",\n \"pg_constraint_conrelid_contypid_conname_index\",\n \"pg_constraint_contypid_index\",\n \"pg_constraint_oid_index\",\n \"pg_constraint_conparentid_index\",\n \"pg_inherits_relid_seqno_index\",\n \"pg_inherits_parent_index\",\n \"pg_index_indrelid_index\",\n \"pg_index_indexrelid_index\",\n \"pg_operator_oid_index\",\n \"pg_operator_oprname_l_r_n_index\",\n \"pg_opfamily_am_name_nsp_index\",\n \"pg_opfamily_oid_index\",\n \"pg_opclass_am_name_nsp_index\",\n \"pg_opclass_oid_index\",\n \"pg_am_name_index\",\n \"pg_am_oid_index\",\n \"pg_amop_fam_strat_index\",\n \"pg_amop_opr_fam_index\",\n \"pg_amop_oid_index\",\n \"pg_amproc_fam_proc_index\",\n \"pg_amproc_oid_index\",\n \"pg_language_name_index\",\n \"pg_language_oid_index\",\n \"pg_largeobject_metadata_oid_index\",\n \"pg_largeobject_loid_pn_index\",\n \"pg_aggregate_fnoid_index\",\n \"pg_statistic_relid_att_inh_index\",\n \"pg_statistic_ext_oid_index\",\n \"pg_statistic_ext_name_index\",\n \"pg_statistic_ext_relid_index\",\n \"pg_statistic_ext_data_stxoid_inh_index\",\n \"pg_rewrite_oid_index\",\n \"pg_rewrite_rel_rulename_index\",\n \"pg_trigger_tgconstraint_index\",\n \"pg_trigger_tgrelid_tgname_index\",\n \"pg_trigger_oid_index\",\n \"pg_event_trigger_evtname_index\",\n \"pg_event_trigger_oid_index\",\n \"pg_description_o_c_o_index\",\n \"pg_cast_oid_index\",\n \"pg_cast_source_target_index\",\n \"pg_enum_oid_index\",\n \"pg_enum_typid_label_index\",\n \"pg_enum_typid_sortorder_index\",\n \"pg_namespace_nspname_index\",\n \"pg_namespace_oid_index\",\n \"pg_conversion_default_index\",\n \"pg_conversion_name_nsp_index\",\n \"pg_conversion_oid_index\",\n \"pg_depend_depender_index\",\n \"pg_depend_reference_index\",\n \"pg_database_datname_index\",\n \"pg_database_oid_index\",\n \"pg_db_role_setting_databaseid_rol_index\",\n \"pg_tablespace_oid_index\",\n \"pg_tablespace_spcname_index\",\n \"pg_authid_rolname_index\",\n \"pg_authid_oid_index\",\n \"pg_auth_members_oid_index\",\n \"pg_auth_members_role_member_index\",\n \"pg_auth_members_member_role_index\",\n \"pg_auth_members_grantor_index\",\n \"pg_shdepend_depender_index\",\n \"pg_shdepend_reference_index\",\n \"pg_shdescription_o_c_index\",\n \"pg_ts_config_cfgname_index\",\n \"pg_ts_config_oid_index\",\n \"pg_ts_config_map_index\",\n \"pg_ts_dict_dictname_index\",\n \"pg_ts_dict_oid_index\",\n \"pg_ts_parser_prsname_index\",\n \"pg_ts_parser_oid_index\",\n \"pg_ts_template_tmplname_index\",\n \"pg_ts_template_oid_index\",\n \"pg_extension_oid_index\",\n \"pg_extension_name_index\",\n \"pg_foreign_data_wrapper_oid_index\",\n \"pg_foreign_data_wrapper_name_index\",\n \"pg_foreign_server_oid_index\",\n \"pg_foreign_server_name_index\",\n \"pg_user_mapping_oid_index\",\n \"pg_user_mapping_user_server_index\",\n \"pg_foreign_table_relid_index\",\n \"pg_policy_oid_index\",\n \"pg_policy_polrelid_polname_index\",\n \"pg_replication_origin_roiident_index\",\n \"pg_replication_origin_roname_index\",\n \"pg_default_acl_role_nsp_obj_index\",\n \"pg_default_acl_oid_index\",\n \"pg_init_privs_o_c_o_index\",\n \"pg_seclabel_object_index\",\n \"pg_shseclabel_object_index\",\n \"pg_collation_name_enc_nsp_index\",\n \"pg_collation_oid_index\",\n \"pg_parameter_acl_parname_index\",\n \"pg_parameter_acl_oid_index\",\n \"pg_partitioned_table_partrelid_index\",\n \"pg_range_rngtypid_index\",\n \"pg_range_rngmultitypid_index\",\n \"pg_transform_oid_index\",\n \"pg_transform_type_lang_index\",\n \"pg_sequence_seqrelid_index\",\n \"pg_publication_oid_index\",\n \"pg_publication_pubname_index\",\n \"pg_publication_namespace_oid_index\",\n \"pg_publication_namespace_pnnspid_pnpubid_index\",\n \"pg_publication_rel_oid_index\",\n \"pg_publication_rel_prrelid_prpubid_index\",\n \"pg_publication_rel_prpubid_index\",\n \"pg_subscription_oid_index\",\n \"pg_subscription_subname_index\",\n \"pg_subscription_rel_srrelid_srsubid_index\",\n \"pg_authid\",\n \"pg_shadow\",\n \"pg_roles\",\n \"pg_statistic_ext_data\",\n \"pg_hba_file_rules\",\n \"pg_settings\",\n \"pg_file_settings\",\n \"pg_backend_memory_contexts\",\n \"pg_ident_file_mappings\",\n \"pg_config\",\n \"pg_shmem_allocations\",\n \"pg_tables\",\n \"pg_user_mapping\",\n \"pg_replication_origin_status\",\n \"pg_subscription\",\n \"pg_attribute\",\n \"pg_proc\",\n \"pg_class\",\n \"pg_attrdef\",\n \"pg_constraint\",\n \"pg_inherits\",\n \"pg_index\",\n \"pg_operator\",\n \"pg_statio_all_sequences\",\n \"pg_opfamily\",\n \"pg_opclass\",\n \"pg_am\",\n \"pg_amop\",\n \"pg_amproc\",\n \"pg_language\",\n \"pg_largeobject_metadata\",\n \"pg_aggregate\",\n \"pg_statistic_ext\",\n \"pg_rewrite\",\n \"pg_trigger\",\n \"pg_event_trigger\",\n \"pg_description\",\n \"pg_cast\",\n \"pg_enum\",\n \"pg_namespace\",\n \"pg_conversion\",\n \"pg_depend\",\n \"pg_database\",\n \"pg_db_role_setting\",\n \"pg_tablespace\",\n \"pg_auth_members\",\n \"pg_shdepend\",\n \"pg_shdescription\",\n \"pg_ts_config\",\n \"pg_ts_config_map\",\n \"pg_ts_dict\",\n \"pg_ts_parser\",\n \"pg_ts_template\",\n \"pg_extension\",\n \"pg_foreign_data_wrapper\",\n \"pg_foreign_server\",\n \"pg_policy\",\n \"pg_replication_origin\",\n \"pg_default_acl\",\n \"pg_init_privs\",\n \"pg_seclabel\",\n \"pg_shseclabel\",\n \"pg_collation\",\n \"pg_parameter_acl\",\n \"pg_partitioned_table\",\n \"pg_range\",\n \"pg_transform\",\n \"pg_sequence\",\n \"pg_publication\",\n \"pg_publication_namespace\",\n \"pg_publication_rel\",\n \"pg_subscription_rel\",\n \"pg_group\",\n \"pg_user\",\n \"pg_policies\",\n \"pg_rules\",\n \"pg_views\",\n \"pg_matviews\",\n \"pg_indexes\",\n \"pg_sequences\",\n \"pg_stats\",\n \"pg_stats_ext\",\n \"pg_stats_ext_exprs\",\n \"pg_publication_tables\",\n \"pg_locks\",\n \"pg_cursors\",\n \"pg_available_extensions\",\n \"pg_available_extension_versions\",\n \"pg_prepared_xacts\",\n \"pg_prepared_statements\",\n \"pg_seclabels\",\n \"pg_timezone_abbrevs\",\n \"pg_timezone_names\",\n \"pg_stat_all_tables\",\n \"pg_stat_xact_all_tables\",\n \"pg_stat_xact_user_tables\",\n \"pg_stat_sys_tables\",\n \"pg_stat_xact_sys_tables\",\n \"pg_stat_user_tables\",\n \"pg_statio_all_tables\",\n \"pg_statio_sys_tables\",\n \"pg_statio_user_tables\",\n \"pg_stat_all_indexes\",\n \"pg_stat_sys_indexes\",\n \"pg_stat_user_indexes\",\n \"pg_statio_all_indexes\",\n \"pg_statio_sys_indexes\",\n \"pg_statio_user_indexes\",\n \"pg_statio_sys_sequences\",\n \"pg_statio_user_sequences\",\n \"pg_stat_activity\",\n \"pg_stat_replication\",\n \"pg_stat_slru\",\n \"pg_stat_wal_receiver\",\n \"pg_stat_recovery_prefetch\",\n \"pg_stat_subscription\",\n \"pg_stat_ssl\",\n \"pg_stat_gssapi\",\n \"pg_replication_slots\",\n \"pg_stat_replication_slots\",\n \"pg_stat_database\",\n \"pg_stat_database_conflicts\",\n \"pg_stat_user_functions\",\n \"pg_stat_xact_user_functions\",\n \"pg_stat_archiver\",\n \"pg_stat_bgwriter\",\n \"pg_stat_io\",\n \"pg_stat_wal\",\n \"pg_stat_progress_analyze\",\n \"pg_stat_progress_vacuum\",\n \"pg_stat_progress_cluster\",\n \"pg_stat_progress_create_index\",\n \"pg_stat_progress_basebackup\",\n \"pg_stat_progress_copy\",\n \"pg_user_mappings\",\n \"pg_stat_subscription_stats\",\n \"pg_largeobject\",\n]);\n","// https://github.com/graphql/graphiql/blob/main/examples/graphiql-cdn/index.html\n\nexport const graphiQLHtml = (path: string) => `<!--\n * Copyright (c) 2021 GraphQL Contributors\n * All rights reserved.\n *\n * This source code is licensed under the license found in the\n * LICENSE file in the root directory of this source tree.\n-->\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Ponder Playground</title>\n <style>\n body {\n height: 100%;\n margin: 0;\n width: 100%;\n overflow: hidden;\n }\n #graphiql {\n height: 100vh;\n }\n *::-webkit-scrollbar {\n height: 0.3rem;\n width: 0.5rem;\n }\n *::-webkit-scrollbar-track {\n -ms-overflow-style: none;\n overflow: -moz-scrollbars-none;\n }\n *::-webkit-scrollbar-thumb {\n -ms-overflow-style: none;\n overflow: -moz-scrollbars-none;\n }\n </style>\n <link rel=\"stylesheet\" href=\"https://unpkg.com/graphiql@3.7.2/graphiql.min.css\" />\n <link rel=\"stylesheet\" href=\"https://unpkg.com/@graphiql/plugin-explorer@3.2.3/dist/style.css\" />\n </head>\n <body>\n <div id=\"graphiql\">Loading...</div>\n <script crossorigin src=\"https://unpkg.com/react@18.3.1/umd/react.development.js\"></script>1\n <script crossorigin src=\"https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js\"></script>\n <script src=\"https://unpkg.com/graphiql@3.7.2/graphiql.min.js\" crossorigin=\"anonymous\"></script>\n <script src=\"https://unpkg.com/@graphiql/plugin-explorer@3.2.3/dist/index.umd.js\" crossorigin=\"anonymous\"></script>\n <script>\n const fetcher = GraphiQL.createFetcher({ url: \"${path}\" });\n const explorerPlugin = GraphiQLPluginExplorer.explorerPlugin();\n const root = ReactDOM.createRoot(document.getElementById(\"graphiql\"));\n root.render(\n React.createElement(GraphiQL, {\n fetcher,\n plugins: [explorerPlugin],\n defaultEditorToolsVisibility: false,\n })\n );\n </script>\n </body>\n</html>`;\n","import { getMetadataStore } from \"@/indexing-store/metadata.js\";\nimport type { Schema } from \"@/internal/types.js\";\nimport type { ReadonlyDrizzle } from \"@/types/db.js\";\nimport { graphiQLHtml } from \"@/ui/graphiql.html.js\";\nimport { maxAliasesPlugin } from \"@escape.tech/graphql-armor-max-aliases\";\nimport { maxDepthPlugin } from \"@escape.tech/graphql-armor-max-depth\";\nimport { maxTokensPlugin } from \"@escape.tech/graphql-armor-max-tokens\";\nimport { type GraphQLSchema, printSchema } from \"graphql\";\nimport { createYoga } from \"graphql-yoga\";\nimport { createMiddleware } from \"hono/factory\";\nimport { buildDataLoaderCache, buildGraphQLSchema } from \"./index.js\";\n\n/**\n * Middleware for GraphQL with an interactive web view.\n *\n * - Docs: https://ponder.sh/docs/query/api-functions#register-graphql-middleware\n *\n * @example\n * import { db } from \"ponder:api\";\n * import schema from \"ponder:schema\";\n * import { graphql } from \"@/index.js\";\n * import { Hono } from \"hono\";\n *\n * const app = new Hono();\n *\n * app.use(\"/graphql\", graphql({ db, schema }));\n *\n * export default app;\n *\n */\nexport const graphql = (\n { db, schema }: { db: ReadonlyDrizzle<Schema>; schema: Schema },\n {\n maxOperationTokens = 1000,\n maxOperationDepth = 100,\n maxOperationAliases = 30,\n }: {\n maxOperationTokens?: number;\n maxOperationDepth?: number;\n maxOperationAliases?: number;\n } = {\n // Default limits are from Apollo:\n // https://www.apollographql.com/blog/prevent-graph-misuse-with-operation-size-and-complexity-limit\n maxOperationTokens: 1000,\n maxOperationDepth: 100,\n maxOperationAliases: 30,\n },\n) => {\n const graphqlSchema = buildGraphQLSchema({ schema });\n\n generateSchema({ graphqlSchema }).catch(() => {});\n\n const metadataStore = getMetadataStore({\n database: globalThis.PONDER_DATABASE,\n });\n\n const yoga = createYoga({\n graphqlEndpoint: \"*\", // Disable built-in route validation, use Hono routing instead\n schema: graphqlSchema,\n context: () => {\n const getDataLoader = buildDataLoaderCache({ drizzle: db });\n\n return { drizzle: db, metadataStore, getDataLoader };\n },\n maskedErrors: process.env.NODE_ENV === \"production\",\n logging: false,\n graphiql: false,\n parserAndValidationCache: false,\n plugins: [\n maxTokensPlugin({ n: maxOperationTokens }),\n maxDepthPlugin({ n: maxOperationDepth, ignoreIntrospection: false }),\n maxAliasesPlugin({ n: maxOperationAliases, allowList: [] }),\n ],\n });\n\n return createMiddleware(async (c) => {\n if (c.req.method === \"GET\") {\n return c.html(graphiQLHtml(c.req.path));\n }\n\n const response = await yoga.handle(c.req.raw);\n // TODO: Figure out why Yoga is returning 500 status codes for GraphQL errors.\n // @ts-expect-error\n response.status = 200;\n // @ts-expect-error\n response.statusText = \"OK\";\n\n return response;\n });\n};\n\nasync function generateSchema({\n graphqlSchema,\n}: { graphqlSchema: GraphQLSchema }) {\n const fs = await import(/* webpackIgnore: true */ \"node:fs\");\n const path = await import(/* webpackIgnore: true */ \"node:path\");\n\n fs.mkdirSync(path.join(process.cwd(), \"generated\"), { recursive: true });\n fs.writeFileSync(\n path.join(process.cwd(), \"generated\", \"schema.graphql\"),\n printSchema(graphqlSchema),\n \"utf-8\",\n );\n\n // common.logger.debug({\n // service: \"codegen\",\n // msg: \"Wrote new file at generated/schema.graphql\",\n // });\n}\n","import type { OnchainTable } from \"@/drizzle/onchain.js\";\nimport type { MetadataStore } from \"@/indexing-store/metadata.js\";\nimport type { Schema } from \"@/internal/types.js\";\nimport type { Drizzle, ReadonlyDrizzle } from \"@/types/db.js\";\nimport { never } from \"@/utils/never.js\";\nimport { deserialize, serialize } from \"@/utils/serialize.js\";\nimport DataLoader from \"dataloader\";\nimport {\n type Column,\n Many,\n One,\n type SQL,\n type TableRelationalConfig,\n and,\n arrayContained,\n arrayContains,\n asc,\n count,\n createTableRelationsHelpers,\n desc,\n eq,\n extractTablesRelationalConfig,\n getTableColumns,\n gt,\n gte,\n inArray,\n is,\n like,\n lt,\n lte,\n ne,\n not,\n notInArray,\n notLike,\n or,\n} from \"drizzle-orm\";\nimport {\n type PgEnum,\n PgEnumColumn,\n PgInteger,\n PgSerial,\n isPgEnum,\n} from \"drizzle-orm/pg-core\";\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n type GraphQLFieldConfig,\n type GraphQLFieldConfigMap,\n GraphQLFloat,\n type GraphQLInputFieldConfigMap,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n type GraphQLResolveInfo,\n GraphQLScalarType,\n GraphQLSchema,\n GraphQLString,\n} from \"graphql\";\nimport { GraphQLJSON } from \"./json.js\";\n\ntype Parent = Record<string, any>;\ntype Context = {\n getDataLoader: ReturnType<typeof buildDataLoaderCache>;\n metadataStore: MetadataStore;\n drizzle: Drizzle<{ [key: string]: OnchainTable }>;\n};\n\ntype PluralArgs = {\n where?: { [key: string]: number | string };\n after?: string;\n before?: string;\n limit?: number;\n orderBy?: string;\n orderDirection?: \"asc\" | \"desc\";\n};\n\nconst DEFAULT_LIMIT = 50 as const;\nconst MAX_LIMIT = 1000 as const;\n\nexport function buildGraphQLSchema({\n schema,\n}: { schema: Schema }): GraphQLSchema {\n const tablesConfig = extractTablesRelationalConfig(\n schema,\n createTableRelationsHelpers,\n );\n\n const tables = Object.values(tablesConfig.tables) as TableRelationalConfig[];\n\n const enums = Object.entries(schema).filter(\n (el): el is [string, PgEnum<[string, ...string[]]>] => isPgEnum(el[1]),\n );\n const enumTypes: Record<string, GraphQLEnumType> = {};\n for (const [enumTsName, enumObject] of enums) {\n // Note that this is keyed by enumName (the SQL name) because that's what is\n // available on the PgEnumColumn type. See `columnToGraphQLCore` for context.\n enumTypes[enumObject.enumName] = new GraphQLEnumType({\n name: enumTsName,\n values: enumObject.enumValues.reduce(\n (acc: Record<string, {}>, cur) => ({ ...acc, [cur]: {} }),\n {},\n ),\n });\n }\n\n const entityFilterTypes: Record<string, GraphQLInputObjectType> = {};\n for (const table of tables) {\n const filterType = new GraphQLInputObjectType({\n name: `${table.tsName}Filter`,\n fields: () => {\n const filterFields: GraphQLInputFieldConfigMap = {\n // Logical operators\n AND: { type: new GraphQLList(filterType) },\n OR: { type: new GraphQLList(filterType) },\n };\n\n for (const [columnName, column] of Object.entries(table.columns)) {\n const type = columnToGraphQLCore(column, enumTypes);\n\n // List fields => universal, plural\n if (type instanceof GraphQLList) {\n const baseType = innerType(type);\n\n conditionSuffixes.universal.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: new GraphQLList(baseType),\n };\n });\n\n conditionSuffixes.plural.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = { type: baseType };\n });\n }\n\n // JSON => no filters.\n // Boolean => universal and singular only.\n // All other scalar => universal, singular, numeric OR string depending on type\n if (\n type instanceof GraphQLScalarType ||\n type instanceof GraphQLEnumType\n ) {\n if (type.name === \"JSON\") continue;\n\n conditionSuffixes.universal.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type,\n };\n });\n\n conditionSuffixes.singular.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: new GraphQLList(type),\n };\n });\n\n if ([\"String\", \"ID\"].includes(type.name)) {\n conditionSuffixes.string.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: type,\n };\n });\n }\n\n if ([\"Int\", \"Float\", \"BigInt\"].includes(type.name)) {\n conditionSuffixes.numeric.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: type,\n };\n });\n }\n }\n }\n\n return filterFields;\n },\n });\n entityFilterTypes[table.tsName] = filterType;\n }\n\n const entityTypes: Record<string, GraphQLObjectType<Parent, Context>> = {};\n const entityPageTypes: Record<string, GraphQLObjectType> = {};\n\n for (const table of tables) {\n entityTypes[table.tsName] = new GraphQLObjectType({\n name: table.tsName,\n fields: () => {\n const fieldConfigMap: GraphQLFieldConfigMap<Parent, Context> = {};\n\n // Scalar fields\n for (const [columnName, column] of Object.entries(table.columns)) {\n const type = columnToGraphQLCore(column, enumTypes);\n fieldConfigMap[columnName] = {\n type: column.notNull ? new GraphQLNonNull(type) : type,\n };\n }\n\n // Relations\n const relations = Object.entries(table.relations);\n for (const [relationName, relation] of relations) {\n const referencedTable = tables.find(\n (table) => table.dbName === relation.referencedTableName,\n );\n if (!referencedTable)\n throw new Error(\n `Internal error: Referenced table \"${relation.referencedTableName}\" not found`,\n );\n\n const referencedEntityType = entityTypes[referencedTable.tsName];\n const referencedEntityPageType =\n entityPageTypes[referencedTable.tsName];\n const referencedEntityFilterType =\n entityFilterTypes[referencedTable.tsName];\n if (\n referencedEntityType === undefined ||\n referencedEntityPageType === undefined ||\n referencedEntityFilterType === undefined\n )\n throw new Error(\n `Internal error: Referenced entity types not found for table \"${referencedTable.tsName}\" `,\n );\n\n if (is(relation, One)) {\n const fields = relation.config?.fields ?? [];\n const references = relation.config?.references ?? [];\n\n if (fields.length !== references.length) {\n throw new Error(\n \"Internal error: Fields and references arrays must be the same length\",\n );\n }\n\n fieldConfigMap[relationName] = {\n // Note: There is a `relation.isNullable` field here but it appears\n // to be internal / incorrect. Until we have support for foriegn\n // key constraints, all `one` relations must be nullable.\n type: referencedEntityType,\n resolve: (parent, _args, context) => {\n const loader = context.getDataLoader({\n table: referencedTable,\n });\n\n const rowFragment: Record<string, unknown> = {};\n for (let i = 0; i < references.length; i++) {\n const referenceColumn = references[i]!;\n const fieldColumn = fields[i]!;\n\n const fieldColumnTsName = getColumnTsName(fieldColumn);\n const referenceColumnTsName =\n getColumnTsName(referenceColumn);\n\n rowFragment[referenceColumnTsName] =\n parent[fieldColumnTsName];\n }\n const encodedId = encodeRowFragment(rowFragment);\n\n return loader.load(encodedId);\n },\n };\n } else if (is(relation, Many)) {\n // Search the relations of the referenced table for the corresponding `one` relation.\n // If \"relationName\" is not provided, use the first `one` relation that references this table.\n const oneRelation = Object.values(referencedTable.relations).find(\n (relation) =>\n relation.relationName === relationName ||\n (is(relation, One) &&\n relation.referencedTableName === table.dbName),\n ) as One | undefined;\n if (!oneRelation)\n throw new Error(\n `Internal error: Relation \"${relationName}\" not found in table \"${referencedTable.tsName}\"`,\n );\n\n const fields = oneRelation.config?.fields ?? [];\n const references = oneRelation.config?.references ?? [];\n\n fieldConfigMap[relationName] = {\n type: referencedEntityPageType,\n args: {\n where: { type: referencedEntityFilterType },\n orderBy: { type: GraphQLString },\n orderDirection: { type: GraphQLString },\n before: { type: GraphQLString },\n after: { type: GraphQLString },\n limit: { type: GraphQLInt },\n },\n resolve: (parent, args: PluralArgs, context, info) => {\n const relationalConditions = [];\n for (let i = 0; i < references.length; i++) {\n const column = fields[i]!;\n const value = parent[references[i]!.name];\n relationalConditions.push(eq(column, value));\n }\n\n const includeTotalCount = selectionIncludesField(\n info,\n \"totalCount\",\n );\n\n return executePluralQuery(\n referencedTable,\n context.drizzle,\n args,\n includeTotalCount,\n relationalConditions,\n );\n },\n };\n } else {\n throw new Error(\n `Internal error: Relation \"${relationName}\" is unsupported, expected One or Many`,\n );\n }\n }\n\n return fieldConfigMap;\n },\n });\n\n entityPageTypes[table.tsName] = new GraphQLObjectType({\n name: `${table.tsName}Page`,\n fields: () => ({\n items: {\n type: new GraphQLNonNull(\n new GraphQLList(new GraphQLNonNull(entityTypes[table.tsName]!)),\n ),\n },\n pageInfo: { type: new GraphQLNonNull(GraphQLPageInfo) },\n totalCount: { type: new GraphQLNonNull(GraphQLInt) },\n }),\n });\n }\n\n const queryFields: Record<string, GraphQLFieldConfig<Parent, Context>> = {};\n for (const table of tables) {\n const entityType = entityTypes[table.tsName]!;\n const entityPageType = entityPageTypes[table.tsName]!;\n const entityFilterType = entityFilterTypes[table.tsName]!;\n\n const singularFieldName =\n table.tsName.charAt(0).toLowerCase() + table.tsName.slice(1);\n const pluralFieldName = `${singularFieldName}s`;\n\n queryFields[singularFieldName] = {\n type: entityType,\n // Find the primary key columns and GraphQL core types and include them\n // as arguments to the singular query type.\n args: Object.fromEntries(\n table.primaryKey.map((column) => [\n getColumnTsName(column),\n {\n type: new GraphQLNonNull(\n columnToGraphQLCore(column, enumTypes) as GraphQLInputType,\n ),\n },\n ]),\n ),\n resolve: async (_parent, args, context) => {\n const loader = context.getDataLoader({ table });\n\n // The `args` object here should be a valid `where` argument that\n // uses the `eq` shorthand for each primary key column.\n const encodedId = encodeRowFragment(args);\n\n return loader.load(encodedId);\n },\n };\n\n queryFields[pluralFieldName] = {\n type: new GraphQLNonNull(entityPageType),\n args: {\n where: { type: entityFilterType },\n orderBy: { type: GraphQLString },\n orderDirection: { type: GraphQLString },\n before: { type: GraphQLString },\n after: { type: GraphQLString },\n limit: { type: GraphQLInt },\n },\n resolve: async (_parent, args: PluralArgs, context, info) => {\n const includeTotalCount = selectionIncludesField(info, \"totalCount\");\n\n return executePluralQuery(\n table,\n context.drizzle,\n args,\n includeTotalCount,\n );\n },\n };\n }\n\n queryFields._meta = {\n type: GraphQLMeta,\n resolve: async (_source, _args, context) => {\n const status = await context.metadataStore.getStatus();\n return { status };\n },\n };\n\n return new GraphQLSchema({\n // Include these here so they are listed first in the printed schema.\n types: [GraphQLJSON, GraphQLBigInt, GraphQLPageInfo, GraphQLMeta],\n query: new GraphQLObjectType({\n name: \"Query\",\n fields: queryFields,\n }),\n });\n}\n\nconst GraphQLPageInfo = new GraphQLObjectType({\n name: \"PageInfo\",\n fields: {\n hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n hasPreviousPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n startCursor: { type: GraphQLString },\n endCursor: { type: GraphQLString },\n },\n});\n\nconst GraphQLBigInt = new GraphQLScalarType({\n name: \"BigInt\",\n serialize: (value) => String(value),\n parseValue: (value) => BigInt(value as any),\n parseLiteral: (value) => {\n if (value.kind === \"StringValue\") {\n return BigInt(value.value);\n } else {\n throw new Error(\n `Invalid value kind provided for field of type BigInt: ${value.kind}. Expected: StringValue`,\n );\n }\n },\n});\n\nconst GraphQLMeta = new GraphQLObjectType({\n name: \"Meta\",\n fields: { status: { type: GraphQLJSON } },\n});\n\nconst columnToGraphQLCore = (\n column: Column,\n enumTypes: Record<string, GraphQLEnumType>,\n): GraphQLOutputType => {\n if (column.columnType === \"PgEvmBigint\") {\n return GraphQLBigInt;\n }\n\n if (column instanceof PgEnumColumn) {\n if (column.enum === undefined) {\n throw new Error(\n `Internal error: Expected enum column \"${getColumnTsName(column)}\" to have an \"enum\" property`,\n );\n }\n const enumType = enumTypes[column.enum.enumName];\n if (enumType === undefined) {\n throw new Error(\n `Internal error: Expected to find a GraphQL enum named \"${column.enum.enumName}\"`,\n );\n }\n\n return enumType;\n }\n\n switch (column.dataType) {\n case \"boolean\":\n return GraphQLBoolean;\n case \"json\":\n return GraphQLJSON;\n case \"date\":\n return GraphQLString;\n case \"string\":\n return GraphQLString;\n case \"bigint\":\n return GraphQLString;\n case \"number\":\n return is(column, PgInteger) || is(column, PgSerial)\n ? GraphQLInt\n : GraphQLFloat;\n case \"buffer\":\n return new GraphQLList(new GraphQLNonNull(GraphQLInt));\n case \"array\": {\n if (column.columnType === \"PgVector\") {\n return new GraphQLList(new GraphQLNonNull(GraphQLFloat));\n }\n\n if (column.columnType === \"PgGeometry\") {\n return new GraphQLList(new GraphQLNonNull(GraphQLFloat));\n }\n\n const innerType = columnToGraphQLCore(\n (column as any).baseColumn,\n enumTypes,\n );\n\n return new GraphQLList(new GraphQLNonNull(innerType));\n }\n default:\n throw new Error(`Type ${column.dataType} is not implemented`);\n }\n};\n\nconst innerType = (\n type: GraphQLOutputType,\n): GraphQLScalarType | GraphQLEnumType => {\n if (type instanceof GraphQLScalarType || type instanceof GraphQLEnumType)\n return type;\n if (type instanceof GraphQLList || type instanceof GraphQLNonNull)\n return innerType(type.ofType);\n throw new Error(`Type ${type.toString()} is not implemented`);\n};\n\nasync function executePluralQuery(\n table: TableRelationalConfig,\n drizzle: Drizzle<{ [key: string]: OnchainTable }>,\n args: PluralArgs,\n includeTotalCount: boolean,\n extraConditions: (SQL | undefined)[] = [],\n) {\n const rawTable = drizzle._.fullSchema[table.tsName];\n const baseQuery = drizzle.query[table.tsName];\n if (rawTable === undefined || baseQuery === undefined)\n throw new Error(`Internal error: Table \"${table.tsName}\" not found in RQB`);\n\n const limit = args.limit ?? DEFAULT_LIMIT;\n if (limit > MAX_LIMIT) {\n throw new Error(`Invalid limit. Got ${limit}, expected <=${MAX_LIMIT}.`);\n }\n\n const orderBySchema = buildOrderBySchema(table, args);\n const orderBy = orderBySchema.map(([columnName, direction]) => {\n const column = table.columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n }\n return direction === \"asc\" ? asc(column) : desc(column);\n });\n const orderByReversed = orderBySchema.map(([columnName, direction]) => {\n const column = table.columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n }\n return direction === \"asc\" ? desc(column) : asc(column);\n });\n\n const whereConditions = buildWhereConditions(args.where, table.columns);\n\n const after = args.after ?? null;\n const before = args.before ?? null;\n\n if (after !== null && before !== null) {\n throw new Error(\"Cannot specify both before and after cursors.\");\n }\n\n let startCursor = null;\n let endCursor = null;\n let hasPreviousPage = false;\n let hasNextPage = false;\n\n const totalCountPromise = includeTotalCount\n ? drizzle\n .select({ count: count() })\n .from(rawTable)\n .where(and(...whereConditions, ...extraConditions))\n .then((rows) => rows[0]?.count ?? null)\n : Promise.resolve(null);\n\n // Neither cursors are specified, apply the order conditions and execute.\n if (after === null && before === null) {\n const [rows, totalCount] = await Promise.all([\n baseQuery.findMany({\n where: and(...whereConditions, ...extraConditions),\n orderBy,\n limit: limit + 1,\n }),\n totalCountPromise,\n ]);\n\n if (rows.length === limit + 1) {\n rows.pop();\n hasNextPage = true;\n }\n\n startCursor =\n rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n if (after !== null) {\n // User specified an 'after' cursor.\n const cursorObject = decodeCursor(after);\n const cursorCondition = buildCursorCondition(\n table,\n orderBySchema,\n \"after\",\n cursorObject,\n );\n\n const [rows, totalCount] = await Promise.all([\n baseQuery.findMany({\n where: and(...whereConditions, cursorCondition, ...extraConditions),\n orderBy,\n limit: limit + 2,\n }),\n totalCountPromise,\n ]);\n\n if (rows.length === 0) {\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // If the cursor of the first returned record equals the `after` cursor,\n // `hasPreviousPage` is true. Remove that record.\n if (encodeCursor(orderBySchema, rows[0]!) === after) {\n rows.shift();\n hasPreviousPage = true;\n } else {\n // Otherwise, remove the last record.\n rows.pop();\n }\n\n // Now if the length of the records is still equal to limit + 1,\n // there is a next page.\n if (rows.length === limit + 1) {\n rows.pop();\n hasNextPage = true;\n }\n\n // Now calculate the cursors.\n startCursor =\n rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // User specified a 'before' cursor.\n const cursorObject = decodeCursor(before!);\n const cursorCondition = buildCursorCondition(\n table,\n orderBySchema,\n \"before\",\n cursorObject,\n );\n\n // Reverse the order by conditions to get the previous page,\n // then reverse the results back to the original order.\n const [rows, totalCount] = await Promise.all([\n baseQuery\n .findMany({\n where: and(...whereConditions, cursorCondition, ...extraConditions),\n orderBy: orderByReversed,\n limit: limit + 2,\n })\n .then((rows) => rows.reverse()),\n totalCountPromise,\n ]);\n\n if (rows.length === 0) {\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // If the cursor of the last returned record equals the `before` cursor,\n // `hasNextPage` is true. Remove that record.\n if (encodeCursor(orderBySchema, rows[rows.length - 1]!) === before) {\n rows.pop();\n hasNextPage = true;\n } else {\n // Otherwise, remove the first record.\n rows.shift();\n }\n\n // Now if the length of the records is equal to limit + 1, we know\n // there is a previous page.\n if (rows.length === limit + 1) {\n rows.shift();\n hasPreviousPage = true;\n }\n\n // Now calculate the cursors.\n startCursor = rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n}\n\nconst conditionSuffixes = {\n universal: [\"\", \"_not\"],\n singular: [\"_in\", \"_not_in\"],\n plural: [\"_has\", \"_not_has\"],\n numeric: [\"_gt\", \"_lt\", \"_gte\", \"_lte\"],\n string: [\n \"_contains\",\n \"_not_contains\",\n \"_starts_with\",\n \"_ends_with\",\n \"_not_starts_with\",\n \"_not_ends_with\",\n ],\n} as const;\n\nconst conditionSuffixesByLengthDesc = Object.values(conditionSuffixes)\n .flat()\n .sort((a, b) => b.length - a.length);\n\nfunction buildWhereConditions(\n where: Record<string, any> | undefined,\n columns: Record<string, Column>,\n): (SQL | undefined)[] {\n const conditions: (SQL | undefined)[] = [];\n\n if (where === undefined) return conditions;\n\n for (const [whereKey, rawValue] of Object.entries(where)) {\n // Handle the `AND` and `OR` operators\n if (whereKey === \"AND\" || whereKey === \"OR\") {\n if (!Array.isArray(rawValue)) {\n throw new Error(\n `Invalid query: Expected an array for the ${whereKey} operator. Got: ${rawValue}`,\n );\n }\n\n const nestedConditions = rawValue.flatMap((subWhere) =>\n buildWhereConditions(subWhere, columns),\n );\n\n if (nestedConditions.length > 0) {\n conditions.push(\n whereKey === \"AND\"\n ? and(...nestedConditions)\n : or(...nestedConditions),\n );\n }\n continue;\n }\n\n // Search for a valid filter suffix, traversing the list from longest to shortest\n // to avoid ambiguity between cases like `_not_in` and `_in`.\n const conditionSuffix = conditionSuffixesByLengthDesc.find((s) =>\n whereKey.endsWith(s),\n );\n if (conditionSuffix === undefined) {\n throw new Error(\n `Invariant violation: Condition suffix not found for where key ${whereKey}`,\n );\n }\n\n // Remove the condition suffix and use the remaining string as the column name.\n const columnName = whereKey.slice(\n 0,\n whereKey.length - conditionSuffix.length,\n );\n\n // Validate that the column name is present in the table.\n const column = columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Invalid query: Where clause contains unknown column ${columnName}`,\n );\n }\n\n switch (conditionSuffix) {\n case \"\":\n if (column.columnType === \"PgArray\") {\n conditions.push(\n and(\n arrayContains(column, rawValue),\n arrayContained(column, rawValue),\n ),\n );\n } else {\n conditions.push(eq(column, rawValue));\n }\n break;\n case \"_not\":\n if (column.columnType === \"PgArray\") {\n conditions.push(\n not(\n and(\n arrayContains(column, rawValue),\n arrayContained(column, rawValue),\n )!,\n ),\n );\n } else {\n conditions.push(ne(column, rawValue));\n }\n break;\n case \"_in\":\n conditions.push(inArray(column, rawValue));\n break;\n case \"_not_in\":\n conditions.push(notInArray(column, rawValue));\n break;\n case \"_has\":\n conditions.push(arrayContains(column, [rawValue]));\n break;\n case \"_not_has\":\n conditions.push(not(arrayContains(column, [rawValue])));\n break;\n case \"_gt\":\n conditions.push(gt(column, rawValue));\n break;\n case \"_lt\":\n conditions.push(lt(column, rawValue));\n break;\n case \"_gte\":\n conditions.push(gte(column, rawValue));\n break;\n case \"_lte\":\n conditions.push(lte(column, rawValue));\n break;\n case \"_contains\":\n conditions.push(like(column, `%${rawValue}%`));\n break;\n case \"_not_contains\":\n conditions.push(notLike(column, `%${rawValue}%`));\n break;\n case \"_starts_with\":\n conditions.push(like(column, `${rawValue}%`));\n break;\n case \"_ends_with\":\n conditions.push(like(column, `%${rawValue}`));\n break;\n case \"_not_starts_with\":\n conditions.push(notLike(column, `${rawValue}%`));\n break;\n case \"_not_ends_with\":\n conditions.push(notLike(column, `%${rawValue}`));\n break;\n default:\n never(conditionSuffix);\n }\n }\n\n return conditions;\n}\n\nfunction buildOrderBySchema(table: TableRelationalConfig, args: PluralArgs) {\n // If the user-provided order by does not include the ALL of the ID columns,\n // add any missing ID columns to the end of the order by clause (asc).\n // This ensures a consistent sort order to unblock cursor pagination.\n const userDirection = args.orderDirection ?? \"asc\";\n const userColumns: [string, \"asc\" | \"desc\"][] =\n args.orderBy !== undefined ? [[args.orderBy, userDirection]] : [];\n const pkColumns = table.primaryKey.map((column) => [\n getColumnTsName(column),\n userDirection,\n ]);\n const missingPkColumns = pkColumns.filter(\n (pkColumn) =>\n !userColumns.some((userColumn) => userColumn[0] === pkColumn[0]),\n ) as [string, \"asc\" | \"desc\"][];\n return [...userColumns, ...missingPkColumns];\n}\n\nfunction encodeCursor(\n orderBySchema: [string, \"asc\" | \"desc\"][],\n row: { [k: string]: unknown },\n): string {\n const cursorObject = Object.fromEntries(\n orderBySchema.map(([columnName, _]) => [columnName, row[columnName]]),\n );\n return encodeRowFragment(cursorObject);\n}\nfunction decodeCursor(cursor: string): { [k: string]: unknown } {\n return decodeRowFragment(cursor);\n}\n\nfunction encodeRowFragment(rowFragment: { [k: string]: unknown }): string {\n return Buffer.from(serialize(rowFragment)).toString(\"base64\");\n}\nfunction decodeRowFragment(encodedRowFragment: string): {\n [k: string]: unknown;\n} {\n return deserialize(Buffer.from(encodedRowFragment, \"base64\").toString());\n}\n\nfunction buildCursorCondition(\n table: TableRelationalConfig,\n orderBySchema: [string, \"asc\" | \"desc\"][],\n direction: \"after\" | \"before\",\n cursorObject: { [k: string]: unknown },\n): SQL | undefined {\n const cursorColumns = orderBySchema.map(([columnName, orderDirection]) => {\n const column = table.columns[columnName];\n if (column === undefined)\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n\n const value = cursorObject[columnName];\n\n let comparator: typeof gt | typeof lt;\n let comparatorOrEquals: typeof gte | typeof lte;\n if (direction === \"after\") {\n [comparator, comparatorOrEquals] =\n orderDirection === \"asc\" ? [gt, gte] : [lt, lte];\n } else {\n [comparator, comparatorOrEquals] =\n orderDirection === \"asc\" ? [lt, lte] : [gt, gte];\n }\n\n return { column, value, comparator, comparatorOrEquals };\n });\n\n const buildCondition = (index: number): SQL | undefined => {\n if (index === cursorColumns.length - 1) {\n const { column, value, comparatorOrEquals } = cursorColumns[index]!;\n return comparatorOrEquals(column, value);\n }\n\n const currentColumn = cursorColumns[index]!;\n const nextCondition = buildCondition(index + 1);\n\n return or(\n currentColumn.comparator(currentColumn.column, currentColumn.value),\n and(eq(currentColumn.column, currentColumn.value), nextCondition),\n );\n };\n\n return buildCondition(0);\n}\n\nexport function buildDataLoaderCache({\n drizzle,\n}: { drizzle: ReadonlyDrizzle<Schema> }) {\n const dataLoaderMap = new Map<\n TableRelationalConfig,\n DataLoader<string, any> | undefined\n >();\n return ({ table }: { table: TableRelationalConfig }) => {\n const baseQuery = (drizzle as Drizzle<{ [key: string]: OnchainTable }>)\n .query[table.tsName];\n if (baseQuery === undefined)\n throw new Error(\n `Internal error: Unknown table \"${table.tsName}\" in data loader cache`,\n );\n\n let dataLoader = dataLoaderMap.get(table);\n if (dataLoader === undefined) {\n dataLoader = new DataLoader(\n async (encodedIds) => {\n const decodedRowFragments = encodedIds.map(decodeRowFragment);\n\n // The decoded row fragments should be valid `where` objects\n // which use the `eq` object shorthand for each primary key column.\n const idConditions = decodedRowFragments.map((decodedRowFragment) =>\n and(...buildWhereConditions(decodedRowFragment, table.columns)),\n );\n\n const rows = await baseQuery.findMany({\n where: or(...idConditions),\n limit: encodedIds.length,\n });\n\n return decodedRowFragments.map((decodedRowFragment) => {\n return rows.find((row) =>\n Object.entries(decodedRowFragment).every(\n ([col, val]) => row[col] === val,\n ),\n );\n });\n },\n { maxBatchSize: 1_000 },\n );\n dataLoaderMap.set(table, dataLoader);\n }\n\n return dataLoader;\n };\n}\n\nfunction getColumnTsName(column: Column) {\n const tableColumns = getTableColumns(column.table);\n return Object.entries(tableColumns).find(\n ([_, c]) => c.name === column.name,\n )![0];\n}\n\n/**\n * Returns `true` if the query includes a specific field.\n * Does not consider nested selections; only works one \"layer\" deep.\n */\nfunction selectionIncludesField(\n info: GraphQLResolveInfo,\n fieldName: string,\n): boolean {\n for (const fieldNode of info.fieldNodes) {\n for (const selection of fieldNode.selectionSet?.selections ?? []) {\n if (selection.kind === \"Field\" && selection.name.value === fieldName) {\n return true;\n }\n }\n }\n return false;\n}\n","// Modified from https://github.com/taion/graphql-type-json/blob/master/src/index.js\nimport {\n type GraphQLScalarLiteralParser,\n GraphQLScalarType,\n Kind,\n type ObjectValueNode,\n type ValueNode,\n print,\n} from \"graphql\";\n\nexport const GraphQLJSON = new GraphQLScalarType({\n name: \"JSON\",\n description:\n \"The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).\",\n serialize: (x) => x,\n parseValue: (x) => x,\n parseLiteral: (ast, variables) => {\n if (ast.kind !== Kind.OBJECT) {\n throw new TypeError(\n `JSONObject cannot represent non-object value: ${print(ast)}`,\n );\n }\n\n return parseObject(ast, variables);\n },\n});\n\nconst parseLiteral = (\n ast: ValueNode,\n variables: Parameters<GraphQLScalarType[\"parseLiteral\"]>[1],\n): ReturnType<GraphQLScalarLiteralParser<unknown>> => {\n switch (ast.kind) {\n case Kind.STRING:\n case Kind.BOOLEAN:\n return ast.value;\n case Kind.INT:\n case Kind.FLOAT:\n return Number.parseFloat(ast.value);\n case Kind.OBJECT:\n return parseObject(ast, variables);\n case Kind.LIST:\n return ast.values.map((n) => parseLiteral(n, variables));\n case Kind.NULL:\n return null;\n case Kind.VARIABLE:\n return variables ? variables[ast.name.value] : undefined;\n default:\n throw new TypeError(`JSON cannot represent value: ${print(ast)}`);\n }\n};\n\nconst parseObject = (\n ast: ObjectValueNode,\n variables: Parameters<GraphQLScalarType[\"parseLiteral\"]>[1],\n) => {\n const value = Object.create(null);\n ast.fields.forEach((field) => {\n value[field.name.value] = parseLiteral(field.value, variables);\n });\n\n return value;\n};\n"],"mappings":"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ACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC;AACnC;AAiLA,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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","names":["factory","sql","client","createMiddleware","GraphQLScalarType","GraphQLScalarType","relations","table","relation","status","innerType","rows","totalCount","cursorObject","cursorCondition","index","createMiddleware","eq","gt","gte","lt","lte","ne","inArray","notInArray","like","notLike","not","asc","desc","and","or","count","bigint"]}