orez 0.0.48 → 0.0.50
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/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -56
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +0 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -5
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -280
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +0 -9
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +1 -24
- package/dist/log.js.map +1 -1
- package/dist/mutex.d.ts.map +1 -1
- package/dist/mutex.js +2 -13
- package/dist/mutex.js.map +1 -1
- package/dist/pg-proxy.d.ts +2 -3
- package/dist/pg-proxy.d.ts.map +1 -1
- package/dist/pg-proxy.js +167 -377
- package/dist/pg-proxy.js.map +1 -1
- package/dist/pglite-manager.d.ts +0 -1
- package/dist/pglite-manager.d.ts.map +1 -1
- package/dist/pglite-manager.js +2 -8
- package/dist/pglite-manager.js.map +1 -1
- package/dist/replication/change-tracker.d.ts +0 -5
- package/dist/replication/change-tracker.d.ts.map +1 -1
- package/dist/replication/change-tracker.js +1 -43
- package/dist/replication/change-tracker.js.map +1 -1
- package/dist/replication/handler.d.ts.map +1 -1
- package/dist/replication/handler.js +16 -20
- package/dist/replication/handler.js.map +1 -1
- package/dist/vite-plugin.d.ts +0 -3
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.js +0 -24
- package/dist/vite-plugin.js.map +1 -1
- package/package.json +5 -4
- package/src/cli.ts +18 -70
- package/src/config.ts +0 -10
- package/src/index.ts +92 -309
- package/src/integration/integration.test.ts +264 -133
- package/src/log.ts +1 -25
- package/src/mutex.ts +2 -12
- package/src/pg-proxy.ts +187 -451
- package/src/pglite-manager.ts +2 -9
- package/src/replication/change-tracker.test.ts +114 -0
- package/src/replication/change-tracker.ts +4 -54
- package/src/replication/handler.ts +16 -33
- package/src/replication/pgoutput-encoder.test.ts +16 -7
- package/src/replication/zero-compat.test.ts +84 -211
- package/src/shim/hooks.mjs +1 -1
- package/src/vite-plugin.ts +0 -28
- package/src/wasm-sqlite.test.ts +1 -2
package/src/cli.ts
CHANGED
|
@@ -90,7 +90,6 @@ const pgDumpCommand = defineCommand({
|
|
|
90
90
|
} else {
|
|
91
91
|
process.stdout.write(sql)
|
|
92
92
|
}
|
|
93
|
-
process.exit(0)
|
|
94
93
|
} catch (err: any) {
|
|
95
94
|
if (err?.message?.includes('lock')) {
|
|
96
95
|
console.error(
|
|
@@ -155,8 +154,8 @@ function shouldSkipStatement(stmt: string): boolean {
|
|
|
155
154
|
}
|
|
156
155
|
|
|
157
156
|
// skip CREATE/ALTER/DROP PUBLICATION — pglite doesn't support wal_level=logical
|
|
158
|
-
// internally, so CREATE PUBLICATION errors and can roll back the transaction
|
|
159
|
-
//
|
|
157
|
+
// internally, so CREATE PUBLICATION errors and can roll back the transaction.
|
|
158
|
+
// orez handles replication via its own change tracker, not publications.
|
|
160
159
|
if (nodeType === 'CreatePublicationStmt' || nodeType === 'AlterPublicationStmt')
|
|
161
160
|
return true
|
|
162
161
|
if (nodeType === 'DropStmt' && node.removeType === 'OBJECT_PUBLICATION') return true
|
|
@@ -481,8 +480,7 @@ export async function execDumpFile(
|
|
|
481
480
|
|
|
482
481
|
// after restore, drop triggers whose backing functions no longer exist.
|
|
483
482
|
// this happens when a filtered dump includes triggers on public-schema tables
|
|
484
|
-
// that reference functions from excluded schemas
|
|
485
|
-
// the triggers survive TOC filtering because they're associated with public tables.
|
|
483
|
+
// that reference functions from excluded schemas.
|
|
486
484
|
async function cleanupBrokenTriggers(db: { exec: (q: string) => Promise<unknown> }) {
|
|
487
485
|
try {
|
|
488
486
|
const result = (await db.exec(`
|
|
@@ -667,7 +665,7 @@ const pgRestoreCommand = defineCommand({
|
|
|
667
665
|
clean: args.clean,
|
|
668
666
|
sqlFile,
|
|
669
667
|
})
|
|
670
|
-
if (restored)
|
|
668
|
+
if (restored) return
|
|
671
669
|
log.orez('wire protocol unavailable, falling back to direct PGlite')
|
|
672
670
|
} catch (err: any) {
|
|
673
671
|
// connected but restore failed — report error, don't fall back
|
|
@@ -681,7 +679,6 @@ const pgRestoreCommand = defineCommand({
|
|
|
681
679
|
clean: args.clean,
|
|
682
680
|
sqlFile,
|
|
683
681
|
})
|
|
684
|
-
process.exit(0)
|
|
685
682
|
},
|
|
686
683
|
})
|
|
687
684
|
|
|
@@ -748,12 +745,7 @@ const main = defineCommand({
|
|
|
748
745
|
'disable-wasm-sqlite': {
|
|
749
746
|
type: 'boolean',
|
|
750
747
|
description: 'use native @rocicorp/zero-sqlite3 instead of wasm bedrock-sqlite',
|
|
751
|
-
default:
|
|
752
|
-
},
|
|
753
|
-
'log-env': {
|
|
754
|
-
type: 'boolean',
|
|
755
|
-
description: 'log ZERO_* and related environment variables on startup',
|
|
756
|
-
default: false,
|
|
748
|
+
default: true,
|
|
757
749
|
},
|
|
758
750
|
'on-db-ready': {
|
|
759
751
|
type: 'string',
|
|
@@ -765,21 +757,6 @@ const main = defineCommand({
|
|
|
765
757
|
description: 'command to run once all services are healthy',
|
|
766
758
|
default: '',
|
|
767
759
|
},
|
|
768
|
-
admin: {
|
|
769
|
-
type: 'boolean',
|
|
770
|
-
description: 'start admin web ui',
|
|
771
|
-
default: false,
|
|
772
|
-
},
|
|
773
|
-
'admin-port': {
|
|
774
|
-
type: 'string',
|
|
775
|
-
description: 'admin ui port (default: auto)',
|
|
776
|
-
default: '0',
|
|
777
|
-
},
|
|
778
|
-
'admin-logs': {
|
|
779
|
-
type: 'boolean',
|
|
780
|
-
description: 'write logs to .orez/logs/ (default: true when --admin)',
|
|
781
|
-
default: true,
|
|
782
|
-
},
|
|
783
760
|
},
|
|
784
761
|
subCommands: {
|
|
785
762
|
s3: s3Command,
|
|
@@ -787,25 +764,19 @@ const main = defineCommand({
|
|
|
787
764
|
pg_restore: pgRestoreCommand,
|
|
788
765
|
},
|
|
789
766
|
async run({ args }) {
|
|
790
|
-
const
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
logEnv: args['log-env'],
|
|
804
|
-
onDbReady: args['on-db-ready'],
|
|
805
|
-
admin: args.admin,
|
|
806
|
-
adminPort: Number(args['admin-port']),
|
|
807
|
-
adminLogs: args['admin-logs'],
|
|
808
|
-
})
|
|
767
|
+
const { config, stop } = await startZeroLite({
|
|
768
|
+
pgPort: Number(args['pg-port']),
|
|
769
|
+
zeroPort: Number(args['zero-port']),
|
|
770
|
+
dataDir: args['data-dir'],
|
|
771
|
+
migrationsDir: args.migrations,
|
|
772
|
+
seedFile: args.seed,
|
|
773
|
+
pgUser: args['pg-user'],
|
|
774
|
+
pgPassword: args['pg-password'],
|
|
775
|
+
skipZeroCache: args['skip-zero-cache'],
|
|
776
|
+
disableWasmSqlite: args['disable-wasm-sqlite'],
|
|
777
|
+
logLevel: (args['log-level'] as 'error' | 'warn' | 'info' | 'debug') || undefined,
|
|
778
|
+
onDbReady: args['on-db-ready'],
|
|
779
|
+
})
|
|
809
780
|
|
|
810
781
|
let s3Server: import('node:http').Server | null = null
|
|
811
782
|
if (args.s3) {
|
|
@@ -816,27 +787,6 @@ const main = defineCommand({
|
|
|
816
787
|
})
|
|
817
788
|
}
|
|
818
789
|
|
|
819
|
-
let adminServer: import('node:http').Server | null = null
|
|
820
|
-
if (args.admin && logStore) {
|
|
821
|
-
const { findPort } = await import('./port.js')
|
|
822
|
-
const adminPort = Number(args['admin-port']) || config.zeroPort + 2
|
|
823
|
-
const resolvedPort = await findPort(adminPort)
|
|
824
|
-
const { startAdminServer } = await import('./admin/server.js')
|
|
825
|
-
adminServer = await startAdminServer({
|
|
826
|
-
port: resolvedPort,
|
|
827
|
-
logStore,
|
|
828
|
-
config,
|
|
829
|
-
zeroEnv,
|
|
830
|
-
actions,
|
|
831
|
-
startTime,
|
|
832
|
-
httpLog: httpLogStore || undefined,
|
|
833
|
-
})
|
|
834
|
-
log.orez(`admin: http://127.0.0.1:${resolvedPort}`)
|
|
835
|
-
if (args['admin-logs']) {
|
|
836
|
-
log.orez(`logs: ${resolve(args['data-dir'], 'logs', 'orez.log')}`)
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
|
|
840
790
|
log.orez('ready')
|
|
841
791
|
log.orez(
|
|
842
792
|
`pg: postgresql://${config.pgUser}:${config.pgPassword}@127.0.0.1:${config.pgPort}/postgres`
|
|
@@ -864,13 +814,11 @@ const main = defineCommand({
|
|
|
864
814
|
}
|
|
865
815
|
|
|
866
816
|
process.on('SIGINT', async () => {
|
|
867
|
-
adminServer?.close()
|
|
868
817
|
s3Server?.close()
|
|
869
818
|
await stop()
|
|
870
819
|
process.exit(0)
|
|
871
820
|
})
|
|
872
821
|
process.on('SIGTERM', async () => {
|
|
873
|
-
adminServer?.close()
|
|
874
822
|
s3Server?.close()
|
|
875
823
|
await stop()
|
|
876
824
|
process.exit(0)
|
package/src/config.ts
CHANGED
|
@@ -14,12 +14,7 @@ export interface ZeroLiteConfig {
|
|
|
14
14
|
disableWasmSqlite: boolean
|
|
15
15
|
logLevel: LogLevel
|
|
16
16
|
pgliteOptions: Partial<PGliteOptions>
|
|
17
|
-
logEnv: boolean
|
|
18
17
|
onDbReady: string
|
|
19
|
-
beforeZero: ((db: import('@electric-sql/pglite').PGlite) => Promise<void>) | null
|
|
20
|
-
admin: boolean
|
|
21
|
-
adminPort: number
|
|
22
|
-
adminLogs: boolean
|
|
23
18
|
}
|
|
24
19
|
|
|
25
20
|
export function getConfig(overrides: Partial<ZeroLiteConfig> = {}): ZeroLiteConfig {
|
|
@@ -35,12 +30,7 @@ export function getConfig(overrides: Partial<ZeroLiteConfig> = {}): ZeroLiteConf
|
|
|
35
30
|
disableWasmSqlite: overrides.disableWasmSqlite ?? false,
|
|
36
31
|
logLevel: overrides.logLevel || 'warn',
|
|
37
32
|
pgliteOptions: overrides.pgliteOptions || {},
|
|
38
|
-
logEnv: overrides.logEnv ?? false,
|
|
39
33
|
onDbReady: overrides.onDbReady || '',
|
|
40
|
-
beforeZero: overrides.beforeZero || null,
|
|
41
|
-
admin: overrides.admin ?? false,
|
|
42
|
-
adminPort: overrides.adminPort || 0,
|
|
43
|
-
adminLogs: overrides.adminLogs ?? true,
|
|
44
34
|
}
|
|
45
35
|
}
|
|
46
36
|
|