@ingram-tech/nk-db 0.2.0 → 0.3.0
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 +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/pglite/dev.js +0 -0
- package/dist/pglite/index.d.ts +8 -0
- package/dist/pglite/index.d.ts.map +1 -1
- package/dist/pglite/index.js +10 -7
- package/dist/pglite/index.js.map +1 -1
- package/dist/pglite/reset.d.ts +17 -0
- package/dist/pglite/reset.d.ts.map +1 -0
- package/dist/pglite/reset.js +23 -0
- package/dist/pglite/reset.js.map +1 -0
- package/dist/pool.js +1 -1
- package/dist/pool.js.map +1 -1
- package/package.json +8 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createDb } from "./drizzle";
|
|
2
|
-
export { type DbEnv, dbEnv, getDatabaseUrl, isConfigured } from "./keys";
|
|
3
|
-
export { type CreatePoolConfig, createPool } from "./pool";
|
|
4
|
-
export { createQueries, type PoolQueries, type Queries } from "./queries";
|
|
5
|
-
export { configureTimestampsAsStrings } from "./types";
|
|
1
|
+
export { createDb } from "./drizzle.js";
|
|
2
|
+
export { type DbEnv, dbEnv, getDatabaseUrl, isConfigured } from "./keys.js";
|
|
3
|
+
export { type CreatePoolConfig, createPool } from "./pool.js";
|
|
4
|
+
export { createQueries, type PoolQueries, type Queries } from "./queries.js";
|
|
5
|
+
export { configureTimestampsAsStrings } from "./types.js";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// The Ingram Postgres data layer. The PGlite dev/test harness lives behind the
|
|
2
2
|
// "@ingram-tech/nk-db/pglite" subpath so its WASM/dev-only deps never reach a
|
|
3
3
|
// production bundle.
|
|
4
|
-
export { createDb } from "./drizzle";
|
|
5
|
-
export { dbEnv, getDatabaseUrl, isConfigured } from "./keys";
|
|
6
|
-
export { createPool } from "./pool";
|
|
7
|
-
export { createQueries } from "./queries";
|
|
8
|
-
export { configureTimestampsAsStrings } from "./types";
|
|
4
|
+
export { createDb } from "./drizzle.js";
|
|
5
|
+
export { dbEnv, getDatabaseUrl, isConfigured } from "./keys.js";
|
|
6
|
+
export { createPool } from "./pool.js";
|
|
7
|
+
export { createQueries } from "./queries.js";
|
|
8
|
+
export { configureTimestampsAsStrings } from "./types.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,qBAAqB;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,qBAAqB;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAc,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAyB,UAAU,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAkC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/pglite/dev.js
CHANGED
|
File without changes
|
package/dist/pglite/index.d.ts
CHANGED
|
@@ -57,6 +57,14 @@ export interface TestDb {
|
|
|
57
57
|
* An in-memory PGlite for integration tests. Real Postgres semantics, instant,
|
|
58
58
|
* no cleanup. Run with Vitest `fileParallelism: false` (the socket is
|
|
59
59
|
* single-connection) and close in `afterAll` (modules are isolated per file).
|
|
60
|
+
*
|
|
61
|
+
* Transport note: this harness is socket + `pg.Pool`, which is what a Next site
|
|
62
|
+
* dialing `DATABASE_URL` wants — but that single-connection socket is also why it
|
|
63
|
+
* needs serial files. A pure in-process Drizzle/PGlite harness (no socket) runs
|
|
64
|
+
* files in parallel and is faster, which is what an actual service reached for.
|
|
65
|
+
* Both share `resetPublicTables`. If a second in-process consumer appears, the
|
|
66
|
+
* move is to promote an in-process harness to first-class here, not to bolt one
|
|
67
|
+
* beside this socket default.
|
|
60
68
|
*/
|
|
61
69
|
export declare const createTestDb: (options?: PgliteServerOptions) => Promise<TestDb>;
|
|
62
70
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG/B,MAAM,WAAW,mBAAmB;IACnC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,kBAAkB,CAAC;IAC3B,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAUD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC9B,UAAS,mBAAwB,KAC/B,OAAO,CAAC,YAAY,CAyBtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAC1B,UAAS,mBAAmB,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,KACzD,OAAO,CAAC,IAAI,CA0Bd,CAAC;AAEF,MAAM,WAAW,MAAM;IACtB,2EAA2E;IAC3E,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,YAAY,GACxB,UAAS,mBAAwB,KAC/B,OAAO,CAAC,MAAM,CAWhB,CAAC"}
|
package/dist/pglite/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { existsSync } from "node:fs";
|
|
|
11
11
|
import { rm } from "node:fs/promises";
|
|
12
12
|
import { PGlite } from "@electric-sql/pglite";
|
|
13
13
|
import { PGLiteSocketServer } from "@electric-sql/pglite-socket";
|
|
14
|
+
import { resetPublicTables } from "./reset.js";
|
|
14
15
|
const defaultMigrate = (migrationsFolder) => async (db) => {
|
|
15
16
|
const { drizzle } = await import("drizzle-orm/pglite");
|
|
16
17
|
const { migrate } = await import("drizzle-orm/pglite/migrator");
|
|
@@ -75,18 +76,20 @@ export const startPgliteDev = async (options = {}) => {
|
|
|
75
76
|
* An in-memory PGlite for integration tests. Real Postgres semantics, instant,
|
|
76
77
|
* no cleanup. Run with Vitest `fileParallelism: false` (the socket is
|
|
77
78
|
* single-connection) and close in `afterAll` (modules are isolated per file).
|
|
79
|
+
*
|
|
80
|
+
* Transport note: this harness is socket + `pg.Pool`, which is what a Next site
|
|
81
|
+
* dialing `DATABASE_URL` wants — but that single-connection socket is also why it
|
|
82
|
+
* needs serial files. A pure in-process Drizzle/PGlite harness (no socket) runs
|
|
83
|
+
* files in parallel and is faster, which is what an actual service reached for.
|
|
84
|
+
* Both share `resetPublicTables`. If a second in-process consumer appears, the
|
|
85
|
+
* move is to promote an in-process harness to first-class here, not to bolt one
|
|
86
|
+
* beside this socket default.
|
|
78
87
|
*/
|
|
79
88
|
export const createTestDb = async (options = {}) => {
|
|
80
89
|
const { Pool } = await import("pg");
|
|
81
90
|
const { databaseUrl, stop } = await createPgliteServer(options);
|
|
82
91
|
const pool = new Pool({ connectionString: databaseUrl, max: 1 });
|
|
83
|
-
const reset =
|
|
84
|
-
const result = await pool.query("select tablename from pg_tables where schemaname = 'public'");
|
|
85
|
-
if (result.rows.length === 0)
|
|
86
|
-
return;
|
|
87
|
-
const list = result.rows.map((row) => `"${row.tablename}"`).join(", ");
|
|
88
|
-
await pool.query(`truncate table ${list} restart identity cascade`);
|
|
89
|
-
};
|
|
92
|
+
const reset = () => resetPublicTables((sql) => pool.query(sql));
|
|
90
93
|
const close = async () => {
|
|
91
94
|
await pool.end();
|
|
92
95
|
await stop();
|
package/dist/pglite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iFAAiF;AACjF,uEAAuE;AACvE,iFAAiF;AACjF,sBAAsB;AACtB,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,2CAA2C;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAmB,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A row-returning query — `pg.Pool.query`, raw PGlite `.query`, etc. The
|
|
3
|
+
* `pg_tables` introspection reads rows back, so this can't be a fire-and-forget
|
|
4
|
+
* `exec(sql)`: the contract has to surface `{ rows }`.
|
|
5
|
+
*/
|
|
6
|
+
export type Queryable = (sql: string) => Promise<{
|
|
7
|
+
rows: {
|
|
8
|
+
tablename: string;
|
|
9
|
+
}[];
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* TRUNCATE every table in the `public` schema, resetting identity sequences.
|
|
13
|
+
* Call in a Vitest `beforeEach`. No-op when the schema is empty (e.g. before
|
|
14
|
+
* migrations have run), so it's safe to call unconditionally.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resetPublicTables(query: Queryable): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=reset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/pglite/reset.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAAC;AAEpF;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Reset a PGlite/Postgres test database to empty between tests — the canonical
|
|
2
|
+
// "introspect public tables, then TRUNCATE … RESTART IDENTITY CASCADE" unit,
|
|
3
|
+
// kept transport-agnostic so the socket-backed `createTestDb` and any in-process
|
|
4
|
+
// Drizzle/PGlite harness share one implementation instead of each re-deriving the
|
|
5
|
+
// SQL (and the easy-to-forget empty-list guard) and drifting apart.
|
|
6
|
+
//
|
|
7
|
+
// Deliberately zero imports: this loads via the dedicated
|
|
8
|
+
// "@ingram-tech/nk-db/pglite/reset" subpath, so an in-process consumer gets the
|
|
9
|
+
// reset logic WITHOUT dragging in PGlite or the PGLiteSocketServer that
|
|
10
|
+
// `./index.ts` imports at the top level.
|
|
11
|
+
/**
|
|
12
|
+
* TRUNCATE every table in the `public` schema, resetting identity sequences.
|
|
13
|
+
* Call in a Vitest `beforeEach`. No-op when the schema is empty (e.g. before
|
|
14
|
+
* migrations have run), so it's safe to call unconditionally.
|
|
15
|
+
*/
|
|
16
|
+
export async function resetPublicTables(query) {
|
|
17
|
+
const { rows } = await query("select tablename from pg_tables where schemaname = 'public'");
|
|
18
|
+
if (rows.length === 0)
|
|
19
|
+
return;
|
|
20
|
+
const list = rows.map((row) => `"${row.tablename}"`).join(", ");
|
|
21
|
+
await query(`truncate table ${list} restart identity cascade`);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/pglite/reset.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,iFAAiF;AACjF,kFAAkF;AAClF,oEAAoE;AACpE,EAAE;AACF,0DAA0D;AAC1D,gFAAgF;AAChF,wEAAwE;AACxE,yCAAyC;AASzC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAgB;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAC3B,6DAA6D,CAC7D,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,KAAK,CAAC,kBAAkB,IAAI,2BAA2B,CAAC,CAAC;AAChE,CAAC"}
|
package/dist/pool.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Pool } from "pg";
|
|
2
|
-
import { dbEnv } from "./keys";
|
|
2
|
+
import { dbEnv } from "./keys.js";
|
|
3
3
|
const isLocal = (connectionString) => connectionString.includes("127.0.0.1") || connectionString.includes("localhost");
|
|
4
4
|
/**
|
|
5
5
|
* The one shared `pg.Pool`. Reuse this for everything — app queries (via
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAWlC,MAAM,OAAO,GAAG,CAAC,gBAAwB,EAAW,EAAE,CACrD,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,SAA2B,EAAE,EAAQ,EAAE;IACjE,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,GAAG,EAAE,gBAAgB,CAAC;IAC1E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAElE,MAAM,IAAI,GAAe,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAE1D,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,IAAI,CAAC;YACf,GAAG,IAAI;YACP,gBAAgB;YAChB,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE;SAC7C,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACtC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,IAAI,IAAI,CAAC;QACf,GAAG,IAAI;QACP,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE;QAChC,GAAG,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;KAClC,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ingram-tech/nk-db",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "The Ingram Postgres data layer: one TLS-aware pg pool, raw-SQL helpers, Drizzle wiring, and a PGlite (no-Docker) dev/test harness for Next.js sites.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -26,6 +26,10 @@
|
|
|
26
26
|
"./pglite": {
|
|
27
27
|
"types": "./dist/pglite/index.d.ts",
|
|
28
28
|
"import": "./dist/pglite/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./pglite/reset": {
|
|
31
|
+
"types": "./dist/pglite/reset.d.ts",
|
|
32
|
+
"import": "./dist/pglite/reset.js"
|
|
29
33
|
}
|
|
30
34
|
},
|
|
31
35
|
"scripts": {
|
|
@@ -38,7 +42,7 @@
|
|
|
38
42
|
},
|
|
39
43
|
"peerDependencies": {
|
|
40
44
|
"@electric-sql/pglite": ">=0.5.0",
|
|
41
|
-
"@electric-sql/pglite-socket": ">=0.
|
|
45
|
+
"@electric-sql/pglite-socket": ">=0.2.4",
|
|
42
46
|
"drizzle-orm": ">=0.44.0",
|
|
43
47
|
"pg": "^8.13.0"
|
|
44
48
|
},
|
|
@@ -52,9 +56,9 @@
|
|
|
52
56
|
},
|
|
53
57
|
"devDependencies": {
|
|
54
58
|
"@electric-sql/pglite": "^0.5.0",
|
|
55
|
-
"@electric-sql/pglite-socket": "^0.
|
|
59
|
+
"@electric-sql/pglite-socket": "^0.2.4",
|
|
56
60
|
"@ingram-tech/typescript-config": "workspace:*",
|
|
57
|
-
"@types/node": "^
|
|
61
|
+
"@types/node": "^25.0.0",
|
|
58
62
|
"@types/pg": "^8.11.0",
|
|
59
63
|
"drizzle-orm": "^0.45.0",
|
|
60
64
|
"pg": "^8.13.0",
|