@effect/platform 0.21.0 → 0.22.1

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 (116) hide show
  1. package/Http/App/dist/effect-platform-Http-App.cjs.dev.js +22 -1
  2. package/Http/App/dist/effect-platform-Http-App.cjs.mjs +1 -0
  3. package/Http/App/dist/effect-platform-Http-App.cjs.prod.js +22 -1
  4. package/Http/App/dist/effect-platform-Http-App.esm.js +21 -1
  5. package/Http/Client/dist/effect-platform-Http-Client.cjs.dev.js +12 -12
  6. package/Http/Client/dist/effect-platform-Http-Client.cjs.mjs +2 -2
  7. package/Http/Client/dist/effect-platform-Http-Client.cjs.prod.js +12 -12
  8. package/Http/Client/dist/effect-platform-Http-Client.esm.js +12 -12
  9. package/Http/ClientRequest/dist/effect-platform-Http-ClientRequest.esm.js +2 -2
  10. package/Http/Middleware/dist/effect-platform-Http-Middleware.cjs.dev.js +5 -13
  11. package/Http/Middleware/dist/effect-platform-Http-Middleware.cjs.mjs +0 -2
  12. package/Http/Middleware/dist/effect-platform-Http-Middleware.cjs.prod.js +5 -13
  13. package/Http/Middleware/dist/effect-platform-Http-Middleware.esm.js +7 -13
  14. package/Http/Router/dist/effect-platform-Http-Router.cjs.dev.js +1 -1
  15. package/Http/Router/dist/effect-platform-Http-Router.cjs.prod.js +1 -1
  16. package/Http/Router/dist/effect-platform-Http-Router.esm.js +3 -3
  17. package/Http/ServerError/dist/effect-platform-Http-ServerError.esm.js +1 -1
  18. package/Http/ServerRequest/dist/effect-platform-Http-ServerRequest.cjs.dev.js +1 -1
  19. package/Http/ServerRequest/dist/effect-platform-Http-ServerRequest.cjs.prod.js +1 -1
  20. package/Http/ServerRequest/dist/effect-platform-Http-ServerRequest.esm.js +2 -2
  21. package/Http/ServerResponse/dist/effect-platform-Http-ServerResponse.esm.js +1 -1
  22. package/HttpClient/dist/effect-platform-HttpClient.cjs.dev.js +5 -5
  23. package/HttpClient/dist/effect-platform-HttpClient.cjs.prod.js +5 -5
  24. package/HttpClient/dist/effect-platform-HttpClient.esm.js +6 -6
  25. package/HttpServer/dist/effect-platform-HttpServer.cjs.dev.js +12 -11
  26. package/HttpServer/dist/effect-platform-HttpServer.cjs.prod.js +12 -11
  27. package/HttpServer/dist/effect-platform-HttpServer.esm.js +14 -13
  28. package/Worker/dist/effect-platform-Worker.cjs.d.mts +2 -0
  29. package/Worker/dist/effect-platform-Worker.cjs.d.mts.map +1 -0
  30. package/Worker/dist/effect-platform-Worker.cjs.d.ts +2 -0
  31. package/Worker/dist/effect-platform-Worker.cjs.d.ts.map +1 -0
  32. package/Worker/dist/effect-platform-Worker.cjs.dev.js +291 -0
  33. package/Worker/dist/effect-platform-Worker.cjs.js +7 -0
  34. package/Worker/dist/effect-platform-Worker.cjs.mjs +10 -0
  35. package/Worker/dist/effect-platform-Worker.cjs.prod.js +291 -0
  36. package/Worker/dist/effect-platform-Worker.esm.js +252 -0
  37. package/Worker/package.json +4 -0
  38. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts +2 -0
  39. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts.map +1 -0
  40. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts +2 -0
  41. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts.map +1 -0
  42. package/WorkerError/dist/effect-platform-WorkerError.cjs.dev.js +65 -0
  43. package/WorkerError/dist/effect-platform-WorkerError.cjs.js +7 -0
  44. package/WorkerError/dist/effect-platform-WorkerError.cjs.mjs +4 -0
  45. package/WorkerError/dist/effect-platform-WorkerError.cjs.prod.js +65 -0
  46. package/WorkerError/dist/effect-platform-WorkerError.esm.js +40 -0
  47. package/WorkerError/package.json +4 -0
  48. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts +2 -0
  49. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts.map +1 -0
  50. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts +2 -0
  51. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts.map +1 -0
  52. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.dev.js +129 -0
  53. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.js +7 -0
  54. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.mjs +5 -0
  55. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.prod.js +129 -0
  56. package/WorkerRunner/dist/effect-platform-WorkerRunner.esm.js +97 -0
  57. package/WorkerRunner/package.json +4 -0
  58. package/dist/{App-1ca51fa7.esm.js → App-2d206a13.esm.js} +9 -1
  59. package/dist/{App-d8b904fa.cjs.prod.js → App-7ef679dc.cjs.prod.js} +9 -0
  60. package/dist/{App-18152f12.cjs.dev.js → App-bad10dc1.cjs.dev.js} +9 -0
  61. package/dist/{Client-3938c9f5.cjs.dev.js → Client-0146412d.cjs.dev.js} +16 -19
  62. package/dist/{Client-e8ebeb3a.esm.js → Client-4f8f804b.esm.js} +18 -21
  63. package/dist/{Client-5497adf2.cjs.prod.js → Client-e9835f16.cjs.prod.js} +16 -19
  64. package/dist/{ClientRequest-490c76cd.esm.js → ClientRequest-27630c54.esm.js} +1 -1
  65. package/dist/Middleware-934a0c8f.esm.js +41 -0
  66. package/dist/Middleware-a2c50c35.cjs.dev.js +46 -0
  67. package/dist/Middleware-e53794a3.cjs.prod.js +46 -0
  68. package/dist/{Router-3112d780.esm.js → Router-2505b5dd.esm.js} +2 -2
  69. package/dist/{Router-2c0b718b.cjs.prod.js → Router-3645c2b3.cjs.prod.js} +3 -3
  70. package/dist/{Router-06c5cb9a.cjs.dev.js → Router-b9feed01.cjs.dev.js} +3 -3
  71. package/dist/{ServerError-04ad5b57.esm.js → ServerError-97730ed2.esm.js} +1 -1
  72. package/dist/{ServerRequest-41c7e979.esm.js → ServerRequest-078a4bb2.esm.js} +2 -2
  73. package/dist/ServerRequest-705b12bb.cjs.prod.js +2 -2
  74. package/dist/ServerRequest-8e9629a5.cjs.dev.js +2 -2
  75. package/dist/{ServerResponse-03c252ea.esm.js → ServerResponse-de572c21.esm.js} +1 -1
  76. package/dist/{clientRequest-6121a7f6.esm.js → clientRequest-fe7578cf.esm.js} +1 -1
  77. package/dist/declarations/src/Error.d.ts +1 -1
  78. package/dist/declarations/src/Error.d.ts.map +1 -1
  79. package/dist/declarations/src/Http/App.d.ts +5 -0
  80. package/dist/declarations/src/Http/App.d.ts.map +1 -1
  81. package/dist/declarations/src/Http/Client.d.ts +5 -6
  82. package/dist/declarations/src/Http/Client.d.ts.map +1 -1
  83. package/dist/declarations/src/Http/Middleware.d.ts +0 -10
  84. package/dist/declarations/src/Http/Middleware.d.ts.map +1 -1
  85. package/dist/declarations/src/Worker.d.ts +170 -0
  86. package/dist/declarations/src/Worker.d.ts.map +1 -0
  87. package/dist/declarations/src/WorkerError.d.ts +30 -0
  88. package/dist/declarations/src/WorkerError.d.ts.map +1 -0
  89. package/dist/declarations/src/WorkerRunner.d.ts +72 -0
  90. package/dist/declarations/src/WorkerRunner.d.ts.map +1 -0
  91. package/dist/declarations/src/index.d.ts +12 -0
  92. package/dist/declarations/src/index.d.ts.map +1 -1
  93. package/dist/effect-platform.cjs.dev.js +9 -0
  94. package/dist/effect-platform.cjs.mjs +4 -1
  95. package/dist/effect-platform.cjs.prod.js +9 -0
  96. package/dist/effect-platform.esm.js +6 -0
  97. package/dist/middleware-85768a1e.cjs.prod.js +66 -0
  98. package/dist/middleware-98794cc2.cjs.dev.js +66 -0
  99. package/dist/middleware-ea618e68.esm.js +41 -0
  100. package/package.json +24 -3
  101. package/src/Error.ts +1 -1
  102. package/src/Http/App.ts +9 -0
  103. package/src/Http/Client.ts +10 -8
  104. package/src/Http/Middleware.ts +0 -12
  105. package/src/Worker.ts +207 -0
  106. package/src/WorkerError.ts +34 -0
  107. package/src/WorkerRunner.ts +83 -0
  108. package/src/index.ts +15 -0
  109. package/src/internal/http/client.ts +33 -33
  110. package/src/internal/http/middleware.ts +4 -26
  111. package/src/internal/worker.ts +262 -0
  112. package/src/internal/workerError.ts +16 -0
  113. package/src/internal/workerRunner.ts +83 -0
  114. package/dist/Middleware-04ddadf1.esm.js +0 -100
  115. package/dist/Middleware-3e264366.cjs.dev.js +0 -127
  116. package/dist/Middleware-8b05423d.cjs.prod.js +0 -127
@@ -0,0 +1,262 @@
1
+ import * as Context from "effect/Context"
2
+ import * as Deferred from "effect/Deferred"
3
+ import * as Effect from "effect/Effect"
4
+ import * as Exit from "effect/Exit"
5
+ import * as Fiber from "effect/Fiber"
6
+ import { pipe } from "effect/Function"
7
+ import * as Layer from "effect/Layer"
8
+ import * as Pool from "effect/Pool"
9
+ import * as Queue from "effect/Queue"
10
+ import * as Stream from "effect/Stream"
11
+ import type * as Worker from "../Worker"
12
+ import type { WorkerError } from "../WorkerError"
13
+
14
+ /** @internal */
15
+ export const defaultQueue = <I>() =>
16
+ Effect.map(
17
+ Queue.unbounded<readonly [id: number, item: I]>(),
18
+ (queue): Worker.WorkerQueue<I> => ({
19
+ offer: (id, item) => Queue.offer(queue, [id, item]),
20
+ take: Queue.take(queue),
21
+ shutdown: Queue.shutdown(queue)
22
+ })
23
+ )
24
+
25
+ /** @internal */
26
+ export const PlatformWorkerTypeId: Worker.PlatformWorkerTypeId = Symbol.for(
27
+ "@effect/platform/Worker/PlatformWorker"
28
+ ) as Worker.PlatformWorkerTypeId
29
+
30
+ /** @internal */
31
+ export const PlatformWorker = Context.Tag<Worker.PlatformWorker>(
32
+ PlatformWorkerTypeId
33
+ )
34
+
35
+ /** @internal */
36
+ export const WorkerManagerTypeId: Worker.WorkerManagerTypeId = Symbol.for(
37
+ "@effect/platform/Worker/WorkerManager"
38
+ ) as Worker.WorkerManagerTypeId
39
+
40
+ /** @internal */
41
+ export const WorkerManager = Context.Tag<Worker.WorkerManager>(
42
+ WorkerManagerTypeId
43
+ )
44
+
45
+ /** @internal */
46
+ export const makeManager = Effect.gen(function*(_) {
47
+ const platform = yield* _(PlatformWorker)
48
+ let idCounter = 0
49
+ return WorkerManager.of({
50
+ [WorkerManagerTypeId]: WorkerManagerTypeId,
51
+ spawn<I, E, O>({ permits = 1, queue, spawn, transfers = (_) => [] }: Worker.Worker.Options<I>) {
52
+ return Effect.gen(function*(_) {
53
+ const id = idCounter++
54
+ const fiberId = yield* _(Effect.fiberId)
55
+ let requestIdCounter = 0
56
+ const readyLatch = yield* _(Deferred.make<never, void>())
57
+ const semaphore = yield* _(Effect.makeSemaphore(permits))
58
+ const requestMap = new Map<number, readonly [Queue.Queue<Exit.Exit<E, O>>, Deferred.Deferred<never, void>]>()
59
+
60
+ const outbound = queue ?? (yield* _(defaultQueue<I>()))
61
+ yield* _(Effect.addFinalizer(() => outbound.shutdown))
62
+
63
+ const backing = yield* _(
64
+ platform.spawn<Worker.Worker.Request<I>, Worker.Worker.Response<E, O>>(spawn(id))
65
+ )
66
+
67
+ yield* _(Effect.addFinalizer(() =>
68
+ Effect.zipRight(
69
+ Effect.forEach(requestMap.values(), ([queue]) => Queue.shutdown(queue), { discard: true }),
70
+ Effect.sync(() => requestMap.clear())
71
+ )
72
+ ))
73
+
74
+ const handleMessage = (msg: Worker.BackingWorker.Message<Worker.Worker.Response<E, O>>) =>
75
+ Effect.suspend(() => {
76
+ switch (msg[0]) {
77
+ case 0: {
78
+ return Deferred.complete(readyLatch, Effect.unit)
79
+ }
80
+ case 1: {
81
+ const response = msg[1]
82
+ const queue = requestMap.get(response[0])
83
+ if (!queue) return Effect.unit
84
+
85
+ switch (response[1]) {
86
+ // data
87
+ case 0: {
88
+ return Queue.offer(queue[0], Exit.succeed(response[2]))
89
+ }
90
+ // end
91
+ case 1: {
92
+ return response.length === 2 ?
93
+ Queue.shutdown(queue[0]) :
94
+ Effect.zipRight(
95
+ Queue.offer(queue[0], Exit.succeed(response[2])),
96
+ Queue.shutdown(queue[0])
97
+ )
98
+ }
99
+ // error / defect
100
+ case 2:
101
+ case 3: {
102
+ return Effect.zipRight(
103
+ Queue.offer(
104
+ queue[0],
105
+ response[1] === 2
106
+ ? Exit.fail(response[2])
107
+ : Exit.die(response[2])
108
+ ),
109
+ Queue.shutdown(queue[0])
110
+ )
111
+ }
112
+ }
113
+ }
114
+ }
115
+ })
116
+
117
+ const executeAcquire = (request: I) =>
118
+ Effect.tap(
119
+ Effect.all([
120
+ Effect.sync(() => requestIdCounter++),
121
+ Queue.unbounded<Exit.Exit<E, O>>(),
122
+ Deferred.make<never, void>()
123
+ ]),
124
+ ([id, queue, deferred]) =>
125
+ Effect.suspend(() => {
126
+ requestMap.set(id, [queue, deferred])
127
+ return outbound.offer(id, request)
128
+ })
129
+ )
130
+
131
+ const executeRelease = (
132
+ [id, , deferred]: [number, Queue.Queue<Exit.Exit<E, O>>, Deferred.Deferred<never, void>],
133
+ exit: Exit.Exit<unknown, unknown>
134
+ ) => {
135
+ const release = Effect.zipRight(
136
+ Deferred.complete(deferred, Effect.unit),
137
+ Effect.sync(() => requestMap.delete(id))
138
+ )
139
+ return Exit.isInterrupted(exit) ?
140
+ Effect.zipRight(
141
+ backing.send([id, 1]),
142
+ release
143
+ ) :
144
+ release
145
+ }
146
+
147
+ const execute = (request: I) =>
148
+ Stream.flatMap(
149
+ Stream.acquireRelease(
150
+ executeAcquire(request),
151
+ executeRelease
152
+ ),
153
+ ([, queue]) => Stream.flatten(Stream.fromQueue(queue))
154
+ )
155
+
156
+ const executeEffect = (request: I) =>
157
+ Effect.acquireUseRelease(
158
+ executeAcquire(request),
159
+ ([, queue]) => Effect.flatten(Queue.take(queue)),
160
+ executeRelease
161
+ )
162
+
163
+ const handleMessages = yield* _(
164
+ Queue.take(backing.queue),
165
+ Effect.flatMap(handleMessage),
166
+ Effect.forever,
167
+ Effect.forkDaemon
168
+ )
169
+ yield* _(Effect.addFinalizer(() => handleMessages.interruptAsFork(fiberId)))
170
+
171
+ const postMessages = yield* _(
172
+ semaphore.take(1),
173
+ Effect.zipRight(outbound.take),
174
+ Effect.flatMap(([id, request]) =>
175
+ pipe(
176
+ Effect.suspend(() => {
177
+ const result = requestMap.get(id)
178
+ if (!result) return Effect.unit
179
+ const transferables = transfers(request)
180
+ return Effect.zipRight(
181
+ backing.send([id, 0, request], transferables),
182
+ Deferred.await(result[1])
183
+ )
184
+ }),
185
+ Effect.ensuring(semaphore.release(1)),
186
+ Effect.fork
187
+ )
188
+ ),
189
+ Effect.forever,
190
+ Effect.forkDaemon
191
+ )
192
+ yield* _(Effect.addFinalizer(() => postMessages.interruptAsFork(fiberId)))
193
+
194
+ const join = Effect.race(
195
+ Fiber.joinAll([
196
+ handleMessages,
197
+ postMessages
198
+ ]),
199
+ backing.join
200
+ ) as Effect.Effect<never, WorkerError, never>
201
+
202
+ return { id, join, execute, executeEffect }
203
+ })
204
+ }
205
+ })
206
+ })
207
+
208
+ /** @internal */
209
+ export const layerManager = Layer.effect(WorkerManager, makeManager)
210
+
211
+ /** @internal */
212
+ export const makePool = <W>() =>
213
+ <I, E, O>(
214
+ options: Worker.WorkerPool.Options<I, W>
215
+ ) =>
216
+ Effect.gen(function*(_) {
217
+ const manager = yield* _(WorkerManager)
218
+ const backing = yield* _(
219
+ "timeToLive" in options ?
220
+ Pool.makeWithTTL({
221
+ acquire: manager.spawn<I, E, O>(options),
222
+ min: options.minSize,
223
+ max: options.maxSize,
224
+ timeToLive: options.timeToLive
225
+ }) :
226
+ Pool.make({
227
+ acquire: manager.spawn<I, E, O>(options),
228
+ size: options.size
229
+ })
230
+ )
231
+ const pool: Worker.WorkerPool<I, E, O> = {
232
+ backing,
233
+ execute: (message: I) =>
234
+ Stream.unwrap(
235
+ Effect.map(
236
+ Effect.scoped(backing.get()),
237
+ (worker) => worker.execute(message)
238
+ )
239
+ ),
240
+ executeEffect: (message: I) =>
241
+ Effect.flatMap(
242
+ Effect.scoped(backing.get()),
243
+ (worker) => worker.executeEffect(message)
244
+ )
245
+ }
246
+
247
+ return pool
248
+ })
249
+
250
+ /** @internal */
251
+ export const makePoolLayer = <W>(managerLayer: Layer.Layer<never, never, Worker.WorkerManager>) =>
252
+ <Tag, I, E, O>(
253
+ tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>,
254
+ options: Worker.WorkerPool.Options<I, W>
255
+ ) =>
256
+ Layer.provide(
257
+ managerLayer,
258
+ Layer.scoped(
259
+ tag,
260
+ makePool<W>()(options)
261
+ )
262
+ )
@@ -0,0 +1,16 @@
1
+ import * as Data from "effect/Data"
2
+ import type * as WorkerError_ from "../WorkerError"
3
+
4
+ /** @internal */
5
+ export const WorkerErrorTypeId: WorkerError_.WorkerErrorTypeId = Symbol.for(
6
+ "@effect-ts/platform/Worker/WorkerError"
7
+ ) as WorkerError_.WorkerErrorTypeId
8
+
9
+ /** @internal */
10
+ export const WorkerError = (reason: WorkerError_.WorkerError["reason"], error: unknown): WorkerError_.WorkerError =>
11
+ Data.struct({
12
+ [WorkerErrorTypeId]: WorkerErrorTypeId,
13
+ _tag: "WorkerError",
14
+ reason,
15
+ error
16
+ })
@@ -0,0 +1,83 @@
1
+ import * as Cause from "effect/Cause"
2
+ import * as Context from "effect/Context"
3
+ import * as Effect from "effect/Effect"
4
+ import * as Either from "effect/Either"
5
+ import * as Fiber from "effect/Fiber"
6
+ import { pipe } from "effect/Function"
7
+ import * as Queue from "effect/Queue"
8
+ import * as Stream from "effect/Stream"
9
+ import type * as Worker from "../Worker"
10
+ import type * as WorkerRunner from "../WorkerRunner"
11
+
12
+ /** @internal */
13
+ export const PlatformRunnerTypeId: WorkerRunner.PlatformRunnerTypeId = Symbol.for(
14
+ "@effect/platform/Runner/PlatformRunner"
15
+ ) as WorkerRunner.PlatformRunnerTypeId
16
+
17
+ /** @internal */
18
+ export const PlatformRunner = Context.Tag<WorkerRunner.PlatformRunner>(
19
+ PlatformRunnerTypeId
20
+ )
21
+
22
+ /** @internal */
23
+ export const make = <I, R, E, O>(
24
+ process: (request: I) => Stream.Stream<R, E, O> | Effect.Effect<R, E, O>,
25
+ options?: WorkerRunner.Runner.Options<O>
26
+ ) =>
27
+ Effect.gen(function*(_) {
28
+ const platform = yield* _(PlatformRunner)
29
+ const backing = yield* _(platform.start<Worker.Worker.Request<I>, Worker.Worker.Response<E, O>>())
30
+ const fiberMap = new Map<number, Fiber.Fiber<never, void>>()
31
+
32
+ const handleRequests = pipe(
33
+ Queue.take(backing.queue),
34
+ Effect.tap((req) => {
35
+ const id = req[0]
36
+ if (req[1] === 1) {
37
+ const fiber = fiberMap.get(id)
38
+ if (!fiber) return Effect.unit
39
+ return Fiber.interrupt(fiber)
40
+ }
41
+
42
+ const stream = process(req[2])
43
+
44
+ const effect = Effect.isEffect(stream) ?
45
+ Effect.matchCauseEffect(stream, {
46
+ onFailure: (cause) =>
47
+ Either.match(Cause.failureOrCause(cause), {
48
+ onLeft: (error) => backing.send([id, 2, error]),
49
+ onRight: (cause) => backing.send([id, 3, Cause.squash(cause)])
50
+ }),
51
+ onSuccess: (data) => backing.send([id, 1, data])
52
+ }) :
53
+ pipe(
54
+ stream,
55
+ Stream.tap((item) => backing.send([id, 0, item], options?.transfers ? options.transfers(item) : undefined)),
56
+ Stream.runDrain,
57
+ Effect.matchCauseEffect({
58
+ onFailure: (cause) =>
59
+ Either.match(Cause.failureOrCause(cause), {
60
+ onLeft: (error) => backing.send([id, 2, error]),
61
+ onRight: (cause) => backing.send([id, 3, Cause.squash(cause)])
62
+ }),
63
+ onSuccess: () => backing.send([id, 1])
64
+ })
65
+ )
66
+
67
+ return pipe(
68
+ effect,
69
+ Effect.ensuring(Effect.sync(() => fiberMap.delete(id))),
70
+ Effect.fork,
71
+ Effect.tap((fiber) => Effect.sync(() => fiberMap.set(id, fiber)))
72
+ )
73
+ }),
74
+ Effect.forever
75
+ )
76
+
77
+ return yield* _(
78
+ Effect.all([
79
+ handleRequests,
80
+ Fiber.join(backing.fiber)
81
+ ], { concurrency: "unbounded", discard: true })
82
+ )
83
+ })
@@ -1,100 +0,0 @@
1
- import * as Effect from 'effect/Effect';
2
- import { flow } from 'effect/Function';
3
- import { a as appendPreResponseHandler } from './App-1ca51fa7.esm.js';
4
- import { s as set } from './Headers-58b56a08.esm.js';
5
- import { schemaExternalSpan } from '../Http/IncomingMessage/dist/effect-platform-Http-IncomingMessage.esm.js';
6
- import { a as ServerRequest } from './ServerRequest-41c7e979.esm.js';
7
- import { s as setHeader } from './ServerResponse-03c252ea.esm.js';
8
-
9
- /** @internal */
10
- const make$1 = middleware => middleware;
11
-
12
- /** @internal */
13
- const logger$1 = /*#__PURE__*/make$1(httpApp => {
14
- let counter = 0;
15
- return Effect.flatMap(ServerRequest, request => Effect.withLogSpan(Effect.onExit(httpApp, exit => exit._tag === "Failure" ? Effect.annotateLogs(Effect.log(exit.cause), {
16
- "http.method": request.method,
17
- "http.url": request.url,
18
- "http.status": 500
19
- }) : Effect.annotateLogs(Effect.log(""), {
20
- "http.method": request.method,
21
- "http.url": request.url,
22
- "http.status": exit.value.status
23
- })), `http.span.${++counter}`));
24
- });
25
-
26
- /** @internal */
27
- const tracer$1 = /*#__PURE__*/make$1(httpApp => {
28
- const appWithStatus = Effect.tap(Effect.zipRight(appendPreResponseHandler(b3Response), httpApp), response => Effect.annotateCurrentSpan("http.status", response.status));
29
- return Effect.flatMap(ServerRequest, request => Effect.flatMap(Effect.orElseSucceed(schemaExternalSpan(request), () => undefined), parent => Effect.withSpan(appWithStatus, `http ${request.method}`, {
30
- attributes: {
31
- "http.method": request.method,
32
- "http.url": request.url
33
- },
34
- parent
35
- })));
36
- });
37
- const b3Response = (_request, response) => Effect.flatMap(Effect.currentSpan, span => span._tag === "Some" ? setHeader(response, "b3", `${span.value.traceId}-${span.value.spanId}-1${span.value.parent._tag === "Some" ? `-${span.value.parent.value.spanId}` : ""}`) : response);
38
-
39
- /** @internal */
40
- const xForwardedHeaders$1 = /*#__PURE__*/make$1(httpApp => Effect.updateService(httpApp, ServerRequest, request => request.headers["x-forwarded-host"] ? request.modify({
41
- headers: set(request.headers, "host", request.headers["x-forwarded-host"]),
42
- remoteAddress: request.headers["x-forwarded-for"]?.split(",")[0].trim()
43
- }) : request));
44
-
45
- /** @internal */
46
- const loggerTracer$1 = /*#__PURE__*/flow(tracer$1, logger$1);
47
-
48
- /**
49
- * @since 1.0.0
50
- */
51
-
52
- /**
53
- * @since 1.0.0
54
- * @category models
55
- */
56
-
57
- /**
58
- * @since 1.0.0
59
- */
60
-
61
- /**
62
- * @since 1.0.0
63
- * @category constructors
64
- */
65
- const make = make$1;
66
-
67
- /**
68
- * @since 1.0.0
69
- * @category constructors
70
- */
71
- const logger = logger$1;
72
-
73
- /**
74
- * @since 1.0.0
75
- * @category constructors
76
- */
77
- const tracer = tracer$1;
78
-
79
- /**
80
- * @since 1.0.0
81
- * @category constructors
82
- */
83
- const loggerTracer = loggerTracer$1;
84
-
85
- /**
86
- * @since 1.0.0
87
- * @category constructors
88
- */
89
- const xForwardedHeaders = xForwardedHeaders$1;
90
-
91
- var Middleware = /*#__PURE__*/Object.freeze({
92
- __proto__: null,
93
- make: make,
94
- logger: logger,
95
- tracer: tracer,
96
- loggerTracer: loggerTracer,
97
- xForwardedHeaders: xForwardedHeaders
98
- });
99
-
100
- export { Middleware as M, loggerTracer as a, logger as l, make as m, tracer as t, xForwardedHeaders as x };
@@ -1,127 +0,0 @@
1
- 'use strict';
2
-
3
- var Effect = require('effect/Effect');
4
- var Function = require('effect/Function');
5
- var Http_App_dist_effectPlatformHttpApp = require('./App-18152f12.cjs.dev.js');
6
- var Http_Headers_dist_effectPlatformHttpHeaders = require('./Headers-f56bc667.cjs.dev.js');
7
- var Http_IncomingMessage_dist_effectPlatformHttpIncomingMessage = require('../Http/IncomingMessage/dist/effect-platform-Http-IncomingMessage.cjs.dev.js');
8
- var Http_ServerRequest_dist_effectPlatformHttpServerRequest = require('./ServerRequest-8e9629a5.cjs.dev.js');
9
- var Http_ServerResponse_dist_effectPlatformHttpServerResponse = require('./ServerResponse-9af42ecb.cjs.dev.js');
10
-
11
- function _interopNamespace(e) {
12
- if (e && e.__esModule) return e;
13
- var n = Object.create(null);
14
- if (e) {
15
- Object.keys(e).forEach(function (k) {
16
- if (k !== 'default') {
17
- var d = Object.getOwnPropertyDescriptor(e, k);
18
- Object.defineProperty(n, k, d.get ? d : {
19
- enumerable: true,
20
- get: function () { return e[k]; }
21
- });
22
- }
23
- });
24
- }
25
- n["default"] = e;
26
- return Object.freeze(n);
27
- }
28
-
29
- var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
30
-
31
- /** @internal */
32
- const make$1 = middleware => middleware;
33
-
34
- /** @internal */
35
- const logger$1 = /*#__PURE__*/make$1(httpApp => {
36
- let counter = 0;
37
- return Effect__namespace.flatMap(Http_ServerRequest_dist_effectPlatformHttpServerRequest.ServerRequest$1, request => Effect__namespace.withLogSpan(Effect__namespace.onExit(httpApp, exit => exit._tag === "Failure" ? Effect__namespace.annotateLogs(Effect__namespace.log(exit.cause), {
38
- "http.method": request.method,
39
- "http.url": request.url,
40
- "http.status": 500
41
- }) : Effect__namespace.annotateLogs(Effect__namespace.log(""), {
42
- "http.method": request.method,
43
- "http.url": request.url,
44
- "http.status": exit.value.status
45
- })), `http.span.${++counter}`));
46
- });
47
-
48
- /** @internal */
49
- const tracer$1 = /*#__PURE__*/make$1(httpApp => {
50
- const appWithStatus = Effect__namespace.tap(Effect__namespace.zipRight(Http_App_dist_effectPlatformHttpApp.appendPreResponseHandler(b3Response), httpApp), response => Effect__namespace.annotateCurrentSpan("http.status", response.status));
51
- return Effect__namespace.flatMap(Http_ServerRequest_dist_effectPlatformHttpServerRequest.ServerRequest$1, request => Effect__namespace.flatMap(Effect__namespace.orElseSucceed(Http_IncomingMessage_dist_effectPlatformHttpIncomingMessage.schemaExternalSpan(request), () => undefined), parent => Effect__namespace.withSpan(appWithStatus, `http ${request.method}`, {
52
- attributes: {
53
- "http.method": request.method,
54
- "http.url": request.url
55
- },
56
- parent
57
- })));
58
- });
59
- const b3Response = (_request, response) => Effect__namespace.flatMap(Effect__namespace.currentSpan, span => span._tag === "Some" ? Http_ServerResponse_dist_effectPlatformHttpServerResponse.setHeader(response, "b3", `${span.value.traceId}-${span.value.spanId}-1${span.value.parent._tag === "Some" ? `-${span.value.parent.value.spanId}` : ""}`) : response);
60
-
61
- /** @internal */
62
- const xForwardedHeaders$1 = /*#__PURE__*/make$1(httpApp => Effect__namespace.updateService(httpApp, Http_ServerRequest_dist_effectPlatformHttpServerRequest.ServerRequest$1, request => request.headers["x-forwarded-host"] ? request.modify({
63
- headers: Http_Headers_dist_effectPlatformHttpHeaders.set(request.headers, "host", request.headers["x-forwarded-host"]),
64
- remoteAddress: request.headers["x-forwarded-for"]?.split(",")[0].trim()
65
- }) : request));
66
-
67
- /** @internal */
68
- const loggerTracer$1 = /*#__PURE__*/Function.flow(tracer$1, logger$1);
69
-
70
- /**
71
- * @since 1.0.0
72
- */
73
-
74
- /**
75
- * @since 1.0.0
76
- * @category models
77
- */
78
-
79
- /**
80
- * @since 1.0.0
81
- */
82
-
83
- /**
84
- * @since 1.0.0
85
- * @category constructors
86
- */
87
- const make = make$1;
88
-
89
- /**
90
- * @since 1.0.0
91
- * @category constructors
92
- */
93
- const logger = logger$1;
94
-
95
- /**
96
- * @since 1.0.0
97
- * @category constructors
98
- */
99
- const tracer = tracer$1;
100
-
101
- /**
102
- * @since 1.0.0
103
- * @category constructors
104
- */
105
- const loggerTracer = loggerTracer$1;
106
-
107
- /**
108
- * @since 1.0.0
109
- * @category constructors
110
- */
111
- const xForwardedHeaders = xForwardedHeaders$1;
112
-
113
- var Middleware = /*#__PURE__*/Object.freeze({
114
- __proto__: null,
115
- make: make,
116
- logger: logger,
117
- tracer: tracer,
118
- loggerTracer: loggerTracer,
119
- xForwardedHeaders: xForwardedHeaders
120
- });
121
-
122
- exports.Middleware = Middleware;
123
- exports.logger = logger;
124
- exports.loggerTracer = loggerTracer;
125
- exports.make = make;
126
- exports.tracer = tracer;
127
- exports.xForwardedHeaders = xForwardedHeaders;