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.
- package/CHANGELOG.md +6 -0
- package/dist/esm/bin/commands/createViews.js +9 -20
- package/dist/esm/bin/commands/createViews.js.map +1 -1
- package/dist/esm/bin/commands/dev.js +1 -1
- package/dist/esm/bin/commands/dev.js.map +1 -1
- package/dist/esm/bin/commands/list.js +4 -7
- package/dist/esm/bin/commands/list.js.map +1 -1
- package/dist/esm/bin/commands/prune.js +9 -21
- package/dist/esm/bin/commands/prune.js.map +1 -1
- package/dist/esm/bin/commands/serve.js +1 -1
- package/dist/esm/bin/commands/serve.js.map +1 -1
- package/dist/esm/bin/commands/start.js +3 -3
- package/dist/esm/bin/commands/start.js.map +1 -1
- package/dist/esm/bin/utils/run.js +159 -180
- package/dist/esm/bin/utils/run.js.map +1 -1
- package/dist/esm/build/index.js +1 -48
- package/dist/esm/build/index.js.map +1 -1
- package/dist/esm/build/plugin.js +1 -1
- package/dist/esm/client/index.js +9 -13
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/database/index.js +429 -141
- package/dist/esm/database/index.js.map +1 -1
- package/dist/esm/drizzle/index.js.map +1 -1
- package/dist/esm/drizzle/kit/index.js.map +1 -1
- package/dist/esm/drizzle/onchain.js +1 -8
- package/dist/esm/drizzle/onchain.js.map +1 -1
- package/dist/esm/graphql/index.js +16 -19
- package/dist/esm/graphql/index.js.map +1 -1
- package/dist/esm/graphql/middleware.js +7 -3
- package/dist/esm/graphql/middleware.js.map +1 -1
- package/dist/esm/indexing-store/cache.js +32 -26
- package/dist/esm/indexing-store/cache.js.map +1 -1
- package/dist/esm/indexing-store/historical.js +32 -23
- package/dist/esm/indexing-store/historical.js.map +1 -1
- package/dist/esm/indexing-store/index.js +18 -1
- package/dist/esm/indexing-store/index.js.map +1 -1
- package/dist/esm/indexing-store/realtime.js +140 -89
- package/dist/esm/indexing-store/realtime.js.map +1 -1
- package/dist/esm/internal/errors.js +0 -12
- package/dist/esm/internal/errors.js.map +1 -1
- package/dist/esm/server/index.js +2 -10
- package/dist/esm/server/index.js.map +1 -1
- package/dist/esm/sync-store/index.js +432 -403
- package/dist/esm/sync-store/index.js.map +1 -1
- package/dist/esm/utils/wait.js +0 -2
- package/dist/esm/utils/wait.js.map +1 -1
- package/dist/types/bin/commands/createViews.d.ts.map +1 -1
- package/dist/types/bin/commands/list.d.ts.map +1 -1
- package/dist/types/bin/commands/prune.d.ts.map +1 -1
- package/dist/types/bin/commands/start.d.ts +0 -2
- package/dist/types/bin/commands/start.d.ts.map +1 -1
- package/dist/types/bin/utils/run.d.ts +1 -1
- package/dist/types/bin/utils/run.d.ts.map +1 -1
- package/dist/types/build/index.d.ts +1 -1
- package/dist/types/build/index.d.ts.map +1 -1
- package/dist/types/client/index.d.ts.map +1 -1
- package/dist/types/database/index.d.ts +73 -25
- package/dist/types/database/index.d.ts.map +1 -1
- package/dist/types/drizzle/index.d.ts +3 -2
- package/dist/types/drizzle/index.d.ts.map +1 -1
- package/dist/types/drizzle/kit/index.d.ts +4 -3
- package/dist/types/drizzle/kit/index.d.ts.map +1 -1
- package/dist/types/drizzle/onchain.d.ts +5 -12
- package/dist/types/drizzle/onchain.d.ts.map +1 -1
- package/dist/types/graphql/index.d.ts +4 -2
- package/dist/types/graphql/index.d.ts.map +1 -1
- package/dist/types/graphql/middleware.d.ts +1 -1
- package/dist/types/graphql/middleware.d.ts.map +1 -1
- package/dist/types/indexing-store/cache.d.ts +12 -5
- package/dist/types/indexing-store/cache.d.ts.map +1 -1
- package/dist/types/indexing-store/historical.d.ts +7 -2
- package/dist/types/indexing-store/historical.d.ts.map +1 -1
- package/dist/types/indexing-store/index.d.ts +2 -4
- package/dist/types/indexing-store/index.d.ts.map +1 -1
- package/dist/types/indexing-store/realtime.d.ts +3 -1
- package/dist/types/indexing-store/realtime.d.ts.map +1 -1
- package/dist/types/internal/errors.d.ts +0 -4
- package/dist/types/internal/errors.d.ts.map +1 -1
- package/dist/types/server/index.d.ts +1 -1
- package/dist/types/server/index.d.ts.map +1 -1
- package/dist/types/sync/index.d.ts +1 -1
- package/dist/types/sync-store/index.d.ts.map +1 -1
- package/dist/types/utils/wait.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/bin/commands/createViews.ts +26 -37
- package/src/bin/commands/dev.ts +1 -1
- package/src/bin/commands/list.ts +4 -7
- package/src/bin/commands/prune.ts +17 -31
- package/src/bin/commands/serve.ts +1 -1
- package/src/bin/commands/start.ts +3 -4
- package/src/bin/utils/run.ts +210 -256
- package/src/build/index.ts +2 -53
- package/src/build/plugin.ts +1 -1
- package/src/client/index.ts +10 -21
- package/src/database/index.ts +742 -331
- package/src/drizzle/index.ts +3 -2
- package/src/drizzle/kit/index.ts +5 -2
- package/src/drizzle/onchain.ts +2 -26
- package/src/graphql/index.ts +26 -31
- package/src/graphql/middleware.ts +7 -5
- package/src/indexing-store/cache.ts +52 -35
- package/src/indexing-store/historical.ts +40 -28
- package/src/indexing-store/index.ts +27 -2
- package/src/indexing-store/realtime.ts +220 -176
- package/src/internal/errors.ts +0 -9
- package/src/server/index.ts +3 -14
- package/src/sync-store/index.ts +997 -870
- package/src/utils/wait.ts +0 -1
- package/dist/esm/database/queryBuilder.js +0 -206
- package/dist/esm/database/queryBuilder.js.map +0 -1
- package/dist/esm/database/utils.js +0 -100
- package/dist/esm/database/utils.js.map +0 -1
- package/dist/esm/drizzle/json.js +0 -119
- package/dist/esm/drizzle/json.js.map +0 -1
- package/dist/types/database/queryBuilder.d.ts +0 -37
- package/dist/types/database/queryBuilder.d.ts.map +0 -1
- package/dist/types/database/utils.d.ts +0 -25
- package/dist/types/database/utils.d.ts.map +0 -1
- package/dist/types/drizzle/json.d.ts +0 -51
- package/dist/types/drizzle/json.d.ts.map +0 -1
- package/src/database/queryBuilder.ts +0 -319
- package/src/database/utils.ts +0 -140
- package/src/drizzle/json.ts +0 -154
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { findTableNames, validateQuery } from "@/client/parse.js";
|
|
2
|
-
import type { QB } from "@/database/queryBuilder.js";
|
|
3
2
|
import type { Common } from "@/internal/common.js";
|
|
4
3
|
import { RecordNotFoundError } from "@/internal/errors.js";
|
|
5
|
-
import type { SchemaBuild } from "@/internal/types.js";
|
|
4
|
+
import type { Schema, SchemaBuild } from "@/internal/types.js";
|
|
5
|
+
import type { Drizzle } from "@/types/db.js";
|
|
6
6
|
import { prettyPrint } from "@/utils/print.js";
|
|
7
7
|
import { startClock } from "@/utils/timer.js";
|
|
8
|
+
import type { PGlite } from "@electric-sql/pglite";
|
|
8
9
|
import { type QueryWithTypings, type Table, getTableName } from "drizzle-orm";
|
|
9
10
|
import { drizzle } from "drizzle-orm/pg-proxy";
|
|
11
|
+
import type { PoolClient } from "pg";
|
|
10
12
|
import type { IndexingCache } from "./cache.js";
|
|
11
13
|
import {
|
|
12
14
|
type IndexingStore,
|
|
13
15
|
checkOnchainTable,
|
|
16
|
+
parseSqlError,
|
|
14
17
|
validateUpdateSet,
|
|
15
18
|
} from "./index.js";
|
|
16
19
|
|
|
@@ -18,22 +21,26 @@ export const createHistoricalIndexingStore = ({
|
|
|
18
21
|
common,
|
|
19
22
|
schemaBuild: { schema },
|
|
20
23
|
indexingCache,
|
|
24
|
+
db,
|
|
25
|
+
client,
|
|
21
26
|
}: {
|
|
22
27
|
common: Common;
|
|
23
28
|
schemaBuild: Pick<SchemaBuild, "schema">;
|
|
24
29
|
indexingCache: IndexingCache;
|
|
30
|
+
db: Drizzle<Schema>;
|
|
31
|
+
client: PoolClient | PGlite;
|
|
25
32
|
}): IndexingStore => {
|
|
26
|
-
let qb: QB = undefined!;
|
|
27
33
|
return {
|
|
28
34
|
// @ts-ignore
|
|
29
|
-
find:
|
|
35
|
+
find: (table: Table, key) => {
|
|
30
36
|
common.metrics.ponder_indexing_store_queries_total.inc({
|
|
31
37
|
table: getTableName(table),
|
|
32
38
|
method: "find",
|
|
33
39
|
});
|
|
34
40
|
checkOnchainTable(table, "find");
|
|
35
|
-
return indexingCache.get({ table, key });
|
|
41
|
+
return indexingCache.get({ table, key, db });
|
|
36
42
|
},
|
|
43
|
+
|
|
37
44
|
// @ts-ignore
|
|
38
45
|
insert(table: Table) {
|
|
39
46
|
return {
|
|
@@ -50,7 +57,11 @@ export const createHistoricalIndexingStore = ({
|
|
|
50
57
|
if (Array.isArray(values)) {
|
|
51
58
|
const rows = [];
|
|
52
59
|
for (const value of values) {
|
|
53
|
-
const row = await indexingCache.get({
|
|
60
|
+
const row = await indexingCache.get({
|
|
61
|
+
table,
|
|
62
|
+
key: value,
|
|
63
|
+
db,
|
|
64
|
+
});
|
|
54
65
|
|
|
55
66
|
if (row) {
|
|
56
67
|
rows.push(null);
|
|
@@ -67,7 +78,11 @@ export const createHistoricalIndexingStore = ({
|
|
|
67
78
|
}
|
|
68
79
|
return rows;
|
|
69
80
|
} else {
|
|
70
|
-
const row = await indexingCache.get({
|
|
81
|
+
const row = await indexingCache.get({
|
|
82
|
+
table,
|
|
83
|
+
key: values,
|
|
84
|
+
db,
|
|
85
|
+
});
|
|
71
86
|
|
|
72
87
|
if (row) {
|
|
73
88
|
return null;
|
|
@@ -91,7 +106,11 @@ export const createHistoricalIndexingStore = ({
|
|
|
91
106
|
if (Array.isArray(values)) {
|
|
92
107
|
const rows = [];
|
|
93
108
|
for (const value of values) {
|
|
94
|
-
const row = await indexingCache.get({
|
|
109
|
+
const row = await indexingCache.get({
|
|
110
|
+
table,
|
|
111
|
+
key: value,
|
|
112
|
+
db,
|
|
113
|
+
});
|
|
95
114
|
|
|
96
115
|
if (row) {
|
|
97
116
|
if (typeof valuesU === "function") {
|
|
@@ -128,7 +147,7 @@ export const createHistoricalIndexingStore = ({
|
|
|
128
147
|
}
|
|
129
148
|
return rows;
|
|
130
149
|
} else {
|
|
131
|
-
const row = await indexingCache.get({ table, key: values });
|
|
150
|
+
const row = await indexingCache.get({ table, key: values, db });
|
|
132
151
|
|
|
133
152
|
if (row) {
|
|
134
153
|
if (typeof valuesU === "function") {
|
|
@@ -226,7 +245,7 @@ export const createHistoricalIndexingStore = ({
|
|
|
226
245
|
});
|
|
227
246
|
checkOnchainTable(table, "update");
|
|
228
247
|
|
|
229
|
-
const row = await indexingCache.get({ table, key });
|
|
248
|
+
const row = await indexingCache.get({ table, key, db });
|
|
230
249
|
|
|
231
250
|
if (row === null) {
|
|
232
251
|
const error = new RecordNotFoundError(
|
|
@@ -261,7 +280,7 @@ export const createHistoricalIndexingStore = ({
|
|
|
261
280
|
method: "delete",
|
|
262
281
|
});
|
|
263
282
|
checkOnchainTable(table, "delete");
|
|
264
|
-
return indexingCache.delete({ table, key });
|
|
283
|
+
return indexingCache.delete({ table, key, db });
|
|
265
284
|
},
|
|
266
285
|
// @ts-ignore
|
|
267
286
|
sql: drizzle(
|
|
@@ -273,7 +292,7 @@ export const createHistoricalIndexingStore = ({
|
|
|
273
292
|
} catch {}
|
|
274
293
|
|
|
275
294
|
if (isSelectOnly === false) {
|
|
276
|
-
await indexingCache.flush();
|
|
295
|
+
await indexingCache.flush({ client });
|
|
277
296
|
indexingCache.invalidate();
|
|
278
297
|
indexingCache.clear();
|
|
279
298
|
} else {
|
|
@@ -284,25 +303,21 @@ export const createHistoricalIndexingStore = ({
|
|
|
284
303
|
tableNames = await findTableNames(_sql);
|
|
285
304
|
} catch {}
|
|
286
305
|
|
|
287
|
-
await indexingCache.flush({ tableNames });
|
|
306
|
+
await indexingCache.flush({ client, tableNames });
|
|
288
307
|
}
|
|
289
308
|
|
|
290
309
|
const query: QueryWithTypings = { sql: _sql, params, typings };
|
|
291
310
|
const endClock = startClock();
|
|
292
311
|
|
|
293
312
|
try {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
.execute();
|
|
303
|
-
// @ts-ignore
|
|
304
|
-
return { rows: result.rows.map((row) => Object.values(row)) };
|
|
305
|
-
});
|
|
313
|
+
const result = await db._.session
|
|
314
|
+
.prepareQuery(query, undefined, undefined, method === "all")
|
|
315
|
+
.execute();
|
|
316
|
+
|
|
317
|
+
// @ts-ignore
|
|
318
|
+
return { rows: result.rows.map((row) => Object.values(row)) };
|
|
319
|
+
} catch (error) {
|
|
320
|
+
throw parseSqlError(error);
|
|
306
321
|
} finally {
|
|
307
322
|
common.metrics.ponder_indexing_store_raw_sql_duration.observe(
|
|
308
323
|
endClock(),
|
|
@@ -311,8 +326,5 @@ export const createHistoricalIndexingStore = ({
|
|
|
311
326
|
},
|
|
312
327
|
{ schema, casing: "snake_case" },
|
|
313
328
|
),
|
|
314
|
-
set qb(_qb: QB) {
|
|
315
|
-
qb = _qb;
|
|
316
|
-
},
|
|
317
329
|
};
|
|
318
330
|
};
|
|
@@ -1,17 +1,42 @@
|
|
|
1
|
-
import type { QB } from "@/database/queryBuilder.js";
|
|
2
1
|
import { getPrimaryKeyColumns } from "@/drizzle/index.js";
|
|
3
2
|
import { onchain } from "@/drizzle/onchain.js";
|
|
4
3
|
import {
|
|
4
|
+
BigIntSerializationError,
|
|
5
|
+
CheckConstraintError,
|
|
5
6
|
InvalidStoreMethodError,
|
|
6
7
|
NonRetryableError,
|
|
8
|
+
NotNullConstraintError,
|
|
7
9
|
UndefinedTableError,
|
|
10
|
+
UniqueConstraintError,
|
|
11
|
+
getBaseError,
|
|
8
12
|
} from "@/internal/errors.js";
|
|
9
13
|
import type { Schema } from "@/internal/types.js";
|
|
10
14
|
import type { Db } from "@/types/db.js";
|
|
11
15
|
import type { Table } from "drizzle-orm";
|
|
12
16
|
import { getTableConfig } from "drizzle-orm/pg-core";
|
|
13
17
|
|
|
14
|
-
export type IndexingStore = Db<Schema
|
|
18
|
+
export type IndexingStore = Db<Schema>;
|
|
19
|
+
|
|
20
|
+
export const parseSqlError = (e: any): Error => {
|
|
21
|
+
let error = getBaseError(e);
|
|
22
|
+
|
|
23
|
+
if (error?.message?.includes("violates not-null constraint")) {
|
|
24
|
+
error = new NotNullConstraintError(error.message);
|
|
25
|
+
} else if (error?.message?.includes("violates unique constraint")) {
|
|
26
|
+
error = new UniqueConstraintError(error.message);
|
|
27
|
+
} else if (error?.message?.includes("violates check constraint")) {
|
|
28
|
+
error = new CheckConstraintError(error.message);
|
|
29
|
+
} else if (
|
|
30
|
+
error?.message?.includes("Do not know how to serialize a BigInt")
|
|
31
|
+
) {
|
|
32
|
+
error = new BigIntSerializationError(error.message);
|
|
33
|
+
error.meta.push(
|
|
34
|
+
"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",
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return error;
|
|
39
|
+
};
|
|
15
40
|
|
|
16
41
|
export const validateUpdateSet = (table: Table, set: Object): Object => {
|
|
17
42
|
const primaryKeys = getPrimaryKeyColumns(table);
|