ponder 0.11.21 → 0.11.22

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 (123) hide show
  1. package/CHANGELOG.md +6 -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/wait.js +0 -2
  46. package/dist/esm/utils/wait.js.map +1 -1
  47. package/dist/types/bin/commands/createViews.d.ts.map +1 -1
  48. package/dist/types/bin/commands/list.d.ts.map +1 -1
  49. package/dist/types/bin/commands/prune.d.ts.map +1 -1
  50. package/dist/types/bin/commands/start.d.ts +0 -2
  51. package/dist/types/bin/commands/start.d.ts.map +1 -1
  52. package/dist/types/bin/utils/run.d.ts +1 -1
  53. package/dist/types/bin/utils/run.d.ts.map +1 -1
  54. package/dist/types/build/index.d.ts +1 -1
  55. package/dist/types/build/index.d.ts.map +1 -1
  56. package/dist/types/client/index.d.ts.map +1 -1
  57. package/dist/types/database/index.d.ts +73 -25
  58. package/dist/types/database/index.d.ts.map +1 -1
  59. package/dist/types/drizzle/index.d.ts +3 -2
  60. package/dist/types/drizzle/index.d.ts.map +1 -1
  61. package/dist/types/drizzle/kit/index.d.ts +4 -3
  62. package/dist/types/drizzle/kit/index.d.ts.map +1 -1
  63. package/dist/types/drizzle/onchain.d.ts +5 -12
  64. package/dist/types/drizzle/onchain.d.ts.map +1 -1
  65. package/dist/types/graphql/index.d.ts +4 -2
  66. package/dist/types/graphql/index.d.ts.map +1 -1
  67. package/dist/types/graphql/middleware.d.ts +1 -1
  68. package/dist/types/graphql/middleware.d.ts.map +1 -1
  69. package/dist/types/indexing-store/cache.d.ts +12 -5
  70. package/dist/types/indexing-store/cache.d.ts.map +1 -1
  71. package/dist/types/indexing-store/historical.d.ts +7 -2
  72. package/dist/types/indexing-store/historical.d.ts.map +1 -1
  73. package/dist/types/indexing-store/index.d.ts +2 -4
  74. package/dist/types/indexing-store/index.d.ts.map +1 -1
  75. package/dist/types/indexing-store/realtime.d.ts +3 -1
  76. package/dist/types/indexing-store/realtime.d.ts.map +1 -1
  77. package/dist/types/internal/errors.d.ts +0 -4
  78. package/dist/types/internal/errors.d.ts.map +1 -1
  79. package/dist/types/server/index.d.ts +1 -1
  80. package/dist/types/server/index.d.ts.map +1 -1
  81. package/dist/types/sync/index.d.ts +1 -1
  82. package/dist/types/sync-store/index.d.ts.map +1 -1
  83. package/dist/types/utils/wait.d.ts.map +1 -1
  84. package/package.json +2 -2
  85. package/src/bin/commands/createViews.ts +26 -37
  86. package/src/bin/commands/dev.ts +1 -1
  87. package/src/bin/commands/list.ts +4 -7
  88. package/src/bin/commands/prune.ts +17 -31
  89. package/src/bin/commands/serve.ts +1 -1
  90. package/src/bin/commands/start.ts +3 -4
  91. package/src/bin/utils/run.ts +210 -256
  92. package/src/build/index.ts +2 -53
  93. package/src/build/plugin.ts +1 -1
  94. package/src/client/index.ts +10 -21
  95. package/src/database/index.ts +742 -331
  96. package/src/drizzle/index.ts +3 -2
  97. package/src/drizzle/kit/index.ts +5 -2
  98. package/src/drizzle/onchain.ts +2 -26
  99. package/src/graphql/index.ts +26 -31
  100. package/src/graphql/middleware.ts +7 -5
  101. package/src/indexing-store/cache.ts +52 -35
  102. package/src/indexing-store/historical.ts +40 -28
  103. package/src/indexing-store/index.ts +27 -2
  104. package/src/indexing-store/realtime.ts +220 -176
  105. package/src/internal/errors.ts +0 -9
  106. package/src/server/index.ts +3 -14
  107. package/src/sync-store/index.ts +997 -870
  108. package/src/utils/wait.ts +0 -1
  109. package/dist/esm/database/queryBuilder.js +0 -206
  110. package/dist/esm/database/queryBuilder.js.map +0 -1
  111. package/dist/esm/database/utils.js +0 -100
  112. package/dist/esm/database/utils.js.map +0 -1
  113. package/dist/esm/drizzle/json.js +0 -119
  114. package/dist/esm/drizzle/json.js.map +0 -1
  115. package/dist/types/database/queryBuilder.d.ts +0 -37
  116. package/dist/types/database/queryBuilder.d.ts.map +0 -1
  117. package/dist/types/database/utils.d.ts +0 -25
  118. package/dist/types/database/utils.d.ts.map +0 -1
  119. package/dist/types/drizzle/json.d.ts +0 -51
  120. package/dist/types/drizzle/json.d.ts.map +0 -1
  121. package/src/database/queryBuilder.ts +0 -319
  122. package/src/database/utils.ts +0 -140
  123. package/src/drizzle/json.ts +0 -154
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":"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"}
@@ -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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"}