orez 0.2.24 → 0.2.26
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/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/watermark.d.ts +21 -0
- package/dist/cf-do/watermark.d.ts.map +1 -0
- package/dist/cf-do/watermark.js +93 -0
- package/dist/cf-do/watermark.js.map +1 -0
- package/dist/cf-do/worker.d.ts +91 -0
- package/dist/cf-do/worker.d.ts.map +1 -0
- package/dist/cf-do/worker.js +813 -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/do-sql-tracking.d.ts +6 -0
- package/dist/do-sql-tracking.d.ts.map +1 -0
- package/dist/do-sql-tracking.js +14 -0
- package/dist/do-sql-tracking.js.map +1 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +69 -23
- package/dist/index.js.map +1 -1
- package/dist/pg-proxy-browser.js +6 -6
- package/dist/pg-proxy-browser.js.map +1 -1
- package/dist/pg-proxy-do-backend.d.ts +128 -0
- package/dist/pg-proxy-do-backend.d.ts.map +1 -0
- package/dist/pg-proxy-do-backend.js +6292 -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/replication/change-tracker.d.ts.map +1 -1
- package/dist/replication/change-tracker.js +18 -1
- package/dist/replication/change-tracker.js.map +1 -1
- package/dist/replication/handler.d.ts.map +1 -1
- package/dist/replication/handler.js +7 -2
- package/dist/replication/handler.js.map +1 -1
- package/dist/replication/pgoutput-encoder.d.ts.map +1 -1
- package/dist/replication/pgoutput-encoder.js +72 -30
- package/dist/replication/pgoutput-encoder.js.map +1 -1
- package/dist/worker/browser-build-config.d.ts.map +1 -1
- package/dist/worker/browser-build-config.js +2 -1
- package/dist/worker/browser-build-config.js.map +1 -1
- package/dist/worker/cf-patches.d.ts +5 -2
- package/dist/worker/cf-patches.d.ts.map +1 -1
- package/dist/worker/cf-patches.js +238 -4
- package/dist/worker/cf-patches.js.map +1 -1
- package/dist/worker/shims/node-stub.d.ts +35 -0
- package/dist/worker/shims/node-stub.d.ts.map +1 -1
- package/dist/worker/shims/node-stub.js +53 -1
- package/dist/worker/shims/node-stub.js.map +1 -1
- package/dist/worker/shims/oxfmt.d.ts +4 -0
- package/dist/worker/shims/oxfmt.d.ts.map +1 -0
- package/dist/worker/shims/oxfmt.js +4 -0
- package/dist/worker/shims/oxfmt.js.map +1 -0
- package/dist/worker/shims/postgres-socket.js +1 -1
- package/dist/worker/shims/postgres-socket.js.map +1 -1
- package/dist/worker/shims/sqlite.d.ts +1 -0
- package/dist/worker/shims/sqlite.d.ts.map +1 -1
- package/dist/worker/shims/sqlite.js +229 -9
- package/dist/worker/shims/sqlite.js.map +1 -1
- package/dist/worker/shims/ws.d.ts.map +1 -1
- package/dist/worker/shims/ws.js +45 -0
- package/dist/worker/shims/ws.js.map +1 -1
- package/dist/worker/shims/zero-process-env.d.ts +2 -0
- package/dist/worker/shims/zero-process-env.d.ts.map +1 -0
- package/dist/worker/shims/zero-process-env.js +9 -0
- package/dist/worker/shims/zero-process-env.js.map +1 -0
- package/dist/worker/zero-cache-embed-cf.d.ts +29 -12
- package/dist/worker/zero-cache-embed-cf.d.ts.map +1 -1
- package/dist/worker/zero-cache-embed-cf.js +83 -14
- package/dist/worker/zero-cache-embed-cf.js.map +1 -1
- package/package.json +6 -2
- package/src/cf-do/.wrangler/cache/cf.json +1 -0
- package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm +0 -0
- package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/0f0f3bdf0abda097eb6f1246db4657d9fc622081362d894d82c1a1ce067b05b6.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/1ddd3a4a48a11b51658444f5458a1fb175194b1d5b6a5bda20ef3fe3205b900c.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/204a39120310d37e972c5914cfd71ad55c151bdb9e8ed289a5f8c5b052dd60e4.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/3835f242df9728adba3d127a238793fd054ed3e51df3f60749ee744c469bf2a2.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/4aa9c80eb716cf55b8995ccf7afab0b36c683e6da07d7c37a3f9c570136036df.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/533e2fd1d6ea46e7a9a0017916ef341802d438d72583462755f2c1f8225e9bf2.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/5ffa1aced1225ecaeac6366f7586aa3de92761cdff8711d81fbd81f248076abd.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/686c3a9f0d7e59ed2ab607efd4b76d779c97cafeb3818380033bf7c7eb86c819.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/6e8214e8dcfadd0deb52d64e5e9ca85c6b329ace11193909845995396914c473.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/78d9ec9ff873d3fe3507ff53c2a6f6dfc408b4268eb0db3f2a146c0678965366.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/7eff9f0ed7e27ad0d3f9d923de0682fab1928591172c1ba336c5f79a134a5d85.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/836cda5b995b25867d722ed4f4c2292167e80351a3c6038db626648eb247dd8b.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/91ef63b112209ab30172763acd8a0935106c248f7f1bcae5545ce37a9f201551.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/a66ea4293a5f5938bc6d116edfa2522bb85bc37aea3541fbc09c3b613b9b32c0.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/ceb2ab26b80590840b65651deb6e948d3bf81565c6751f3a58752cf4bf4aecae.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite-shm +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite-wal +0 -0
- package/src/cf-do/ARCHITECTURE.md +83 -0
- package/src/cf-do/watermark.test.ts +103 -0
- package/src/cf-do/watermark.ts +118 -0
- package/src/cf-do/worker.ts +1033 -0
- package/src/cf-do/wrangler.toml +11 -0
- package/src/config.ts +5 -0
- package/src/do-sql-tracking.test.ts +19 -0
- package/src/do-sql-tracking.ts +19 -0
- package/src/index.ts +76 -28
- package/src/pg-proxy-browser.ts +6 -6
- package/src/pg-proxy-do-backend.test.ts +3890 -0
- package/src/pg-proxy-do-backend.ts +7157 -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/replication/change-tracker.ts +16 -1
- package/src/replication/handler.test.ts +35 -0
- package/src/replication/handler.ts +7 -2
- package/src/replication/pgoutput-encoder.test.ts +71 -2
- package/src/replication/pgoutput-encoder.ts +65 -30
- package/src/worker/browser-build-config.test.ts +12 -0
- package/src/worker/browser-build-config.ts +2 -1
- package/src/worker/cf-patches.ts +274 -4
- package/src/worker/shims/node-stub.ts +53 -1
- package/src/worker/shims/oxfmt.ts +3 -0
- package/src/worker/shims/postgres-socket.ts +1 -1
- package/src/worker/shims/sqlite.test.ts +145 -0
- package/src/worker/shims/sqlite.ts +256 -9
- package/src/worker/shims/ws.ts +45 -0
- package/src/worker/shims/zero-process-env.ts +11 -0
- package/src/worker/zero-cache-embed-cf.ts +114 -18
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 ?? process.env.DO_BACKEND_URL,
|
|
138
143
|
onDbReady: overrides.onDbReady,
|
|
139
144
|
onHealthy: overrides.onHealthy,
|
|
140
145
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { trackedChangeRow } from './do-sql-tracking.js'
|
|
4
|
+
|
|
5
|
+
describe('trackedChangeRow', () => {
|
|
6
|
+
it('keeps only table columns and strips internal returning expressions', () => {
|
|
7
|
+
expect(
|
|
8
|
+
trackedChangeRow(
|
|
9
|
+
{
|
|
10
|
+
id: 't1',
|
|
11
|
+
body: 'hello',
|
|
12
|
+
__orez_returning_1: 'HELLO',
|
|
13
|
+
extra: 'client-visible only',
|
|
14
|
+
},
|
|
15
|
+
{ rowColumns: ['id', 'body'] }
|
|
16
|
+
)
|
|
17
|
+
).toEqual({ id: 't1', body: 'hello' })
|
|
18
|
+
})
|
|
19
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const RETURNING_INTERNAL_PREFIX = '__orez_returning_'
|
|
2
|
+
|
|
3
|
+
export interface TrackedRowFilter {
|
|
4
|
+
rowColumns?: string[]
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function trackedChangeRow(
|
|
8
|
+
row: Record<string, unknown>,
|
|
9
|
+
track: TrackedRowFilter
|
|
10
|
+
): Record<string, unknown> {
|
|
11
|
+
const allowed = track.rowColumns ? new Set(track.rowColumns) : null
|
|
12
|
+
const out: Record<string, unknown> = {}
|
|
13
|
+
for (const [key, value] of Object.entries(row)) {
|
|
14
|
+
if (key.startsWith(RETURNING_INTERNAL_PREFIX)) continue
|
|
15
|
+
if (allowed && !allowed.has(key)) continue
|
|
16
|
+
out[key] = value
|
|
17
|
+
}
|
|
18
|
+
return out
|
|
19
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { spawn, spawnSync, type ChildProcess } from 'node:child_process'
|
|
10
|
+
import { randomUUID } from 'node:crypto'
|
|
10
11
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs'
|
|
11
12
|
import { resolve } from 'node:path'
|
|
12
13
|
|
|
@@ -24,6 +25,7 @@ import {
|
|
|
24
25
|
} from './child-process.js'
|
|
25
26
|
import { getConfig, getConnectionString } from './config.js'
|
|
26
27
|
import { log, port, setLogLevel, setLogStore } from './log.js'
|
|
28
|
+
import { DoBackend } from './pg-proxy-do-backend.js'
|
|
27
29
|
import { startPgProxy } from './pg-proxy.js'
|
|
28
30
|
import {
|
|
29
31
|
createPGliteInstances,
|
|
@@ -60,6 +62,17 @@ import type { PGlite } from '@electric-sql/pglite'
|
|
|
60
62
|
|
|
61
63
|
type ZeroChildProcess = ChildProcess & { __orezTail?: string[] }
|
|
62
64
|
|
|
65
|
+
function ensureDoBackendNamespace(dataDir: string): string {
|
|
66
|
+
const marker = resolve(dataDir, 'do-backend-namespace')
|
|
67
|
+
if (existsSync(marker)) {
|
|
68
|
+
const existing = readFileSync(marker, 'utf8').trim()
|
|
69
|
+
if (existing) return existing
|
|
70
|
+
}
|
|
71
|
+
const next = randomUUID()
|
|
72
|
+
writeFileSync(marker, `${next}\n`)
|
|
73
|
+
return next
|
|
74
|
+
}
|
|
75
|
+
|
|
63
76
|
function resolveNodeBinary(): string {
|
|
64
77
|
const explicitNode = process.env.NODE
|
|
65
78
|
if (explicitNode && existsSync(explicitNode)) {
|
|
@@ -319,22 +332,60 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
319
332
|
// single-db mode uses one instance for all databases (lighter for constrained envs).
|
|
320
333
|
// otherwise, separate instances for postgres, zero_cvr, zero_cdb with optional
|
|
321
334
|
// worker threads for non-blocking WASM execution.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
: (
|
|
336
|
-
|
|
337
|
-
|
|
335
|
+
|
|
336
|
+
// ── DO backend path (replaces PGlite) ──────────────────────────────
|
|
337
|
+
let instances: any, db: any, stopCheckpoint: any
|
|
338
|
+
let migrationsApplied = 0
|
|
339
|
+
let isDoBackend = false
|
|
340
|
+
|
|
341
|
+
if (config.doBackendUrl) {
|
|
342
|
+
isDoBackend = true
|
|
343
|
+
log.orez(`using DO backend: ${config.doBackendUrl}`)
|
|
344
|
+
const backendUrl = config.doBackendUrl.replace(/\/+$/, '')
|
|
345
|
+
const doNamespace = ensureDoBackendNamespace(config.dataDir)
|
|
346
|
+
const doInstances = {
|
|
347
|
+
postgres: new DoBackend(backendUrl, 'postgres', doNamespace),
|
|
348
|
+
cvr: new DoBackend(backendUrl, 'zero_cvr', doNamespace),
|
|
349
|
+
cdb: new DoBackend(backendUrl, 'zero_cdb', doNamespace),
|
|
350
|
+
postgresReplicas: [],
|
|
351
|
+
}
|
|
352
|
+
await Promise.all([
|
|
353
|
+
doInstances.postgres.waitReady,
|
|
354
|
+
doInstances.cvr.waitReady,
|
|
355
|
+
doInstances.cdb.waitReady,
|
|
356
|
+
])
|
|
357
|
+
instances = doInstances
|
|
358
|
+
db = doInstances.postgres
|
|
359
|
+
stopCheckpoint = () => {}
|
|
360
|
+
} else {
|
|
361
|
+
// ── PGlite backend (default) ────────────────────────────────────────────
|
|
362
|
+
instances = config.singleDb
|
|
363
|
+
? config.useWorkerThreads
|
|
364
|
+
? await createSinglePGliteWorkerInstance(config)
|
|
365
|
+
: await createSinglePGliteInstance(config)
|
|
366
|
+
: config.useWorkerThreads
|
|
367
|
+
? await createPGliteWorkerInstances(config)
|
|
368
|
+
: await createPGliteInstances(config)
|
|
369
|
+
db = instances.postgres
|
|
370
|
+
|
|
371
|
+
// periodic WAL checkpoint
|
|
372
|
+
stopCheckpoint =
|
|
373
|
+
config.checkpointIntervalMs > 0
|
|
374
|
+
? startPeriodicCheckpoint(instances, config.checkpointIntervalMs)
|
|
375
|
+
: () => {}
|
|
376
|
+
|
|
377
|
+
// config-based publications
|
|
378
|
+
if (config.zeroPublications && !process.env.ZERO_APP_PUBLICATIONS) {
|
|
379
|
+
process.env.ZERO_APP_PUBLICATIONS = config.zeroPublications
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// run migrations & change tracking
|
|
383
|
+
migrationsApplied = await runMigrations(db, config)
|
|
384
|
+
log.debug.orez('installing change tracking')
|
|
385
|
+
await installChangeTracking(db)
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// shared: publications config
|
|
338
389
|
if (config.zeroPublications && !process.env.ZERO_APP_PUBLICATIONS) {
|
|
339
390
|
process.env.ZERO_APP_PUBLICATIONS = config.zeroPublications
|
|
340
391
|
}
|
|
@@ -343,14 +394,11 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
343
394
|
log.debug.orez(`using managed publication: ${managedPub.names.join(', ')}`)
|
|
344
395
|
}
|
|
345
396
|
|
|
346
|
-
//
|
|
347
|
-
|
|
397
|
+
// sync publications. for DO backend this goes through the TCP proxy, which
|
|
398
|
+
// rewrites the catalog queries and forwards CREATE PUBLICATION / ALTER PUBLICATION
|
|
399
|
+
// as no-ops or DO-native equivalents (PGlite still owns the real path).
|
|
348
400
|
await syncManagedPublications(db, managedPub.names, managedPub.managedByOrez)
|
|
349
401
|
|
|
350
|
-
// install change tracking (on postgres instance only)
|
|
351
|
-
log.debug.orez('installing change tracking')
|
|
352
|
-
await installChangeTracking(db)
|
|
353
|
-
|
|
354
402
|
// start tcp proxy (routes connections to correct instance by database name)
|
|
355
403
|
const pgServer = await startPgProxy(instances, config)
|
|
356
404
|
|
|
@@ -375,17 +423,17 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
375
423
|
OREZ_PG_PORT: String(config.pgPort),
|
|
376
424
|
})
|
|
377
425
|
|
|
378
|
-
// re-sync publication membership
|
|
379
|
-
// for orez-managed publications, add any new public tables.
|
|
380
|
-
// for user-managed publications, ensure the publication isn't empty
|
|
381
|
-
// (app migrations may have created the pub with tables, but if orez
|
|
382
|
-
// pre-created an empty pub, the migration may have skipped adding tables).
|
|
426
|
+
// re-sync publication membership
|
|
383
427
|
await syncManagedPublications(db, managedPub.names, managedPub.managedByOrez)
|
|
384
428
|
await ensurePublicationHasTables(db, managedPub.names)
|
|
385
429
|
log.debug.orez('re-installing change tracking after on-db-ready')
|
|
386
430
|
await installChangeTracking(db)
|
|
387
431
|
}
|
|
388
432
|
|
|
433
|
+
if (isDoBackend) {
|
|
434
|
+
await installChangeTracking(db)
|
|
435
|
+
}
|
|
436
|
+
|
|
389
437
|
// write the ready marker so external orchestrators (e.g. CI scripts that
|
|
390
438
|
// currently `wait:ports 6434`) can wait for orez to be fully initialized.
|
|
391
439
|
// important: the pg port is bound earlier (startPgProxy above) so that
|
|
@@ -624,7 +672,7 @@ export async function startZeroLite(overrides: Partial<ZeroLiteConfig> = {}) {
|
|
|
624
672
|
|
|
625
673
|
// remove stale zero shard schemas from upstream; these can outlive CVR/CDB
|
|
626
674
|
// and cause dispatcher errors after full reset.
|
|
627
|
-
const shardSchemas = await db.query
|
|
675
|
+
const shardSchemas = await db.query(
|
|
628
676
|
`SELECT DISTINCT schemaname
|
|
629
677
|
FROM pg_tables
|
|
630
678
|
WHERE tablename IN ('clients', 'replicas', 'mutations')
|
package/src/pg-proxy-browser.ts
CHANGED
|
@@ -656,7 +656,7 @@ function messagePortToDuplexWithInject(port: MessagePort): {
|
|
|
656
656
|
chunk.byteOffset,
|
|
657
657
|
chunk.byteOffset + chunk.byteLength
|
|
658
658
|
) as ArrayBuffer
|
|
659
|
-
port.postMessage(buf
|
|
659
|
+
port.postMessage(buf)
|
|
660
660
|
},
|
|
661
661
|
close() {
|
|
662
662
|
port.close()
|
|
@@ -668,7 +668,7 @@ function messagePortToDuplexWithInject(port: MessagePort): {
|
|
|
668
668
|
data.byteOffset,
|
|
669
669
|
data.byteOffset + data.byteLength
|
|
670
670
|
) as ArrayBuffer
|
|
671
|
-
port.postMessage(buf
|
|
671
|
+
port.postMessage(buf)
|
|
672
672
|
}
|
|
673
673
|
|
|
674
674
|
const injectMessage = (data: Uint8Array) => {
|
|
@@ -714,12 +714,12 @@ function messagePortToDuplex(port: MessagePort): {
|
|
|
714
714
|
if (isDebugWire() && _globalWriteCount <= 200) {
|
|
715
715
|
console.debug(`[pg-proxy-ws-write] #${_globalWriteCount} len=${chunk.byteLength}`)
|
|
716
716
|
}
|
|
717
|
-
//
|
|
717
|
+
// CF workerd MessagePort does not support transfer lists.
|
|
718
718
|
const buf = chunk.buffer.slice(
|
|
719
719
|
chunk.byteOffset,
|
|
720
720
|
chunk.byteOffset + chunk.byteLength
|
|
721
721
|
) as ArrayBuffer
|
|
722
|
-
port.postMessage(buf
|
|
722
|
+
port.postMessage(buf)
|
|
723
723
|
},
|
|
724
724
|
close() {
|
|
725
725
|
port.close()
|
|
@@ -733,7 +733,7 @@ function messagePortToDuplex(port: MessagePort): {
|
|
|
733
733
|
data.byteOffset,
|
|
734
734
|
data.byteOffset + data.byteLength
|
|
735
735
|
) as ArrayBuffer
|
|
736
|
-
port.postMessage(buf
|
|
736
|
+
port.postMessage(buf)
|
|
737
737
|
}
|
|
738
738
|
|
|
739
739
|
return { duplex: { readable, writable }, rawWrite }
|
|
@@ -1020,7 +1020,7 @@ export async function createBrowserProxy(
|
|
|
1020
1020
|
// cause issues if the caller still references the original data
|
|
1021
1021
|
const copy = new Uint8Array(data.length)
|
|
1022
1022
|
copy.set(data)
|
|
1023
|
-
port.postMessage(copy.buffer
|
|
1023
|
+
port.postMessage(copy.buffer)
|
|
1024
1024
|
}
|
|
1025
1025
|
|
|
1026
1026
|
// step 1: send AuthenticationClearTextPassword (R, type=3) — ask for password
|