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.
Files changed (54) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +6 -56
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +0 -5
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +0 -5
  7. package/dist/config.js.map +1 -1
  8. package/dist/index.d.ts +0 -9
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +91 -280
  11. package/dist/index.js.map +1 -1
  12. package/dist/log.d.ts +0 -9
  13. package/dist/log.d.ts.map +1 -1
  14. package/dist/log.js +1 -24
  15. package/dist/log.js.map +1 -1
  16. package/dist/mutex.d.ts.map +1 -1
  17. package/dist/mutex.js +2 -13
  18. package/dist/mutex.js.map +1 -1
  19. package/dist/pg-proxy.d.ts +2 -3
  20. package/dist/pg-proxy.d.ts.map +1 -1
  21. package/dist/pg-proxy.js +167 -377
  22. package/dist/pg-proxy.js.map +1 -1
  23. package/dist/pglite-manager.d.ts +0 -1
  24. package/dist/pglite-manager.d.ts.map +1 -1
  25. package/dist/pglite-manager.js +2 -8
  26. package/dist/pglite-manager.js.map +1 -1
  27. package/dist/replication/change-tracker.d.ts +0 -5
  28. package/dist/replication/change-tracker.d.ts.map +1 -1
  29. package/dist/replication/change-tracker.js +1 -43
  30. package/dist/replication/change-tracker.js.map +1 -1
  31. package/dist/replication/handler.d.ts.map +1 -1
  32. package/dist/replication/handler.js +16 -20
  33. package/dist/replication/handler.js.map +1 -1
  34. package/dist/vite-plugin.d.ts +0 -3
  35. package/dist/vite-plugin.d.ts.map +1 -1
  36. package/dist/vite-plugin.js +0 -24
  37. package/dist/vite-plugin.js.map +1 -1
  38. package/package.json +5 -4
  39. package/src/cli.ts +18 -70
  40. package/src/config.ts +0 -10
  41. package/src/index.ts +92 -309
  42. package/src/integration/integration.test.ts +264 -133
  43. package/src/log.ts +1 -25
  44. package/src/mutex.ts +2 -12
  45. package/src/pg-proxy.ts +187 -451
  46. package/src/pglite-manager.ts +2 -9
  47. package/src/replication/change-tracker.test.ts +114 -0
  48. package/src/replication/change-tracker.ts +4 -54
  49. package/src/replication/handler.ts +16 -33
  50. package/src/replication/pgoutput-encoder.test.ts +16 -7
  51. package/src/replication/zero-compat.test.ts +84 -211
  52. package/src/shim/hooks.mjs +1 -1
  53. package/src/vite-plugin.ts +0 -28
  54. 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
- // (orez handles replication via its own change tracker, not publications)
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 (e.g. startchat.update_count()).
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) process.exit(0)
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: false,
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 startTime = Date.now()
791
- const { config, stop, logStore, zeroEnv, actions, httpLogStore } =
792
- await startZeroLite({
793
- pgPort: Number(args['pg-port']),
794
- zeroPort: Number(args['zero-port']),
795
- dataDir: args['data-dir'],
796
- migrationsDir: args.migrations,
797
- seedFile: args.seed,
798
- pgUser: args['pg-user'],
799
- pgPassword: args['pg-password'],
800
- skipZeroCache: args['skip-zero-cache'],
801
- disableWasmSqlite: args['disable-wasm-sqlite'],
802
- logLevel: (args['log-level'] as 'error' | 'warn' | 'info' | 'debug') || undefined,
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