orez 0.2.26 → 0.2.29

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 (172) hide show
  1. package/dist/cf-do/worker.d.ts.map +1 -1
  2. package/dist/cf-do/worker.js +9 -1
  3. package/dist/cf-do/worker.js.map +1 -1
  4. package/dist/pg-proxy-do-backend.d.ts +2 -0
  5. package/dist/pg-proxy-do-backend.d.ts.map +1 -1
  6. package/dist/pg-proxy-do-backend.js +49 -7
  7. package/dist/pg-proxy-do-backend.js.map +1 -1
  8. package/dist/pg-sqlite-compiler/catalog/seed.d.ts +67 -0
  9. package/dist/pg-sqlite-compiler/catalog/seed.d.ts.map +1 -0
  10. package/dist/pg-sqlite-compiler/catalog/seed.js +436 -0
  11. package/dist/pg-sqlite-compiler/catalog/seed.js.map +1 -0
  12. package/dist/pg-sqlite-compiler/index.d.ts +12 -0
  13. package/dist/pg-sqlite-compiler/index.d.ts.map +1 -0
  14. package/dist/pg-sqlite-compiler/index.js +59 -0
  15. package/dist/pg-sqlite-compiler/index.js.map +1 -0
  16. package/dist/pg-sqlite-compiler/passes/ast-utils.d.ts +48 -0
  17. package/dist/pg-sqlite-compiler/passes/ast-utils.d.ts.map +1 -0
  18. package/dist/pg-sqlite-compiler/passes/ast-utils.js +93 -0
  19. package/dist/pg-sqlite-compiler/passes/ast-utils.js.map +1 -0
  20. package/dist/pg-sqlite-compiler/passes/catalog.d.ts +34 -0
  21. package/dist/pg-sqlite-compiler/passes/catalog.d.ts.map +1 -0
  22. package/dist/pg-sqlite-compiler/passes/catalog.js +30 -0
  23. package/dist/pg-sqlite-compiler/passes/catalog.js.map +1 -0
  24. package/dist/pg-sqlite-compiler/passes/datetime.d.ts +21 -0
  25. package/dist/pg-sqlite-compiler/passes/datetime.d.ts.map +1 -0
  26. package/dist/pg-sqlite-compiler/passes/datetime.js +53 -0
  27. package/dist/pg-sqlite-compiler/passes/datetime.js.map +1 -0
  28. package/dist/pg-sqlite-compiler/passes/index.d.ts +21 -0
  29. package/dist/pg-sqlite-compiler/passes/index.d.ts.map +1 -0
  30. package/dist/pg-sqlite-compiler/passes/index.js +39 -0
  31. package/dist/pg-sqlite-compiler/passes/index.js.map +1 -0
  32. package/dist/pg-sqlite-compiler/passes/types.d.ts +41 -0
  33. package/dist/pg-sqlite-compiler/passes/types.d.ts.map +1 -0
  34. package/dist/pg-sqlite-compiler/passes/types.js +103 -0
  35. package/dist/pg-sqlite-compiler/passes/types.js.map +1 -0
  36. package/dist/pg-sqlite-compiler/test/oracle.d.ts +34 -0
  37. package/dist/pg-sqlite-compiler/test/oracle.d.ts.map +1 -0
  38. package/dist/pg-sqlite-compiler/test/oracle.js +204 -0
  39. package/dist/pg-sqlite-compiler/test/oracle.js.map +1 -0
  40. package/dist/pg-sqlite-compiler/types.d.ts +55 -0
  41. package/dist/pg-sqlite-compiler/types.d.ts.map +1 -0
  42. package/dist/pg-sqlite-compiler/types.js +2 -0
  43. package/dist/pg-sqlite-compiler/types.js.map +1 -0
  44. package/package.json +8 -4
  45. package/src/admin/admin-data.test.ts +0 -348
  46. package/src/admin/http-proxy.ts +0 -252
  47. package/src/admin/log-store.ts +0 -192
  48. package/src/admin/server.ts +0 -471
  49. package/src/admin/ui.ts +0 -1322
  50. package/src/bench/proxy-throughput.bench.ts +0 -343
  51. package/src/bench/serial-mutations.bench.ts +0 -270
  52. package/src/browser.ts +0 -203
  53. package/src/cf-do/.wrangler/cache/cf.json +0 -1
  54. package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite +0 -0
  55. package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm +0 -0
  56. package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal +0 -0
  57. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/0f0f3bdf0abda097eb6f1246db4657d9fc622081362d894d82c1a1ce067b05b6.sqlite +0 -0
  58. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/1ddd3a4a48a11b51658444f5458a1fb175194b1d5b6a5bda20ef3fe3205b900c.sqlite +0 -0
  59. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/204a39120310d37e972c5914cfd71ad55c151bdb9e8ed289a5f8c5b052dd60e4.sqlite +0 -0
  60. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/3835f242df9728adba3d127a238793fd054ed3e51df3f60749ee744c469bf2a2.sqlite +0 -0
  61. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/4aa9c80eb716cf55b8995ccf7afab0b36c683e6da07d7c37a3f9c570136036df.sqlite +0 -0
  62. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/533e2fd1d6ea46e7a9a0017916ef341802d438d72583462755f2c1f8225e9bf2.sqlite +0 -0
  63. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/5ffa1aced1225ecaeac6366f7586aa3de92761cdff8711d81fbd81f248076abd.sqlite +0 -0
  64. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/686c3a9f0d7e59ed2ab607efd4b76d779c97cafeb3818380033bf7c7eb86c819.sqlite +0 -0
  65. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/6e8214e8dcfadd0deb52d64e5e9ca85c6b329ace11193909845995396914c473.sqlite +0 -0
  66. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/78d9ec9ff873d3fe3507ff53c2a6f6dfc408b4268eb0db3f2a146c0678965366.sqlite +0 -0
  67. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/7eff9f0ed7e27ad0d3f9d923de0682fab1928591172c1ba336c5f79a134a5d85.sqlite +0 -0
  68. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/836cda5b995b25867d722ed4f4c2292167e80351a3c6038db626648eb247dd8b.sqlite +0 -0
  69. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/91ef63b112209ab30172763acd8a0935106c248f7f1bcae5545ce37a9f201551.sqlite +0 -0
  70. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/a66ea4293a5f5938bc6d116edfa2522bb85bc37aea3541fbc09c3b613b9b32c0.sqlite +0 -0
  71. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/ceb2ab26b80590840b65651deb6e948d3bf81565c6751f3a58752cf4bf4aecae.sqlite +0 -0
  72. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite +0 -0
  73. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite-shm +0 -0
  74. package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite-wal +0 -0
  75. package/src/cf-do/ARCHITECTURE.md +0 -83
  76. package/src/cf-do/watermark.test.ts +0 -103
  77. package/src/cf-do/watermark.ts +0 -118
  78. package/src/cf-do/worker.ts +0 -1033
  79. package/src/cf-do/wrangler.toml +0 -11
  80. package/src/cf-pglite/README.md +0 -19
  81. package/src/change-tracking.ts +0 -25
  82. package/src/child-process.test.ts +0 -147
  83. package/src/child-process.ts +0 -90
  84. package/src/cli-entry.ts +0 -72
  85. package/src/cli.test.ts +0 -38
  86. package/src/cli.ts +0 -1214
  87. package/src/config.ts +0 -150
  88. package/src/do-sql-tracking.test.ts +0 -19
  89. package/src/do-sql-tracking.ts +0 -19
  90. package/src/index.ts +0 -1215
  91. package/src/integration/integration.test.ts +0 -517
  92. package/src/integration/native-binary.guard.test.ts +0 -13
  93. package/src/integration/native-startup.test.ts +0 -44
  94. package/src/integration/replication-latency.test.ts +0 -428
  95. package/src/integration/restore-live-stress.test.ts +0 -433
  96. package/src/integration/restore-reset.test.ts +0 -400
  97. package/src/integration/restore.test.ts +0 -274
  98. package/src/integration/test-permissions.ts +0 -147
  99. package/src/load-config.ts +0 -46
  100. package/src/log.ts +0 -96
  101. package/src/mutex.ts +0 -47
  102. package/src/pg-proxy-browser.singledb.test.ts +0 -233
  103. package/src/pg-proxy-browser.ts +0 -2022
  104. package/src/pg-proxy-do-backend.test.ts +0 -3890
  105. package/src/pg-proxy-do-backend.ts +0 -7157
  106. package/src/pg-proxy.ts +0 -1087
  107. package/src/pglite-ipc.test.ts +0 -116
  108. package/src/pglite-ipc.ts +0 -266
  109. package/src/pglite-manager.ts +0 -557
  110. package/src/pglite-web-proxy.test.ts +0 -57
  111. package/src/pglite-web-proxy.ts +0 -221
  112. package/src/pglite-web-worker.ts +0 -152
  113. package/src/pglite-worker-thread.ts +0 -253
  114. package/src/port.ts +0 -25
  115. package/src/process-title.ts +0 -9
  116. package/src/recovery.ts +0 -155
  117. package/src/replication/change-tracker.test.ts +0 -357
  118. package/src/replication/change-tracker.ts +0 -279
  119. package/src/replication/handler.test.ts +0 -511
  120. package/src/replication/handler.ts +0 -1190
  121. package/src/replication/pgoutput-encoder.test.ts +0 -697
  122. package/src/replication/pgoutput-encoder.ts +0 -373
  123. package/src/replication/tcp-replication.test.ts +0 -876
  124. package/src/replication/zero-compat.test.ts +0 -1150
  125. package/src/restore-stress.test.ts +0 -188
  126. package/src/s3-local.ts +0 -203
  127. package/src/shim/hooks.mjs +0 -120
  128. package/src/shim/register.mjs +0 -4
  129. package/src/sqlite-mode/apply-mode.ts +0 -224
  130. package/src/sqlite-mode/index.ts +0 -15
  131. package/src/sqlite-mode/native-binary.ts +0 -89
  132. package/src/sqlite-mode/package-resolve.ts +0 -17
  133. package/src/sqlite-mode/resolve-mode.ts +0 -80
  134. package/src/sqlite-mode/shim-template.ts +0 -159
  135. package/src/sqlite-mode/sqlite-mode.test.ts +0 -427
  136. package/src/sqlite-mode/types.ts +0 -30
  137. package/src/vite-plugin.ts +0 -67
  138. package/src/wasm-sqlite.test.ts +0 -537
  139. package/src/worker/browser-admin.ts +0 -52
  140. package/src/worker/browser-build-config.test.ts +0 -71
  141. package/src/worker/browser-build-config.ts +0 -109
  142. package/src/worker/browser-embed-admin.test.ts +0 -75
  143. package/src/worker/browser-embed.ts +0 -345
  144. package/src/worker/cf-patches.ts +0 -384
  145. package/src/worker/embed-integration.test.ts +0 -321
  146. package/src/worker/index.ts +0 -138
  147. package/src/worker/shims/fastify.test.ts +0 -255
  148. package/src/worker/shims/fastify.ts +0 -306
  149. package/src/worker/shims/http-service.test.ts +0 -355
  150. package/src/worker/shims/http-service.ts +0 -293
  151. package/src/worker/shims/node-stub.ts +0 -290
  152. package/src/worker/shims/oxfmt.ts +0 -3
  153. package/src/worker/shims/postgres-browser.ts +0 -59
  154. package/src/worker/shims/postgres-socket.test.ts +0 -576
  155. package/src/worker/shims/postgres-socket.ts +0 -310
  156. package/src/worker/shims/postgres.test.ts +0 -364
  157. package/src/worker/shims/postgres.ts +0 -1454
  158. package/src/worker/shims/sqlite-browser.test.ts +0 -233
  159. package/src/worker/shims/sqlite-browser.ts +0 -175
  160. package/src/worker/shims/sqlite.test.ts +0 -786
  161. package/src/worker/shims/sqlite.ts +0 -978
  162. package/src/worker/shims/stream-browser.ts +0 -15
  163. package/src/worker/shims/ws-browser.test.ts +0 -205
  164. package/src/worker/shims/ws-browser.ts +0 -248
  165. package/src/worker/shims/ws.test.ts +0 -288
  166. package/src/worker/shims/ws.ts +0 -467
  167. package/src/worker/shims/zero-process-env.ts +0 -11
  168. package/src/worker/types.ts +0 -75
  169. package/src/worker/worker-integration.test.ts +0 -223
  170. package/src/worker/worker.test.ts +0 -136
  171. package/src/worker/zero-cache-embed-cf.ts +0 -463
  172. package/src/worker/zero-cache-embed.ts +0 -277
@@ -1,288 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from 'vitest'
2
-
3
- import WebSocket, { WebSocketServer, createWebSocketStream } from './ws.js'
4
-
5
- /** mock CF WebSocket — mimics the server side of a WebSocketPair */
6
- function createMockCFWebSocket() {
7
- const listeners = new Map<string, Array<(event: any) => void>>()
8
-
9
- const ws = {
10
- readyState: 1, // OPEN
11
- send: vi.fn(),
12
- close: vi.fn(() => {
13
- ws.readyState = 3 // CLOSED
14
- }),
15
- accept: vi.fn(),
16
- addEventListener: vi.fn((type: string, handler: (event: any) => void) => {
17
- if (!listeners.has(type)) listeners.set(type, [])
18
- listeners.get(type)!.push(handler)
19
- }),
20
- removeEventListener: vi.fn((type: string, handler: (event: any) => void) => {
21
- const arr = listeners.get(type)
22
- if (arr) {
23
- const idx = arr.indexOf(handler)
24
- if (idx >= 0) arr.splice(idx, 1)
25
- }
26
- }),
27
-
28
- // helper to fire events in tests
29
- _fire(type: string, event: any) {
30
- for (const h of listeners.get(type) || []) h(event)
31
- },
32
- }
33
-
34
- return ws
35
- }
36
-
37
- describe('WebSocket shim', () => {
38
- let cfWs: ReturnType<typeof createMockCFWebSocket>
39
- let ws: InstanceType<typeof WebSocket>
40
-
41
- beforeEach(() => {
42
- cfWs = createMockCFWebSocket()
43
- ws = new WebSocket(cfWs as any)
44
- })
45
-
46
- describe('constructor', () => {
47
- it('wraps a CF WebSocket', () => {
48
- expect(ws).toBeInstanceOf(WebSocket)
49
- })
50
-
51
- it('handles string URL for localhost (in-process)', () => {
52
- // no longer throws — localhost URLs use the in-process path
53
- // without a fastify instance it emits close instead of throwing
54
- const ws = new WebSocket('ws://localhost')
55
- expect(ws).toBeInstanceOf(WebSocket)
56
- })
57
-
58
- it('sets up event listeners on CF WebSocket', () => {
59
- expect(cfWs.addEventListener).toHaveBeenCalledWith('message', expect.any(Function))
60
- expect(cfWs.addEventListener).toHaveBeenCalledWith('close', expect.any(Function))
61
- expect(cfWs.addEventListener).toHaveBeenCalledWith('error', expect.any(Function))
62
- expect(cfWs.addEventListener).toHaveBeenCalledWith('open', expect.any(Function))
63
- })
64
- })
65
-
66
- describe('static constants', () => {
67
- it('has readyState constants', () => {
68
- expect(WebSocket.CONNECTING).toBe(0)
69
- expect(WebSocket.OPEN).toBe(1)
70
- expect(WebSocket.CLOSING).toBe(2)
71
- expect(WebSocket.CLOSED).toBe(3)
72
- })
73
-
74
- it('has instance readyState constants', () => {
75
- expect(ws.CONNECTING).toBe(0)
76
- expect(ws.OPEN).toBe(1)
77
- expect(ws.CLOSING).toBe(2)
78
- expect(ws.CLOSED).toBe(3)
79
- })
80
- })
81
-
82
- describe('readyState', () => {
83
- it('reflects CF WebSocket readyState', () => {
84
- cfWs.readyState = 1
85
- expect(ws.readyState).toBe(1)
86
- cfWs.readyState = 3
87
- expect(ws.readyState).toBe(3)
88
- })
89
- })
90
-
91
- describe('send()', () => {
92
- it('sends string data', () => {
93
- ws.send('hello')
94
- expect(cfWs.send).toHaveBeenCalledWith('hello')
95
- })
96
-
97
- it('sends ArrayBuffer data', () => {
98
- const buf = new ArrayBuffer(4)
99
- ws.send(buf)
100
- expect(cfWs.send).toHaveBeenCalledWith(buf)
101
- })
102
-
103
- it('sends Uint8Array data', () => {
104
- const arr = new Uint8Array([1, 2, 3])
105
- ws.send(arr)
106
- expect(cfWs.send).toHaveBeenCalledWith(expect.any(Uint8Array))
107
- })
108
-
109
- it('sends Buffer data as Uint8Array', () => {
110
- const buf = Buffer.from('hello')
111
- ws.send(buf)
112
- expect(cfWs.send).toHaveBeenCalledWith(expect.any(Uint8Array))
113
- })
114
-
115
- it('calls callback on success', () => {
116
- const cb = vi.fn()
117
- ws.send('test', cb)
118
- expect(cb).toHaveBeenCalledWith()
119
- })
120
-
121
- it('calls callback with error on failure', () => {
122
- cfWs.send.mockImplementation(() => {
123
- throw new Error('send failed')
124
- })
125
- const cb = vi.fn()
126
- ws.send('test', cb)
127
- expect(cb).toHaveBeenCalledWith(expect.any(Error))
128
- })
129
- })
130
-
131
- describe('close()', () => {
132
- it('closes the CF WebSocket', () => {
133
- ws.close(1000, 'normal')
134
- expect(cfWs.close).toHaveBeenCalledWith(1000, 'normal')
135
- })
136
-
137
- it('does not throw if already closed', () => {
138
- cfWs.close.mockImplementation(() => {
139
- throw new Error('already closed')
140
- })
141
- expect(() => ws.close()).not.toThrow()
142
- })
143
- })
144
-
145
- describe('terminate()', () => {
146
- it('closes with code 1000', () => {
147
- ws.terminate()
148
- expect(cfWs.close).toHaveBeenCalled()
149
- expect(cfWs.close.mock.calls[0][0]).toBe(1000)
150
- })
151
- })
152
-
153
- describe('ping()', () => {
154
- it('emits pong (CF handles ping at platform level)', () => {
155
- const pongHandler = vi.fn()
156
- ws.on('pong', pongHandler)
157
- ws.ping()
158
- expect(pongHandler).toHaveBeenCalled()
159
- })
160
- })
161
-
162
- describe('event forwarding', () => {
163
- it('emits message events from CF WebSocket', () => {
164
- const handler = vi.fn()
165
- ws.on('message', handler)
166
- cfWs._fire('message', { data: 'hello' })
167
- // ws npm API: message handler gets (data, isBinary)
168
- expect(handler).toHaveBeenCalledWith('hello', false)
169
- })
170
-
171
- it('emits close events from CF WebSocket', () => {
172
- const handler = vi.fn()
173
- ws.on('close', handler)
174
- cfWs._fire('close', { code: 1000, reason: 'normal', wasClean: true })
175
- // ws npm API: close handler gets (code, reason)
176
- expect(handler).toHaveBeenCalledWith(1000, 'normal')
177
- })
178
-
179
- it('emits error events from CF WebSocket', () => {
180
- const handler = vi.fn()
181
- ws.on('error', handler)
182
- cfWs._fire('error', { message: 'oops', error: new Error('oops') })
183
- expect(handler).toHaveBeenCalledWith(expect.objectContaining({ message: 'oops' }))
184
- })
185
-
186
- it('supports addEventListener/removeEventListener', () => {
187
- const handler = vi.fn()
188
- ws.addEventListener('message', handler)
189
- cfWs._fire('message', { data: 'test' })
190
- expect(handler).toHaveBeenCalledTimes(1)
191
-
192
- ws.removeEventListener('message', handler)
193
- cfWs._fire('message', { data: 'test2' })
194
- expect(handler).toHaveBeenCalledTimes(1)
195
- })
196
- })
197
- })
198
-
199
- describe('WebSocketServer shim', () => {
200
- it('creates with noServer option', () => {
201
- const wss = new WebSocketServer({ noServer: true })
202
- expect(wss).toBeInstanceOf(WebSocketServer)
203
- })
204
-
205
- describe('handleUpgrade()', () => {
206
- it('wraps CF WebSocket and calls callback', () => {
207
- const wss = new WebSocketServer({ noServer: true })
208
- const cfWs = createMockCFWebSocket()
209
- const callback = vi.fn()
210
-
211
- wss.handleUpgrade({ url: '/test', headers: {} }, cfWs, Buffer.alloc(0), callback)
212
-
213
- expect(callback).toHaveBeenCalledTimes(1)
214
- const ws = callback.mock.calls[0][0]
215
- expect(ws).toBeInstanceOf(WebSocket)
216
- })
217
-
218
- it('wrapped WebSocket delegates send to CF WebSocket', () => {
219
- const wss = new WebSocketServer({ noServer: true })
220
- const cfWs = createMockCFWebSocket()
221
- let wrappedWs: InstanceType<typeof WebSocket>
222
-
223
- wss.handleUpgrade({}, cfWs, null, (ws) => {
224
- wrappedWs = ws
225
- })
226
-
227
- wrappedWs!.send('hello from server')
228
- expect(cfWs.send).toHaveBeenCalledWith('hello from server')
229
- })
230
- })
231
- })
232
-
233
- describe('createWebSocketStream', () => {
234
- it('creates a duplex stream from WebSocket', () => {
235
- const cfWs = createMockCFWebSocket()
236
- const ws = new WebSocket(cfWs as any)
237
- const stream = createWebSocketStream(ws)
238
-
239
- expect(stream).toBeDefined()
240
- expect(stream.readable).toBe(true)
241
- expect(stream.writable).toBe(true)
242
- })
243
-
244
- it('writes to WebSocket via stream', async () => {
245
- const cfWs = createMockCFWebSocket()
246
- const ws = new WebSocket(cfWs as any)
247
- const stream = createWebSocketStream(ws)
248
-
249
- await new Promise<void>((resolve) => {
250
- stream.write('hello', () => {
251
- expect(cfWs.send).toHaveBeenCalledWith('hello')
252
- stream.destroy()
253
- resolve()
254
- })
255
- })
256
- })
257
-
258
- it('reads from WebSocket messages', async () => {
259
- const cfWs = createMockCFWebSocket()
260
- const ws = new WebSocket(cfWs as any)
261
- const stream = createWebSocketStream(ws)
262
-
263
- const received = new Promise<string>((resolve) => {
264
- stream.on('data', (chunk) => {
265
- resolve(chunk.toString())
266
- })
267
- })
268
-
269
- cfWs._fire('message', { data: 'world' })
270
-
271
- const data = await received
272
- expect(data).toBe('world')
273
- stream.destroy()
274
- })
275
-
276
- it('ends stream on WebSocket close', async () => {
277
- const cfWs = createMockCFWebSocket()
278
- const ws = new WebSocket(cfWs as any)
279
- const stream = createWebSocketStream(ws)
280
-
281
- const closed = new Promise<void>((resolve) => {
282
- stream.on('close', () => resolve())
283
- })
284
-
285
- cfWs._fire('close', { code: 1000 })
286
- await closed
287
- })
288
- })