@ponder/client 0.9.0-next.10 → 0.9.0-next.11

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/dist/index.d.ts CHANGED
@@ -3,6 +3,9 @@ export { and, asc, avg, avgDistinct, between, count, countDistinct, desc, eq, ex
3
3
  import { PgRemoteDatabase } from 'drizzle-orm/pg-proxy';
4
4
  export { alias, except, exceptAll, intersect, intersectAll, union, unionAll } from 'drizzle-orm/pg-core';
5
5
 
6
+ type Schema = {
7
+ [name: string]: unknown;
8
+ };
6
9
  type Prettify<T> = {
7
10
  [K in keyof T]: T[K];
8
11
  } & {};
@@ -26,7 +29,7 @@ type Client<schema extends Schema = Schema> = {
26
29
  /** Get the status of all chains. */
27
30
  getStatus: () => Promise<Status>;
28
31
  };
29
- declare const compileQuery: (query: SQLWrapper | string) => QueryWithTypings;
32
+ declare const compileQuery: (query: SQLWrapper) => QueryWithTypings;
30
33
  /**
31
34
  * Create a client for querying Ponder apps.
32
35
  *
@@ -38,19 +41,11 @@ declare const compileQuery: (query: SQLWrapper | string) => QueryWithTypings;
38
41
  * import { createClient } from "@ponder/client";
39
42
  * import * as schema from "../ponder.schema";
40
43
  *
41
- * const client = createClient("https://...", { schema });
44
+ * const client = createClient("https://.../sql", { schema });
42
45
  * ```
43
46
  */
44
47
  declare const createClient: <schema extends Schema>(baseUrl: string, { schema }: {
45
48
  schema: schema;
46
49
  }) => Client<schema>;
47
50
 
48
- type Schema = {
49
- [name: string]: unknown;
50
- };
51
- declare const Schema: unique symbol;
52
- declare const setDatabaseSchema: <T extends {
53
- [name: string]: unknown;
54
- }>(schema: T, schemaName: string) => T;
55
-
56
- export { type Client, type Status, compileQuery, createClient, setDatabaseSchema };
51
+ export { type Client, type Status, compileQuery, createClient };
package/dist/index.js CHANGED
@@ -1,12 +1,8 @@
1
1
  // src/index.ts
2
- import {
3
- Table,
4
- is,
5
- sql
6
- } from "drizzle-orm";
7
2
  import { drizzle } from "drizzle-orm/pg-proxy";
3
+ import superjson from "superjson";
8
4
  import {
9
- sql as sql2,
5
+ sql,
10
6
  eq,
11
7
  gt,
12
8
  gte,
@@ -63,9 +59,9 @@ var getEventSource = async () => {
63
59
  return SSE;
64
60
  };
65
61
  var getUrl = (baseUrl, method, query) => {
66
- const url = new URL(`${baseUrl}/client/${method}`);
62
+ const url = new URL(`${baseUrl}/${method}`);
67
63
  if (query) {
68
- url.searchParams.set("sql", JSON.stringify(query));
64
+ url.searchParams.set("sql", superjson.stringify(query));
69
65
  }
70
66
  return url;
71
67
  };
@@ -74,16 +70,15 @@ var noopDatabase = drizzle(() => Promise.resolve({ rows: [] }), {
74
70
  });
75
71
  var dialect = noopDatabase.dialect;
76
72
  var compileQuery = (query) => {
77
- const sequel = typeof query === "string" ? sql.raw(query) : query.getSQL();
78
- return dialect.sqlToQuery(sequel);
73
+ return dialect.sqlToQuery(query.getSQL());
79
74
  };
80
75
  var createClient = (baseUrl, { schema }) => {
81
76
  let sse;
82
77
  let liveCount = 0;
83
78
  const client = {
84
79
  db: drizzle(
85
- async (sql3, params, _, typings) => {
86
- const builtQuery = { sql: sql3, params, typings };
80
+ async (sql2, params, _, typings) => {
81
+ const builtQuery = { sql: sql2, params, typings };
87
82
  const response = await fetch(getUrl(baseUrl, "db", builtQuery), {
88
83
  method: "POST"
89
84
  });
@@ -102,15 +97,8 @@ var createClient = (baseUrl, { schema }) => {
102
97
  ),
103
98
  live: (queryFn, onData, onError) => {
104
99
  const addEventListeners = () => {
105
- sse.addEventListener("message", (event) => {
106
- const data = JSON.parse(event.data);
107
- if (data.status === "error") {
108
- const error = new Error(data.error);
109
- error.stack = void 0;
110
- onError?.(error);
111
- } else {
112
- queryFn(client.db).then(onData).catch(onError);
113
- }
100
+ sse.addEventListener("message", () => {
101
+ queryFn(client.db).then(onData).catch(onError);
114
102
  });
115
103
  sse.addEventListener("error", () => {
116
104
  onError?.(new Error("server disconnected"));
@@ -141,15 +129,6 @@ var createClient = (baseUrl, { schema }) => {
141
129
  };
142
130
  return client;
143
131
  };
144
- var Schema = Symbol.for("drizzle:Schema");
145
- var setDatabaseSchema = (schema, schemaName) => {
146
- for (const table of Object.values(schema)) {
147
- if (is(table, Table)) {
148
- table[Schema] = schemaName;
149
- }
150
- }
151
- return schema;
152
- };
153
132
  export {
154
133
  alias,
155
134
  and,
@@ -188,8 +167,7 @@ export {
188
167
  notLike,
189
168
  or,
190
169
  relations,
191
- setDatabaseSchema,
192
- sql2 as sql,
170
+ sql,
193
171
  sum,
194
172
  sumDistinct,
195
173
  union,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n type QueryWithTypings,\n type SQLWrapper,\n Table,\n is,\n sql,\n} from \"drizzle-orm\";\nimport type { PgDialect } from \"drizzle-orm/pg-core\";\nimport { type PgRemoteDatabase, drizzle } from \"drizzle-orm/pg-proxy\";\n\nconst getEventSource = async () => {\n let SSE: typeof EventSource;\n if (typeof window === \"undefined\") {\n const undici = await import(/* webpackIgnore: true */ \"undici\");\n // @ts-ignore\n SSE = undici.EventSource;\n } else {\n SSE = EventSource;\n }\n\n return SSE;\n};\n\ntype Schema = { [name: string]: unknown };\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport type Status = {\n [network: string]: {\n block: { number: number; timestamp: number } | null;\n ready: boolean;\n };\n};\n\ntype ClientDb<schema extends Schema = Schema> = Prettify<\n Omit<\n PgRemoteDatabase<schema>,\n | \"insert\"\n | \"update\"\n | \"delete\"\n | \"transaction\"\n | \"refreshMaterializedView\"\n | \"_\"\n >\n>;\n\nexport type Client<schema extends Schema = Schema> = {\n /** Query the database. */\n db: ClientDb<schema>;\n /** Subscribe to live updates. */\n live: <result>(\n queryFn: (db: ClientDb<schema>) => Promise<result>,\n onData: (result: result) => void,\n onError?: (error: Error) => void,\n ) => {\n unsubscribe: () => void;\n };\n /** Get the status of all chains. */\n getStatus: () => Promise<Status>;\n};\n\nconst getUrl = (\n baseUrl: string,\n method: \"live\" | \"db\" | \"status\",\n query?: QueryWithTypings,\n) => {\n const url = new URL(`${baseUrl}/client/${method}`);\n if (query) {\n url.searchParams.set(\"sql\", JSON.stringify(query));\n }\n return url;\n};\n\nconst noopDatabase = drizzle(() => Promise.resolve({ rows: [] }), {\n casing: \"snake_case\",\n});\n\n// @ts-ignore\nconst dialect: PgDialect = noopDatabase.dialect;\n\nexport const compileQuery = (query: SQLWrapper | string) => {\n const sequel = typeof query === \"string\" ? sql.raw(query) : query.getSQL();\n return dialect.sqlToQuery(sequel);\n};\n\n/**\n * Create a client for querying Ponder apps.\n *\n * @param baseUrl - The URL of the Ponder app.\n * @param schema - The schema of the Ponder app.\n *\n * @example\n * ```ts\n * import { createClient } from \"@ponder/client\";\n * import * as schema from \"../ponder.schema\";\n *\n * const client = createClient(\"https://...\", { schema });\n * ```\n */\nexport const createClient = <schema extends Schema>(\n baseUrl: string,\n { schema }: { schema: schema },\n): Client<schema> => {\n let sse: EventSource | undefined;\n let liveCount = 0;\n\n const client: Client<schema> = {\n db: drizzle(\n async (sql, params, _, typings) => {\n const builtQuery = { sql, params, typings };\n const response = await fetch(getUrl(baseUrl, \"db\", builtQuery), {\n method: \"POST\",\n });\n\n if (response.ok === false) {\n const error = new Error(await response.text());\n error.stack = undefined;\n throw error;\n }\n\n const result = await response.json();\n\n return {\n ...result,\n rows: result.rows.map((row: object) => Object.values(row)),\n };\n },\n { schema, casing: \"snake_case\" },\n ),\n live: (queryFn, onData, onError) => {\n // https://github.com/drizzle-team/drizzle-orm/blob/04c91434c7ac10aeb2923efd1d19a7ebf10ea9d4/drizzle-orm/src/pg-core/db.ts#L602-L621\n\n const addEventListeners = () => {\n sse!.addEventListener(\"message\", (event) => {\n const data = JSON.parse(event.data) as\n | { status: \"success\"; result: unknown }\n | { status: \"error\"; error: string };\n\n if (data.status === \"error\") {\n const error = new Error(data.error);\n error.stack = undefined;\n onError?.(error);\n } else {\n queryFn(client.db).then(onData).catch(onError);\n }\n });\n\n sse!.addEventListener(\"error\", () => {\n onError?.(new Error(\"server disconnected\"));\n });\n };\n\n liveCount++;\n if (sse === undefined) {\n getEventSource().then((SSE) => {\n sse = new SSE(getUrl(baseUrl, \"live\"));\n addEventListeners();\n });\n } else {\n addEventListeners();\n }\n\n return {\n unsubscribe: () => {\n if (--liveCount === 0) sse?.close();\n },\n };\n },\n getStatus: async () => {\n const response = await fetch(getUrl(baseUrl, \"status\"), {\n method: \"POST\",\n });\n\n return response.json();\n },\n };\n\n return client;\n};\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 alias,\n union,\n unionAll,\n intersect,\n intersectAll,\n except,\n exceptAll,\n} from \"drizzle-orm/pg-core\";\n\nconst Schema = Symbol.for(\"drizzle:Schema\");\n\nexport const setDatabaseSchema = <T extends { [name: string]: unknown }>(\n schema: T,\n schemaName: string,\n): T => {\n for (const table of Object.values(schema)) {\n if (is(table, Table)) {\n // @ts-ignore\n table[Schema] = schemaName;\n }\n }\n return schema;\n};\n"],"mappings":"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","names":["sql"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { QueryWithTypings, SQLWrapper } from \"drizzle-orm\";\nimport type { PgDialect } from \"drizzle-orm/pg-core\";\nimport { type PgRemoteDatabase, drizzle } from \"drizzle-orm/pg-proxy\";\nimport superjson from \"superjson\";\n\nconst getEventSource = async () => {\n let SSE: typeof EventSource;\n if (typeof window === \"undefined\") {\n const undici = await import(/* webpackIgnore: true */ \"undici\");\n // @ts-ignore\n SSE = undici.EventSource;\n } else {\n SSE = EventSource;\n }\n\n return SSE;\n};\n\ntype Schema = { [name: string]: unknown };\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport type Status = {\n [network: string]: {\n block: { number: number; timestamp: number } | null;\n ready: boolean;\n };\n};\n\ntype ClientDb<schema extends Schema = Schema> = Prettify<\n Omit<\n PgRemoteDatabase<schema>,\n | \"insert\"\n | \"update\"\n | \"delete\"\n | \"transaction\"\n | \"refreshMaterializedView\"\n | \"_\"\n >\n>;\n\nexport type Client<schema extends Schema = Schema> = {\n /** Query the database. */\n db: ClientDb<schema>;\n /** Subscribe to live updates. */\n live: <result>(\n queryFn: (db: ClientDb<schema>) => Promise<result>,\n onData: (result: result) => void,\n onError?: (error: Error) => void,\n ) => {\n unsubscribe: () => void;\n };\n /** Get the status of all chains. */\n getStatus: () => Promise<Status>;\n};\n\nconst getUrl = (\n baseUrl: string,\n method: \"live\" | \"db\" | \"status\",\n query?: QueryWithTypings,\n) => {\n const url = new URL(`${baseUrl}/${method}`);\n if (query) {\n url.searchParams.set(\"sql\", superjson.stringify(query));\n }\n return url;\n};\n\nconst noopDatabase = drizzle(() => Promise.resolve({ rows: [] }), {\n casing: \"snake_case\",\n});\n\n// @ts-ignore\nconst dialect: PgDialect = noopDatabase.dialect;\n\nexport const compileQuery = (query: SQLWrapper) => {\n return dialect.sqlToQuery(query.getSQL());\n};\n\n/**\n * Create a client for querying Ponder apps.\n *\n * @param baseUrl - The URL of the Ponder app.\n * @param schema - The schema of the Ponder app.\n *\n * @example\n * ```ts\n * import { createClient } from \"@ponder/client\";\n * import * as schema from \"../ponder.schema\";\n *\n * const client = createClient(\"https://.../sql\", { schema });\n * ```\n */\nexport const createClient = <schema extends Schema>(\n baseUrl: string,\n { schema }: { schema: schema },\n): Client<schema> => {\n let sse: EventSource | undefined;\n let liveCount = 0;\n\n const client: Client<schema> = {\n db: drizzle(\n async (sql, params, _, typings) => {\n const builtQuery = { sql, params, typings };\n const response = await fetch(getUrl(baseUrl, \"db\", builtQuery), {\n method: \"POST\",\n });\n\n if (response.ok === false) {\n const error = new Error(await response.text());\n error.stack = undefined;\n throw error;\n }\n\n const result = await response.json();\n\n return {\n ...result,\n rows: result.rows.map((row: object) => Object.values(row)),\n };\n },\n { schema, casing: \"snake_case\" },\n ),\n live: (queryFn, onData, onError) => {\n const addEventListeners = () => {\n sse!.addEventListener(\"message\", () => {\n queryFn(client.db).then(onData).catch(onError);\n });\n\n sse!.addEventListener(\"error\", () => {\n onError?.(new Error(\"server disconnected\"));\n });\n };\n\n liveCount++;\n if (sse === undefined) {\n getEventSource().then((SSE) => {\n sse = new SSE(getUrl(baseUrl, \"live\"));\n addEventListeners();\n });\n } else {\n addEventListeners();\n }\n\n return {\n unsubscribe: () => {\n if (--liveCount === 0) sse?.close();\n },\n };\n },\n getStatus: async () => {\n const response = await fetch(getUrl(baseUrl, \"status\"), {\n method: \"POST\",\n });\n\n return response.json();\n },\n };\n\n return client;\n};\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 alias,\n union,\n unionAll,\n intersect,\n intersectAll,\n except,\n exceptAll,\n} from \"drizzle-orm/pg-core\";\n"],"mappings":"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","names":["sql"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ponder/client",
3
- "version": "0.9.0-next.10",
3
+ "version": "0.9.0-next.11",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,6 +39,7 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "drizzle-orm": "0.36.4",
42
+ "superjson": "^2.2.2",
42
43
  "undici": "^7.2.0"
43
44
  },
44
45
  "devDependencies": {
package/src/index.ts CHANGED
@@ -1,12 +1,7 @@
1
- import {
2
- type QueryWithTypings,
3
- type SQLWrapper,
4
- Table,
5
- is,
6
- sql,
7
- } from "drizzle-orm";
1
+ import type { QueryWithTypings, SQLWrapper } from "drizzle-orm";
8
2
  import type { PgDialect } from "drizzle-orm/pg-core";
9
3
  import { type PgRemoteDatabase, drizzle } from "drizzle-orm/pg-proxy";
4
+ import superjson from "superjson";
10
5
 
11
6
  const getEventSource = async () => {
12
7
  let SSE: typeof EventSource;
@@ -66,9 +61,9 @@ const getUrl = (
66
61
  method: "live" | "db" | "status",
67
62
  query?: QueryWithTypings,
68
63
  ) => {
69
- const url = new URL(`${baseUrl}/client/${method}`);
64
+ const url = new URL(`${baseUrl}/${method}`);
70
65
  if (query) {
71
- url.searchParams.set("sql", JSON.stringify(query));
66
+ url.searchParams.set("sql", superjson.stringify(query));
72
67
  }
73
68
  return url;
74
69
  };
@@ -80,9 +75,8 @@ const noopDatabase = drizzle(() => Promise.resolve({ rows: [] }), {
80
75
  // @ts-ignore
81
76
  const dialect: PgDialect = noopDatabase.dialect;
82
77
 
83
- export const compileQuery = (query: SQLWrapper | string) => {
84
- const sequel = typeof query === "string" ? sql.raw(query) : query.getSQL();
85
- return dialect.sqlToQuery(sequel);
78
+ export const compileQuery = (query: SQLWrapper) => {
79
+ return dialect.sqlToQuery(query.getSQL());
86
80
  };
87
81
 
88
82
  /**
@@ -96,7 +90,7 @@ export const compileQuery = (query: SQLWrapper | string) => {
96
90
  * import { createClient } from "@ponder/client";
97
91
  * import * as schema from "../ponder.schema";
98
92
  *
99
- * const client = createClient("https://...", { schema });
93
+ * const client = createClient("https://.../sql", { schema });
100
94
  * ```
101
95
  */
102
96
  export const createClient = <schema extends Schema>(
@@ -130,21 +124,9 @@ export const createClient = <schema extends Schema>(
130
124
  { schema, casing: "snake_case" },
131
125
  ),
132
126
  live: (queryFn, onData, onError) => {
133
- // https://github.com/drizzle-team/drizzle-orm/blob/04c91434c7ac10aeb2923efd1d19a7ebf10ea9d4/drizzle-orm/src/pg-core/db.ts#L602-L621
134
-
135
127
  const addEventListeners = () => {
136
- sse!.addEventListener("message", (event) => {
137
- const data = JSON.parse(event.data) as
138
- | { status: "success"; result: unknown }
139
- | { status: "error"; error: string };
140
-
141
- if (data.status === "error") {
142
- const error = new Error(data.error);
143
- error.stack = undefined;
144
- onError?.(error);
145
- } else {
146
- queryFn(client.db).then(onData).catch(onError);
147
- }
128
+ sse!.addEventListener("message", () => {
129
+ queryFn(client.db).then(onData).catch(onError);
148
130
  });
149
131
 
150
132
  sse!.addEventListener("error", () => {
@@ -225,18 +207,3 @@ export {
225
207
  except,
226
208
  exceptAll,
227
209
  } from "drizzle-orm/pg-core";
228
-
229
- const Schema = Symbol.for("drizzle:Schema");
230
-
231
- export const setDatabaseSchema = <T extends { [name: string]: unknown }>(
232
- schema: T,
233
- schemaName: string,
234
- ): T => {
235
- for (const table of Object.values(schema)) {
236
- if (is(table, Table)) {
237
- // @ts-ignore
238
- table[Schema] = schemaName;
239
- }
240
- }
241
- return schema;
242
- };