@effect/platform-bun 4.0.0-beta.99 → 4.0.0-rc.109

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 (120) hide show
  1. package/AGENTS.md +395 -0
  2. package/CLAUDE.md +395 -0
  3. package/README.md +10 -3
  4. package/ai-docs/README.md +44 -0
  5. package/ai-docs/package.json +36 -0
  6. package/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
  7. package/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
  8. package/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
  9. package/ai-docs/src/01_effect/01_basics/index.md +5 -0
  10. package/ai-docs/src/01_effect/02_schema/10_schema-basics.ts +43 -0
  11. package/ai-docs/src/01_effect/02_schema/index.md +7 -0
  12. package/ai-docs/src/01_effect/03_services/01_service.ts +45 -0
  13. package/ai-docs/src/01_effect/03_services/10_reference.ts +10 -0
  14. package/ai-docs/src/01_effect/03_services/20_layer-composition.ts +70 -0
  15. package/ai-docs/src/01_effect/03_services/20_layer-unwrap.ts +66 -0
  16. package/ai-docs/src/01_effect/03_services/index.md +5 -0
  17. package/ai-docs/src/01_effect/04_errors/01_error-handling.ts +30 -0
  18. package/ai-docs/src/01_effect/04_errors/10_catch-tags.ts +24 -0
  19. package/ai-docs/src/01_effect/04_errors/20_reason-errors.ts +64 -0
  20. package/ai-docs/src/01_effect/04_errors/index.md +1 -0
  21. package/ai-docs/src/01_effect/05_resources/10_acquire-release.ts +105 -0
  22. package/ai-docs/src/01_effect/05_resources/20_layer-side-effects.ts +31 -0
  23. package/ai-docs/src/01_effect/05_resources/30_layer-map.ts +86 -0
  24. package/ai-docs/src/01_effect/05_resources/index.md +3 -0
  25. package/ai-docs/src/01_effect/06_running/10_run-main.ts +30 -0
  26. package/ai-docs/src/01_effect/06_running/20_layer-launch.ts +27 -0
  27. package/ai-docs/src/01_effect/06_running/index.md +1 -0
  28. package/ai-docs/src/01_effect/07_pubsub/10_pubsub.ts +56 -0
  29. package/ai-docs/src/01_effect/07_pubsub/index.md +3 -0
  30. package/ai-docs/src/03_stream/10_creating-streams.ts +103 -0
  31. package/ai-docs/src/03_stream/20_consuming-streams.ts +137 -0
  32. package/ai-docs/src/03_stream/30_encoding.ts +165 -0
  33. package/ai-docs/src/03_stream/index.md +4 -0
  34. package/ai-docs/src/04_integration/10_managed-runtime.ts +129 -0
  35. package/ai-docs/src/04_integration/index.md +5 -0
  36. package/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
  37. package/ai-docs/src/05_batching/index.md +3 -0
  38. package/ai-docs/src/06_schedule/10_schedules.ts +110 -0
  39. package/ai-docs/src/06_schedule/index.md +3 -0
  40. package/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
  41. package/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
  42. package/ai-docs/src/07_datetime/index.md +5 -0
  43. package/ai-docs/src/08_observability/10_logging.ts +66 -0
  44. package/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
  45. package/ai-docs/src/08_observability/index.md +7 -0
  46. package/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
  47. package/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
  48. package/ai-docs/src/09_testing/index.md +1 -0
  49. package/ai-docs/src/10_predicate/01_basics.ts +14 -0
  50. package/ai-docs/src/10_predicate/index.md +9 -0
  51. package/ai-docs/src/40_sql/10_basics.ts +175 -0
  52. package/ai-docs/src/40_sql/index.md +6 -0
  53. package/ai-docs/src/50_http-client/10_basics.ts +102 -0
  54. package/ai-docs/src/50_http-client/index.md +3 -0
  55. package/ai-docs/src/51_http-server/10_basics.ts +118 -0
  56. package/ai-docs/src/51_http-server/20_testing.ts +100 -0
  57. package/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
  58. package/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
  59. package/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
  60. package/ai-docs/src/51_http-server/fixtures/api/Users.ts +107 -0
  61. package/ai-docs/src/51_http-server/fixtures/domain/User.ts +21 -0
  62. package/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
  63. package/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +37 -0
  64. package/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +80 -0
  65. package/ai-docs/src/51_http-server/fixtures/server/Users.ts +183 -0
  66. package/ai-docs/src/51_http-server/index.md +3 -0
  67. package/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
  68. package/ai-docs/src/60_child-process/index.md +3 -0
  69. package/ai-docs/src/70_cli/10_basics.ts +160 -0
  70. package/ai-docs/src/70_cli/index.md +5 -0
  71. package/ai-docs/src/71_ai/10_language-model.ts +156 -0
  72. package/ai-docs/src/71_ai/20_tools.ts +226 -0
  73. package/ai-docs/src/71_ai/30_chat.ts +158 -0
  74. package/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
  75. package/ai-docs/src/71_ai/index.md +5 -0
  76. package/ai-docs/src/80_cluster/10_entities.ts +97 -0
  77. package/ai-docs/src/80_cluster/index.md +4 -0
  78. package/ai-docs/src/index.md +10 -0
  79. package/ai-docs/tsconfig.json +24 -0
  80. package/dist/BunClusterHttp.d.ts +1 -0
  81. package/dist/BunClusterHttp.d.ts.map +1 -1
  82. package/dist/BunClusterHttp.js +6 -1
  83. package/dist/BunClusterHttp.js.map +1 -1
  84. package/dist/BunClusterSocket.d.ts +1 -0
  85. package/dist/BunClusterSocket.d.ts.map +1 -1
  86. package/dist/BunClusterSocket.js +6 -1
  87. package/dist/BunClusterSocket.js.map +1 -1
  88. package/dist/BunCrypto.js.map +1 -1
  89. package/dist/BunFileSystem.js.map +1 -1
  90. package/dist/BunHttpPlatform.d.ts.map +1 -1
  91. package/dist/BunHttpPlatform.js +25 -2
  92. package/dist/BunHttpPlatform.js.map +1 -1
  93. package/dist/BunHttpServer.d.ts +20 -1
  94. package/dist/BunHttpServer.d.ts.map +1 -1
  95. package/dist/BunHttpServer.js +7 -6
  96. package/dist/BunHttpServer.js.map +1 -1
  97. package/dist/BunHttpServerRequest.js.map +1 -1
  98. package/dist/BunMultipart.d.ts.map +1 -1
  99. package/dist/BunMultipart.js +6 -7
  100. package/dist/BunMultipart.js.map +1 -1
  101. package/dist/BunPath.js.map +1 -1
  102. package/dist/BunRedis.js.map +1 -1
  103. package/dist/BunRuntime.js.map +1 -1
  104. package/dist/BunServices.js.map +1 -1
  105. package/dist/BunSocket.js.map +1 -1
  106. package/dist/BunStdio.js.map +1 -1
  107. package/dist/BunStream.js.map +1 -1
  108. package/dist/BunTerminal.js.map +1 -1
  109. package/dist/BunWorker.js.map +1 -1
  110. package/dist/BunWorkerRunner.d.ts.map +1 -1
  111. package/dist/BunWorkerRunner.js +1 -9
  112. package/dist/BunWorkerRunner.js.map +1 -1
  113. package/dist/index.js.map +1 -1
  114. package/package.json +11 -9
  115. package/src/BunClusterHttp.ts +6 -2
  116. package/src/BunClusterSocket.ts +6 -2
  117. package/src/BunHttpPlatform.ts +18 -3
  118. package/src/BunHttpServer.ts +32 -7
  119. package/src/BunMultipart.ts +7 -8
  120. package/src/BunWorkerRunner.ts +1 -12
@@ -69,17 +69,9 @@ export const layer = /*#__PURE__*/Layer.succeed(WorkerRunner.WorkerRunnerPlatfor
69
69
  })
70
70
  }));
71
71
  }
72
- function onError(error) {
73
- Deferred.doneUnsafe(closeLatch, new WorkerError({
74
- reason: new WorkerReceiveError({
75
- message: "received error event",
76
- cause: error.data
77
- })
78
- }));
79
- }
80
72
  yield* Scope.addFinalizer(scope, Effect.sync(() => {
81
73
  port.removeEventListener("message", onMessage);
82
- port.removeEventListener("messageerror", onError);
74
+ port.removeEventListener("messageerror", onMessageError);
83
75
  }));
84
76
  port.addEventListener("message", onMessage);
85
77
  port.addEventListener("messageerror", onMessageError);
@@ -1 +1 @@
1
- {"version":3,"file":"BunWorkerRunner.js","names":["Cause","Deferred","Effect","Exit","Fiber","identity","Layer","Scope","WorkerError","WorkerReceiveError","WorkerSpawnError","WorkerRunner","layer","succeed","WorkerRunnerPlatform","start","fnUntraced","self","reason","message","port","run","handler","scopedWith","scope","closeLatch","makeUnsafe","trackFiber","runIn","services","context","runFork","runForkWith","onExit","exit","_tag","hasInterruptsOnly","cause","logError","onMessage","event","data","result","isEffect","fiber","addObserver","close","doneUnsafe","void","onMessageError","error","onError","addFinalizer","sync","removeEventListener","addEventListener","postMessage","await","sendUnsafe","_portId","transfer","send"],"sources":["../src/BunWorkerRunner.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BunWorkerRunner.js","names":[],"sources":["../src/BunWorkerRunner.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BunChildProcessSpawner","BunClusterHttp","BunClusterSocket","BunCrypto","BunFileSystem","BunHttpClient","BunHttpPlatform","BunHttpServer","BunHttpServerRequest","BunMultipart","BunPath","BunRedis","BunRuntime","BunServices","BunSink","BunSocket","BunSocketServer","BunStdio","BunStream","BunTerminal","BunWorker","BunWorkerRunner"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAKA,sBAAsB,MAAM,6BAA6B;AAErE;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AAEzD;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,oBAAoB,MAAM,2BAA2B;AAEjE;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAK,sBAAsB,MAAM,6BAA6B;AAErE;;;AAGA,OAAO,KAAK,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAK,gBAAgB,MAAM,uBAAuB;AAEzD;;;AAGA,OAAO,KAAK,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAK,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAK,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAK,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAK,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAK,oBAAoB,MAAM,2BAA2B;AAEjE;;;AAGA,OAAO,KAAK,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAK,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAK,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAK,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAK,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAK,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAK,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAK,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAK,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAK,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAK,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAK,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAK,eAAe,MAAM,sBAAsB","ignoreList":[]}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@effect/platform-bun",
3
3
  "type": "module",
4
- "version": "4.0.0-beta.99",
4
+ "version": "4.0.0-rc.109",
5
5
  "license": "MIT",
6
6
  "description": "Platform specific implementations for the Bun runtime",
7
7
  "homepage": "https://effect.website",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/Effect-TS/effect.git",
11
- "directory": "packages/platform-bun"
11
+ "directory": "packages/platform/bun"
12
12
  },
13
13
  "bugs": {
14
14
  "url": "https://github.com/Effect-TS/effect/issues"
@@ -31,6 +31,7 @@
31
31
  ".": "./dist/index.js",
32
32
  "./*": "./dist/*.js",
33
33
  "./internal/*": null,
34
+ "./index": null,
34
35
  "./*/index": null
35
36
  },
36
37
  "files": [
@@ -38,28 +39,29 @@
38
39
  "dist/**/*.js",
39
40
  "dist/**/*.js.map",
40
41
  "dist/**/*.d.ts",
41
- "dist/**/*.d.ts.map"
42
+ "dist/**/*.d.ts.map",
43
+ "AGENTS.md",
44
+ "CLAUDE.md",
45
+ "ai-docs/**/*"
42
46
  ],
43
47
  "publishConfig": {
44
48
  "access": "public",
45
49
  "provenance": true
46
50
  },
47
51
  "peerDependencies": {
48
- "effect": "^4.0.0-beta.99"
52
+ "effect": "^4.0.0-rc.109"
49
53
  },
50
54
  "dependencies": {
51
- "@effect/platform-node-shared": "^4.0.0-beta.99"
55
+ "@effect/platform-node-shared": "^4.0.0-rc.109"
52
56
  },
53
57
  "devDependencies": {
54
58
  "@types/bun": "^1.3.14",
55
- "effect": "^4.0.0-beta.99"
59
+ "effect": "^4.0.0-rc.109"
56
60
  },
57
61
  "scripts": {
58
62
  "codegen": "effect-utils codegen",
59
63
  "build": "tsc -b tsconfig.json && pnpm babel",
60
64
  "babel": "babel dist --plugins annotate-pure-calls --out-dir dist --source-maps",
61
- "check": "tsc -b tsconfig.json",
62
- "test": "vitest",
63
- "coverage": "vitest --coverage"
65
+ "check": "tsc -b tsconfig.json"
64
66
  }
65
67
  }
@@ -29,6 +29,7 @@ import type { ServeError } from "effect/unstable/http/HttpServerError"
29
29
  import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization"
30
30
  import type { SqlClient } from "effect/unstable/sql/SqlClient"
31
31
  import { layerK8sHttpClient } from "./BunClusterSocket.ts"
32
+ import * as BunCrypto from "./BunCrypto.ts"
32
33
  import * as BunFileSystem from "./BunFileSystem.ts"
33
34
  import * as BunHttpServer from "./BunHttpServer.ts"
34
35
  import type { BunServices } from "./BunServices.ts"
@@ -102,6 +103,7 @@ export const layer = <
102
103
  >(options: {
103
104
  readonly transport: "http" | "websocket"
104
105
  readonly serialization?: "msgpack" | "ndjson" | undefined
106
+ readonly serializationMaxBufferSize?: number | "unbounded" | undefined
105
107
  readonly clientOnly?: ClientOnly | undefined
106
108
  readonly storage?: Storage | undefined
107
109
  readonly runnerHealth?: "ping" | "k8s" | undefined
@@ -157,7 +159,7 @@ export const layer = <
157
159
  ? MessageStorage.layerNoop
158
160
  : options?.storage === "byo"
159
161
  ? Layer.empty
160
- : Layer.orDie(SqlMessageStorage.layer)
162
+ : Layer.orDie(SqlMessageStorage.layer).pipe(Layer.provide(BunCrypto.layer))
161
163
  ),
162
164
  Layer.provide(
163
165
  options?.storage === "local"
@@ -168,7 +170,9 @@ export const layer = <
168
170
  ),
169
171
  Layer.provide(ShardingConfig.layerFromEnv(options?.shardingConfig)),
170
172
  Layer.provide(
171
- options?.serialization === "ndjson" ? RpcSerialization.layerNdjson : RpcSerialization.layerMsgPack
173
+ options?.serialization === "ndjson"
174
+ ? RpcSerialization.layerNdjsonWith({ maxBufferSize: options.serializationMaxBufferSize })
175
+ : RpcSerialization.layerMsgPackWith({ maxBufferSize: options.serializationMaxBufferSize })
172
176
  )
173
177
  ) as any
174
178
  }
@@ -28,6 +28,7 @@ import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient"
28
28
  import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization"
29
29
  import type * as SocketServer from "effect/unstable/socket/SocketServer"
30
30
  import type { SqlClient } from "effect/unstable/sql/SqlClient"
31
+ import * as BunCrypto from "./BunCrypto.ts"
31
32
  import * as BunFileSystem from "./BunFileSystem.ts"
32
33
 
33
34
  export {
@@ -61,6 +62,7 @@ export const layer = <
61
62
  >(
62
63
  options?: {
63
64
  readonly serialization?: "msgpack" | "ndjson" | undefined
65
+ readonly serializationMaxBufferSize?: number | "unbounded" | undefined
64
66
  readonly clientOnly?: ClientOnly | undefined
65
67
  readonly storage?: Storage | undefined
66
68
  readonly runnerHealth?: "ping" | "k8s" | undefined
@@ -109,7 +111,7 @@ export const layer = <
109
111
  ? MessageStorage.layerNoop
110
112
  : options?.storage === "byo"
111
113
  ? Layer.empty
112
- : Layer.orDie(SqlMessageStorage.layer)
114
+ : Layer.orDie(SqlMessageStorage.layer).pipe(Layer.provide(BunCrypto.layer))
113
115
  ),
114
116
  Layer.provide(
115
117
  options?.storage === "local"
@@ -120,7 +122,9 @@ export const layer = <
120
122
  ),
121
123
  Layer.provide(ShardingConfig.layerFromEnv(options?.shardingConfig)),
122
124
  Layer.provide(
123
- options?.serialization === "ndjson" ? RpcSerialization.layerNdjson : RpcSerialization.layerMsgPack
125
+ options?.serialization === "ndjson"
126
+ ? RpcSerialization.layerNdjsonWith({ maxBufferSize: options?.serializationMaxBufferSize })
127
+ : RpcSerialization.layerMsgPackWith({ maxBufferSize: options?.serializationMaxBufferSize })
124
128
  )
125
129
  ) as any
126
130
  }
@@ -9,7 +9,8 @@
9
9
  *
10
10
  * @since 4.0.0
11
11
  */
12
- import type { Effect } from "effect"
12
+ import * as NodeHttpCompression from "@effect/platform-node-shared/NodeHttpCompression"
13
+ import type * as Effect from "effect/Effect"
13
14
  import type { FileSystem } from "effect/FileSystem"
14
15
  import * as Layer from "effect/Layer"
15
16
  import * as Etag from "effect/unstable/http/Etag"
@@ -17,6 +18,13 @@ import * as Platform from "effect/unstable/http/HttpPlatform"
17
18
  import * as Response from "effect/unstable/http/HttpServerResponse"
18
19
  import * as BunFileSystem from "./BunFileSystem.ts"
19
20
 
21
+ // Bun's CompressionStream supports an extended format set covering brotli and
22
+ // zstd
23
+ const compression = NodeHttpCompression.make(Platform.makeCompressionWeb({
24
+ algorithms: ["gzip", "deflate", "br", "zstd"],
25
+ transform: (algorithm) => Platform.compressionTransformWeb(algorithm === "br" ? "brotli" : algorithm)
26
+ }))
27
+
20
28
  /**
21
29
  * @category constructors
22
30
  * @since 4.0.0
@@ -26,6 +34,8 @@ const make: Effect.Effect<
26
34
  never,
27
35
  FileSystem | Etag.Generator
28
36
  > = Platform.make({
37
+ platform: "bun",
38
+ compression,
29
39
  fileResponse(path, status, statusText, headers, start, end, _contentLength) {
30
40
  let file = Bun.file(path)
31
41
  if (start > 0 || end !== undefined) {
@@ -33,8 +43,13 @@ const make: Effect.Effect<
33
43
  }
34
44
  return Response.raw(file, { headers, status, statusText })
35
45
  },
36
- fileWebResponse(file, status, statusText, headers, _options) {
37
- return Response.raw(file, { headers, status, statusText })
46
+ fileWebResponse(file, status, statusText, headers, options) {
47
+ const start = Number(options?.offset ?? 0)
48
+ const end = options?.bytesToRead !== undefined ? start + Number(options.bytesToRead) : undefined
49
+ const body = start > 0 || end !== undefined
50
+ ? (file as File).slice(start, end, file.type)
51
+ : file
52
+ return Response.raw(body, { headers, status, statusText })
38
53
  }
39
54
  })
40
55
 
@@ -66,6 +66,25 @@ export type ServeOptions<R extends string> =
66
66
  )
67
67
  & { readonly routes?: Bun.Serve.Routes<WebSocketContext, R> }
68
68
 
69
+ /**
70
+ * WebSocket tuning options forwarded to `Bun.serve`'s `websocket` handler.
71
+ *
72
+ * **Details**
73
+ *
74
+ * The lifecycle handlers (`open`, `message`, `close`, ...) are managed by the
75
+ * server and cannot be overridden; everything else — such as
76
+ * `perMessageDeflate` compression, payload limits, and idle timeouts — passes
77
+ * through, e.g.
78
+ * `BunHttpServer.layer({ port: 3000, websocket: { perMessageDeflate: true } })`.
79
+ *
80
+ * @category options
81
+ * @since 4.0.0
82
+ */
83
+ export type WebSocketOptions = Omit<
84
+ Bun.WebSocketHandler<WebSocketContext>,
85
+ "open" | "message" | "close" | "drain" | "ping" | "pong" | "data" | "binaryType"
86
+ >
87
+
69
88
  /**
70
89
  * Creates a scoped Bun `HttpServer` from `Bun.serve` options, stopping the server on scope finalization with optional graceful shutdown settings.
71
90
  *
@@ -77,6 +96,7 @@ export const make = Effect.fnUntraced(
77
96
  options: ServeOptions<R> & {
78
97
  readonly disablePreemptiveShutdown?: boolean | undefined
79
98
  readonly gracefulShutdownTimeout?: Duration.Input | undefined
99
+ readonly websocket?: WebSocketOptions | undefined
80
100
  }
81
101
  ) {
82
102
  const scope = yield* Effect.scope
@@ -90,6 +110,7 @@ export const make = Effect.fnUntraced(
90
110
  ...options as ServeOptions<R>,
91
111
  fetch: handlerStack[0],
92
112
  websocket: {
113
+ ...options.websocket,
93
114
  open(ws) {
94
115
  Deferred.doneUnsafe(ws.data.deferred, Exit.succeed(ws))
95
116
  },
@@ -137,12 +158,12 @@ export const make = Effect.fnUntraced(
137
158
 
138
159
  function handler(request: Request, server: BunServer<WebSocketContext>) {
139
160
  return new Promise<Response>((resolve, _reject) => {
140
- const map = new Map(services.mapUnsafe)
141
- map.set(
142
- ServerRequest.HttpServerRequest.key,
161
+ const context = Context.add(
162
+ services,
163
+ ServerRequest.HttpServerRequest,
143
164
  new BunServerRequest(request, resolve, removeHost(request.url), server)
144
165
  )
145
- const fiber = Fiber.runIn(Effect.runForkWith(Context.makeUnsafe<any>(map))(httpEffect), scope)
166
+ const fiber = Fiber.runIn(Effect.runForkWith(context)(httpEffect), scope)
146
167
  request.signal.addEventListener("abort", () => {
147
168
  fiber.interruptUnsafe(parent.id, Error.ClientAbort.annotation)
148
169
  }, { once: true })
@@ -150,9 +171,10 @@ export const make = Effect.fnUntraced(
150
171
  }
151
172
 
152
173
  yield* Scope.addFinalizerExit(serveScope, () => {
153
- handlerStack.pop()
174
+ const index = handlerStack.indexOf(handler)
175
+ if (index !== -1) handlerStack.splice(index, 1)
154
176
  server.reload({ fetch: handlerStack[handlerStack.length - 1] })
155
- return preemptiveShutdown
177
+ return handlerStack.length === 1 ? preemptiveShutdown : Effect.void
156
178
  })
157
179
  handlerStack.push(handler)
158
180
  server.reload({ fetch: handler })
@@ -233,6 +255,7 @@ export const layerServer: <R extends string>(
233
255
  options: ServeOptions<R> & {
234
256
  readonly disablePreemptiveShutdown?: boolean | undefined
235
257
  readonly gracefulShutdownTimeout?: Duration.Input | undefined
258
+ readonly websocket?: WebSocketOptions | undefined
236
259
  }
237
260
  ) => Layer.Layer<Server.HttpServer> = flow(make, Layer.effect(Server.HttpServer)) as any
238
261
 
@@ -262,6 +285,7 @@ export const layer = <R extends string>(
262
285
  options: ServeOptions<R> & {
263
286
  readonly disablePreemptiveShutdown?: boolean | undefined
264
287
  readonly gracefulShutdownTimeout?: Duration.Input | undefined
288
+ readonly websocket?: WebSocketOptions | undefined
265
289
  }
266
290
  ): Layer.Layer<
267
291
  | Server.HttpServer
@@ -273,7 +297,7 @@ export const layer = <R extends string>(
273
297
  /**
274
298
  * Layer that starts a Bun HTTP server on an ephemeral port for tests.
275
299
  *
276
- * @category layers
300
+ * @category testing
277
301
  * @since 4.0.0
278
302
  */
279
303
  export const layerTest: Layer.Layer<
@@ -296,6 +320,7 @@ export const layerConfig = <R extends string>(
296
320
  ServeOptions<R> & {
297
321
  readonly disablePreemptiveShutdown?: boolean | undefined
298
322
  readonly gracefulShutdownTimeout?: Duration.Input | undefined
323
+ readonly websocket?: WebSocketOptions | undefined
299
324
  }
300
325
  >
301
326
  ): Layer.Layer<
@@ -24,19 +24,18 @@ import * as BunStream from "./BunStream.ts"
24
24
  */
25
25
  export const stream = (source: Request): Stream.Stream<Multipart.Part, Multipart.MultipartError> =>
26
26
  BunStream.fromReadableStream({
27
- evaluate: () => source.body ?? emptyReadbleStream,
27
+ evaluate: () =>
28
+ source.body ?? new ReadableStream({
29
+ start(controller) {
30
+ controller.enqueue(new Uint8Array())
31
+ controller.close()
32
+ }
33
+ }),
28
34
  onError: (cause) => Multipart.MultipartError.fromReason("InternalError", cause)
29
35
  }).pipe(
30
36
  Stream.pipeThroughChannel(Multipart.makeChannel(Object.fromEntries(source.headers)))
31
37
  )
32
38
 
33
- const emptyReadbleStream = new ReadableStream({
34
- start(controller) {
35
- controller.enqueue(new Uint8Array())
36
- controller.close()
37
- }
38
- })
39
-
40
39
  /**
41
40
  * Parses and persists multipart data from a Bun `Request`, requiring file-system, path, and scope services.
42
41
  *
@@ -77,22 +77,11 @@ export const layer: Layer.Layer<WorkerRunner.WorkerRunnerPlatform> = Layer.succe
77
77
  })
78
78
  )
79
79
  }
80
- function onError(error: MessageEvent) {
81
- Deferred.doneUnsafe(
82
- closeLatch,
83
- new WorkerError({
84
- reason: new WorkerReceiveError({
85
- message: "received error event",
86
- cause: error.data
87
- })
88
- })
89
- )
90
- }
91
80
  yield* Scope.addFinalizer(
92
81
  scope,
93
82
  Effect.sync(() => {
94
83
  port.removeEventListener("message", onMessage)
95
- port.removeEventListener("messageerror", onError)
84
+ port.removeEventListener("messageerror", onMessageError)
96
85
  })
97
86
  )
98
87
  port.addEventListener("message", onMessage)