ponder 0.11.21 → 0.11.23

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 (127) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/esm/bin/commands/createViews.js +9 -20
  3. package/dist/esm/bin/commands/createViews.js.map +1 -1
  4. package/dist/esm/bin/commands/dev.js +1 -1
  5. package/dist/esm/bin/commands/dev.js.map +1 -1
  6. package/dist/esm/bin/commands/list.js +4 -7
  7. package/dist/esm/bin/commands/list.js.map +1 -1
  8. package/dist/esm/bin/commands/prune.js +9 -21
  9. package/dist/esm/bin/commands/prune.js.map +1 -1
  10. package/dist/esm/bin/commands/serve.js +1 -1
  11. package/dist/esm/bin/commands/serve.js.map +1 -1
  12. package/dist/esm/bin/commands/start.js +3 -3
  13. package/dist/esm/bin/commands/start.js.map +1 -1
  14. package/dist/esm/bin/utils/run.js +159 -180
  15. package/dist/esm/bin/utils/run.js.map +1 -1
  16. package/dist/esm/build/index.js +1 -48
  17. package/dist/esm/build/index.js.map +1 -1
  18. package/dist/esm/build/plugin.js +1 -1
  19. package/dist/esm/client/index.js +9 -13
  20. package/dist/esm/client/index.js.map +1 -1
  21. package/dist/esm/database/index.js +429 -141
  22. package/dist/esm/database/index.js.map +1 -1
  23. package/dist/esm/drizzle/index.js.map +1 -1
  24. package/dist/esm/drizzle/kit/index.js.map +1 -1
  25. package/dist/esm/drizzle/onchain.js +1 -8
  26. package/dist/esm/drizzle/onchain.js.map +1 -1
  27. package/dist/esm/graphql/index.js +16 -19
  28. package/dist/esm/graphql/index.js.map +1 -1
  29. package/dist/esm/graphql/middleware.js +7 -3
  30. package/dist/esm/graphql/middleware.js.map +1 -1
  31. package/dist/esm/indexing-store/cache.js +32 -26
  32. package/dist/esm/indexing-store/cache.js.map +1 -1
  33. package/dist/esm/indexing-store/historical.js +32 -23
  34. package/dist/esm/indexing-store/historical.js.map +1 -1
  35. package/dist/esm/indexing-store/index.js +18 -1
  36. package/dist/esm/indexing-store/index.js.map +1 -1
  37. package/dist/esm/indexing-store/realtime.js +140 -89
  38. package/dist/esm/indexing-store/realtime.js.map +1 -1
  39. package/dist/esm/internal/errors.js +0 -12
  40. package/dist/esm/internal/errors.js.map +1 -1
  41. package/dist/esm/server/index.js +2 -10
  42. package/dist/esm/server/index.js.map +1 -1
  43. package/dist/esm/sync-store/index.js +432 -403
  44. package/dist/esm/sync-store/index.js.map +1 -1
  45. package/dist/esm/utils/rpc.js +3 -3
  46. package/dist/esm/utils/rpc.js.map +1 -1
  47. package/dist/esm/utils/wait.js +0 -2
  48. package/dist/esm/utils/wait.js.map +1 -1
  49. package/dist/types/bin/commands/createViews.d.ts.map +1 -1
  50. package/dist/types/bin/commands/list.d.ts.map +1 -1
  51. package/dist/types/bin/commands/prune.d.ts.map +1 -1
  52. package/dist/types/bin/commands/start.d.ts +0 -2
  53. package/dist/types/bin/commands/start.d.ts.map +1 -1
  54. package/dist/types/bin/utils/run.d.ts +1 -1
  55. package/dist/types/bin/utils/run.d.ts.map +1 -1
  56. package/dist/types/build/index.d.ts +1 -1
  57. package/dist/types/build/index.d.ts.map +1 -1
  58. package/dist/types/client/index.d.ts.map +1 -1
  59. package/dist/types/database/index.d.ts +73 -25
  60. package/dist/types/database/index.d.ts.map +1 -1
  61. package/dist/types/drizzle/index.d.ts +3 -2
  62. package/dist/types/drizzle/index.d.ts.map +1 -1
  63. package/dist/types/drizzle/kit/index.d.ts +4 -3
  64. package/dist/types/drizzle/kit/index.d.ts.map +1 -1
  65. package/dist/types/drizzle/onchain.d.ts +5 -12
  66. package/dist/types/drizzle/onchain.d.ts.map +1 -1
  67. package/dist/types/graphql/index.d.ts +4 -2
  68. package/dist/types/graphql/index.d.ts.map +1 -1
  69. package/dist/types/graphql/middleware.d.ts +1 -1
  70. package/dist/types/graphql/middleware.d.ts.map +1 -1
  71. package/dist/types/indexing-store/cache.d.ts +12 -5
  72. package/dist/types/indexing-store/cache.d.ts.map +1 -1
  73. package/dist/types/indexing-store/historical.d.ts +7 -2
  74. package/dist/types/indexing-store/historical.d.ts.map +1 -1
  75. package/dist/types/indexing-store/index.d.ts +2 -4
  76. package/dist/types/indexing-store/index.d.ts.map +1 -1
  77. package/dist/types/indexing-store/realtime.d.ts +3 -1
  78. package/dist/types/indexing-store/realtime.d.ts.map +1 -1
  79. package/dist/types/internal/errors.d.ts +0 -4
  80. package/dist/types/internal/errors.d.ts.map +1 -1
  81. package/dist/types/server/index.d.ts +1 -1
  82. package/dist/types/server/index.d.ts.map +1 -1
  83. package/dist/types/sync/index.d.ts +1 -1
  84. package/dist/types/sync-store/index.d.ts.map +1 -1
  85. package/dist/types/utils/rpc.d.ts.map +1 -1
  86. package/dist/types/utils/wait.d.ts.map +1 -1
  87. package/package.json +2 -2
  88. package/src/bin/commands/createViews.ts +26 -37
  89. package/src/bin/commands/dev.ts +1 -1
  90. package/src/bin/commands/list.ts +4 -7
  91. package/src/bin/commands/prune.ts +17 -31
  92. package/src/bin/commands/serve.ts +1 -1
  93. package/src/bin/commands/start.ts +3 -4
  94. package/src/bin/utils/run.ts +210 -256
  95. package/src/build/index.ts +2 -53
  96. package/src/build/plugin.ts +1 -1
  97. package/src/client/index.ts +10 -21
  98. package/src/database/index.ts +742 -331
  99. package/src/drizzle/index.ts +3 -2
  100. package/src/drizzle/kit/index.ts +5 -2
  101. package/src/drizzle/onchain.ts +2 -26
  102. package/src/graphql/index.ts +26 -31
  103. package/src/graphql/middleware.ts +7 -5
  104. package/src/indexing-store/cache.ts +52 -35
  105. package/src/indexing-store/historical.ts +40 -28
  106. package/src/indexing-store/index.ts +27 -2
  107. package/src/indexing-store/realtime.ts +220 -176
  108. package/src/internal/errors.ts +0 -9
  109. package/src/server/index.ts +3 -14
  110. package/src/sync-store/index.ts +997 -870
  111. package/src/utils/rpc.ts +7 -6
  112. package/src/utils/wait.ts +0 -1
  113. package/dist/esm/database/queryBuilder.js +0 -206
  114. package/dist/esm/database/queryBuilder.js.map +0 -1
  115. package/dist/esm/database/utils.js +0 -100
  116. package/dist/esm/database/utils.js.map +0 -1
  117. package/dist/esm/drizzle/json.js +0 -119
  118. package/dist/esm/drizzle/json.js.map +0 -1
  119. package/dist/types/database/queryBuilder.d.ts +0 -37
  120. package/dist/types/database/queryBuilder.d.ts.map +0 -1
  121. package/dist/types/database/utils.d.ts +0 -25
  122. package/dist/types/database/utils.d.ts.map +0 -1
  123. package/dist/types/drizzle/json.d.ts +0 -51
  124. package/dist/types/drizzle/json.d.ts.map +0 -1
  125. package/src/database/queryBuilder.ts +0 -319
  126. package/src/database/utils.ts +0 -140
  127. package/src/drizzle/json.ts +0 -154
package/src/utils/rpc.ts CHANGED
@@ -377,6 +377,12 @@ export const validateTransactionsAndBlock = (block: SyncBlock) => {
377
377
  * @dev Allows `block.logsBloom` to be `zeroLogsBloom`.
378
378
  */
379
379
  export const validateLogsAndBlock = (logs: SyncLog[], block: SyncBlock) => {
380
+ if (block.logsBloom !== zeroLogsBloom && logs.length === 0) {
381
+ throw new Error(
382
+ "Detected invalid eth_getLogs response. `block.logsBloom` is not empty but zero logs were returned.",
383
+ );
384
+ }
385
+
380
386
  const logIndexes = new Set<string>();
381
387
  const transactionByIndex = new Map<Hex, SyncTransaction>(
382
388
  block.transactions.map((transaction) => [
@@ -384,6 +390,7 @@ export const validateLogsAndBlock = (logs: SyncLog[], block: SyncBlock) => {
384
390
  transaction,
385
391
  ]),
386
392
  );
393
+
387
394
  for (const log of logs) {
388
395
  if (block.hash !== log.blockHash) {
389
396
  throw new Error(
@@ -417,12 +424,6 @@ export const validateLogsAndBlock = (logs: SyncLog[], block: SyncBlock) => {
417
424
  } else {
418
425
  logIndexes.add(log.logIndex);
419
426
  }
420
-
421
- if (block.logsBloom !== zeroLogsBloom && logs.length === 0) {
422
- throw new Error(
423
- "Detected invalid eth_getLogs response. `block.logsBloom` is not empty but zero logs were returned.",
424
- );
425
- }
426
427
  }
427
428
  };
428
429
 
package/src/utils/wait.ts CHANGED
@@ -3,6 +3,5 @@
3
3
  * @param milliseconds Minimum number of milliseconds to wait.
4
4
  */
5
5
  export async function wait(milliseconds: number) {
6
- if (process.env.NODE_ENV === "ci") return;
7
6
  return new Promise<void>((res) => setTimeout(res, milliseconds));
8
7
  }
@@ -1,206 +0,0 @@
1
- import { NonRetryableError, ShutdownError, TransactionError, } from '../internal/errors.js';
2
- import { BigIntSerializationError, CheckConstraintError, NotNullConstraintError, UniqueConstraintError, getBaseError, } from '../internal/errors.js';
3
- import { startClock } from '../utils/timer.js';
4
- import { wait } from '../utils/wait.js';
5
- import { PgDialect, } from "drizzle-orm/pg-core";
6
- import pg from "pg";
7
- const RETRY_COUNT = 9;
8
- const BASE_DURATION = 125;
9
- const SQL_LENGTH_LIMIT = 50;
10
- export const parseSqlError = (e) => {
11
- let error = getBaseError(e);
12
- if (error?.message?.includes("violates not-null constraint")) {
13
- error = new NotNullConstraintError(error.message);
14
- }
15
- else if (error?.message?.includes("violates unique constraint")) {
16
- error = new UniqueConstraintError(error.message);
17
- }
18
- else if (error?.message?.includes("violates check constraint")) {
19
- error = new CheckConstraintError(error.message);
20
- }
21
- else if (error?.message?.includes("Do not know how to serialize a BigInt")) {
22
- error = new BigIntSerializationError(error.message);
23
- error.meta.push("Hint:\n The JSON column type does not support BigInt values. Use the replaceBigInts() helper function before inserting into the database. Docs: https://ponder.sh/docs/api-reference/ponder-utils#replacebigints");
24
- }
25
- else if (error?.message?.includes("does not exist")) {
26
- error = new NonRetryableError(error.message);
27
- }
28
- return error;
29
- };
30
- /**
31
- * Create a query builder.
32
- *
33
- * @example
34
- * ```ts
35
- * const qb = createQB(common, drizzle(pool, { casing: "snake_case" }));
36
- * const result = await qb.label("test").select().from(accounts);
37
- * ```
38
- */
39
- export const createQB = (createDb, { common, isAdmin }) => {
40
- const dialect = new PgDialect({ casing: "snake_case" });
41
- let txLabel = undefined;
42
- const wrap = async (label, fn, sql) => {
43
- // First error thrown is often the most useful
44
- let firstError;
45
- let hasError = false;
46
- for (let i = 0; i <= RETRY_COUNT; i++) {
47
- const endClock = startClock();
48
- const id = crypto.randomUUID().slice(0, 8);
49
- if (label) {
50
- common.logger.trace({
51
- service: "database",
52
- msg: `Started '${label}' database method (id=${id})`,
53
- });
54
- }
55
- try {
56
- if (common.shutdown.isKilled && isAdmin === false) {
57
- throw new ShutdownError();
58
- }
59
- const result = await fn();
60
- if (label) {
61
- common.metrics.ponder_database_method_duration.observe({ method: label }, endClock());
62
- }
63
- if (common.shutdown.isKilled && isAdmin === false) {
64
- throw new ShutdownError();
65
- }
66
- return result;
67
- }
68
- catch (e) {
69
- const error = parseSqlError(e);
70
- if (common.shutdown.isKilled) {
71
- throw new ShutdownError();
72
- }
73
- if (label) {
74
- common.metrics.ponder_database_method_duration.observe({ method: label }, endClock());
75
- common.metrics.ponder_database_method_error_total.inc({
76
- method: label,
77
- });
78
- }
79
- if (!hasError) {
80
- hasError = true;
81
- firstError = error;
82
- }
83
- if (error instanceof NonRetryableError &&
84
- error instanceof TransactionError === false) {
85
- common.logger.warn({
86
- service: "database",
87
- msg: `Failed '${label ?? sql}' database query (id=${id})`,
88
- error,
89
- });
90
- throw error;
91
- }
92
- if (i === RETRY_COUNT) {
93
- common.logger.warn({
94
- service: "database",
95
- msg: `Failed '${label ?? sql}' database query after '${i + 1}' attempts (id=${id})`,
96
- error,
97
- });
98
- throw firstError;
99
- }
100
- const duration = BASE_DURATION * 2 ** i;
101
- common.logger.debug({
102
- service: "database",
103
- msg: `Failed '${label ?? sql}' database query, retrying after ${duration} milliseconds (id=${id})`,
104
- error,
105
- });
106
- await wait(duration);
107
- }
108
- finally {
109
- if (label) {
110
- common.logger.trace({
111
- service: "database",
112
- msg: `Completed '${label}' database method in ${Math.round(endClock())}ms (id=${id})`,
113
- });
114
- }
115
- }
116
- }
117
- throw "unreachable";
118
- };
119
- const assignClient = (qb, client) => {
120
- if (client instanceof pg.Pool || client instanceof pg.Client) {
121
- Object.assign(qb, { $dialect: "postgres" });
122
- }
123
- else {
124
- Object.assign(qb, { $dialect: "pglite" });
125
- }
126
- Object.assign(qb, { $client: client });
127
- };
128
- const wrapTx = (db) => {
129
- const _transaction = db.transaction.bind(db);
130
- db.transaction = async (...args) => {
131
- const callback = args[0];
132
- args[0] = async (_tx) => {
133
- wrapTx(_tx);
134
- const previousLabel = txLabel;
135
- const tx = (label) => {
136
- txLabel = label;
137
- return _tx;
138
- };
139
- // @ts-expect-error
140
- assignClient(tx, _tx.session.client);
141
- // @ts-expect-error
142
- const result = await callback(tx);
143
- txLabel = previousLabel;
144
- return result;
145
- };
146
- return _transaction(...args);
147
- };
148
- };
149
- const qb = ((label) => {
150
- const db = createDb();
151
- const isClient = db.$client instanceof pg.Client;
152
- // non-transaction queries (retryable)
153
- const execute = db._.session.execute.bind(db._.session);
154
- db._.session.execute = async (...args) => {
155
- return wrap(label, () => execute(...args), dialect.sqlToQuery(args[0]).sql.slice(0, SQL_LENGTH_LIMIT));
156
- };
157
- const prepareQuery = db._.session.prepareQuery.bind(db._.session);
158
- db._.session.prepareQuery = (...args) => {
159
- const result = prepareQuery(...args);
160
- const execute = result.execute.bind(result);
161
- result.execute = async (..._args) => {
162
- return wrap(label, () => execute(..._args), args[0].sql.slice(0, SQL_LENGTH_LIMIT));
163
- };
164
- return result;
165
- };
166
- // transaction queries (non-retryable)
167
- wrapTx(db);
168
- txLabel = label;
169
- const transaction = db._.session.transaction.bind(db._.session);
170
- db._.session.transaction = async (...args) => {
171
- const callback = args[0];
172
- args[0] = async (..._args) => {
173
- const tx = _args[0];
174
- const txExecute = isClient
175
- ? execute
176
- : tx._.session.execute.bind(tx._.session);
177
- // @ts-expect-error
178
- tx._.session.execute = async (...args) => {
179
- return wrap(txLabel, () => txExecute(...args).catch((error) => {
180
- throw new TransactionError(error.message);
181
- }), dialect.sqlToQuery(args[0]).sql.slice(0, SQL_LENGTH_LIMIT));
182
- };
183
- const txPrepareQuery = isClient
184
- ? prepareQuery
185
- : tx._.session.prepareQuery.bind(tx._.session);
186
- // @ts-ignore
187
- tx._.session.prepareQuery = (...args) => {
188
- const result = txPrepareQuery(...args);
189
- const execute = result.execute.bind(result);
190
- result.execute = async (..._args) => {
191
- return wrap(txLabel, () => execute(..._args).catch((error) => {
192
- throw new TransactionError(error.message);
193
- }), args[0].sql.slice(0, SQL_LENGTH_LIMIT));
194
- };
195
- return result;
196
- };
197
- return callback(..._args);
198
- };
199
- return wrap(label, () => transaction(...args), "begin");
200
- };
201
- return db;
202
- });
203
- assignClient(qb, createDb().$client);
204
- return qb;
205
- };
206
- //# sourceMappingURL=queryBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../../src/database/queryBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,100 +0,0 @@
1
- import { getPrimaryKeyColumns } from '../drizzle/index.js';
2
- import { getTableNames } from '../drizzle/index.js';
3
- import { getColumnCasing, getReorgTable } from '../drizzle/kit/index.js';
4
- import { MAX_CHECKPOINT_STRING } from '../utils/checkpoint.js';
5
- import { eq, getTableColumns, getTableName, lte, sql } from "drizzle-orm";
6
- import { getTableConfig } from "drizzle-orm/pg-core";
7
- export const createIndexes = async (qb, { statements }) => {
8
- for (const statement of statements.indexes.sql) {
9
- await qb("create_indexes").transaction(async (tx) => {
10
- // 60 minutes
11
- await tx().execute("SET statement_timeout = 3600000;");
12
- await tx().execute(statement);
13
- });
14
- }
15
- };
16
- export const createTrigger = async (qb, { table }) => {
17
- const schema = getTableConfig(table).schema ?? "public";
18
- const columns = getTableColumns(table);
19
- const columnNames = Object.values(columns).map((column) => `"${getColumnCasing(column, "snake_case")}"`);
20
- await qb("create_trigger_function").execute(sql.raw(`
21
- CREATE OR REPLACE FUNCTION "${schema}".${getTableNames(table).triggerFn}
22
- RETURNS TRIGGER AS $$
23
- BEGIN
24
- IF TG_OP = 'INSERT' THEN
25
- INSERT INTO "${schema}"."${getTableName(getReorgTable(table))}" (${columnNames.join(",")}, operation, checkpoint)
26
- VALUES (${columnNames.map((name) => `NEW.${name}`).join(",")}, 0, '${MAX_CHECKPOINT_STRING}');
27
- ELSIF TG_OP = 'UPDATE' THEN
28
- INSERT INTO "${schema}"."${getTableName(getReorgTable(table))}" (${columnNames.join(",")}, operation, checkpoint)
29
- VALUES (${columnNames.map((name) => `OLD.${name}`).join(",")}, 1, '${MAX_CHECKPOINT_STRING}');
30
- ELSIF TG_OP = 'DELETE' THEN
31
- INSERT INTO "${schema}"."${getTableName(getReorgTable(table))}" (${columnNames.join(",")}, operation, checkpoint)
32
- VALUES (${columnNames.map((name) => `OLD.${name}`).join(",")}, 2, '${MAX_CHECKPOINT_STRING}');
33
- END IF;
34
- RETURN NULL;
35
- END;
36
- $$ LANGUAGE plpgsql`));
37
- await qb("create_trigger").execute(sql.raw(`
38
- CREATE OR REPLACE TRIGGER "${getTableNames(table).trigger}"
39
- AFTER INSERT OR UPDATE OR DELETE ON "${schema}"."${getTableName(table)}"
40
- FOR EACH ROW EXECUTE FUNCTION "${schema}".${getTableNames(table).triggerFn};
41
- `));
42
- };
43
- export const dropTrigger = async (qb, { table }) => {
44
- const schema = getTableConfig(table).schema ?? "public";
45
- await qb("drop_trigger").execute(sql.raw(`DROP TRIGGER IF EXISTS "${getTableNames(table).trigger}" ON "${schema}"."${getTableName(table)}"`));
46
- };
47
- export const revert = async (qb, { checkpoint, table }) => {
48
- const primaryKeyColumns = getPrimaryKeyColumns(table);
49
- const schema = getTableConfig(table).schema ?? "public";
50
- const result = await qb("revert").execute(sql.raw(`
51
- WITH reverted1 AS (
52
- DELETE FROM "${schema}"."${getTableName(getReorgTable(table))}"
53
- WHERE checkpoint > '${checkpoint}' RETURNING *
54
- ), reverted2 AS (
55
- SELECT ${primaryKeyColumns.map(({ sql }) => `"${sql}"`).join(", ")}, MIN(operation_id) AS operation_id FROM reverted1
56
- GROUP BY ${primaryKeyColumns.map(({ sql }) => `"${sql}"`).join(", ")}
57
- ), reverted3 AS (
58
- SELECT ${Object.values(getTableColumns(table))
59
- .map((column) => `reverted1."${getColumnCasing(column, "snake_case")}"`)
60
- .join(", ")}, reverted1.operation FROM reverted2
61
- INNER JOIN reverted1
62
- ON ${primaryKeyColumns.map(({ sql }) => `reverted2."${sql}" = reverted1."${sql}"`).join("AND ")}
63
- AND reverted2.operation_id = reverted1.operation_id
64
- ), inserted AS (
65
- DELETE FROM "${schema}"."${getTableName(table)}" as t
66
- WHERE EXISTS (
67
- SELECT * FROM reverted3
68
- WHERE ${primaryKeyColumns.map(({ sql }) => `t."${sql}" = reverted3."${sql}"`).join("AND ")}
69
- AND OPERATION = 0
70
- )
71
- RETURNING *
72
- ), updated_or_deleted AS (
73
- INSERT INTO "${schema}"."${getTableName(table)}"
74
- SELECT ${Object.values(getTableColumns(table))
75
- .map((column) => `"${getColumnCasing(column, "snake_case")}"`)
76
- .join(", ")} FROM reverted3
77
- WHERE operation = 1 OR operation = 2
78
- ON CONFLICT (${primaryKeyColumns.map(({ sql }) => `"${sql}"`).join(", ")})
79
- DO UPDATE SET
80
- ${Object.values(getTableColumns(table))
81
- .map((column) => `"${getColumnCasing(column, "snake_case")}" = EXCLUDED."${getColumnCasing(column, "snake_case")}"`)
82
- .join(", ")}
83
- RETURNING *
84
- ) SELECT COUNT(*) FROM reverted1 as count;
85
- `));
86
- return result.rows[0].count;
87
- };
88
- export const finalize = async (qb, { checkpoint, table }) => {
89
- await qb("finalize")
90
- .delete(getReorgTable(table))
91
- .where(lte(getReorgTable(table).checkpoint, checkpoint));
92
- };
93
- export const commitBlock = async (qb, { checkpoint, table }) => {
94
- const reorgTable = getReorgTable(table);
95
- await qb("commit_block")
96
- .update(reorgTable)
97
- .set({ checkpoint })
98
- .where(eq(reorgTable.checkpoint, MAX_CHECKPOINT_STRING));
99
- };
100
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/database/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAgB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGnE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,EAAM,EACN,EAAE,UAAU,EAA6C,EACzD,EAAE;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE;QAC9C,MAAM,EAAE,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAClD,aAAa;YACb,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACvD,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,EAAM,EAAE,EAAE,KAAK,EAAsB,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC;IACxD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAC5C,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CACzD,CAAC;IAEF,MAAM,EAAE,CAAC,yBAAyB,CAAC,CAAC,OAAO,CACzC,GAAG,CAAC,GAAG,CAAC;8BACkB,MAAM,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS;;;;eAIxD,MAAM,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;UAC9E,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,qBAAqB;;eAE3E,MAAM,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;UAC9E,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,qBAAqB;;eAE3E,MAAM,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;UAC9E,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,qBAAqB;;;;oBAItE,CAAC,CAClB,CAAC;IAEF,MAAM,EAAE,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAChC,GAAG,CAAC,GAAG,CAAC;6BACiB,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO;uCAClB,MAAM,MAAM,YAAY,CAAC,KAAK,CAAC;iCACrC,MAAM,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS;CACzE,CAAC,CACC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,EAAM,EAAE,EAAE,KAAK,EAAsB,EAAE,EAAE;IACzE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC;IAExD,MAAM,EAAE,CAAC,cAAc,CAAC,CAAC,OAAO,CAC9B,GAAG,CAAC,GAAG,CACL,2BAA2B,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,SAAS,MAAM,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CACnG,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,EAAM,EACN,EAAE,UAAU,EAAE,KAAK,EAA0C,EAC5C,EAAE;IACnB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CACvC,GAAG,CAAC,GAAG,CAAC;;eAEG,MAAM,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;sBACvC,UAAU;;SAEvB,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;WACvD,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;SAE3D,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC;SACvE,IAAI,CAAC,IAAI,CAAC;;KAEZ,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,cAAc,GAAG,kBAAkB,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;eAGhF,MAAM,MAAM,YAAY,CAAC,KAAK,CAAC;;;QAGtC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,kBAAkB,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;gBAK1E,MAAM,MAAM,YAAY,CAAC,KAAK,CAAC;SACtC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC;SAC7D,IAAI,CAAC,IAAI,CAAC;;eAEF,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;EAEtE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SACpC,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CACT,IAAI,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,iBAAiB,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CACrG;SACA,IAAI,CAAC,IAAI,CAAC;;;CAGZ,CAAC,CACC,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,KAAe,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,EAAM,EACN,EAAE,UAAU,EAAE,KAAK,EAA0C,EAC7D,EAAE;IACF,MAAM,EAAE,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAC5B,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,EAAM,EACN,EAAE,UAAU,EAAE,KAAK,EAA0C,EAC7D,EAAE;IACF,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,cAAc,CAAC;SACrB,MAAM,CAAC,UAAU,CAAC;SAClB,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;SACnB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC"}
@@ -1,119 +0,0 @@
1
- var _a, _b, _c, _d;
2
- import { BigIntSerializationError, getBaseError } from '../internal/errors.js';
3
- import { entityKind } from "drizzle-orm";
4
- import { PgColumn, PgColumnBuilder, } from "drizzle-orm/pg-core";
5
- class PgJsonBuilder extends PgColumnBuilder {
6
- constructor(name) {
7
- super(name, "json", "PgJson");
8
- }
9
- /** @internal */
10
- // @ts-ignore
11
- build(table) {
12
- return new PgJson(table, this.config);
13
- }
14
- }
15
- _a = entityKind;
16
- Object.defineProperty(PgJsonBuilder, _a, {
17
- enumerable: true,
18
- configurable: true,
19
- writable: true,
20
- value: "PgJsonBuilder"
21
- });
22
- export { PgJsonBuilder };
23
- class PgJson extends PgColumn {
24
- getSQLType() {
25
- return "json";
26
- }
27
- mapToDriverValue(value) {
28
- try {
29
- return JSON.stringify(value);
30
- }
31
- catch (_error) {
32
- let error = getBaseError(_error);
33
- if (error?.message?.includes("Do not know how to serialize a BigInt")) {
34
- error = new BigIntSerializationError(error.message);
35
- error.meta.push("Hint:\n The JSON column type does not support BigInt values. Use the replaceBigInts() helper function before inserting into the database. Docs: https://ponder.sh/docs/api-reference/ponder-utils#replacebigints");
36
- }
37
- throw error;
38
- }
39
- }
40
- mapFromDriverValue(value) {
41
- if (typeof value === "string") {
42
- try {
43
- return JSON.parse(value);
44
- }
45
- catch {
46
- return value;
47
- }
48
- }
49
- return value;
50
- }
51
- }
52
- _b = entityKind;
53
- Object.defineProperty(PgJson, _b, {
54
- enumerable: true,
55
- configurable: true,
56
- writable: true,
57
- value: "PgJson"
58
- });
59
- export { PgJson };
60
- class PgJsonbBuilder extends PgColumnBuilder {
61
- constructor(name) {
62
- super(name, "json", "PgJsonb");
63
- }
64
- /** @internal */
65
- // @ts-ignore
66
- build(table) {
67
- return new PgJsonb(table, this.config);
68
- }
69
- }
70
- _c = entityKind;
71
- Object.defineProperty(PgJsonbBuilder, _c, {
72
- enumerable: true,
73
- configurable: true,
74
- writable: true,
75
- value: "PgJsonbBuilder"
76
- });
77
- export { PgJsonbBuilder };
78
- class PgJsonb extends PgColumn {
79
- // biome-ignore lint/complexity/noUselessConstructor: <explanation>
80
- constructor(table, config) {
81
- super(table, config);
82
- }
83
- getSQLType() {
84
- return "jsonb";
85
- }
86
- mapToDriverValue(value) {
87
- try {
88
- return JSON.stringify(value);
89
- }
90
- catch (_error) {
91
- let error = getBaseError(_error);
92
- if (error?.message?.includes("Do not know how to serialize a BigInt")) {
93
- error = new BigIntSerializationError(error.message);
94
- error.meta.push("Hint:\n The JSON column type does not support BigInt values. Use the replaceBigInts() helper function before inserting into the database. Docs: https://ponder.sh/docs/api-reference/ponder-utils#replacebigints");
95
- }
96
- throw error;
97
- }
98
- }
99
- mapFromDriverValue(value) {
100
- if (typeof value === "string") {
101
- try {
102
- return JSON.parse(value);
103
- }
104
- catch {
105
- return value;
106
- }
107
- }
108
- return value;
109
- }
110
- }
111
- _d = entityKind;
112
- Object.defineProperty(PgJsonb, _d, {
113
- enumerable: true,
114
- configurable: true,
115
- writable: true,
116
- value: "PgJsonb"
117
- });
118
- export { PgJsonb };
119
- //# sourceMappingURL=json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/drizzle/json.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import type { Common } from '../internal/common.js';
2
- import type { Schema } from '../internal/types.js';
3
- import type { Drizzle } from '../types/db.js';
4
- import type { PGlite } from "@electric-sql/pglite";
5
- import { type PgDatabase, type PgQueryResultHKT, type PgTransactionConfig } from "drizzle-orm/pg-core";
6
- import pg from "pg";
7
- /**
8
- * Query builder with built-in retry logic, logging, and metrics.
9
- */
10
- export type QB<TSchema extends Schema = Schema, TClient extends PGlite | pg.Pool | pg.PoolClient = PGlite | pg.Pool | pg.PoolClient> = ((label?: string) => Omit<Drizzle<TSchema>, "transaction"> & {
11
- transaction<T>(transaction: (tx: QB<TSchema, TClient>) => Promise<T>, config?: PgTransactionConfig): Promise<T>;
12
- }) & ({
13
- $dialect: "pglite";
14
- $client: PGlite;
15
- } | {
16
- $dialect: "postgres";
17
- $client: pg.Pool | pg.PoolClient;
18
- });
19
- export declare const parseSqlError: (e: any) => Error;
20
- /**
21
- * Create a query builder.
22
- *
23
- * @example
24
- * ```ts
25
- * const qb = createQB(common, drizzle(pool, { casing: "snake_case" }));
26
- * const result = await qb.label("test").select().from(accounts);
27
- * ```
28
- */
29
- export declare const createQB: <TSchema extends Schema = {
30
- [name: string]: never;
31
- }, TClient extends pg.Pool | pg.PoolClient | PGlite = pg.Pool | pg.PoolClient | PGlite>(createDb: () => PgDatabase<PgQueryResultHKT, TSchema, import("drizzle-orm").ExtractTablesWithRelations<TSchema>> & {
32
- $client: TClient;
33
- }, { common, isAdmin }: {
34
- common: Common;
35
- isAdmin?: boolean | undefined;
36
- }) => QB<TSchema, TClient>;
37
- //# sourceMappingURL=queryBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queryBuilder.d.ts","sourceRoot":"","sources":["../../../src/database/queryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAanD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;AAMpB;;GAEG;AACH,MAAM,MAAM,EAAE,CACZ,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,OAAO,SAAS,MAAM,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,UAAU,GAC5C,MAAM,GACN,EAAE,CAAC,IAAI,GACP,EAAE,CAAC,UAAU,IACf,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,GAAG;IAC/D,WAAW,CAAC,CAAC,EACX,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACrD,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAAC;CACf,CAAC,GACA,CACI;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,UAAU,CAAA;CAAE,CAC7D,CAAC;AAEJ,eAAO,MAAM,aAAa,MAAO,GAAG,KAAG,KAqBtC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ;;;;;YAQY,MAAM;;0BAoOtC,CAAC"}
@@ -1,25 +0,0 @@
1
- import type { SchemaBuild } from '../internal/types.js';
2
- import { type PgTable } from "drizzle-orm/pg-core";
3
- import type { QB } from "./queryBuilder.js";
4
- export declare const createIndexes: (qb: QB, { statements }: {
5
- statements: SchemaBuild["statements"];
6
- }) => Promise<void>;
7
- export declare const createTrigger: (qb: QB, { table }: {
8
- table: PgTable;
9
- }) => Promise<void>;
10
- export declare const dropTrigger: (qb: QB, { table }: {
11
- table: PgTable;
12
- }) => Promise<void>;
13
- export declare const revert: (qb: QB, { checkpoint, table }: {
14
- checkpoint: string;
15
- table: PgTable;
16
- }) => Promise<number>;
17
- export declare const finalize: (qb: QB, { checkpoint, table }: {
18
- checkpoint: string;
19
- table: PgTable;
20
- }) => Promise<void>;
21
- export declare const commitBlock: (qb: QB, { checkpoint, table }: {
22
- checkpoint: string;
23
- table: PgTable;
24
- }) => Promise<void>;
25
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/database/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,KAAK,OAAO,EAAkB,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAE5C,eAAO,MAAM,aAAa,OACpB,EAAE;gBACwB,WAAW,CAAC,YAAY,CAAC;mBASxD,CAAC;AAEF,eAAO,MAAM,aAAa,OAAc,EAAE;WAAsB,OAAO;mBAmCtE,CAAC;AAEF,eAAO,MAAM,WAAW,OAAc,EAAE;WAAsB,OAAO;mBAQpE,CAAC;AAEF,eAAO,MAAM,MAAM,OACb,EAAE;gBAC+B,MAAM;WAAS,OAAO;MAC1D,QAAQ,MAAM,CA+ChB,CAAC;AAEF,eAAO,MAAM,QAAQ,OACf,EAAE;gBAC+B,MAAM;WAAS,OAAO;mBAK5D,CAAC;AAEF,eAAO,MAAM,WAAW,OAClB,EAAE;gBAC+B,MAAM;WAAS,OAAO;mBAO5D,CAAC"}
@@ -1,51 +0,0 @@
1
- import { type ColumnBaseConfig, entityKind } from "drizzle-orm";
2
- import type { ColumnBuilderBaseConfig, MakeColumnConfig } from "drizzle-orm/column-builder";
3
- import { type AnyPgTable, PgColumn, PgColumnBuilder } from "drizzle-orm/pg-core";
4
- export type PgJsonBuilderInitial<TName extends string> = PgJsonBuilder<{
5
- name: TName;
6
- dataType: "json";
7
- columnType: "PgJson";
8
- data: unknown;
9
- driverParam: string;
10
- enumValues: undefined;
11
- }>;
12
- export declare class PgJsonBuilder<T extends ColumnBuilderBaseConfig<"json", "PgJson">> extends PgColumnBuilder<T> {
13
- static readonly [entityKind]: string;
14
- constructor(name: T["name"]);
15
- /** @internal */
16
- build<TTableName extends string>(table: AnyPgTable<{
17
- name: TTableName;
18
- }>): PgJson<MakeColumnConfig<T, TTableName>>;
19
- }
20
- export declare class PgJson<T extends ColumnBaseConfig<"json", "PgJson">> extends PgColumn<T> {
21
- static readonly [entityKind]: string;
22
- getSQLType(): string;
23
- mapToDriverValue(value: T["data"]): string;
24
- mapFromDriverValue(value: T["data"] | string): T["data"];
25
- }
26
- export type PgJsonbBuilderInitial<TName extends string> = PgJsonbBuilder<{
27
- name: TName;
28
- dataType: "json";
29
- columnType: "PgJsonb";
30
- data: unknown;
31
- driverParam: unknown;
32
- enumValues: undefined;
33
- }>;
34
- export declare class PgJsonbBuilder<T extends ColumnBuilderBaseConfig<"json", "PgJsonb">> extends PgColumnBuilder<T> {
35
- static readonly [entityKind]: string;
36
- constructor(name: T["name"]);
37
- /** @internal */
38
- build<TTableName extends string>(table: AnyPgTable<{
39
- name: TTableName;
40
- }>): PgJsonb<MakeColumnConfig<T, TTableName>>;
41
- }
42
- export declare class PgJsonb<T extends ColumnBaseConfig<"json", "PgJsonb">> extends PgColumn<T> {
43
- static readonly [entityKind]: string;
44
- constructor(table: AnyPgTable<{
45
- name: T["tableName"];
46
- }>, config: PgJsonbBuilder<T>["config"]);
47
- getSQLType(): string;
48
- mapToDriverValue(value: T["data"]): string;
49
- mapFromDriverValue(value: T["data"] | string): T["data"];
50
- }
51
- //# sourceMappingURL=json.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/drizzle/json.ts"],"names":[],"mappings":"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"}