@effect/platform-browser 0.74.0 → 4.0.0-beta.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 (170) hide show
  1. package/README.md +0 -6
  2. package/dist/BrowserHttpClient.d.ts +49 -0
  3. package/dist/BrowserHttpClient.d.ts.map +1 -0
  4. package/dist/{esm/internal/httpClient.js → BrowserHttpClient.js} +98 -60
  5. package/dist/BrowserHttpClient.js.map +1 -0
  6. package/dist/BrowserKeyValueStore.d.ts +24 -0
  7. package/dist/BrowserKeyValueStore.d.ts.map +1 -0
  8. package/dist/BrowserKeyValueStore.js +20 -0
  9. package/dist/BrowserKeyValueStore.js.map +1 -0
  10. package/dist/BrowserRuntime.d.ts +28 -0
  11. package/dist/BrowserRuntime.d.ts.map +1 -0
  12. package/dist/BrowserRuntime.js +13 -0
  13. package/dist/BrowserRuntime.js.map +1 -0
  14. package/dist/{dts/BrowserSocket.d.ts → BrowserSocket.d.ts} +4 -4
  15. package/dist/BrowserSocket.d.ts.map +1 -0
  16. package/dist/{esm/BrowserSocket.js → BrowserSocket.js} +5 -5
  17. package/dist/BrowserSocket.js.map +1 -0
  18. package/dist/BrowserStream.d.ts +35 -0
  19. package/dist/BrowserStream.d.ts.map +1 -0
  20. package/dist/BrowserStream.js +25 -0
  21. package/dist/BrowserStream.js.map +1 -0
  22. package/dist/BrowserWorker.d.ts +13 -0
  23. package/dist/BrowserWorker.d.ts.map +1 -0
  24. package/dist/{esm/internal/worker.js → BrowserWorker.js} +23 -17
  25. package/dist/BrowserWorker.js.map +1 -0
  26. package/dist/BrowserWorkerRunner.d.ts +18 -0
  27. package/dist/BrowserWorkerRunner.d.ts.map +1 -0
  28. package/dist/BrowserWorkerRunner.js +143 -0
  29. package/dist/BrowserWorkerRunner.js.map +1 -0
  30. package/dist/{dts/Clipboard.d.ts → Clipboard.d.ts} +13 -30
  31. package/dist/Clipboard.d.ts.map +1 -0
  32. package/dist/{esm/Clipboard.js → Clipboard.js} +12 -18
  33. package/dist/Clipboard.js.map +1 -0
  34. package/dist/Geolocation.d.ts +97 -0
  35. package/dist/Geolocation.d.ts.map +1 -0
  36. package/dist/Geolocation.js +99 -0
  37. package/dist/Geolocation.js.map +1 -0
  38. package/dist/Permissions.d.ts +80 -0
  39. package/dist/Permissions.d.ts.map +1 -0
  40. package/dist/Permissions.js +70 -0
  41. package/dist/Permissions.js.map +1 -0
  42. package/dist/index.d.ts +44 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/{esm/index.js → index.js} +4 -0
  45. package/dist/index.js.map +1 -0
  46. package/package.json +51 -111
  47. package/src/BrowserHttpClient.ts +364 -16
  48. package/src/BrowserKeyValueStore.ts +15 -8
  49. package/src/BrowserRuntime.ts +30 -4
  50. package/src/BrowserSocket.ts +5 -5
  51. package/src/BrowserStream.ts +20 -10
  52. package/src/BrowserWorker.ts +58 -21
  53. package/src/BrowserWorkerRunner.ts +151 -18
  54. package/src/Clipboard.ts +16 -38
  55. package/src/Geolocation.ts +80 -40
  56. package/src/Permissions.ts +49 -34
  57. package/src/index.ts +16 -10
  58. package/BrowserHttpClient/package.json +0 -6
  59. package/BrowserKeyValueStore/package.json +0 -6
  60. package/BrowserRuntime/package.json +0 -6
  61. package/BrowserSocket/package.json +0 -6
  62. package/BrowserStream/package.json +0 -6
  63. package/BrowserWorker/package.json +0 -6
  64. package/BrowserWorkerRunner/package.json +0 -6
  65. package/Clipboard/package.json +0 -6
  66. package/Geolocation/package.json +0 -6
  67. package/Permissions/package.json +0 -6
  68. package/dist/cjs/BrowserHttpClient.js +0 -31
  69. package/dist/cjs/BrowserHttpClient.js.map +0 -1
  70. package/dist/cjs/BrowserKeyValueStore.js +0 -23
  71. package/dist/cjs/BrowserKeyValueStore.js.map +0 -1
  72. package/dist/cjs/BrowserRuntime.js +0 -14
  73. package/dist/cjs/BrowserRuntime.js.map +0 -1
  74. package/dist/cjs/BrowserSocket.js +0 -27
  75. package/dist/cjs/BrowserSocket.js.map +0 -1
  76. package/dist/cjs/BrowserStream.js +0 -23
  77. package/dist/cjs/BrowserStream.js.map +0 -1
  78. package/dist/cjs/BrowserWorker.js +0 -29
  79. package/dist/cjs/BrowserWorker.js.map +0 -1
  80. package/dist/cjs/BrowserWorkerRunner.js +0 -31
  81. package/dist/cjs/BrowserWorkerRunner.js.map +0 -1
  82. package/dist/cjs/Clipboard.js +0 -86
  83. package/dist/cjs/Clipboard.js.map +0 -1
  84. package/dist/cjs/Geolocation.js +0 -73
  85. package/dist/cjs/Geolocation.js.map +0 -1
  86. package/dist/cjs/Permissions.js +0 -59
  87. package/dist/cjs/Permissions.js.map +0 -1
  88. package/dist/cjs/index.js +0 -28
  89. package/dist/cjs/index.js.map +0 -1
  90. package/dist/cjs/internal/httpClient.js +0 -266
  91. package/dist/cjs/internal/httpClient.js.map +0 -1
  92. package/dist/cjs/internal/keyValueStore.js +0 -13
  93. package/dist/cjs/internal/keyValueStore.js.map +0 -1
  94. package/dist/cjs/internal/runtime.js +0 -16
  95. package/dist/cjs/internal/runtime.js.map +0 -1
  96. package/dist/cjs/internal/stream.js +0 -19
  97. package/dist/cjs/internal/stream.js.map +0 -1
  98. package/dist/cjs/internal/worker.js +0 -60
  99. package/dist/cjs/internal/worker.js.map +0 -1
  100. package/dist/cjs/internal/workerRunner.js +0 -144
  101. package/dist/cjs/internal/workerRunner.js.map +0 -1
  102. package/dist/dts/BrowserHttpClient.d.ts +0 -33
  103. package/dist/dts/BrowserHttpClient.d.ts.map +0 -1
  104. package/dist/dts/BrowserKeyValueStore.d.ts +0 -20
  105. package/dist/dts/BrowserKeyValueStore.d.ts.map +0 -1
  106. package/dist/dts/BrowserRuntime.d.ts +0 -10
  107. package/dist/dts/BrowserRuntime.d.ts.map +0 -1
  108. package/dist/dts/BrowserSocket.d.ts.map +0 -1
  109. package/dist/dts/BrowserStream.d.ts +0 -25
  110. package/dist/dts/BrowserStream.d.ts.map +0 -1
  111. package/dist/dts/BrowserWorker.d.ts +0 -26
  112. package/dist/dts/BrowserWorker.d.ts.map +0 -1
  113. package/dist/dts/BrowserWorkerRunner.d.ts +0 -27
  114. package/dist/dts/BrowserWorkerRunner.d.ts.map +0 -1
  115. package/dist/dts/Clipboard.d.ts.map +0 -1
  116. package/dist/dts/Geolocation.d.ts +0 -67
  117. package/dist/dts/Geolocation.d.ts.map +0 -1
  118. package/dist/dts/Permissions.d.ts +0 -67
  119. package/dist/dts/Permissions.d.ts.map +0 -1
  120. package/dist/dts/index.d.ts +0 -41
  121. package/dist/dts/index.d.ts.map +0 -1
  122. package/dist/dts/internal/httpClient.d.ts +0 -2
  123. package/dist/dts/internal/httpClient.d.ts.map +0 -1
  124. package/dist/dts/internal/keyValueStore.d.ts +0 -2
  125. package/dist/dts/internal/keyValueStore.d.ts.map +0 -1
  126. package/dist/dts/internal/runtime.d.ts +0 -2
  127. package/dist/dts/internal/runtime.d.ts.map +0 -1
  128. package/dist/dts/internal/stream.d.ts +0 -5
  129. package/dist/dts/internal/stream.d.ts.map +0 -1
  130. package/dist/dts/internal/worker.d.ts +0 -2
  131. package/dist/dts/internal/worker.d.ts.map +0 -1
  132. package/dist/dts/internal/workerRunner.d.ts +0 -2
  133. package/dist/dts/internal/workerRunner.d.ts.map +0 -1
  134. package/dist/esm/BrowserHttpClient.js +0 -23
  135. package/dist/esm/BrowserHttpClient.js.map +0 -1
  136. package/dist/esm/BrowserKeyValueStore.js +0 -16
  137. package/dist/esm/BrowserKeyValueStore.js.map +0 -1
  138. package/dist/esm/BrowserRuntime.js +0 -7
  139. package/dist/esm/BrowserRuntime.js.map +0 -1
  140. package/dist/esm/BrowserSocket.js.map +0 -1
  141. package/dist/esm/BrowserStream.js +0 -15
  142. package/dist/esm/BrowserStream.js.map +0 -1
  143. package/dist/esm/BrowserWorker.js +0 -22
  144. package/dist/esm/BrowserWorker.js.map +0 -1
  145. package/dist/esm/BrowserWorkerRunner.js +0 -23
  146. package/dist/esm/BrowserWorkerRunner.js.map +0 -1
  147. package/dist/esm/Clipboard.js.map +0 -1
  148. package/dist/esm/Geolocation.js +0 -63
  149. package/dist/esm/Geolocation.js.map +0 -1
  150. package/dist/esm/Permissions.js +0 -50
  151. package/dist/esm/Permissions.js.map +0 -1
  152. package/dist/esm/index.js.map +0 -1
  153. package/dist/esm/internal/httpClient.js.map +0 -1
  154. package/dist/esm/internal/keyValueStore.js +0 -6
  155. package/dist/esm/internal/keyValueStore.js.map +0 -1
  156. package/dist/esm/internal/runtime.js +0 -10
  157. package/dist/esm/internal/runtime.js.map +0 -1
  158. package/dist/esm/internal/stream.js +0 -9
  159. package/dist/esm/internal/stream.js.map +0 -1
  160. package/dist/esm/internal/worker.js.map +0 -1
  161. package/dist/esm/internal/workerRunner.js +0 -135
  162. package/dist/esm/internal/workerRunner.js.map +0 -1
  163. package/dist/esm/package.json +0 -4
  164. package/index/package.json +0 -6
  165. package/src/internal/httpClient.ts +0 -324
  166. package/src/internal/keyValueStore.ts +0 -7
  167. package/src/internal/runtime.ts +0 -8
  168. package/src/internal/stream.ts +0 -27
  169. package/src/internal/worker.ts +0 -58
  170. package/src/internal/workerRunner.ts +0 -155
@@ -1,27 +0,0 @@
1
- /**
2
- * @since 1.0.0
3
- */
4
-
5
- import * as Stream from "effect/Stream"
6
-
7
- /** @internal */
8
- export const fromEventListenerWindow = <K extends keyof WindowEventMap>(
9
- type: K,
10
- options?: boolean | {
11
- readonly capture?: boolean
12
- readonly passive?: boolean
13
- readonly once?: boolean
14
- readonly bufferSize?: number | "unbounded" | undefined
15
- } | undefined
16
- ) => Stream.fromEventListener<WindowEventMap[K]>(window, type, options)
17
-
18
- /** @internal */
19
- export const fromEventListenerDocument = <K extends keyof DocumentEventMap>(
20
- type: K,
21
- options?: boolean | {
22
- readonly capture?: boolean
23
- readonly passive?: boolean
24
- readonly once?: boolean
25
- readonly bufferSize?: number | "unbounded" | undefined
26
- } | undefined
27
- ) => Stream.fromEventListener<DocumentEventMap[K]>(document, type, options)
@@ -1,58 +0,0 @@
1
- import * as Worker from "@effect/platform/Worker"
2
- import { WorkerError } from "@effect/platform/WorkerError"
3
- import * as Deferred from "effect/Deferred"
4
- import * as Effect from "effect/Effect"
5
- import * as Layer from "effect/Layer"
6
- import * as Scope from "effect/Scope"
7
-
8
- const platformWorkerImpl = Worker.makePlatform<globalThis.SharedWorker | globalThis.Worker | MessagePort>()({
9
- setup({ scope, worker }) {
10
- const port = "port" in worker ? worker.port : worker
11
- return Effect.as(
12
- Scope.addFinalizer(
13
- scope,
14
- Effect.sync(() => {
15
- port.postMessage([1])
16
- })
17
- ),
18
- port
19
- )
20
- },
21
- listen({ deferred, emit, port, scope }) {
22
- function onMessage(event: MessageEvent) {
23
- emit(event.data)
24
- }
25
- function onError(event: ErrorEvent) {
26
- Deferred.unsafeDone(
27
- deferred,
28
- new WorkerError({ reason: "unknown", cause: event.error ?? event.message })
29
- )
30
- }
31
- port.addEventListener("message", onMessage as any)
32
- port.addEventListener("error", onError as any)
33
- if ("start" in port) {
34
- port.start()
35
- }
36
- return Scope.addFinalizer(
37
- scope,
38
- Effect.sync(() => {
39
- port.removeEventListener("message", onMessage as any)
40
- port.removeEventListener("error", onError as any)
41
- })
42
- )
43
- }
44
- })
45
-
46
- /** @internal */
47
- export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerImpl)
48
-
49
- /** @internal */
50
- export const layerManager = Layer.provide(Worker.layerManager, layerWorker)
51
-
52
- /** @internal */
53
- export const layer = (spawn: (id: number) => globalThis.Worker | globalThis.SharedWorker | MessagePort) =>
54
- Layer.merge(layerManager, Worker.layerSpawner(spawn))
55
-
56
- /** @internal */
57
- export const layerPlatform = (spawn: (id: number) => globalThis.Worker | globalThis.SharedWorker | MessagePort) =>
58
- Layer.merge(layerWorker, Worker.layerSpawner(spawn))
@@ -1,155 +0,0 @@
1
- import { WorkerError } from "@effect/platform/WorkerError"
2
- import * as Runner from "@effect/platform/WorkerRunner"
3
- import * as Cause from "effect/Cause"
4
- import * as Context from "effect/Context"
5
- import * as Deferred from "effect/Deferred"
6
- import * as Effect from "effect/Effect"
7
- import * as ExecStrategy from "effect/ExecutionStrategy"
8
- import * as Exit from "effect/Exit"
9
- import * as FiberSet from "effect/FiberSet"
10
- import { identity } from "effect/Function"
11
- import { globalValue } from "effect/GlobalValue"
12
- import * as Layer from "effect/Layer"
13
- import * as Mailbox from "effect/Mailbox"
14
- import * as Runtime from "effect/Runtime"
15
- import * as Scope from "effect/Scope"
16
-
17
- const cachedPorts = globalValue("@effect/platform-browser/Worker/cachedPorts", () => new Set<MessagePort>())
18
- function globalHandleConnect(event: MessageEvent) {
19
- cachedPorts.add((event as MessageEvent).ports[0])
20
- }
21
- if (typeof self !== "undefined" && "onconnect" in self) {
22
- self.onconnect = globalHandleConnect
23
- }
24
-
25
- /** @internal */
26
- export const make = (self: MessagePort | Window) =>
27
- Runner.PlatformRunner.of({
28
- [Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
29
- start: Effect.fnUntraced(function*<I, O>(closeLatch: Deferred.Deferred<void, WorkerError>) {
30
- const disconnects = yield* Mailbox.make<number>()
31
- let currentPortId = 0
32
-
33
- const ports = new Map<number, readonly [MessagePort, Scope.CloseableScope]>()
34
- const send = (portId: number, message: O, transfer?: ReadonlyArray<unknown>) =>
35
- Effect.sync(() => {
36
- ;(ports.get(portId)?.[0] ?? self).postMessage([1, message], {
37
- transfer: transfer as any
38
- })
39
- })
40
-
41
- const run = Effect.fnUntraced(function*<A, E, R>(
42
- handler: (portId: number, message: I) => Effect.Effect<A, E, R> | void
43
- ) {
44
- const scope = yield* Effect.scope
45
- const runtime = (yield* Effect.interruptible(Effect.runtime<R | Scope.Scope>())).pipe(
46
- Runtime.updateContext(Context.omit(Scope.Scope))
47
- ) as Runtime.Runtime<R>
48
- const fiberSet = yield* FiberSet.make<any, WorkerError | E>()
49
- const runFork = Runtime.runFork(runtime)
50
- function onExit(exit: Exit.Exit<any, E>) {
51
- if (exit._tag === "Failure" && !Cause.isInterruptedOnly(exit.cause)) {
52
- Deferred.unsafeDone(closeLatch, Exit.die(Cause.squash(exit.cause)))
53
- }
54
- }
55
-
56
- function onMessage(portId: number) {
57
- return function(event: MessageEvent) {
58
- const message = event.data as Runner.BackingRunner.Message<I>
59
- if (message[0] === 0) {
60
- const result = handler(portId, message[1])
61
- if (Effect.isEffect(result)) {
62
- const fiber = runFork(result)
63
- fiber.addObserver(onExit)
64
- FiberSet.unsafeAdd(fiberSet, fiber)
65
- }
66
- } else {
67
- const port = ports.get(portId)
68
- if (!port) {
69
- return
70
- } else if (ports.size === 1) {
71
- // let the last port close with the outer scope
72
- return Deferred.unsafeDone(closeLatch, Exit.void)
73
- }
74
- ports.delete(portId)
75
- Effect.runFork(Scope.close(port[1], Exit.void))
76
- }
77
- }
78
- }
79
- function onMessageError(error: MessageEvent) {
80
- Deferred.unsafeDone(
81
- closeLatch,
82
- new WorkerError({ reason: "decode", cause: error.data })
83
- )
84
- }
85
- function onError(error: any) {
86
- Deferred.unsafeDone(
87
- closeLatch,
88
- new WorkerError({ reason: "unknown", cause: error.data })
89
- )
90
- }
91
- function handlePort(port: MessagePort) {
92
- const fiber = Scope.fork(scope, ExecStrategy.sequential).pipe(
93
- Effect.flatMap((scope) => {
94
- const portId = currentPortId++
95
- ports.set(portId, [port, scope])
96
- const onMsg = onMessage(portId)
97
- port.addEventListener("message", onMsg)
98
- port.addEventListener("messageerror", onMessageError)
99
- if ("start" in port) {
100
- port.start()
101
- }
102
- port.postMessage([0])
103
- return Scope.addFinalizer(
104
- scope,
105
- Effect.sync(() => {
106
- port.removeEventListener("message", onMsg)
107
- port.removeEventListener("messageerror", onError)
108
- port.close()
109
- })
110
- )
111
- }),
112
- runFork
113
- )
114
- fiber.addObserver(onExit)
115
- FiberSet.unsafeAdd(fiberSet, fiber)
116
- }
117
- self.addEventListener("error", onError)
118
- let prevOnConnect: unknown | undefined
119
- if ("onconnect" in self) {
120
- prevOnConnect = self.onconnect
121
- self.onconnect = function(event: MessageEvent) {
122
- const port = (event as MessageEvent).ports[0]
123
- handlePort(port)
124
- }
125
- for (const port of cachedPorts) {
126
- handlePort(port)
127
- }
128
- cachedPorts.clear()
129
- yield* Scope.addFinalizer(
130
- scope,
131
- Effect.sync(() => self.close())
132
- )
133
- } else {
134
- handlePort(self as any)
135
- }
136
- yield* Scope.addFinalizer(
137
- scope,
138
- Effect.sync(() => {
139
- self.removeEventListener("error", onError)
140
- if ("onconnect" in self) {
141
- self.onconnect = prevOnConnect
142
- }
143
- })
144
- )
145
- })
146
-
147
- return identity<Runner.BackingRunner<I, O>>({ run, send, disconnects })
148
- }) as any
149
- })
150
-
151
- /** @internal */
152
- export const layerMessagePort = (port: MessagePort | Window) => Layer.succeed(Runner.PlatformRunner, make(port))
153
-
154
- /** @internal */
155
- export const layer = Layer.sync(Runner.PlatformRunner, () => make(self))