orez 0.0.44 → 0.0.46
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/README.md +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -86
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +27 -86
- package/src/shim/hooks.mjs +63 -0
- package/src/shim/register.mjs +4 -0
package/README.md
CHANGED
|
@@ -208,9 +208,9 @@ The mutex uses `setImmediate`/`setTimeout` between releases instead of resolving
|
|
|
208
208
|
|
|
209
209
|
When `execProtocolRaw` throws (PGlite internal error), the proxy sends a proper ErrorResponse + ReadyForQuery over the wire instead of destroying the socket. The client sees an error message and continues working.
|
|
210
210
|
|
|
211
|
-
### SQLite shim via
|
|
211
|
+
### SQLite shim via ESM loader hooks
|
|
212
212
|
|
|
213
|
-
zero-cache imports `@rocicorp/zero-sqlite3` (a native C addon)
|
|
213
|
+
zero-cache imports `@rocicorp/zero-sqlite3` (a native C addon) via ESM `import`. orez uses Node's `module.register()` API with `--import` to intercept resolution — ESM `resolve` and `load` hooks redirect `@rocicorp/zero-sqlite3` to bedrock-sqlite WASM at runtime. The hook templates live in `src/shim/` and are written to tmpdir with the resolved bedrock-sqlite path substituted.
|
|
214
214
|
|
|
215
215
|
The shim also polyfills the better-sqlite3 API surface zero-cache expects: `unsafeMode()`, `defaultSafeIntegers()`, `serialize()`, `backup()`, and `scanStatus`/`scanStatusV2`/`scanStatusReset` on Statement prototypes (zero-cache's query planner calls these for scan statistics, which WASM doesn't support).
|
|
216
216
|
|
|
@@ -234,9 +234,9 @@ Columns with types zero-cache can't handle (`tsvector`, `tsquery`, `USER-DEFINED
|
|
|
234
234
|
|
|
235
235
|
If `ZERO_APP_PUBLICATIONS` is set, only tables in that publication get change-tracking triggers. This prevents streaming changes for private tables (user sessions, accounts) that zero-cache doesn't know about. Stale triggers from previous installs (before the publication existed) are cleaned up automatically.
|
|
236
236
|
|
|
237
|
-
### Stale
|
|
237
|
+
### Stale lock file cleanup on startup
|
|
238
238
|
|
|
239
|
-
|
|
239
|
+
Only the SQLite replica's lock files (`-wal`, `-shm`, `-wal2`) are deleted on startup — not the replica itself. The replica is a cache of PGlite data; keeping it lets zero-cache catch up via replication (nearly instant) instead of doing a full initial sync (COPY of all tables). If the replica is too stale, `ZERO_AUTO_RESET=true` makes zero-cache wipe and resync automatically. Lock files from a previous crash are cleaned to prevent startup failures.
|
|
240
240
|
|
|
241
241
|
### Data directory migration
|
|
242
242
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAe3D,wBAAsB,aAAa,CAAC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM;;;;;;;GA+H1E"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
import { spawn } from 'node:child_process';
|
|
9
9
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
10
10
|
import { createRequire } from 'node:module';
|
|
11
|
+
import { totalmem } from 'node:os';
|
|
11
12
|
import { dirname, resolve } from 'node:path';
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
12
14
|
import { getConfig, getConnectionString } from './config.js';
|
|
13
15
|
import { log, port, setLogLevel } from './log.js';
|
|
14
16
|
import { startPgProxy } from './pg-proxy.js';
|
|
@@ -103,8 +105,8 @@ export async function startZeroLite(overrides = {}) {
|
|
|
103
105
|
// re-install change tracking on tables created by the callback
|
|
104
106
|
await installChangeTracking(db);
|
|
105
107
|
}
|
|
106
|
-
// clean up stale
|
|
107
|
-
|
|
108
|
+
// clean up stale lock files from previous crash (keep replica for fast restart)
|
|
109
|
+
cleanupStaleLockFiles(config);
|
|
108
110
|
// start zero-cache
|
|
109
111
|
let zeroCacheProcess = null;
|
|
110
112
|
if (!config.skipZeroCache) {
|
|
@@ -143,19 +145,18 @@ export async function startZeroLite(overrides = {}) {
|
|
|
143
145
|
};
|
|
144
146
|
return { config, stop, db, instances, pgPort: config.pgPort, zeroPort: config.zeroPort };
|
|
145
147
|
}
|
|
146
|
-
function
|
|
148
|
+
function cleanupStaleLockFiles(config) {
|
|
147
149
|
const replicaPath = resolve(config.dataDir, 'zero-replica.db');
|
|
148
|
-
// delete
|
|
149
|
-
// the replica
|
|
150
|
-
|
|
150
|
+
// only delete lock/wal files that prevent zero-cache from starting after a crash.
|
|
151
|
+
// keep the replica db itself — zero-cache catches up via replication, which is
|
|
152
|
+
// nearly instant vs a full initial sync (COPY of all tables). if the replica is
|
|
153
|
+
// too stale, ZERO_AUTO_RESET=true makes zero-cache wipe and resync automatically.
|
|
154
|
+
for (const suffix of ['-wal', '-shm', '-wal2']) {
|
|
151
155
|
const file = replicaPath + suffix;
|
|
152
156
|
try {
|
|
153
157
|
if (existsSync(file)) {
|
|
154
158
|
unlinkSync(file);
|
|
155
|
-
|
|
156
|
-
log.debug.orez(`cleaned up stale ${suffix} file`);
|
|
157
|
-
else
|
|
158
|
-
log.debug.orez('cleaned up stale replica (will re-sync)');
|
|
159
|
+
log.debug.orez(`cleaned up stale ${suffix} file`);
|
|
159
160
|
}
|
|
160
161
|
}
|
|
161
162
|
catch {
|
|
@@ -190,84 +191,21 @@ async function seedIfNeeded(db, config) {
|
|
|
190
191
|
}
|
|
191
192
|
log.orez('seeded');
|
|
192
193
|
}
|
|
193
|
-
// write
|
|
194
|
-
//
|
|
195
|
-
// 2. hooks.mjs — ESM loader hook that resolves @rocicorp/zero-sqlite3 → shim
|
|
196
|
-
// 3. register.mjs — --import entrypoint that registers the hook
|
|
197
|
-
// uses node's module.register() API for ESM resolution interception.
|
|
194
|
+
// write esm loader hooks to tmpdir that intercept @rocicorp/zero-sqlite3
|
|
195
|
+
// and redirect to bedrock-sqlite wasm. templates live in src/shim/.
|
|
198
196
|
// returns the path to register.mjs (passed via --import in NODE_OPTIONS).
|
|
199
197
|
function writeSqliteShim() {
|
|
200
198
|
const tmp = process.env.TMPDIR || process.env.TEMP || '/tmp';
|
|
201
199
|
const dir = resolve(tmp, 'orez-sqlite');
|
|
202
200
|
mkdirSync(dir, { recursive: true });
|
|
203
201
|
const bedrockEntry = resolvePackage('bedrock-sqlite');
|
|
204
|
-
|
|
205
|
-
// uses a load hook to inline the shim source so we control the format.
|
|
202
|
+
const shimDir = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'src', 'shim');
|
|
206
203
|
const hooksPath = resolve(dir, 'hooks.mjs');
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
export function resolve(specifier, context, nextResolve) {
|
|
211
|
-
if (specifier === '@rocicorp/zero-sqlite3' || specifier.startsWith('@rocicorp/zero-sqlite3/')) {
|
|
212
|
-
return { url: SHIM_URL, shortCircuit: true };
|
|
213
|
-
}
|
|
214
|
-
return nextResolve(specifier, context);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
export function load(url, context, nextLoad) {
|
|
218
|
-
if (url === SHIM_URL) {
|
|
219
|
-
return {
|
|
220
|
-
format: 'module',
|
|
221
|
-
shortCircuit: true,
|
|
222
|
-
source: \`
|
|
223
|
-
import { createRequire } from 'node:module';
|
|
224
|
-
const require = createRequire('\${BEDROCK_PATH}');
|
|
225
|
-
const mod = require('\${BEDROCK_PATH}');
|
|
226
|
-
const OrigDatabase = mod.Database;
|
|
227
|
-
const SqliteError = mod.SqliteError;
|
|
228
|
-
function Database(...args) {
|
|
229
|
-
const db = new OrigDatabase(...args);
|
|
230
|
-
try { db.pragma('busy_timeout = 30000'); db.pragma('synchronous = normal'); } catch(e) {}
|
|
231
|
-
return db;
|
|
232
|
-
}
|
|
233
|
-
Database.prototype = OrigDatabase.prototype;
|
|
234
|
-
Database.prototype.constructor = Database;
|
|
235
|
-
Object.keys(OrigDatabase).forEach(k => { Database[k] = OrigDatabase[k]; });
|
|
236
|
-
Database.prototype.unsafeMode = function() { return this; };
|
|
237
|
-
if (!Database.prototype.defaultSafeIntegers) Database.prototype.defaultSafeIntegers = function() { return this; };
|
|
238
|
-
if (!Database.prototype.serialize) Database.prototype.serialize = function() { throw new Error('not supported in wasm'); };
|
|
239
|
-
if (!Database.prototype.backup) Database.prototype.backup = function() { throw new Error('not supported in wasm'); };
|
|
240
|
-
const tmpDb = new OrigDatabase(':memory:');
|
|
241
|
-
const tmpStmt = tmpDb.prepare('SELECT 1');
|
|
242
|
-
const SP = Object.getPrototypeOf(tmpStmt);
|
|
243
|
-
if (!SP.safeIntegers) SP.safeIntegers = function() { return this; };
|
|
244
|
-
SP.scanStatus = function() { return undefined; };
|
|
245
|
-
SP.scanStatusV2 = function() { return []; };
|
|
246
|
-
SP.scanStatusReset = function() {};
|
|
247
|
-
tmpDb.close();
|
|
248
|
-
Database.SQLITE_SCANSTAT_NLOOP = 0;
|
|
249
|
-
Database.SQLITE_SCANSTAT_NVISIT = 1;
|
|
250
|
-
Database.SQLITE_SCANSTAT_EST = 2;
|
|
251
|
-
Database.SQLITE_SCANSTAT_NAME = 3;
|
|
252
|
-
Database.SQLITE_SCANSTAT_EXPLAIN = 4;
|
|
253
|
-
Database.SQLITE_SCANSTAT_SELECTID = 5;
|
|
254
|
-
Database.SQLITE_SCANSTAT_PARENTID = 6;
|
|
255
|
-
Database.SQLITE_SCANSTAT_NCYCLE = 7;
|
|
256
|
-
Database.SQLITE_SCANSTAT_COMPLEX = 8;
|
|
257
|
-
export default Database;
|
|
258
|
-
export { SqliteError };
|
|
259
|
-
\`
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
return nextLoad(url, context);
|
|
263
|
-
}
|
|
264
|
-
`);
|
|
265
|
-
// register entrypoint — passed via --import
|
|
204
|
+
const hooksTemplate = readFileSync(resolve(shimDir, 'hooks.mjs'), 'utf-8');
|
|
205
|
+
writeFileSync(hooksPath, hooksTemplate.replace(/__BEDROCK_PATH__/g, bedrockEntry));
|
|
266
206
|
const registerPath = resolve(dir, 'register.mjs');
|
|
267
|
-
const
|
|
268
|
-
writeFileSync(registerPath, `
|
|
269
|
-
register('${hooksUrl}', import.meta.url);
|
|
270
|
-
`);
|
|
207
|
+
const registerTemplate = readFileSync(resolve(shimDir, 'register.mjs'), 'utf-8');
|
|
208
|
+
writeFileSync(registerPath, registerTemplate.replace(/__HOOKS_URL__/g, `file://${hooksPath}`));
|
|
271
209
|
return registerPath;
|
|
272
210
|
}
|
|
273
211
|
async function startZeroCache(config) {
|
|
@@ -316,18 +254,20 @@ async function startZeroCache(config) {
|
|
|
316
254
|
if (!existsSync(zeroCacheBin)) {
|
|
317
255
|
throw new Error('zero-cache cli.js not found. install @rocicorp/zero');
|
|
318
256
|
}
|
|
257
|
+
// calculate heap size: ~25% of system memory, min 4gb
|
|
258
|
+
const memMB = Math.round(totalmem() / 1024 / 1024);
|
|
259
|
+
const heapMB = Math.max(4096, Math.round(memMB * 0.25));
|
|
260
|
+
const existing = process.env.NODE_OPTIONS || '';
|
|
319
261
|
// wasm sqlite: write shim + ESM loader to tmpdir, pass --import to intercept
|
|
320
262
|
// @rocicorp/zero-sqlite3 resolution with our bedrock-sqlite wasm build
|
|
321
263
|
if (!config.disableWasmSqlite) {
|
|
322
264
|
const registerPath = writeSqliteShim();
|
|
323
265
|
const registerUrl = `file://${registerPath}`;
|
|
324
|
-
|
|
325
|
-
|
|
266
|
+
env.NODE_OPTIONS =
|
|
267
|
+
`--import ${registerUrl} --max-old-space-size=${heapMB} ${existing}`.trim();
|
|
326
268
|
}
|
|
327
269
|
else {
|
|
328
|
-
|
|
329
|
-
if (existing)
|
|
330
|
-
env.NODE_OPTIONS = existing;
|
|
270
|
+
env.NODE_OPTIONS = `--max-old-space-size=${heapMB} ${existing}`.trim();
|
|
331
271
|
}
|
|
332
272
|
const child = spawn(zeroCacheBin, [], {
|
|
333
273
|
env,
|
|
@@ -382,7 +322,7 @@ async function waitForZeroCache(config, timeoutMs = 120000) {
|
|
|
382
322
|
catch {
|
|
383
323
|
// not ready yet
|
|
384
324
|
}
|
|
385
|
-
await new Promise((r) => setTimeout(r,
|
|
325
|
+
await new Promise((r) => setTimeout(r, 42));
|
|
386
326
|
}
|
|
387
327
|
log.zero('health check timed out, continuing anyway');
|
|
388
328
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orez",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.46",
|
|
4
4
|
"description": "PGlite-powered zero-sync development backend. No Docker required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@electric-sql/pglite": "^0.2.17",
|
|
47
47
|
"@electric-sql/pglite-tools": "0.2.4",
|
|
48
48
|
"@rocicorp/zero": ">=0.1.0",
|
|
49
|
-
"bedrock-sqlite": "0.0.
|
|
49
|
+
"bedrock-sqlite": "0.0.39",
|
|
50
50
|
"citty": "^0.2.0",
|
|
51
51
|
"postgres": "^3.4.5",
|
|
52
52
|
"pgsql-parser": "^17.9.11"
|
package/src/index.ts
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
import { spawn, type ChildProcess } from 'node:child_process'
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs'
|
|
11
11
|
import { createRequire } from 'node:module'
|
|
12
|
+
import { totalmem } from 'node:os'
|
|
12
13
|
import { dirname, resolve } from 'node:path'
|
|
14
|
+
import { fileURLToPath } from 'node:url'
|
|
13
15
|
|
|
14
16
|
import { getConfig, getConnectionString } from './config.js'
|
|
15
17
|
import { log, port, setLogLevel } from './log.js'
|
|
@@ -123,8 +125,8 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
123
125
|
await installChangeTracking(db)
|
|
124
126
|
}
|
|
125
127
|
|
|
126
|
-
// clean up stale
|
|
127
|
-
|
|
128
|
+
// clean up stale lock files from previous crash (keep replica for fast restart)
|
|
129
|
+
cleanupStaleLockFiles(config)
|
|
128
130
|
|
|
129
131
|
// start zero-cache
|
|
130
132
|
let zeroCacheProcess: ChildProcess | null = null
|
|
@@ -166,17 +168,18 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
166
168
|
return { config, stop, db, instances, pgPort: config.pgPort, zeroPort: config.zeroPort }
|
|
167
169
|
}
|
|
168
170
|
|
|
169
|
-
function
|
|
171
|
+
function cleanupStaleLockFiles(config: ZeroLiteConfig): void {
|
|
170
172
|
const replicaPath = resolve(config.dataDir, 'zero-replica.db')
|
|
171
|
-
// delete
|
|
172
|
-
// the replica
|
|
173
|
-
|
|
173
|
+
// only delete lock/wal files that prevent zero-cache from starting after a crash.
|
|
174
|
+
// keep the replica db itself — zero-cache catches up via replication, which is
|
|
175
|
+
// nearly instant vs a full initial sync (COPY of all tables). if the replica is
|
|
176
|
+
// too stale, ZERO_AUTO_RESET=true makes zero-cache wipe and resync automatically.
|
|
177
|
+
for (const suffix of ['-wal', '-shm', '-wal2']) {
|
|
174
178
|
const file = replicaPath + suffix
|
|
175
179
|
try {
|
|
176
180
|
if (existsSync(file)) {
|
|
177
181
|
unlinkSync(file)
|
|
178
|
-
|
|
179
|
-
else log.debug.orez('cleaned up stale replica (will re-sync)')
|
|
182
|
+
log.debug.orez(`cleaned up stale ${suffix} file`)
|
|
180
183
|
}
|
|
181
184
|
} catch {
|
|
182
185
|
// ignore
|
|
@@ -216,11 +219,8 @@ async function seedIfNeeded(db: PGlite, config: ZeroLiteConfig): Promise<void> {
|
|
|
216
219
|
log.orez('seeded')
|
|
217
220
|
}
|
|
218
221
|
|
|
219
|
-
// write
|
|
220
|
-
//
|
|
221
|
-
// 2. hooks.mjs — ESM loader hook that resolves @rocicorp/zero-sqlite3 → shim
|
|
222
|
-
// 3. register.mjs — --import entrypoint that registers the hook
|
|
223
|
-
// uses node's module.register() API for ESM resolution interception.
|
|
222
|
+
// write esm loader hooks to tmpdir that intercept @rocicorp/zero-sqlite3
|
|
223
|
+
// and redirect to bedrock-sqlite wasm. templates live in src/shim/.
|
|
224
224
|
// returns the path to register.mjs (passed via --import in NODE_OPTIONS).
|
|
225
225
|
function writeSqliteShim(): string {
|
|
226
226
|
const tmp = process.env.TMPDIR || process.env.TEMP || '/tmp'
|
|
@@ -228,80 +228,17 @@ function writeSqliteShim(): string {
|
|
|
228
228
|
mkdirSync(dir, { recursive: true })
|
|
229
229
|
|
|
230
230
|
const bedrockEntry = resolvePackage('bedrock-sqlite')
|
|
231
|
+
const shimDir = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'src', 'shim')
|
|
231
232
|
|
|
232
|
-
// ESM loader hooks — resolve + load @rocicorp/zero-sqlite3 as our shim.
|
|
233
|
-
// uses a load hook to inline the shim source so we control the format.
|
|
234
233
|
const hooksPath = resolve(dir, 'hooks.mjs')
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
`const SHIM_URL = 'orez-sqlite-shim://shim';
|
|
238
|
-
const BEDROCK_PATH = '${bedrockEntry}';
|
|
239
|
-
|
|
240
|
-
export function resolve(specifier, context, nextResolve) {
|
|
241
|
-
if (specifier === '@rocicorp/zero-sqlite3' || specifier.startsWith('@rocicorp/zero-sqlite3/')) {
|
|
242
|
-
return { url: SHIM_URL, shortCircuit: true };
|
|
243
|
-
}
|
|
244
|
-
return nextResolve(specifier, context);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
export function load(url, context, nextLoad) {
|
|
248
|
-
if (url === SHIM_URL) {
|
|
249
|
-
return {
|
|
250
|
-
format: 'module',
|
|
251
|
-
shortCircuit: true,
|
|
252
|
-
source: \`
|
|
253
|
-
import { createRequire } from 'node:module';
|
|
254
|
-
const require = createRequire('\${BEDROCK_PATH}');
|
|
255
|
-
const mod = require('\${BEDROCK_PATH}');
|
|
256
|
-
const OrigDatabase = mod.Database;
|
|
257
|
-
const SqliteError = mod.SqliteError;
|
|
258
|
-
function Database(...args) {
|
|
259
|
-
const db = new OrigDatabase(...args);
|
|
260
|
-
try { db.pragma('busy_timeout = 30000'); db.pragma('synchronous = normal'); } catch(e) {}
|
|
261
|
-
return db;
|
|
262
|
-
}
|
|
263
|
-
Database.prototype = OrigDatabase.prototype;
|
|
264
|
-
Database.prototype.constructor = Database;
|
|
265
|
-
Object.keys(OrigDatabase).forEach(k => { Database[k] = OrigDatabase[k]; });
|
|
266
|
-
Database.prototype.unsafeMode = function() { return this; };
|
|
267
|
-
if (!Database.prototype.defaultSafeIntegers) Database.prototype.defaultSafeIntegers = function() { return this; };
|
|
268
|
-
if (!Database.prototype.serialize) Database.prototype.serialize = function() { throw new Error('not supported in wasm'); };
|
|
269
|
-
if (!Database.prototype.backup) Database.prototype.backup = function() { throw new Error('not supported in wasm'); };
|
|
270
|
-
const tmpDb = new OrigDatabase(':memory:');
|
|
271
|
-
const tmpStmt = tmpDb.prepare('SELECT 1');
|
|
272
|
-
const SP = Object.getPrototypeOf(tmpStmt);
|
|
273
|
-
if (!SP.safeIntegers) SP.safeIntegers = function() { return this; };
|
|
274
|
-
SP.scanStatus = function() { return undefined; };
|
|
275
|
-
SP.scanStatusV2 = function() { return []; };
|
|
276
|
-
SP.scanStatusReset = function() {};
|
|
277
|
-
tmpDb.close();
|
|
278
|
-
Database.SQLITE_SCANSTAT_NLOOP = 0;
|
|
279
|
-
Database.SQLITE_SCANSTAT_NVISIT = 1;
|
|
280
|
-
Database.SQLITE_SCANSTAT_EST = 2;
|
|
281
|
-
Database.SQLITE_SCANSTAT_NAME = 3;
|
|
282
|
-
Database.SQLITE_SCANSTAT_EXPLAIN = 4;
|
|
283
|
-
Database.SQLITE_SCANSTAT_SELECTID = 5;
|
|
284
|
-
Database.SQLITE_SCANSTAT_PARENTID = 6;
|
|
285
|
-
Database.SQLITE_SCANSTAT_NCYCLE = 7;
|
|
286
|
-
Database.SQLITE_SCANSTAT_COMPLEX = 8;
|
|
287
|
-
export default Database;
|
|
288
|
-
export { SqliteError };
|
|
289
|
-
\`
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
return nextLoad(url, context);
|
|
293
|
-
}
|
|
294
|
-
`
|
|
295
|
-
)
|
|
234
|
+
const hooksTemplate = readFileSync(resolve(shimDir, 'hooks.mjs'), 'utf-8')
|
|
235
|
+
writeFileSync(hooksPath, hooksTemplate.replace(/__BEDROCK_PATH__/g, bedrockEntry))
|
|
296
236
|
|
|
297
|
-
// register entrypoint — passed via --import
|
|
298
237
|
const registerPath = resolve(dir, 'register.mjs')
|
|
299
|
-
const
|
|
238
|
+
const registerTemplate = readFileSync(resolve(shimDir, 'register.mjs'), 'utf-8')
|
|
300
239
|
writeFileSync(
|
|
301
240
|
registerPath,
|
|
302
|
-
`
|
|
303
|
-
register('${hooksUrl}', import.meta.url);
|
|
304
|
-
`
|
|
241
|
+
registerTemplate.replace(/__HOOKS_URL__/g, `file://${hooksPath}`)
|
|
305
242
|
)
|
|
306
243
|
|
|
307
244
|
return registerPath
|
|
@@ -360,16 +297,20 @@ async function startZeroCache(config: ZeroLiteConfig): Promise<ChildProcess> {
|
|
|
360
297
|
throw new Error('zero-cache cli.js not found. install @rocicorp/zero')
|
|
361
298
|
}
|
|
362
299
|
|
|
300
|
+
// calculate heap size: ~25% of system memory, min 4gb
|
|
301
|
+
const memMB = Math.round(totalmem() / 1024 / 1024)
|
|
302
|
+
const heapMB = Math.max(4096, Math.round(memMB * 0.25))
|
|
303
|
+
const existing = process.env.NODE_OPTIONS || ''
|
|
304
|
+
|
|
363
305
|
// wasm sqlite: write shim + ESM loader to tmpdir, pass --import to intercept
|
|
364
306
|
// @rocicorp/zero-sqlite3 resolution with our bedrock-sqlite wasm build
|
|
365
307
|
if (!config.disableWasmSqlite) {
|
|
366
308
|
const registerPath = writeSqliteShim()
|
|
367
309
|
const registerUrl = `file://${registerPath}`
|
|
368
|
-
|
|
369
|
-
|
|
310
|
+
env.NODE_OPTIONS =
|
|
311
|
+
`--import ${registerUrl} --max-old-space-size=${heapMB} ${existing}`.trim()
|
|
370
312
|
} else {
|
|
371
|
-
|
|
372
|
-
if (existing) env.NODE_OPTIONS = existing
|
|
313
|
+
env.NODE_OPTIONS = `--max-old-space-size=${heapMB} ${existing}`.trim()
|
|
373
314
|
}
|
|
374
315
|
|
|
375
316
|
const child = spawn(zeroCacheBin, [], {
|
|
@@ -432,7 +373,7 @@ async function waitForZeroCache(
|
|
|
432
373
|
} catch {
|
|
433
374
|
// not ready yet
|
|
434
375
|
}
|
|
435
|
-
await new Promise((r) => setTimeout(r,
|
|
376
|
+
await new Promise((r) => setTimeout(r, 42))
|
|
436
377
|
}
|
|
437
378
|
|
|
438
379
|
log.zero('health check timed out, continuing anyway')
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// esm loader hooks — intercept @rocicorp/zero-sqlite3 with bedrock-sqlite wasm.
|
|
2
|
+
// __BEDROCK_PATH__ is replaced at runtime by orez before writing to tmpdir.
|
|
3
|
+
|
|
4
|
+
const SHIM_URL = 'orez-sqlite-shim://shim'
|
|
5
|
+
const BEDROCK_PATH = '__BEDROCK_PATH__'
|
|
6
|
+
|
|
7
|
+
export function resolve(specifier, context, nextResolve) {
|
|
8
|
+
if (
|
|
9
|
+
specifier === '@rocicorp/zero-sqlite3' ||
|
|
10
|
+
specifier.startsWith('@rocicorp/zero-sqlite3/')
|
|
11
|
+
) {
|
|
12
|
+
return { url: SHIM_URL, shortCircuit: true }
|
|
13
|
+
}
|
|
14
|
+
return nextResolve(specifier, context)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function load(url, context, nextLoad) {
|
|
18
|
+
if (url === SHIM_URL) {
|
|
19
|
+
return {
|
|
20
|
+
format: 'module',
|
|
21
|
+
shortCircuit: true,
|
|
22
|
+
source: `
|
|
23
|
+
import { createRequire } from 'node:module';
|
|
24
|
+
const require = createRequire('${BEDROCK_PATH}');
|
|
25
|
+
const mod = require('${BEDROCK_PATH}');
|
|
26
|
+
const OrigDatabase = mod.Database;
|
|
27
|
+
const SqliteError = mod.SqliteError;
|
|
28
|
+
function Database(...args) {
|
|
29
|
+
const db = new OrigDatabase(...args);
|
|
30
|
+
try { db.pragma('busy_timeout = 30000'); db.pragma('synchronous = normal'); } catch(e) {}
|
|
31
|
+
return db;
|
|
32
|
+
}
|
|
33
|
+
Database.prototype = OrigDatabase.prototype;
|
|
34
|
+
Database.prototype.constructor = Database;
|
|
35
|
+
Object.keys(OrigDatabase).forEach(k => { Database[k] = OrigDatabase[k]; });
|
|
36
|
+
Database.prototype.unsafeMode = function() { return this; };
|
|
37
|
+
if (!Database.prototype.defaultSafeIntegers) Database.prototype.defaultSafeIntegers = function() { return this; };
|
|
38
|
+
if (!Database.prototype.serialize) Database.prototype.serialize = function() { throw new Error('not supported in wasm'); };
|
|
39
|
+
if (!Database.prototype.backup) Database.prototype.backup = function() { throw new Error('not supported in wasm'); };
|
|
40
|
+
const tmpDb = new OrigDatabase(':memory:');
|
|
41
|
+
const tmpStmt = tmpDb.prepare('SELECT 1');
|
|
42
|
+
const SP = Object.getPrototypeOf(tmpStmt);
|
|
43
|
+
if (!SP.safeIntegers) SP.safeIntegers = function() { return this; };
|
|
44
|
+
SP.scanStatus = function() { return undefined; };
|
|
45
|
+
SP.scanStatusV2 = function() { return []; };
|
|
46
|
+
SP.scanStatusReset = function() {};
|
|
47
|
+
tmpDb.close();
|
|
48
|
+
Database.SQLITE_SCANSTAT_NLOOP = 0;
|
|
49
|
+
Database.SQLITE_SCANSTAT_NVISIT = 1;
|
|
50
|
+
Database.SQLITE_SCANSTAT_EST = 2;
|
|
51
|
+
Database.SQLITE_SCANSTAT_NAME = 3;
|
|
52
|
+
Database.SQLITE_SCANSTAT_EXPLAIN = 4;
|
|
53
|
+
Database.SQLITE_SCANSTAT_SELECTID = 5;
|
|
54
|
+
Database.SQLITE_SCANSTAT_PARENTID = 6;
|
|
55
|
+
Database.SQLITE_SCANSTAT_NCYCLE = 7;
|
|
56
|
+
Database.SQLITE_SCANSTAT_COMPLEX = 8;
|
|
57
|
+
export default Database;
|
|
58
|
+
export { SqliteError };
|
|
59
|
+
`,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return nextLoad(url, context)
|
|
63
|
+
}
|