@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.
- package/README.md +0 -6
- package/dist/BrowserHttpClient.d.ts +49 -0
- package/dist/BrowserHttpClient.d.ts.map +1 -0
- package/dist/{esm/internal/httpClient.js → BrowserHttpClient.js} +98 -60
- package/dist/BrowserHttpClient.js.map +1 -0
- package/dist/BrowserKeyValueStore.d.ts +24 -0
- package/dist/BrowserKeyValueStore.d.ts.map +1 -0
- package/dist/BrowserKeyValueStore.js +20 -0
- package/dist/BrowserKeyValueStore.js.map +1 -0
- package/dist/BrowserRuntime.d.ts +28 -0
- package/dist/BrowserRuntime.d.ts.map +1 -0
- package/dist/BrowserRuntime.js +13 -0
- package/dist/BrowserRuntime.js.map +1 -0
- package/dist/{dts/BrowserSocket.d.ts → BrowserSocket.d.ts} +4 -4
- package/dist/BrowserSocket.d.ts.map +1 -0
- package/dist/{esm/BrowserSocket.js → BrowserSocket.js} +5 -5
- package/dist/BrowserSocket.js.map +1 -0
- package/dist/BrowserStream.d.ts +35 -0
- package/dist/BrowserStream.d.ts.map +1 -0
- package/dist/BrowserStream.js +25 -0
- package/dist/BrowserStream.js.map +1 -0
- package/dist/BrowserWorker.d.ts +13 -0
- package/dist/BrowserWorker.d.ts.map +1 -0
- package/dist/{esm/internal/worker.js → BrowserWorker.js} +23 -17
- package/dist/BrowserWorker.js.map +1 -0
- package/dist/BrowserWorkerRunner.d.ts +18 -0
- package/dist/BrowserWorkerRunner.d.ts.map +1 -0
- package/dist/BrowserWorkerRunner.js +143 -0
- package/dist/BrowserWorkerRunner.js.map +1 -0
- package/dist/{dts/Clipboard.d.ts → Clipboard.d.ts} +13 -30
- package/dist/Clipboard.d.ts.map +1 -0
- package/dist/{esm/Clipboard.js → Clipboard.js} +12 -18
- package/dist/Clipboard.js.map +1 -0
- package/dist/Geolocation.d.ts +97 -0
- package/dist/Geolocation.d.ts.map +1 -0
- package/dist/Geolocation.js +99 -0
- package/dist/Geolocation.js.map +1 -0
- package/dist/Permissions.d.ts +80 -0
- package/dist/Permissions.d.ts.map +1 -0
- package/dist/Permissions.js +70 -0
- package/dist/Permissions.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{esm/index.js → index.js} +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -111
- package/src/BrowserHttpClient.ts +364 -16
- package/src/BrowserKeyValueStore.ts +15 -8
- package/src/BrowserRuntime.ts +30 -4
- package/src/BrowserSocket.ts +5 -5
- package/src/BrowserStream.ts +20 -10
- package/src/BrowserWorker.ts +58 -21
- package/src/BrowserWorkerRunner.ts +151 -18
- package/src/Clipboard.ts +16 -38
- package/src/Geolocation.ts +80 -40
- package/src/Permissions.ts +49 -34
- package/src/index.ts +16 -10
- package/BrowserHttpClient/package.json +0 -6
- package/BrowserKeyValueStore/package.json +0 -6
- package/BrowserRuntime/package.json +0 -6
- package/BrowserSocket/package.json +0 -6
- package/BrowserStream/package.json +0 -6
- package/BrowserWorker/package.json +0 -6
- package/BrowserWorkerRunner/package.json +0 -6
- package/Clipboard/package.json +0 -6
- package/Geolocation/package.json +0 -6
- package/Permissions/package.json +0 -6
- package/dist/cjs/BrowserHttpClient.js +0 -31
- package/dist/cjs/BrowserHttpClient.js.map +0 -1
- package/dist/cjs/BrowserKeyValueStore.js +0 -23
- package/dist/cjs/BrowserKeyValueStore.js.map +0 -1
- package/dist/cjs/BrowserRuntime.js +0 -14
- package/dist/cjs/BrowserRuntime.js.map +0 -1
- package/dist/cjs/BrowserSocket.js +0 -27
- package/dist/cjs/BrowserSocket.js.map +0 -1
- package/dist/cjs/BrowserStream.js +0 -23
- package/dist/cjs/BrowserStream.js.map +0 -1
- package/dist/cjs/BrowserWorker.js +0 -29
- package/dist/cjs/BrowserWorker.js.map +0 -1
- package/dist/cjs/BrowserWorkerRunner.js +0 -31
- package/dist/cjs/BrowserWorkerRunner.js.map +0 -1
- package/dist/cjs/Clipboard.js +0 -86
- package/dist/cjs/Clipboard.js.map +0 -1
- package/dist/cjs/Geolocation.js +0 -73
- package/dist/cjs/Geolocation.js.map +0 -1
- package/dist/cjs/Permissions.js +0 -59
- package/dist/cjs/Permissions.js.map +0 -1
- package/dist/cjs/index.js +0 -28
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/internal/httpClient.js +0 -266
- package/dist/cjs/internal/httpClient.js.map +0 -1
- package/dist/cjs/internal/keyValueStore.js +0 -13
- package/dist/cjs/internal/keyValueStore.js.map +0 -1
- package/dist/cjs/internal/runtime.js +0 -16
- package/dist/cjs/internal/runtime.js.map +0 -1
- package/dist/cjs/internal/stream.js +0 -19
- package/dist/cjs/internal/stream.js.map +0 -1
- package/dist/cjs/internal/worker.js +0 -60
- package/dist/cjs/internal/worker.js.map +0 -1
- package/dist/cjs/internal/workerRunner.js +0 -144
- package/dist/cjs/internal/workerRunner.js.map +0 -1
- package/dist/dts/BrowserHttpClient.d.ts +0 -33
- package/dist/dts/BrowserHttpClient.d.ts.map +0 -1
- package/dist/dts/BrowserKeyValueStore.d.ts +0 -20
- package/dist/dts/BrowserKeyValueStore.d.ts.map +0 -1
- package/dist/dts/BrowserRuntime.d.ts +0 -10
- package/dist/dts/BrowserRuntime.d.ts.map +0 -1
- package/dist/dts/BrowserSocket.d.ts.map +0 -1
- package/dist/dts/BrowserStream.d.ts +0 -25
- package/dist/dts/BrowserStream.d.ts.map +0 -1
- package/dist/dts/BrowserWorker.d.ts +0 -26
- package/dist/dts/BrowserWorker.d.ts.map +0 -1
- package/dist/dts/BrowserWorkerRunner.d.ts +0 -27
- package/dist/dts/BrowserWorkerRunner.d.ts.map +0 -1
- package/dist/dts/Clipboard.d.ts.map +0 -1
- package/dist/dts/Geolocation.d.ts +0 -67
- package/dist/dts/Geolocation.d.ts.map +0 -1
- package/dist/dts/Permissions.d.ts +0 -67
- package/dist/dts/Permissions.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -41
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/internal/httpClient.d.ts +0 -2
- package/dist/dts/internal/httpClient.d.ts.map +0 -1
- package/dist/dts/internal/keyValueStore.d.ts +0 -2
- package/dist/dts/internal/keyValueStore.d.ts.map +0 -1
- package/dist/dts/internal/runtime.d.ts +0 -2
- package/dist/dts/internal/runtime.d.ts.map +0 -1
- package/dist/dts/internal/stream.d.ts +0 -5
- package/dist/dts/internal/stream.d.ts.map +0 -1
- package/dist/dts/internal/worker.d.ts +0 -2
- package/dist/dts/internal/worker.d.ts.map +0 -1
- package/dist/dts/internal/workerRunner.d.ts +0 -2
- package/dist/dts/internal/workerRunner.d.ts.map +0 -1
- package/dist/esm/BrowserHttpClient.js +0 -23
- package/dist/esm/BrowserHttpClient.js.map +0 -1
- package/dist/esm/BrowserKeyValueStore.js +0 -16
- package/dist/esm/BrowserKeyValueStore.js.map +0 -1
- package/dist/esm/BrowserRuntime.js +0 -7
- package/dist/esm/BrowserRuntime.js.map +0 -1
- package/dist/esm/BrowserSocket.js.map +0 -1
- package/dist/esm/BrowserStream.js +0 -15
- package/dist/esm/BrowserStream.js.map +0 -1
- package/dist/esm/BrowserWorker.js +0 -22
- package/dist/esm/BrowserWorker.js.map +0 -1
- package/dist/esm/BrowserWorkerRunner.js +0 -23
- package/dist/esm/BrowserWorkerRunner.js.map +0 -1
- package/dist/esm/Clipboard.js.map +0 -1
- package/dist/esm/Geolocation.js +0 -63
- package/dist/esm/Geolocation.js.map +0 -1
- package/dist/esm/Permissions.js +0 -50
- package/dist/esm/Permissions.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/internal/httpClient.js.map +0 -1
- package/dist/esm/internal/keyValueStore.js +0 -6
- package/dist/esm/internal/keyValueStore.js.map +0 -1
- package/dist/esm/internal/runtime.js +0 -10
- package/dist/esm/internal/runtime.js.map +0 -1
- package/dist/esm/internal/stream.js +0 -9
- package/dist/esm/internal/stream.js.map +0 -1
- package/dist/esm/internal/worker.js.map +0 -1
- package/dist/esm/internal/workerRunner.js +0 -135
- package/dist/esm/internal/workerRunner.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/index/package.json +0 -6
- package/src/internal/httpClient.ts +0 -324
- package/src/internal/keyValueStore.ts +0 -7
- package/src/internal/runtime.ts +0 -8
- package/src/internal/stream.ts +0 -27
- package/src/internal/worker.ts +0 -58
- package/src/internal/workerRunner.ts +0 -155
package/src/internal/stream.ts
DELETED
|
@@ -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)
|
package/src/internal/worker.ts
DELETED
|
@@ -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))
|