History

fix: tighten node engine range for node:sqlite compat (#206) (#1096)

Etan Heyman committed 8 months ago

Commit 6d768651 parent 2bb71f42 files · +25 −1Browse files

Unified · Split

2 files
  1. apps/server/package.json +1 −1
  2. apps/server/src/persistence/NodeSqliteClient.ts +24 −0
apps/server/package.json+1−1
@@ -44,6 +44,6 @@ · 43 unmodified lines
44 "vitest": "catalog:"44 "vitest": "catalog:"
45 },45 },
46 "engines": {46 "engines": {
47 "node": "^22.13 || ^23.4 || >=24.10"47 "node": "^22.16 || ^23.11 || >=24.10"
48 }48 }
49}49}
apps/server/src/persistence/NodeSqliteClient.ts+24−0
@@ -50,11 +50,35 @@ export interface SqliteMemoryClientConfig extends Omit< · 49 unmodified lines
50 "filename" | "readonly"50 "filename" | "readonly"
51> {}51> {}
52 52
53/**
54 * Verify that the current Node.js version includes the `node:sqlite` APIs
55 * used by `NodeSqliteClient` — specifically `StatementSync.columns()` (added
56 * in Node 22.16.0 / 23.11.0).
57 *
58 * @see https://github.com/nodejs/node/pull/57490
59 */
60const checkNodeSqliteCompat = () => {
61 const parts = process.versions.node.split(".").map(Number);
62 const major = parts[0] ?? 0;
63 const minor = parts[1] ?? 0;
64 const supported = (major === 22 && minor >= 16) || (major === 23 && minor >= 11) || major >= 24;
65
66 if (!supported) {
67 return Effect.die(
68 `Node.js ${process.versions.node} is missing required node:sqlite APIs ` +
69 `(StatementSync.columns). Upgrade to Node.js >=22.16, >=23.11, or >=24.`,
70 );
71 }
72 return Effect.void;
73};
74
53const makeWithDatabase = (75const makeWithDatabase = (
54 options: SqliteClientConfig,76 options: SqliteClientConfig,
55 openDatabase: () => DatabaseSync,77 openDatabase: () => DatabaseSync,
56): Effect.Effect<Client.SqlClient, never, Scope.Scope | Reactivity.Reactivity> =>78): Effect.Effect<Client.SqlClient, never, Scope.Scope | Reactivity.Reactivity> =>
57 Effect.gen(function* () {79 Effect.gen(function* () {
80 yield* checkNodeSqliteCompat();
81
58 const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);82 const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
59 const transformRows = options.transformResultNames83 const transformRows = options.transformResultNames
60 ? Statement.defaultTransforms(options.transformResultNames).array84 ? Statement.defaultTransforms(options.transformResultNames).array