@livestore/common-cf 0.4.0-dev.22 → 0.4.0-dev.24

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 (44) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/declare/cf-declare.d.ts +53 -6
  3. package/dist/declare/cf-declare.d.ts.map +1 -1
  4. package/dist/declare/cf-declare.js +9 -10
  5. package/dist/declare/cf-declare.js.map +1 -1
  6. package/dist/do-rpc/client.d.ts +1 -1
  7. package/dist/do-rpc/client.d.ts.map +1 -1
  8. package/dist/do-rpc/client.js +10 -17
  9. package/dist/do-rpc/client.js.map +1 -1
  10. package/dist/do-rpc/rpc.test.js +3 -3
  11. package/dist/do-rpc/rpc.test.js.map +1 -1
  12. package/dist/do-rpc/server.d.ts +1 -1
  13. package/dist/do-rpc/server.d.ts.map +1 -1
  14. package/dist/do-rpc/server.js +31 -21
  15. package/dist/do-rpc/server.js.map +1 -1
  16. package/dist/do-rpc/test-fixtures/worker.d.ts.map +1 -1
  17. package/dist/do-rpc/test-fixtures/worker.js +1 -1
  18. package/dist/do-rpc/test-fixtures/worker.js.map +1 -1
  19. package/dist/ws-rpc/test-fixtures/worker.d.ts.map +1 -1
  20. package/dist/ws-rpc/test-fixtures/worker.js +2 -2
  21. package/dist/ws-rpc/test-fixtures/worker.js.map +1 -1
  22. package/dist/ws-rpc/ws-rpc-server.d.ts +18 -3
  23. package/dist/ws-rpc/ws-rpc-server.d.ts.map +1 -1
  24. package/dist/ws-rpc/ws-rpc-server.js +3 -3
  25. package/dist/ws-rpc/ws-rpc-server.js.map +1 -1
  26. package/dist/ws-rpc/ws-rpc.test.js +3 -3
  27. package/dist/ws-rpc/ws-rpc.test.js.map +1 -1
  28. package/package.json +46 -13
  29. package/src/declare/cf-declare.ts +18 -10
  30. package/src/do-rpc/README.md +1 -2
  31. package/src/do-rpc/client.ts +15 -19
  32. package/src/do-rpc/rpc.test.ts +5 -3
  33. package/src/do-rpc/server.ts +45 -32
  34. package/src/do-rpc/test-fixtures/worker.ts +4 -2
  35. package/src/ws-rpc/README.md +1 -1
  36. package/src/ws-rpc/test-fixtures/worker.ts +6 -4
  37. package/src/ws-rpc/ws-rpc-server.ts +9 -8
  38. package/src/ws-rpc/ws-rpc.test.ts +5 -3
  39. package/src/do-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite +0 -0
  40. package/src/do-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-shm +0 -0
  41. package/src/do-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-wal +0 -0
  42. package/src/ws-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite +0 -0
  43. package/src/ws-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-shm +0 -0
  44. package/src/ws-rpc/test-fixtures/.wrangler/state/v3/do/test-durable-object-rpc-TestRpcDurableObject/9ad3dfcb5436dfc3f2e14f5b554a0fd6d8b68206ad64fdde7320232d04e16dfe.sqlite-wal +0 -0
@@ -1,7 +1,9 @@
1
1
  /// <reference types="@cloudflare/workers-types" />
2
2
 
3
3
  import { DurableObject } from 'cloudflare:workers'
4
+
4
5
  import { Effect, Layer, Option, RpcServer, Schedule, Stream } from '@livestore/utils/effect'
6
+
5
7
  import type * as CfTypes from '../../cf-types.ts'
6
8
  import { setupDurableObjectWebSocketRpc } from '../ws-rpc-server.ts'
7
9
  import { TestRpcs } from './rpc-schema.ts'
@@ -11,7 +13,7 @@ export interface Env {
11
13
  }
12
14
 
13
15
  export class TestRpcDurableObject extends DurableObject<Env, unknown> {
14
- __DURABLE_OBJECT_BRAND = 'TestRpcDurableObject' as never
16
+ override __DURABLE_OBJECT_BRAND = 'TestRpcDurableObject' as never
15
17
 
16
18
  constructor(state: DurableObjectState, env: Env) {
17
19
  super(state, env)
@@ -59,7 +61,7 @@ export class TestRpcDurableObject extends DurableObject<Env, unknown> {
59
61
  })
60
62
  }
61
63
 
62
- async fetch(request: Request): Promise<Response> {
64
+ override async fetch(request: Request): Promise<Response> {
63
65
  const upgradeHeader = request.headers.get('Upgrade')
64
66
  if (upgradeHeader === undefined || upgradeHeader !== 'websocket') {
65
67
  return new Response('Durable Object expected Upgrade: websocket', { status: 426 })
@@ -81,7 +83,7 @@ export default {
81
83
  async fetch(request: Request, env: Env): Promise<Response> {
82
84
  try {
83
85
  const upgradeHeader = request.headers.get('Upgrade')
84
- if (!upgradeHeader || upgradeHeader !== 'websocket') {
86
+ if (upgradeHeader == null || upgradeHeader !== 'websocket') {
85
87
  return new Response('Durable Object expected Upgrade: websocket', { status: 426 })
86
88
  }
87
89
 
@@ -89,7 +91,7 @@ export default {
89
91
 
90
92
  return serverDO.fetch(request)
91
93
  } catch (error) {
92
- return new Response(`Error: ${error}`, { status: 500 })
94
+ return new Response(`Error: ${String(error)}`, { status: 500 })
93
95
  }
94
96
  },
95
97
  }
@@ -31,6 +31,7 @@ import {
31
31
  Scope,
32
32
  Stream,
33
33
  } from '@livestore/utils/effect'
34
+
34
35
  import type * as CfTypes from '../cf-types.ts'
35
36
 
36
37
  /**
@@ -70,7 +71,7 @@ export interface DurableObjectWebSocketRpcConfig {
70
71
  rpcLayer: Layer.Layer<never, never, RpcServer.Protocol | WsContext>
71
72
  /** Function to get access to incoming requests */
72
73
  onMessage?: (msg: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void
73
- mainLayer?: Layer.Layer<never, never, never>
74
+ mainLayer?: Layer.Layer<never>
74
75
  }
75
76
 
76
77
  /**
@@ -154,7 +155,7 @@ export const setupDurableObjectWebSocketRpc = ({
154
155
 
155
156
  const launchServer = (ws: CfTypes.WebSocket) =>
156
157
  Effect.gen(function* () {
157
- if (serverCtxMap.has(ws)) {
158
+ if (serverCtxMap.has(ws) === true) {
158
159
  return serverCtxMap.get(ws)!
159
160
  }
160
161
 
@@ -162,7 +163,7 @@ export const setupDurableObjectWebSocketRpc = ({
162
163
 
163
164
  const scope = yield* Scope.make()
164
165
 
165
- const incomingQueue = yield* Mailbox.make<Uint8Array<ArrayBufferLike> | string>()
166
+ const incomingQueue = yield* Mailbox.make<Uint8Array | string>()
166
167
 
167
168
  yield* Scope.addFinalizer(scope, incomingQueue.shutdown)
168
169
 
@@ -182,7 +183,7 @@ export const setupDurableObjectWebSocketRpc = ({
182
183
  scope,
183
184
  onMessage: (message: string | ArrayBuffer) =>
184
185
  incomingQueue
185
- .offer(message as Uint8Array<ArrayBufferLike> | string)
186
+ .offer(message as Uint8Array | string)
186
187
  .pipe(
187
188
  Effect.asVoid,
188
189
  Effect.withSpan('ws-rpc-server/onMessage', { root: true }),
@@ -212,7 +213,7 @@ export const setupDurableObjectWebSocketRpc = ({
212
213
  const webSocketClose: CfTypes.DurableObject['webSocketClose'] = async (ws, _code, _reason, _wasClean) => {
213
214
  const ctx = serverCtxMap.get(ws)
214
215
  // console.log('webSocketClose', ctx, ws)
215
- if (ctx) {
216
+ if (ctx !== undefined) {
216
217
  await Scope.close(ctx.scope, Exit.void).pipe(Effect.runPromise)
217
218
  serverCtxMap.delete(ws)
218
219
  }
@@ -234,7 +235,7 @@ export interface WsRpcServerArgs {
234
235
  ws: CfTypes.WebSocket
235
236
  onMessage?: (message: RpcMessage.FromClientEncoded, ws: CfTypes.WebSocket) => void
236
237
  /** Mailbox queue for receiving incoming messages from the WebSocket */
237
- incomingQueue: Mailbox.Mailbox<Uint8Array<ArrayBufferLike> | string>
238
+ incomingQueue: Mailbox.Mailbox<Uint8Array | string>
238
239
  }
239
240
 
240
241
  /**
@@ -270,7 +271,7 @@ const makeSocketProtocol = ({ incomingQueue, ws, onMessage }: WsRpcServerArgs) =
270
271
  const serialization = yield* RpcSerialization.RpcSerialization
271
272
  const disconnects = yield* Mailbox.make<number>()
272
273
 
273
- const writeRaw = (msg: Uint8Array<ArrayBufferLike> | string) => Effect.succeed(ws.send(msg))
274
+ const writeRaw = (msg: Uint8Array | string) => Effect.succeed(ws.send(msg))
274
275
 
275
276
  let writeRequest!: (clientId: number, message: RpcMessage.FromClientEncoded) => Effect.Effect<void>
276
277
 
@@ -303,7 +304,7 @@ const makeSocketProtocol = ({ incomingQueue, ws, onMessage }: WsRpcServerArgs) =
303
304
  while: () => i < decoded.length,
304
305
  body: () => {
305
306
  const request = decoded[i++]!
306
- if (onMessage) {
307
+ if (onMessage !== undefined) {
307
308
  onMessage(request, ws)
308
309
  }
309
310
  return writeRequest(id, request)
@@ -1,3 +1,7 @@
1
+ import { expect } from 'vitest'
2
+
3
+ import { Vitest } from '@livestore/utils-dev/node-vitest'
4
+ import { WranglerDevServerService } from '@livestore/utils-dev/wrangler'
1
5
  import {
2
6
  Chunk,
3
7
  Effect,
@@ -12,9 +16,7 @@ import {
12
16
  Stream,
13
17
  } from '@livestore/utils/effect'
14
18
  import { PlatformNode } from '@livestore/utils/node'
15
- import { Vitest } from '@livestore/utils-dev/node-vitest'
16
- import { WranglerDevServerService } from '@livestore/utils-dev/wrangler'
17
- import { expect } from 'vitest'
19
+
18
20
  import { TestRpcs } from './test-fixtures/rpc-schema.ts'
19
21
 
20
22
  const testTimeout = 60_000