@effect/platform-browser 0.0.0-snapshot-c0ae728e57df2c572ea803e1bb7121088cd67b49

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 (126) hide show
  1. package/Clipboard/package.json +6 -0
  2. package/Effectify/package.json +6 -0
  3. package/Error/package.json +6 -0
  4. package/HttpClient/package.json +6 -0
  5. package/KeyValueStore/package.json +6 -0
  6. package/LICENSE +21 -0
  7. package/Path/package.json +6 -0
  8. package/README.md +64 -0
  9. package/Runtime/package.json +6 -0
  10. package/Transferable/package.json +6 -0
  11. package/Worker/package.json +6 -0
  12. package/WorkerRunner/package.json +6 -0
  13. package/dist/cjs/Clipboard.js +54 -0
  14. package/dist/cjs/Clipboard.js.map +1 -0
  15. package/dist/cjs/Effectify.js +13 -0
  16. package/dist/cjs/Effectify.js.map +1 -0
  17. package/dist/cjs/Error.js +25 -0
  18. package/dist/cjs/Error.js.map +1 -0
  19. package/dist/cjs/HttpClient.js +46 -0
  20. package/dist/cjs/HttpClient.js.map +1 -0
  21. package/dist/cjs/KeyValueStore.js +73 -0
  22. package/dist/cjs/KeyValueStore.js.map +1 -0
  23. package/dist/cjs/Path.js +17 -0
  24. package/dist/cjs/Path.js.map +1 -0
  25. package/dist/cjs/Runtime.js +38 -0
  26. package/dist/cjs/Runtime.js.map +1 -0
  27. package/dist/cjs/Transferable.js +17 -0
  28. package/dist/cjs/Transferable.js.map +1 -0
  29. package/dist/cjs/Worker.js +87 -0
  30. package/dist/cjs/Worker.js.map +1 -0
  31. package/dist/cjs/WorkerRunner.js +69 -0
  32. package/dist/cjs/WorkerRunner.js.map +1 -0
  33. package/dist/cjs/index.js +52 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/internal/clipboard.js +88 -0
  36. package/dist/cjs/internal/clipboard.js.map +1 -0
  37. package/dist/cjs/internal/keyValueStore.js +128 -0
  38. package/dist/cjs/internal/keyValueStore.js.map +1 -0
  39. package/dist/cjs/internal/runtime.js +47 -0
  40. package/dist/cjs/internal/runtime.js.map +1 -0
  41. package/dist/cjs/internal/worker.js +89 -0
  42. package/dist/cjs/internal/worker.js.map +1 -0
  43. package/dist/cjs/internal/workerRunner.js +101 -0
  44. package/dist/cjs/internal/workerRunner.js.map +1 -0
  45. package/dist/dts/Clipboard.d.ts +37 -0
  46. package/dist/dts/Clipboard.d.ts.map +1 -0
  47. package/dist/dts/Effectify.d.ts +19 -0
  48. package/dist/dts/Effectify.d.ts.map +1 -0
  49. package/dist/dts/Error.d.ts +31 -0
  50. package/dist/dts/Error.d.ts.map +1 -0
  51. package/dist/dts/HttpClient.d.ts +61 -0
  52. package/dist/dts/HttpClient.d.ts.map +1 -0
  53. package/dist/dts/KeyValueStore.d.ts +19 -0
  54. package/dist/dts/KeyValueStore.d.ts.map +1 -0
  55. package/dist/dts/Path.d.ts +7 -0
  56. package/dist/dts/Path.d.ts.map +1 -0
  57. package/dist/dts/Runtime.d.ts +10 -0
  58. package/dist/dts/Runtime.d.ts.map +1 -0
  59. package/dist/dts/Transferable.d.ts +7 -0
  60. package/dist/dts/Transferable.d.ts.map +1 -0
  61. package/dist/dts/Worker.d.ts +46 -0
  62. package/dist/dts/Worker.d.ts.map +1 -0
  63. package/dist/dts/WorkerRunner.d.ts +30 -0
  64. package/dist/dts/WorkerRunner.d.ts.map +1 -0
  65. package/dist/dts/index.d.ts +51 -0
  66. package/dist/dts/index.d.ts.map +1 -0
  67. package/dist/dts/internal/clipboard.d.ts +2 -0
  68. package/dist/dts/internal/clipboard.d.ts.map +1 -0
  69. package/dist/dts/internal/keyValueStore.d.ts +2 -0
  70. package/dist/dts/internal/keyValueStore.d.ts.map +1 -0
  71. package/dist/dts/internal/runtime.d.ts +2 -0
  72. package/dist/dts/internal/runtime.d.ts.map +1 -0
  73. package/dist/dts/internal/worker.d.ts +2 -0
  74. package/dist/dts/internal/worker.d.ts.map +1 -0
  75. package/dist/dts/internal/workerRunner.d.ts +2 -0
  76. package/dist/dts/internal/workerRunner.d.ts.map +1 -0
  77. package/dist/esm/Clipboard.js +22 -0
  78. package/dist/esm/Clipboard.js.map +1 -0
  79. package/dist/esm/Effectify.js +10 -0
  80. package/dist/esm/Effectify.js.map +1 -0
  81. package/dist/esm/Error.js +20 -0
  82. package/dist/esm/Error.js.map +1 -0
  83. package/dist/esm/HttpClient.js +61 -0
  84. package/dist/esm/HttpClient.js.map +1 -0
  85. package/dist/esm/KeyValueStore.js +25 -0
  86. package/dist/esm/KeyValueStore.js.map +1 -0
  87. package/dist/esm/Path.js +7 -0
  88. package/dist/esm/Path.js.map +1 -0
  89. package/dist/esm/Runtime.js +7 -0
  90. package/dist/esm/Runtime.js.map +1 -0
  91. package/dist/esm/Transferable.js +7 -0
  92. package/dist/esm/Transferable.js.map +1 -0
  93. package/dist/esm/Worker.js +36 -0
  94. package/dist/esm/Worker.js.map +1 -0
  95. package/dist/esm/WorkerRunner.js +21 -0
  96. package/dist/esm/WorkerRunner.js.map +1 -0
  97. package/dist/esm/index.js +51 -0
  98. package/dist/esm/index.js.map +1 -0
  99. package/dist/esm/internal/clipboard.js +56 -0
  100. package/dist/esm/internal/clipboard.js.map +1 -0
  101. package/dist/esm/internal/keyValueStore.js +97 -0
  102. package/dist/esm/internal/keyValueStore.js.map +1 -0
  103. package/dist/esm/internal/runtime.js +15 -0
  104. package/dist/esm/internal/runtime.js.map +1 -0
  105. package/dist/esm/internal/worker.js +58 -0
  106. package/dist/esm/internal/worker.js.map +1 -0
  107. package/dist/esm/internal/workerRunner.js +68 -0
  108. package/dist/esm/internal/workerRunner.js.map +1 -0
  109. package/dist/esm/package.json +4 -0
  110. package/package.json +110 -0
  111. package/src/Clipboard.ts +44 -0
  112. package/src/Effectify.ts +22 -0
  113. package/src/Error.ts +34 -0
  114. package/src/HttpClient.ts +62 -0
  115. package/src/KeyValueStore.ts +27 -0
  116. package/src/Path.ts +7 -0
  117. package/src/Runtime.ts +11 -0
  118. package/src/Transferable.ts +7 -0
  119. package/src/Worker.ts +64 -0
  120. package/src/WorkerRunner.ts +45 -0
  121. package/src/index.ts +59 -0
  122. package/src/internal/clipboard.ts +71 -0
  123. package/src/internal/keyValueStore.ts +130 -0
  124. package/src/internal/runtime.ts +20 -0
  125. package/src/internal/worker.ts +72 -0
  126. package/src/internal/workerRunner.ts +92 -0
@@ -0,0 +1,92 @@
1
+ import { WorkerError } from "@effect/platform/WorkerError"
2
+ import * as Runner from "@effect/platform/WorkerRunner"
3
+ import type * as Schema from "@effect/schema/Schema"
4
+ import * as Cause from "effect/Cause"
5
+ import * as Effect from "effect/Effect"
6
+ import * as Layer from "effect/Layer"
7
+ import * as Queue from "effect/Queue"
8
+ import * as Schedule from "effect/Schedule"
9
+ import type * as Stream from "effect/Stream"
10
+ import type { WorkerRunner } from "../index.js"
11
+
12
+ const platformRunnerImpl = Runner.PlatformRunner.of({
13
+ [Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
14
+ start<I, O>(shutdown: Effect.Effect<void>) {
15
+ return Effect.gen(function*(_) {
16
+ const port = "postMessage" in self ?
17
+ self :
18
+ (yield* _(Effect.async<MessagePort, never, never>((resume, signal) => {
19
+ self.addEventListener("connect", function(event) {
20
+ const port = (event as MessageEvent).ports[0]
21
+ port.start()
22
+ resume(Effect.succeed(port))
23
+ }, { once: true, signal })
24
+ })))
25
+ const queue = yield* _(Queue.unbounded<I>())
26
+ yield* _(
27
+ Effect.async<never, WorkerError, never>((resume) => {
28
+ function onMessage(event: MessageEvent) {
29
+ const message = (event as MessageEvent).data as Runner.BackingRunner.Message<I>
30
+ if (message[0] === 0) {
31
+ queue.unsafeOffer(message[1])
32
+ } else {
33
+ Effect.runFork(shutdown)
34
+ }
35
+ }
36
+ function onMessageError(error: ErrorEvent) {
37
+ resume(Effect.fail(WorkerError("decode", error.message, error.error?.stack)))
38
+ }
39
+ function onError(error: ErrorEvent) {
40
+ resume(Effect.fail(WorkerError("unknown", error.message, error.error?.stack)))
41
+ }
42
+ port.addEventListener("message", onMessage as any)
43
+ port.addEventListener("messageerror", onMessageError as any)
44
+ port.addEventListener("error", onError as any)
45
+ return Effect.sync(() => {
46
+ port.removeEventListener("message", onMessage as any)
47
+ port.removeEventListener("messageerror", onMessageError as any)
48
+ port.removeEventListener("error", onError as any)
49
+ })
50
+ }),
51
+ Effect.tapErrorCause((cause) => Cause.isInterruptedOnly(cause) ? Effect.unit : Effect.logDebug(cause)),
52
+ Effect.retry(Schedule.forever),
53
+ Effect.annotateLogs({
54
+ package: "@effect/platform-browser",
55
+ module: "WorkerRunner"
56
+ }),
57
+ Effect.interruptible,
58
+ Effect.forkScoped
59
+ )
60
+ const send = (message: O, transfer?: ReadonlyArray<unknown>) =>
61
+ Effect.sync(() =>
62
+ port.postMessage([1, message], {
63
+ transfer: transfer as any
64
+ })
65
+ )
66
+ // ready
67
+ port.postMessage([0])
68
+ return { queue, send }
69
+ })
70
+ }
71
+ })
72
+
73
+ /** @internal */
74
+ export const layerPlatform = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl)
75
+
76
+ /** @internal */
77
+ export const layer = <I, R, E, O>(
78
+ process: (request: I) => Stream.Stream<O, E, R>,
79
+ options?: Runner.Runner.Options<I, E, O>
80
+ ): Layer.Layer<never, WorkerError, R> => Layer.provide(Runner.layer(process, options), layerPlatform)
81
+
82
+ /** @internal */
83
+ export const layerSerialized = <
84
+ A extends Schema.TaggedRequest.Any,
85
+ I,
86
+ R,
87
+ Handlers extends WorkerRunner.SerializedRunner.Handlers<A>
88
+ >(
89
+ schema: Schema.Schema<A, I, R>,
90
+ handlers: Handlers
91
+ ): Layer.Layer<never, WorkerError, R | WorkerRunner.SerializedRunner.HandlersContext<Handlers>> =>
92
+ Layer.provide(Runner.layerSerialized(schema, handlers), layerPlatform)