@effect/platform 0.48.29 → 0.49.0

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 (157) hide show
  1. package/README.md +12 -12
  2. package/dist/cjs/Http/App.js +9 -7
  3. package/dist/cjs/Http/App.js.map +1 -1
  4. package/dist/cjs/Http/Client.js +13 -3
  5. package/dist/cjs/Http/Client.js.map +1 -1
  6. package/dist/cjs/Http/ClientResponse.js +9 -9
  7. package/dist/cjs/Http/ClientResponse.js.map +1 -1
  8. package/dist/cjs/Http/Cookies.js +7 -7
  9. package/dist/cjs/Http/Cookies.js.map +1 -1
  10. package/dist/cjs/Http/Headers.js +7 -7
  11. package/dist/cjs/Http/Headers.js.map +1 -1
  12. package/dist/cjs/Http/IncomingMessage.js +7 -7
  13. package/dist/cjs/Http/IncomingMessage.js.map +1 -1
  14. package/dist/cjs/Http/Middleware.js +11 -1
  15. package/dist/cjs/Http/Middleware.js.map +1 -1
  16. package/dist/cjs/Http/Multiplex.js.map +1 -1
  17. package/dist/cjs/Http/Router.js.map +1 -1
  18. package/dist/cjs/Http/UrlParams.js +13 -13
  19. package/dist/cjs/Http/UrlParams.js.map +1 -1
  20. package/dist/cjs/PlatformConfigProvider.js +2 -2
  21. package/dist/cjs/PlatformConfigProvider.js.map +1 -1
  22. package/dist/cjs/Socket.js +6 -6
  23. package/dist/cjs/Socket.js.map +1 -1
  24. package/dist/cjs/Transferable.js +1 -1
  25. package/dist/cjs/Transferable.js.map +1 -1
  26. package/dist/cjs/WorkerRunner.js.map +1 -1
  27. package/dist/cjs/internal/command.js +1 -1
  28. package/dist/cjs/internal/command.js.map +1 -1
  29. package/dist/cjs/internal/fileSystem.js +2 -2
  30. package/dist/cjs/internal/fileSystem.js.map +1 -1
  31. package/dist/cjs/internal/http/client.js +19 -16
  32. package/dist/cjs/internal/http/client.js.map +1 -1
  33. package/dist/cjs/internal/http/clientResponse.js +5 -5
  34. package/dist/cjs/internal/http/clientResponse.js.map +1 -1
  35. package/dist/cjs/internal/http/middleware.js +8 -3
  36. package/dist/cjs/internal/http/middleware.js.map +1 -1
  37. package/dist/cjs/internal/http/multipart.js +4 -4
  38. package/dist/cjs/internal/http/multipart.js.map +1 -1
  39. package/dist/cjs/internal/http/multiplex.js +2 -2
  40. package/dist/cjs/internal/http/multiplex.js.map +1 -1
  41. package/dist/cjs/internal/http/router.js +2 -1
  42. package/dist/cjs/internal/http/router.js.map +1 -1
  43. package/dist/cjs/internal/worker.js +7 -7
  44. package/dist/cjs/internal/worker.js.map +1 -1
  45. package/dist/cjs/internal/workerRunner.js +14 -13
  46. package/dist/cjs/internal/workerRunner.js.map +1 -1
  47. package/dist/dts/Command.d.ts +3 -3
  48. package/dist/dts/Command.d.ts.map +1 -1
  49. package/dist/dts/Http/App.d.ts +7 -7
  50. package/dist/dts/Http/App.d.ts.map +1 -1
  51. package/dist/dts/Http/Client.d.ts +78 -65
  52. package/dist/dts/Http/Client.d.ts.map +1 -1
  53. package/dist/dts/Http/ClientResponse.d.ts +5 -5
  54. package/dist/dts/Http/Cookies.d.ts +3 -3
  55. package/dist/dts/Http/Cookies.d.ts.map +1 -1
  56. package/dist/dts/Http/Headers.d.ts +4 -4
  57. package/dist/dts/Http/Headers.d.ts.map +1 -1
  58. package/dist/dts/Http/IncomingMessage.d.ts +4 -3
  59. package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
  60. package/dist/dts/Http/Middleware.d.ts +22 -5
  61. package/dist/dts/Http/Middleware.d.ts.map +1 -1
  62. package/dist/dts/Http/Multiplex.d.ts +22 -22
  63. package/dist/dts/Http/Multiplex.d.ts.map +1 -1
  64. package/dist/dts/Http/Router.d.ts +80 -80
  65. package/dist/dts/Http/Router.d.ts.map +1 -1
  66. package/dist/dts/Http/Server.d.ts +11 -11
  67. package/dist/dts/Http/Server.d.ts.map +1 -1
  68. package/dist/dts/Http/ServerRequest.d.ts +1 -1
  69. package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
  70. package/dist/dts/Http/TraceContext.d.ts.map +1 -1
  71. package/dist/dts/Http/UrlParams.d.ts.map +1 -1
  72. package/dist/dts/PlatformConfigProvider.d.ts.map +1 -1
  73. package/dist/dts/Socket.d.ts +10 -10
  74. package/dist/dts/Socket.d.ts.map +1 -1
  75. package/dist/dts/Transferable.d.ts.map +1 -1
  76. package/dist/dts/Worker.d.ts +6 -6
  77. package/dist/dts/Worker.d.ts.map +1 -1
  78. package/dist/dts/WorkerRunner.d.ts +5 -5
  79. package/dist/dts/WorkerRunner.d.ts.map +1 -1
  80. package/dist/dts/internal/http/router.d.ts +1 -1
  81. package/dist/dts/internal/http/router.d.ts.map +1 -1
  82. package/dist/esm/Http/App.js +9 -7
  83. package/dist/esm/Http/App.js.map +1 -1
  84. package/dist/esm/Http/Client.js +12 -2
  85. package/dist/esm/Http/Client.js.map +1 -1
  86. package/dist/esm/Http/ClientResponse.js +5 -5
  87. package/dist/esm/Http/ClientResponse.js.map +1 -1
  88. package/dist/esm/Http/Cookies.js +7 -7
  89. package/dist/esm/Http/Cookies.js.map +1 -1
  90. package/dist/esm/Http/Headers.js +7 -7
  91. package/dist/esm/Http/Headers.js.map +1 -1
  92. package/dist/esm/Http/IncomingMessage.js +3 -3
  93. package/dist/esm/Http/IncomingMessage.js.map +1 -1
  94. package/dist/esm/Http/Middleware.js +10 -0
  95. package/dist/esm/Http/Middleware.js.map +1 -1
  96. package/dist/esm/Http/Multiplex.js.map +1 -1
  97. package/dist/esm/Http/Router.js.map +1 -1
  98. package/dist/esm/Http/UrlParams.js +13 -13
  99. package/dist/esm/Http/UrlParams.js.map +1 -1
  100. package/dist/esm/PlatformConfigProvider.js +2 -2
  101. package/dist/esm/PlatformConfigProvider.js.map +1 -1
  102. package/dist/esm/Socket.js +6 -6
  103. package/dist/esm/Socket.js.map +1 -1
  104. package/dist/esm/Transferable.js +1 -1
  105. package/dist/esm/Transferable.js.map +1 -1
  106. package/dist/esm/WorkerRunner.js.map +1 -1
  107. package/dist/esm/internal/command.js +1 -1
  108. package/dist/esm/internal/command.js.map +1 -1
  109. package/dist/esm/internal/fileSystem.js +2 -2
  110. package/dist/esm/internal/fileSystem.js.map +1 -1
  111. package/dist/esm/internal/http/client.js +18 -13
  112. package/dist/esm/internal/http/client.js.map +1 -1
  113. package/dist/esm/internal/http/clientResponse.js +2 -2
  114. package/dist/esm/internal/http/clientResponse.js.map +1 -1
  115. package/dist/esm/internal/http/middleware.js +7 -2
  116. package/dist/esm/internal/http/middleware.js.map +1 -1
  117. package/dist/esm/internal/http/multipart.js +4 -4
  118. package/dist/esm/internal/http/multipart.js.map +1 -1
  119. package/dist/esm/internal/http/multiplex.js +2 -2
  120. package/dist/esm/internal/http/multiplex.js.map +1 -1
  121. package/dist/esm/internal/http/router.js +2 -1
  122. package/dist/esm/internal/http/router.js.map +1 -1
  123. package/dist/esm/internal/worker.js +7 -7
  124. package/dist/esm/internal/worker.js.map +1 -1
  125. package/dist/esm/internal/workerRunner.js +14 -13
  126. package/dist/esm/internal/workerRunner.js.map +1 -1
  127. package/package.json +3 -3
  128. package/src/Command.ts +3 -3
  129. package/src/Http/App.ts +21 -17
  130. package/src/Http/Client.ts +105 -90
  131. package/src/Http/ClientResponse.ts +7 -7
  132. package/src/Http/Cookies.ts +9 -9
  133. package/src/Http/Headers.ts +12 -12
  134. package/src/Http/IncomingMessage.ts +16 -6
  135. package/src/Http/Middleware.ts +30 -6
  136. package/src/Http/Multiplex.ts +38 -38
  137. package/src/Http/Router.ts +136 -134
  138. package/src/Http/Server.ts +16 -16
  139. package/src/Http/ServerRequest.ts +1 -1
  140. package/src/Http/UrlParams.ts +15 -15
  141. package/src/PlatformConfigProvider.ts +2 -2
  142. package/src/Socket.ts +6 -6
  143. package/src/Transferable.ts +1 -1
  144. package/src/Worker.ts +9 -9
  145. package/src/WorkerRunner.ts +5 -4
  146. package/src/internal/command.ts +12 -6
  147. package/src/internal/fileSystem.ts +2 -2
  148. package/src/internal/http/client.ts +221 -204
  149. package/src/internal/http/clientResponse.ts +2 -2
  150. package/src/internal/http/middleware.ts +24 -1
  151. package/src/internal/http/multipart.ts +4 -4
  152. package/src/internal/http/multiplex.ts +54 -54
  153. package/src/internal/http/router.ts +121 -104
  154. package/src/internal/http/server.ts +17 -17
  155. package/src/internal/http/serverRequest.ts +1 -1
  156. package/src/internal/worker.ts +14 -14
  157. package/src/internal/workerRunner.ts +20 -16
@@ -4,10 +4,10 @@
4
4
  import type { ParseOptions } from "@effect/schema/AST"
5
5
  import type * as ParseResult from "@effect/schema/ParseResult"
6
6
  import * as Schema from "@effect/schema/Schema"
7
+ import * as Array from "effect/Array"
7
8
  import * as Effect from "effect/Effect"
8
9
  import { dual } from "effect/Function"
9
10
  import * as Option from "effect/Option"
10
- import * as ReadonlyArray from "effect/ReadonlyArray"
11
11
 
12
12
  /**
13
13
  * @since 1.0.0
@@ -27,9 +27,9 @@ export type Input = Readonly<Record<string, string>> | Iterable<readonly [string
27
27
  */
28
28
  export const fromInput = (input: Input): UrlParams => {
29
29
  if (Symbol.iterator in input) {
30
- return ReadonlyArray.fromIterable(input)
30
+ return Array.fromIterable(input)
31
31
  }
32
- return ReadonlyArray.fromIterable(Object.entries(input))
32
+ return Array.fromIterable(Object.entries(input))
33
33
  }
34
34
 
35
35
  /**
@@ -59,7 +59,7 @@ export const getAll: {
59
59
  (key: string) => (self: UrlParams) => ReadonlyArray<string>,
60
60
  (self: UrlParams, key: string) => ReadonlyArray<string>
61
61
  >(2, (self, key) =>
62
- ReadonlyArray.reduce(self, [] as Array<string>, (acc, [k, value]) => {
62
+ Array.reduce(self, [] as Array<string>, (acc, [k, value]) => {
63
63
  if (k === key) {
64
64
  acc.push(value)
65
65
  }
@@ -78,7 +78,7 @@ export const getFirst: {
78
78
  (self: UrlParams, key: string) => Option.Option<string>
79
79
  >(2, (self, key) =>
80
80
  Option.map(
81
- ReadonlyArray.findFirst(
81
+ Array.findFirst(
82
82
  self,
83
83
  ([k]) => k === key
84
84
  ),
@@ -97,7 +97,7 @@ export const getLast: {
97
97
  (self: UrlParams, key: string) => Option.Option<string>
98
98
  >(2, (self, key) =>
99
99
  Option.map(
100
- ReadonlyArray.findLast(
100
+ Array.findLast(
101
101
  self,
102
102
  ([k]) => k === key
103
103
  ),
@@ -115,8 +115,8 @@ export const set: {
115
115
  (key: string, value: string) => (self: UrlParams) => UrlParams,
116
116
  (self: UrlParams, key: string, value: string) => UrlParams
117
117
  >(3, (self, key, value) =>
118
- ReadonlyArray.append(
119
- ReadonlyArray.filter(self, ([k]) => k !== key),
118
+ Array.append(
119
+ Array.filter(self, ([k]) => k !== key),
120
120
  [key, value]
121
121
  ))
122
122
 
@@ -133,8 +133,8 @@ export const setAll: {
133
133
  >(2, (self, input) => {
134
134
  const toSet = fromInput(input)
135
135
  const keys = toSet.map(([k]) => k)
136
- return ReadonlyArray.appendAll(
137
- ReadonlyArray.filter(self, ([k]) => keys.includes(k)),
136
+ return Array.appendAll(
137
+ Array.filter(self, ([k]) => keys.includes(k)),
138
138
  toSet
139
139
  )
140
140
  })
@@ -150,7 +150,7 @@ export const append: {
150
150
  (key: string, value: string) => (self: UrlParams) => UrlParams,
151
151
  (self: UrlParams, key: string, value: string) => UrlParams
152
152
  >(3, (self, key, value) =>
153
- ReadonlyArray.append(
153
+ Array.append(
154
154
  self,
155
155
  [key, value]
156
156
  ))
@@ -166,7 +166,7 @@ export const appendAll: {
166
166
  (input: Input) => (self: UrlParams) => UrlParams,
167
167
  (self: UrlParams, input: Input) => UrlParams
168
168
  >(2, (self, input) =>
169
- ReadonlyArray.appendAll(
169
+ Array.appendAll(
170
170
  self,
171
171
  fromInput(input)
172
172
  ))
@@ -181,7 +181,7 @@ export const remove: {
181
181
  } = dual<
182
182
  (key: string) => (self: UrlParams) => UrlParams,
183
183
  (self: UrlParams, key: string) => UrlParams
184
- >(2, (self, key) => ReadonlyArray.filter(self, ([k]) => k !== key))
184
+ >(2, (self, key) => Array.filter(self, ([k]) => k !== key))
185
185
 
186
186
  /**
187
187
  * @since 1.0.0
@@ -197,7 +197,7 @@ export const makeUrl = <E>(url: string, params: UrlParams, onError: (e: unknown)
197
197
  Effect.try({
198
198
  try: () => {
199
199
  const urlInstance = new URL(url, baseUrl())
200
- ReadonlyArray.forEach(params, ([key, value]) => {
200
+ Array.forEach(params, ([key, value]) => {
201
201
  if (value !== undefined) {
202
202
  urlInstance.searchParams.append(key, value)
203
203
  }
@@ -208,7 +208,7 @@ export const makeUrl = <E>(url: string, params: UrlParams, onError: (e: unknown)
208
208
  })
209
209
 
210
210
  const baseUrl = (): string | undefined => {
211
- if ("location" in globalThis) {
211
+ if ("location" in globalThis && globalThis.location !== undefined) {
212
212
  return location.origin + location.pathname
213
213
  }
214
214
  return undefined
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import * as Array from "effect/Array"
4
5
  import * as Cause from "effect/Cause"
5
6
  import type * as Config from "effect/Config"
6
7
  import * as ConfigError from "effect/ConfigError"
@@ -12,7 +13,6 @@ import * as Effect from "effect/Effect"
12
13
  import * as Either from "effect/Either"
13
14
  import * as HashSet from "effect/HashSet"
14
15
  import * as Layer from "effect/Layer"
15
- import * as ReadonlyArray from "effect/ReadonlyArray"
16
16
  import { isPlatformError, type PlatformError } from "./Error.js"
17
17
  import * as FileSystem from "./FileSystem.js"
18
18
  import * as Path from "./Path.js"
@@ -31,7 +31,7 @@ export const fromFileTree = (options?: {
31
31
  const rootDirectory = options?.rootDirectory ?? "/"
32
32
 
33
33
  const parseConfig = <A>(primitive: Config.Config.Primitive<A>) => (value: string) =>
34
- Either.map(primitive.parse(value.trim()), ReadonlyArray.of)
34
+ Either.map(primitive.parse(value.trim()), Array.of)
35
35
 
36
36
  const readConfig = <A>(filePath: string, primitive: Config.Config.Primitive<A>) =>
37
37
  Effect.flatMap(
package/src/Socket.ts CHANGED
@@ -181,7 +181,7 @@ export const toChannel = <IE>(
181
181
  const exitQueue = yield* _(Queue.unbounded<Exit.Exit<Chunk.Chunk<Uint8Array>, SocketError | IE>>())
182
182
 
183
183
  const input: AsyncProducer.AsyncInputProducer<IE, Chunk.Chunk<Uint8Array | string | CloseEvent>, unknown> = {
184
- awaitRead: () => Effect.unit,
184
+ awaitRead: () => Effect.void,
185
185
  emit(chunk) {
186
186
  return Effect.catchAllCause(
187
187
  Effect.forEach(chunk, write, { discard: true }),
@@ -190,12 +190,12 @@ export const toChannel = <IE>(
190
190
  },
191
191
  error(error) {
192
192
  return Effect.zipRight(
193
- Scope.close(writeScope, Exit.unit),
193
+ Scope.close(writeScope, Exit.void),
194
194
  Queue.offer(exitQueue, Exit.failCause(error))
195
195
  )
196
196
  },
197
197
  done() {
198
- return Scope.close(writeScope, Exit.unit)
198
+ return Scope.close(writeScope, Exit.void)
199
199
  }
200
200
  }
201
201
 
@@ -212,7 +212,7 @@ export const toChannel = <IE>(
212
212
  .flatMap(
213
213
  Queue.take(exitQueue),
214
214
  Exit.match({
215
- onFailure: (cause) => Cause.isEmptyType(cause) ? Channel.unit : Channel.failCause(cause),
215
+ onFailure: (cause) => Cause.isEmptyType(cause) ? Channel.void : Channel.failCause(cause),
216
216
  onSuccess: (chunk) => Channel.zipRight(Channel.write(chunk), loop)
217
217
  })
218
218
  )
@@ -350,7 +350,7 @@ export const fromWebSocket = (
350
350
  yield* _(
351
351
  Effect.async<void, SocketError, never>((resume) => {
352
352
  ws.onopen = () => {
353
- resume(Effect.unit)
353
+ resume(Effect.void)
354
354
  }
355
355
  }),
356
356
  Effect.timeoutFail({
@@ -388,7 +388,7 @@ export const fromWebSocket = (
388
388
  FiberSet.join(fiberSet),
389
389
  Effect.catchIf(
390
390
  SocketCloseError.isClean((_) => !closeCodeIsError(_)),
391
- (_) => Effect.unit
391
+ (_) => Effect.void
392
392
  )
393
393
  )
394
394
  }).pipe(
@@ -69,7 +69,7 @@ export const addAll = (tranferables: Iterable<globalThis.Transferable>): Effect.
69
69
  Effect.flatMap(
70
70
  Effect.serviceOption(Collector),
71
71
  Option.match({
72
- onNone: () => Effect.unit,
72
+ onNone: () => Effect.void,
73
73
  onSome: (_) => _.addAll(tranferables)
74
74
  })
75
75
  )
package/src/Worker.ts CHANGED
@@ -72,7 +72,7 @@ export const PlatformWorker: Context.Tag<PlatformWorker, PlatformWorker> = inter
72
72
  * @since 1.0.0
73
73
  * @category models
74
74
  */
75
- export interface Worker<I, E, O> {
75
+ export interface Worker<I, O, E = never> {
76
76
  readonly id: number
77
77
  readonly execute: (message: I) => Stream.Stream<O, E | WorkerError>
78
78
  readonly executeEffect: (message: I) => Effect.Effect<O, E | WorkerError>
@@ -141,8 +141,8 @@ export declare namespace Worker {
141
141
  * @since 1.0.0
142
142
  * @category models
143
143
  */
144
- export interface WorkerPool<I, E, O> {
145
- readonly backing: Pool.Pool<Worker<I, E, O>, WorkerError>
144
+ export interface WorkerPool<I, O, E = never> {
145
+ readonly backing: Pool.Pool<Worker<I, O, E>, WorkerError>
146
146
  readonly broadcast: (message: I) => Effect.Effect<void, E | WorkerError>
147
147
  readonly execute: (message: I) => Stream.Stream<O, E | WorkerError>
148
148
  readonly executeEffect: (message: I) => Effect.Effect<O, E | WorkerError>
@@ -198,9 +198,9 @@ export type WorkerManagerTypeId = typeof WorkerManagerTypeId
198
198
  */
199
199
  export interface WorkerManager {
200
200
  readonly [WorkerManagerTypeId]: WorkerManagerTypeId
201
- readonly spawn: <I, E, O>(
201
+ readonly spawn: <I, O, E>(
202
202
  options: Worker.Options<I>
203
- ) => Effect.Effect<Worker<I, E, O>, WorkerError, Scope.Scope | Spawner>
203
+ ) => Effect.Effect<Worker<I, O, E>, WorkerError, Scope.Scope | Spawner>
204
204
  }
205
205
 
206
206
  /**
@@ -225,16 +225,16 @@ export const layerManager: Layer.Layer<WorkerManager, never, PlatformWorker> = i
225
225
  * @since 1.0.0
226
226
  * @category constructors
227
227
  */
228
- export const makePool: <I, E, O>(
228
+ export const makePool: <I, O, E>(
229
229
  options: WorkerPool.Options<I>
230
- ) => Effect.Effect<WorkerPool<I, E, O>, never, WorkerManager | Spawner | Scope.Scope> = internal.makePool
230
+ ) => Effect.Effect<WorkerPool<I, O, E>, never, WorkerManager | Spawner | Scope.Scope> = internal.makePool
231
231
 
232
232
  /**
233
233
  * @since 1.0.0
234
234
  * @category constructors
235
235
  */
236
- export const makePoolLayer: <Tag, I, E, O>(
237
- tag: Context.Tag<Tag, WorkerPool<I, E, O>>,
236
+ export const makePoolLayer: <Tag, I, O, E>(
237
+ tag: Context.Tag<Tag, WorkerPool<I, O, E>>,
238
238
  options: WorkerPool.Options<I>
239
239
  ) => Layer.Layer<Tag, never, WorkerManager | Spawner> = internal.makePoolLayer
240
240
 
@@ -17,8 +17,9 @@ import type { WorkerError } from "./WorkerError.js"
17
17
  * @category models
18
18
  */
19
19
  export interface BackingRunner<I, O> {
20
- readonly queue: Queue.Dequeue<I>
20
+ readonly queue: Queue.Dequeue<readonly [portId: number, message: I]>
21
21
  readonly send: (
22
+ portId: number,
22
23
  message: O,
23
24
  transfers?: ReadonlyArray<unknown>
24
25
  ) => Effect.Effect<void>
@@ -74,7 +75,7 @@ export declare namespace Runner {
74
75
  * @since 1.0.0
75
76
  * @category models
76
77
  */
77
- export interface Options<I, E, O> {
78
+ export interface Options<I, O, E> {
78
79
  readonly decode?: (
79
80
  message: unknown
80
81
  ) => Effect.Effect<I, WorkerError>
@@ -96,7 +97,7 @@ export declare namespace Runner {
96
97
  */
97
98
  export const make: <I, R, E, O>(
98
99
  process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
99
- options?: Runner.Options<I, E, O> | undefined
100
+ options?: Runner.Options<I, O, E> | undefined
100
101
  ) => Effect.Effect<void, WorkerError, Scope.Scope | R | PlatformRunner> = internal.make
101
102
 
102
103
  /**
@@ -105,7 +106,7 @@ export const make: <I, R, E, O>(
105
106
  */
106
107
  export const layer: <I, R, E, O>(
107
108
  process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
108
- options?: Runner.Options<I, E, O> | undefined
109
+ options?: Runner.Options<I, O, E> | undefined
109
110
  ) => Layer.Layer<never, WorkerError, R | PlatformRunner> = internal.layer
110
111
 
111
112
  /**
@@ -1,3 +1,4 @@
1
+ import type * as ReadonlyArray from "effect/Array"
1
2
  import * as Chunk from "effect/Chunk"
2
3
  import * as Effect from "effect/Effect"
3
4
  import { dual } from "effect/Function"
@@ -5,7 +6,6 @@ import * as HashMap from "effect/HashMap"
5
6
  import * as Inspectable from "effect/Inspectable"
6
7
  import * as Option from "effect/Option"
7
8
  import { pipeArguments } from "effect/Pipeable"
8
- import type * as ReadonlyArray from "effect/ReadonlyArray"
9
9
  import type { Scope } from "effect/Scope"
10
10
  import * as Stream from "effect/Stream"
11
11
  import type * as Command from "../Command.js"
@@ -21,15 +21,21 @@ export const isCommand = (u: unknown): u is Command.Command => typeof u === "obj
21
21
 
22
22
  /** @internal */
23
23
  export const env: {
24
- (environment: Record<string, string>): (self: Command.Command) => Command.Command
25
- (self: Command.Command, environment: Record<string, string>): Command.Command
24
+ (environment: Record<string, string | undefined>): (self: Command.Command) => Command.Command
25
+ (self: Command.Command, environment: Record<string, string | undefined>): Command.Command
26
26
  } = dual<
27
- (environment: Record<string, string>) => (self: Command.Command) => Command.Command,
28
- (self: Command.Command, environment: Record<string, string>) => Command.Command
27
+ (environment: Record<string, string | undefined>) => (self: Command.Command) => Command.Command,
28
+ (self: Command.Command, environment: Record<string, string | undefined>) => Command.Command
29
29
  >(2, (self, environment) => {
30
30
  switch (self._tag) {
31
31
  case "StandardCommand": {
32
- return makeStandard({ ...self, env: HashMap.union(self.env, HashMap.fromIterable(Object.entries(environment))) })
32
+ return makeStandard({
33
+ ...self,
34
+ env: HashMap.union(
35
+ self.env,
36
+ HashMap.fromIterable(Object.entries(environment).filter(([v]) => v !== undefined))
37
+ ) as HashMap.HashMap<string, string>
38
+ })
33
39
  }
34
40
  case "PipedCommand": {
35
41
  return pipeTo(env(self.left, environment), env(self.right, environment))
@@ -99,7 +99,7 @@ const stream = (file: File, {
99
99
  totalBytesRead: bigint
100
100
  ): Channel.Channel<Chunk.Chunk<Uint8Array>, unknown, Error.PlatformError, unknown, void, unknown> {
101
101
  if (bytesToRead !== undefined && bytesToRead <= totalBytesRead) {
102
- return Channel.unit
102
+ return Channel.void
103
103
  }
104
104
 
105
105
  const toRead = bytesToRead !== undefined && (bytesToRead - totalBytesRead) < chunkSize
@@ -109,7 +109,7 @@ const stream = (file: File, {
109
109
  return Channel.flatMap(
110
110
  file.readAlloc(toRead),
111
111
  Option.match({
112
- onNone: () => Channel.unit,
112
+ onNone: () => Channel.void,
113
113
  onSome: (buf) =>
114
114
  Channel.flatMap(
115
115
  Channel.write(Chunk.of(buf)),