orez 0.2.20 → 0.2.25
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/browser.d.ts +5 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -0
- package/dist/browser.js.map +1 -1
- package/dist/cf-do/test-protocol.d.ts +11 -0
- package/dist/cf-do/test-protocol.d.ts.map +1 -0
- package/dist/cf-do/test-protocol.js +137 -0
- package/dist/cf-do/test-protocol.js.map +1 -0
- package/dist/cf-do/worker.d.ts +65 -0
- package/dist/cf-do/worker.d.ts.map +1 -0
- package/dist/cf-do/worker.js +440 -0
- package/dist/cf-do/worker.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +60 -28
- package/dist/index.js.map +1 -1
- package/dist/pg-proxy-do-backend.d.ts +49 -0
- package/dist/pg-proxy-do-backend.d.ts.map +1 -0
- package/dist/pg-proxy-do-backend.js +713 -0
- package/dist/pg-proxy-do-backend.js.map +1 -0
- package/dist/pglite-ipc.d.ts +3 -0
- package/dist/pglite-ipc.d.ts.map +1 -1
- package/dist/pglite-ipc.js +34 -12
- package/dist/pglite-ipc.js.map +1 -1
- package/dist/pglite-web-proxy.d.ts +3 -0
- package/dist/pglite-web-proxy.d.ts.map +1 -1
- package/dist/pglite-web-proxy.js +50 -7
- package/dist/pglite-web-proxy.js.map +1 -1
- package/dist/query-rewrites.d.ts +2 -0
- package/dist/query-rewrites.d.ts.map +1 -0
- package/dist/query-rewrites.js +140 -0
- package/dist/query-rewrites.js.map +1 -0
- package/dist/worker/browser-admin.d.ts +13 -0
- package/dist/worker/browser-admin.d.ts.map +1 -0
- package/dist/worker/browser-admin.js +33 -0
- package/dist/worker/browser-admin.js.map +1 -0
- package/dist/worker/browser-embed.d.ts +12 -12
- package/dist/worker/browser-embed.d.ts.map +1 -1
- package/dist/worker/browser-embed.js +7 -0
- package/dist/worker/browser-embed.js.map +1 -1
- package/package.json +2 -2
- package/src/browser.ts +7 -0
- package/src/config.ts +5 -0
- package/src/index.ts +66 -33
- package/src/pg-proxy-do-backend.ts +840 -0
- package/src/pglite-ipc.test.ts +17 -0
- package/src/pglite-ipc.ts +31 -12
- package/src/pglite-web-proxy.test.ts +57 -0
- package/src/pglite-web-proxy.ts +48 -7
- package/src/query-rewrites.test.ts +30 -0
- package/src/query-rewrites.ts +152 -0
- package/src/worker/browser-admin.ts +52 -0
- package/src/worker/browser-embed-admin.test.ts +75 -0
- package/src/worker/browser-embed.ts +21 -12
|
@@ -32,11 +32,13 @@ import EventEmitter from 'node:events';
|
|
|
32
32
|
// static import so the bundler can follow the dependency tree.
|
|
33
33
|
// @ts-expect-error — internal zero-cache module, no type declarations
|
|
34
34
|
import { runWorker as _runWorker } from '@rocicorp/zero/out/zero-cache/src/server/runner/run-worker.js';
|
|
35
|
+
import { handleDisabledBrowserAdminRequest } from './browser-admin.js';
|
|
35
36
|
const runWorkerFn = _runWorker;
|
|
36
37
|
export async function startZeroCacheEmbedBrowser(opts) {
|
|
37
38
|
const appId = opts.appId || 'zero';
|
|
38
39
|
const publications = opts.publications?.join(',') || `orez_${appId}_public`;
|
|
39
40
|
const readyTimeout = opts.readyTimeout ?? 30000;
|
|
41
|
+
const disableAdminApi = opts.disableAdminApi ?? true;
|
|
40
42
|
// set up sqlite storage from sql.js or in-memory
|
|
41
43
|
if (opts.sqlite) {
|
|
42
44
|
// consumer provided a sql.js Database — create adapter
|
|
@@ -196,6 +198,11 @@ export async function startZeroCacheEmbedBrowser(opts) {
|
|
|
196
198
|
}
|
|
197
199
|
},
|
|
198
200
|
async handleHttp(request) {
|
|
201
|
+
if (disableAdminApi) {
|
|
202
|
+
const adminResponse = handleDisabledBrowserAdminRequest(request);
|
|
203
|
+
if (adminResponse)
|
|
204
|
+
return adminResponse;
|
|
205
|
+
}
|
|
199
206
|
if (!isReady || !fastifyInstance?.inject) {
|
|
200
207
|
return { status: 503, headers: {}, body: 'not ready' };
|
|
201
208
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-embed.js","sourceRoot":"","sources":["../../src/worker/browser-embed.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,sEAAsE;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,YAAY,MAAM,aAAa,CAAA;AAEtC,+DAA+D;AAC/D,sEAAsE;AACtE,OAAO,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,+DAA+D,CAAA;
|
|
1
|
+
{"version":3,"file":"browser-embed.js","sourceRoot":"","sources":["../../src/worker/browser-embed.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orez",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.25",
|
|
4
4
|
"description": "PGlite-powered zero-sync development backend. No Docker required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"dependencies": {
|
|
80
80
|
"@electric-sql/pglite": "0.4.1",
|
|
81
81
|
"@electric-sql/pglite-tools": "^0.3.1",
|
|
82
|
-
"bedrock-sqlite": "0.2.
|
|
82
|
+
"bedrock-sqlite": "0.2.25",
|
|
83
83
|
"citty": "^0.2.0",
|
|
84
84
|
"pg-gateway": "0.3.0-beta.4",
|
|
85
85
|
"pgsql-parser": "^17.9.11",
|
package/src/browser.ts
CHANGED
|
@@ -35,6 +35,12 @@ export interface OrezBrowserConfig {
|
|
|
35
35
|
|
|
36
36
|
/** log level */
|
|
37
37
|
logLevel?: string
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* intercept browser-mode orez admin routes before they reach zero-cache.
|
|
41
|
+
* default: true.
|
|
42
|
+
*/
|
|
43
|
+
disableAdminApi?: boolean
|
|
38
44
|
}
|
|
39
45
|
|
|
40
46
|
export interface OrezBrowserInstance {
|
|
@@ -157,6 +163,7 @@ export async function startOrezBrowser(
|
|
|
157
163
|
pglite: pgPostgres as unknown as PGlite,
|
|
158
164
|
appId,
|
|
159
165
|
publications: config.publications,
|
|
166
|
+
disableAdminApi: config.disableAdminApi ?? true,
|
|
160
167
|
env: {
|
|
161
168
|
ZERO_LOG_LEVEL: config.logLevel || 'info',
|
|
162
169
|
},
|
package/src/config.ts
CHANGED
|
@@ -30,6 +30,8 @@ export interface ZeroLiteConfig {
|
|
|
30
30
|
// storage controls
|
|
31
31
|
checkpointIntervalMs: number // WAL checkpoint interval (default: 5min)
|
|
32
32
|
maxLogFileSize: number // log rotation threshold in bytes (default: 2MB)
|
|
33
|
+
/** DO backend URL — replaces PGlite with Durable Object SQLite */
|
|
34
|
+
doBackendUrl?: string
|
|
33
35
|
disableDiskLogs: boolean // skip writing logs to disk (default: false)
|
|
34
36
|
// lifecycle hooks
|
|
35
37
|
onDbReady?: Hook // after db+proxy ready, before zero-cache
|
|
@@ -103,6 +105,8 @@ export interface OrezConfig {
|
|
|
103
105
|
maxLogFileSize?: number
|
|
104
106
|
/** disable writing logs to disk (default: false) */
|
|
105
107
|
disableDiskLogs?: boolean
|
|
108
|
+
/** DO backend URL — replaces PGlite with Durable Object SQLite */
|
|
109
|
+
doBackendUrl?: string
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
/** type-safe helper for orez.config.ts */
|
|
@@ -135,6 +139,7 @@ export function getConfig(overrides: Partial<ZeroLiteConfig> = {}): ZeroLiteConf
|
|
|
135
139
|
checkpointIntervalMs: overrides.checkpointIntervalMs ?? 5 * 60 * 1000,
|
|
136
140
|
maxLogFileSize: overrides.maxLogFileSize ?? 2 * 1024 * 1024,
|
|
137
141
|
disableDiskLogs: overrides.disableDiskLogs ?? false,
|
|
142
|
+
doBackendUrl: overrides.doBackendUrl,
|
|
138
143
|
onDbReady: overrides.onDbReady,
|
|
139
144
|
onHealthy: overrides.onHealthy,
|
|
140
145
|
}
|
package/src/index.ts
CHANGED
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
} from './child-process.js'
|
|
25
25
|
import { getConfig, getConnectionString } from './config.js'
|
|
26
26
|
import { log, port, setLogLevel, setLogStore } from './log.js'
|
|
27
|
+
import { DoBackend } from './pg-proxy-do-backend.js'
|
|
27
28
|
import { startPgProxy } from './pg-proxy.js'
|
|
28
29
|
import {
|
|
29
30
|
createPGliteInstances,
|
|
@@ -319,22 +320,59 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
319
320
|
// single-db mode uses one instance for all databases (lighter for constrained envs).
|
|
320
321
|
// otherwise, separate instances for postgres, zero_cvr, zero_cdb with optional
|
|
321
322
|
// worker threads for non-blocking WASM execution.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
: ()
|
|
336
|
-
|
|
337
|
-
|
|
323
|
+
|
|
324
|
+
// ── DO backend path (replaces PGlite) ──────────────────────────────
|
|
325
|
+
let instances: any, db: any, stopCheckpoint: any
|
|
326
|
+
let migrationsApplied = 0
|
|
327
|
+
let isDoBackend = false
|
|
328
|
+
|
|
329
|
+
if (config.doBackendUrl) {
|
|
330
|
+
isDoBackend = true
|
|
331
|
+
log.orez(`using DO backend: ${config.doBackendUrl}`)
|
|
332
|
+
const backendUrl = config.doBackendUrl.replace(/\/+$/, '')
|
|
333
|
+
const doInstances = {
|
|
334
|
+
postgres: new DoBackend(backendUrl, 'postgres'),
|
|
335
|
+
cvr: new DoBackend(backendUrl, 'zero_cvr'),
|
|
336
|
+
cdb: new DoBackend(backendUrl, 'zero_cdb'),
|
|
337
|
+
postgresReplicas: [],
|
|
338
|
+
}
|
|
339
|
+
await Promise.all([
|
|
340
|
+
doInstances.postgres.waitReady,
|
|
341
|
+
doInstances.cvr.waitReady,
|
|
342
|
+
doInstances.cdb.waitReady,
|
|
343
|
+
])
|
|
344
|
+
instances = doInstances
|
|
345
|
+
db = doInstances.postgres
|
|
346
|
+
stopCheckpoint = () => {}
|
|
347
|
+
} else {
|
|
348
|
+
// ── PGlite backend (default) ────────────────────────────────────────────
|
|
349
|
+
instances = config.singleDb
|
|
350
|
+
? config.useWorkerThreads
|
|
351
|
+
? await createSinglePGliteWorkerInstance(config)
|
|
352
|
+
: await createSinglePGliteInstance(config)
|
|
353
|
+
: config.useWorkerThreads
|
|
354
|
+
? await createPGliteWorkerInstances(config)
|
|
355
|
+
: await createPGliteInstances(config)
|
|
356
|
+
db = instances.postgres
|
|
357
|
+
|
|
358
|
+
// periodic WAL checkpoint
|
|
359
|
+
stopCheckpoint =
|
|
360
|
+
config.checkpointIntervalMs > 0
|
|
361
|
+
? startPeriodicCheckpoint(instances, config.checkpointIntervalMs)
|
|
362
|
+
: () => {}
|
|
363
|
+
|
|
364
|
+
// config-based publications
|
|
365
|
+
if (config.zeroPublications && !process.env.ZERO_APP_PUBLICATIONS) {
|
|
366
|
+
process.env.ZERO_APP_PUBLICATIONS = config.zeroPublications
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// run migrations & change tracking
|
|
370
|
+
migrationsApplied = await runMigrations(db, config)
|
|
371
|
+
log.debug.orez('installing change tracking')
|
|
372
|
+
await installChangeTracking(db)
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// shared: publications config
|
|
338
376
|
if (config.zeroPublications && !process.env.ZERO_APP_PUBLICATIONS) {
|
|
339
377
|
process.env.ZERO_APP_PUBLICATIONS = config.zeroPublications
|
|
340
378
|
}
|
|
@@ -343,13 +381,10 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
343
381
|
log.debug.orez(`using managed publication: ${managedPub.names.join(', ')}`)
|
|
344
382
|
}
|
|
345
383
|
|
|
346
|
-
//
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
// install change tracking (on postgres instance only)
|
|
351
|
-
log.debug.orez('installing change tracking')
|
|
352
|
-
await installChangeTracking(db)
|
|
384
|
+
// PGlite-only: sync publications
|
|
385
|
+
if (!isDoBackend) {
|
|
386
|
+
await syncManagedPublications(db, managedPub.names, managedPub.managedByOrez)
|
|
387
|
+
}
|
|
353
388
|
|
|
354
389
|
// start tcp proxy (routes connections to correct instance by database name)
|
|
355
390
|
const pgServer = await startPgProxy(instances, config)
|
|
@@ -375,15 +410,13 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
375
410
|
OREZ_PG_PORT: String(config.pgPort),
|
|
376
411
|
})
|
|
377
412
|
|
|
378
|
-
// re-sync publication membership
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
log.debug.orez('re-installing change tracking after on-db-ready')
|
|
386
|
-
await installChangeTracking(db)
|
|
413
|
+
// re-sync publication membership (PGlite-only)
|
|
414
|
+
if (!isDoBackend) {
|
|
415
|
+
await syncManagedPublications(db, managedPub.names, managedPub.managedByOrez)
|
|
416
|
+
await ensurePublicationHasTables(db, managedPub.names)
|
|
417
|
+
log.debug.orez('re-installing change tracking after on-db-ready')
|
|
418
|
+
await installChangeTracking(db)
|
|
419
|
+
}
|
|
387
420
|
}
|
|
388
421
|
|
|
389
422
|
// write the ready marker so external orchestrators (e.g. CI scripts that
|
|
@@ -624,7 +657,7 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
624
657
|
|
|
625
658
|
// remove stale zero shard schemas from upstream; these can outlive CVR/CDB
|
|
626
659
|
// and cause dispatcher errors after full reset.
|
|
627
|
-
const shardSchemas = await db.query
|
|
660
|
+
const shardSchemas = await db.query(
|
|
628
661
|
`SELECT DISTINCT schemaname
|
|
629
662
|
FROM pg_tables
|
|
630
663
|
WHERE tablename IN ('clients', 'replicas', 'mutations')
|