@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.
- package/Clipboard/package.json +6 -0
- package/Effectify/package.json +6 -0
- package/Error/package.json +6 -0
- package/HttpClient/package.json +6 -0
- package/KeyValueStore/package.json +6 -0
- package/LICENSE +21 -0
- package/Path/package.json +6 -0
- package/README.md +64 -0
- package/Runtime/package.json +6 -0
- package/Transferable/package.json +6 -0
- package/Worker/package.json +6 -0
- package/WorkerRunner/package.json +6 -0
- package/dist/cjs/Clipboard.js +54 -0
- package/dist/cjs/Clipboard.js.map +1 -0
- package/dist/cjs/Effectify.js +13 -0
- package/dist/cjs/Effectify.js.map +1 -0
- package/dist/cjs/Error.js +25 -0
- package/dist/cjs/Error.js.map +1 -0
- package/dist/cjs/HttpClient.js +46 -0
- package/dist/cjs/HttpClient.js.map +1 -0
- package/dist/cjs/KeyValueStore.js +73 -0
- package/dist/cjs/KeyValueStore.js.map +1 -0
- package/dist/cjs/Path.js +17 -0
- package/dist/cjs/Path.js.map +1 -0
- package/dist/cjs/Runtime.js +38 -0
- package/dist/cjs/Runtime.js.map +1 -0
- package/dist/cjs/Transferable.js +17 -0
- package/dist/cjs/Transferable.js.map +1 -0
- package/dist/cjs/Worker.js +87 -0
- package/dist/cjs/Worker.js.map +1 -0
- package/dist/cjs/WorkerRunner.js +69 -0
- package/dist/cjs/WorkerRunner.js.map +1 -0
- package/dist/cjs/index.js +52 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/clipboard.js +88 -0
- package/dist/cjs/internal/clipboard.js.map +1 -0
- package/dist/cjs/internal/keyValueStore.js +128 -0
- package/dist/cjs/internal/keyValueStore.js.map +1 -0
- package/dist/cjs/internal/runtime.js +47 -0
- package/dist/cjs/internal/runtime.js.map +1 -0
- package/dist/cjs/internal/worker.js +89 -0
- package/dist/cjs/internal/worker.js.map +1 -0
- package/dist/cjs/internal/workerRunner.js +101 -0
- package/dist/cjs/internal/workerRunner.js.map +1 -0
- package/dist/dts/Clipboard.d.ts +37 -0
- package/dist/dts/Clipboard.d.ts.map +1 -0
- package/dist/dts/Effectify.d.ts +19 -0
- package/dist/dts/Effectify.d.ts.map +1 -0
- package/dist/dts/Error.d.ts +31 -0
- package/dist/dts/Error.d.ts.map +1 -0
- package/dist/dts/HttpClient.d.ts +61 -0
- package/dist/dts/HttpClient.d.ts.map +1 -0
- package/dist/dts/KeyValueStore.d.ts +19 -0
- package/dist/dts/KeyValueStore.d.ts.map +1 -0
- package/dist/dts/Path.d.ts +7 -0
- package/dist/dts/Path.d.ts.map +1 -0
- package/dist/dts/Runtime.d.ts +10 -0
- package/dist/dts/Runtime.d.ts.map +1 -0
- package/dist/dts/Transferable.d.ts +7 -0
- package/dist/dts/Transferable.d.ts.map +1 -0
- package/dist/dts/Worker.d.ts +46 -0
- package/dist/dts/Worker.d.ts.map +1 -0
- package/dist/dts/WorkerRunner.d.ts +30 -0
- package/dist/dts/WorkerRunner.d.ts.map +1 -0
- package/dist/dts/index.d.ts +51 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/internal/clipboard.d.ts +2 -0
- package/dist/dts/internal/clipboard.d.ts.map +1 -0
- package/dist/dts/internal/keyValueStore.d.ts +2 -0
- package/dist/dts/internal/keyValueStore.d.ts.map +1 -0
- package/dist/dts/internal/runtime.d.ts +2 -0
- package/dist/dts/internal/runtime.d.ts.map +1 -0
- package/dist/dts/internal/worker.d.ts +2 -0
- package/dist/dts/internal/worker.d.ts.map +1 -0
- package/dist/dts/internal/workerRunner.d.ts +2 -0
- package/dist/dts/internal/workerRunner.d.ts.map +1 -0
- package/dist/esm/Clipboard.js +22 -0
- package/dist/esm/Clipboard.js.map +1 -0
- package/dist/esm/Effectify.js +10 -0
- package/dist/esm/Effectify.js.map +1 -0
- package/dist/esm/Error.js +20 -0
- package/dist/esm/Error.js.map +1 -0
- package/dist/esm/HttpClient.js +61 -0
- package/dist/esm/HttpClient.js.map +1 -0
- package/dist/esm/KeyValueStore.js +25 -0
- package/dist/esm/KeyValueStore.js.map +1 -0
- package/dist/esm/Path.js +7 -0
- package/dist/esm/Path.js.map +1 -0
- package/dist/esm/Runtime.js +7 -0
- package/dist/esm/Runtime.js.map +1 -0
- package/dist/esm/Transferable.js +7 -0
- package/dist/esm/Transferable.js.map +1 -0
- package/dist/esm/Worker.js +36 -0
- package/dist/esm/Worker.js.map +1 -0
- package/dist/esm/WorkerRunner.js +21 -0
- package/dist/esm/WorkerRunner.js.map +1 -0
- package/dist/esm/index.js +51 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/clipboard.js +56 -0
- package/dist/esm/internal/clipboard.js.map +1 -0
- package/dist/esm/internal/keyValueStore.js +97 -0
- package/dist/esm/internal/keyValueStore.js.map +1 -0
- package/dist/esm/internal/runtime.js +15 -0
- package/dist/esm/internal/runtime.js.map +1 -0
- package/dist/esm/internal/worker.js +58 -0
- package/dist/esm/internal/worker.js.map +1 -0
- package/dist/esm/internal/workerRunner.js +68 -0
- package/dist/esm/internal/workerRunner.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +110 -0
- package/src/Clipboard.ts +44 -0
- package/src/Effectify.ts +22 -0
- package/src/Error.ts +34 -0
- package/src/HttpClient.ts +62 -0
- package/src/KeyValueStore.ts +27 -0
- package/src/Path.ts +7 -0
- package/src/Runtime.ts +11 -0
- package/src/Transferable.ts +7 -0
- package/src/Worker.ts +64 -0
- package/src/WorkerRunner.ts +45 -0
- package/src/index.ts +59 -0
- package/src/internal/clipboard.ts +71 -0
- package/src/internal/keyValueStore.ts +130 -0
- package/src/internal/runtime.ts +20 -0
- package/src/internal/worker.ts +72 -0
- package/src/internal/workerRunner.ts +92 -0
package/src/Error.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
/**
|
|
7
|
+
* @since 1.0.0
|
|
8
|
+
* @category error
|
|
9
|
+
*/
|
|
10
|
+
BadArgument,
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
* @category type id
|
|
14
|
+
*/
|
|
15
|
+
PlatformErrorTypeId,
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
* @category error
|
|
19
|
+
*/
|
|
20
|
+
SystemError
|
|
21
|
+
} from "@effect/platform/Error"
|
|
22
|
+
|
|
23
|
+
export type {
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
* @category model
|
|
27
|
+
*/
|
|
28
|
+
PlatformError,
|
|
29
|
+
/**
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
* @category model
|
|
32
|
+
*/
|
|
33
|
+
SystemErrorReason
|
|
34
|
+
} from "@effect/platform/Error"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as body from "@effect/platform/Http/Body"
|
|
5
|
+
import * as client from "@effect/platform/Http/Client"
|
|
6
|
+
import * as error from "@effect/platform/Http/ClientError"
|
|
7
|
+
import * as request from "@effect/platform/Http/ClientRequest"
|
|
8
|
+
import * as response from "@effect/platform/Http/ClientResponse"
|
|
9
|
+
import * as headers from "@effect/platform/Http/Headers"
|
|
10
|
+
import * as urlParams from "@effect/platform/Http/UrlParams"
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
/**
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*
|
|
16
|
+
* - Docs: [Http/Body](https://effect-ts.github.io/effect/platform/Http/Body.ts.html)
|
|
17
|
+
* - Module: `@effect/platform/Http/Body`
|
|
18
|
+
*/
|
|
19
|
+
body,
|
|
20
|
+
/**
|
|
21
|
+
* @since 1.0.0
|
|
22
|
+
*
|
|
23
|
+
* - Docs: [Http/Client](https://effect-ts.github.io/effect/platform/Http/Client.ts.html)
|
|
24
|
+
* - Module: `@effect/platform/Http/Client`
|
|
25
|
+
*/
|
|
26
|
+
client,
|
|
27
|
+
/**
|
|
28
|
+
* @since 1.0.0
|
|
29
|
+
*
|
|
30
|
+
* - Docs: [Http/ClientError](https://effect-ts.github.io/effect/platform/Http/ClientError.ts.html)
|
|
31
|
+
* - Module: `@effect/platform/Http/ClientError`
|
|
32
|
+
*/
|
|
33
|
+
error,
|
|
34
|
+
/**
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
*
|
|
37
|
+
* - Docs: [Http/Headers](https://effect-ts.github.io/effect/platform/Http/Headers.ts.html)
|
|
38
|
+
* - Module: `@effect/platform/Http/Headers`
|
|
39
|
+
*/
|
|
40
|
+
headers,
|
|
41
|
+
/**
|
|
42
|
+
* @since 1.0.0
|
|
43
|
+
*
|
|
44
|
+
* - Docs: [Http/ClientRequest](https://effect-ts.github.io/effect/platform/Http/ClientRequest.ts.html)
|
|
45
|
+
* - Module: `@effect/platform/Http/ClientRequest`
|
|
46
|
+
*/
|
|
47
|
+
request,
|
|
48
|
+
/**
|
|
49
|
+
* @since 1.0.0
|
|
50
|
+
*
|
|
51
|
+
* - Docs: [Http/ClientResponse](https://effect-ts.github.io/effect/platform/Http/ClientResponse.ts.html)
|
|
52
|
+
* - Module: `@effect/platform/Http/ClientResponse`
|
|
53
|
+
*/
|
|
54
|
+
response,
|
|
55
|
+
/**
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*
|
|
58
|
+
* - Docs: [Http/UrlParams](https://effect-ts.github.io/effect/platform/Http/UrlParams.ts.html)
|
|
59
|
+
* - Module: `@effect/platform/Http/UrlParams`
|
|
60
|
+
*/
|
|
61
|
+
urlParams
|
|
62
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Also includes exports from [`@effect/platform/KeyValueStore`](https://effect-ts.github.io/effect/platform/KeyValueStore.ts.html).
|
|
5
|
+
*/
|
|
6
|
+
import * as internal from "./internal/keyValueStore.js"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
export * from "@effect/platform/KeyValueStore"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Creates a KeyValueStore layer that uses the browser's localStorage api. Values are stored between sessions.
|
|
15
|
+
*
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
* @category models
|
|
18
|
+
*/
|
|
19
|
+
export const layerLocalStorage = internal.layerLocalStorage
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Creates a KeyValueStore layer that uses the browser's sessionStorage api. Values are stored only for the current session.
|
|
23
|
+
*
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
* @category models
|
|
26
|
+
*/
|
|
27
|
+
export const layerSessionStorage = internal.layerSessionStorage
|
package/src/Path.ts
ADDED
package/src/Runtime.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Effect from "effect/Effect"
|
|
5
|
+
import * as internal from "./internal/runtime.js"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @since 1.0.0
|
|
9
|
+
* @category runtime
|
|
10
|
+
*/
|
|
11
|
+
export const runMain: <E, A>(effect: Effect.Effect<A, E>) => void = internal.runMain
|
package/src/Worker.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/effect/platform/Worker.ts.html).
|
|
5
|
+
*/
|
|
6
|
+
import type * as Worker from "@effect/platform/Worker"
|
|
7
|
+
import type * as Schema from "@effect/schema/Schema"
|
|
8
|
+
import type * as Context from "effect/Context"
|
|
9
|
+
import type * as Effect from "effect/Effect"
|
|
10
|
+
import type * as Layer from "effect/Layer"
|
|
11
|
+
import type * as Scope from "effect/Scope"
|
|
12
|
+
import * as internal from "./internal/worker.js"
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export * from "@effect/platform/Worker"
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
* @category constructors
|
|
22
|
+
*/
|
|
23
|
+
export const makePool: <I, E, O>(
|
|
24
|
+
options: Worker.WorkerPool.Options<I, Worker | SharedWorker>
|
|
25
|
+
) => Effect.Effect<Worker.WorkerPool<I, E, O>, never, Worker.WorkerManager | Scope.Scope> = internal.makePool
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @since 1.0.0
|
|
29
|
+
* @category constructors
|
|
30
|
+
*/
|
|
31
|
+
export const makePoolLayer: <Tag, I, E, O>(
|
|
32
|
+
tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>,
|
|
33
|
+
options: Worker.WorkerPool.Options<I, Worker | SharedWorker>
|
|
34
|
+
) => Layer.Layer<Tag> = internal.makePoolLayer
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
* @category constructors
|
|
39
|
+
*/
|
|
40
|
+
export const makePoolSerialized: <I extends Schema.TaggedRequest.Any>(
|
|
41
|
+
options: Worker.SerializedWorkerPool.Options<I, Worker | SharedWorker>
|
|
42
|
+
) => Effect.Effect<Worker.SerializedWorkerPool<I>, never, Worker.WorkerManager | Scope.Scope> =
|
|
43
|
+
internal.makePoolSerialized
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
* @category constructors
|
|
48
|
+
*/
|
|
49
|
+
export const makePoolSerializedLayer: <Tag, I extends Schema.TaggedRequest.Any>(
|
|
50
|
+
tag: Context.Tag<Tag, Worker.SerializedWorkerPool<I>>,
|
|
51
|
+
options: Worker.SerializedWorkerPool.Options<I, Worker | SharedWorker>
|
|
52
|
+
) => Layer.Layer<Tag> = internal.makePoolSerializedLayer
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @since 1.0.0
|
|
56
|
+
* @category layers
|
|
57
|
+
*/
|
|
58
|
+
export const layerManager: Layer.Layer<Worker.WorkerManager> = internal.layerManager
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @since 1.0.0
|
|
62
|
+
* @category layers
|
|
63
|
+
*/
|
|
64
|
+
export const layerWorker: Layer.Layer<Worker.PlatformWorker> = internal.layerWorker
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/effect/platform/WorkerRunner.ts.html).
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkerError } from "@effect/platform/WorkerError"
|
|
7
|
+
import type * as Runner from "@effect/platform/WorkerRunner"
|
|
8
|
+
import type * as Schema from "@effect/schema/Schema"
|
|
9
|
+
import type * as Layer from "effect/Layer"
|
|
10
|
+
import type * as Stream from "effect/Stream"
|
|
11
|
+
import * as internal from "./internal/workerRunner.js"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export * from "@effect/platform/WorkerRunner"
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
* @category layers
|
|
21
|
+
*/
|
|
22
|
+
export const layerPlatform: Layer.Layer<Runner.PlatformRunner> = internal.layerPlatform
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
* @category layers
|
|
27
|
+
*/
|
|
28
|
+
export const layer: <I, R, E, O>(
|
|
29
|
+
process: (request: I) => Stream.Stream<O, E, R>,
|
|
30
|
+
options?: Runner.Runner.Options<I, E, O> | undefined
|
|
31
|
+
) => Layer.Layer<never, WorkerError, R> = internal.layer
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @since 1.0.0
|
|
35
|
+
* @category layers
|
|
36
|
+
*/
|
|
37
|
+
export const layerSerialized: <
|
|
38
|
+
A extends Schema.TaggedRequest.Any,
|
|
39
|
+
I,
|
|
40
|
+
R,
|
|
41
|
+
Handlers extends Runner.SerializedRunner.Handlers<A>
|
|
42
|
+
>(
|
|
43
|
+
schema: Schema.Schema<A, I, R>,
|
|
44
|
+
handlers: Handlers
|
|
45
|
+
) => Layer.Layer<never, WorkerError, R | Runner.SerializedRunner.HandlersContext<Handlers>> = internal.layerSerialized
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
export * as Clipboard from "./Clipboard.js"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @since 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
export * as Effectify from "./Effectify.js"
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export * as Error from "./Error.js"
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
export * as HttpClient from "./HttpClient.js"
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
*
|
|
24
|
+
* Also includes exports from [`@effect/platform/KeyValueStore`](https://effect-ts.github.io/effect/platform/KeyValueStore.ts.html).
|
|
25
|
+
*/
|
|
26
|
+
export * as KeyValueStore from "./KeyValueStore.js"
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @since 1.0.0
|
|
30
|
+
*
|
|
31
|
+
* Also includes exports from [`@effect/platform/Path`](https://effect-ts.github.io/effect/platform/Path.ts.html).
|
|
32
|
+
*/
|
|
33
|
+
export * as Path from "./Path.js"
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @since 1.0.0
|
|
37
|
+
*/
|
|
38
|
+
export * as Runtime from "./Runtime.js"
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @since 1.0.0
|
|
42
|
+
*
|
|
43
|
+
* Also includes exports from [`@effect/platform/Transferable`](https://effect-ts.github.io/effect/platform/Transferable.ts.html).
|
|
44
|
+
*/
|
|
45
|
+
export * as Transferable from "./Transferable.js"
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @since 1.0.0
|
|
49
|
+
*
|
|
50
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/effect/platform/Worker.ts.html).
|
|
51
|
+
*/
|
|
52
|
+
export * as Worker from "./Worker.js"
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @since 1.0.0
|
|
56
|
+
*
|
|
57
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/effect/platform/WorkerRunner.ts.html).
|
|
58
|
+
*/
|
|
59
|
+
export * as WorkerRunner from "./WorkerRunner.js"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as PlatformError from "@effect/platform/Error"
|
|
2
|
+
import { GenericTag } from "effect/Context"
|
|
3
|
+
import * as Effect from "effect/Effect"
|
|
4
|
+
import * as Layer from "effect/Layer"
|
|
5
|
+
import type * as Clipboard from "../Clipboard.js"
|
|
6
|
+
|
|
7
|
+
/** @internal */
|
|
8
|
+
export const tag = GenericTag<Clipboard.Clipboard>("@effect/platform-browser/Clipboard")
|
|
9
|
+
|
|
10
|
+
/** @internal */
|
|
11
|
+
export const make = (
|
|
12
|
+
impl: Omit<Clipboard.Clipboard, "clear" | "writeBlob">
|
|
13
|
+
): Clipboard.Clipboard =>
|
|
14
|
+
tag.of({
|
|
15
|
+
...impl,
|
|
16
|
+
clear: impl.writeString(""),
|
|
17
|
+
writeBlob: (blob: Blob) => impl.write([new ClipboardItem({ [blob.type]: blob })])
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
/** @internal */
|
|
21
|
+
const clipboardError = (props: Omit<Parameters<typeof PlatformError.SystemError>[0], "reason" | "module">) =>
|
|
22
|
+
PlatformError.SystemError({
|
|
23
|
+
reason: "PermissionDenied",
|
|
24
|
+
module: "Clipboard",
|
|
25
|
+
...props
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
/** @internal */
|
|
29
|
+
export const layer = Layer.succeed(
|
|
30
|
+
tag,
|
|
31
|
+
make({
|
|
32
|
+
read: Effect.tryPromise({
|
|
33
|
+
try: () => navigator.clipboard.read(),
|
|
34
|
+
catch: () =>
|
|
35
|
+
clipboardError({
|
|
36
|
+
"message": "Unable to read from clipboard",
|
|
37
|
+
"method": "read",
|
|
38
|
+
"pathOrDescriptor": "layer"
|
|
39
|
+
})
|
|
40
|
+
}),
|
|
41
|
+
write: (s: Array<ClipboardItem>) =>
|
|
42
|
+
Effect.tryPromise({
|
|
43
|
+
try: () => navigator.clipboard.write(s),
|
|
44
|
+
catch: () =>
|
|
45
|
+
clipboardError({
|
|
46
|
+
"message": "Unable to write to clipboard",
|
|
47
|
+
"method": "write",
|
|
48
|
+
"pathOrDescriptor": "layer"
|
|
49
|
+
})
|
|
50
|
+
}),
|
|
51
|
+
readString: Effect.tryPromise({
|
|
52
|
+
try: () => navigator.clipboard.readText(),
|
|
53
|
+
catch: () =>
|
|
54
|
+
clipboardError({
|
|
55
|
+
"message": "Unable to read a string from clipboard",
|
|
56
|
+
"method": "readString",
|
|
57
|
+
"pathOrDescriptor": "layer"
|
|
58
|
+
})
|
|
59
|
+
}),
|
|
60
|
+
writeString: (text: string) =>
|
|
61
|
+
Effect.tryPromise({
|
|
62
|
+
try: () => navigator.clipboard.writeText(text),
|
|
63
|
+
catch: () =>
|
|
64
|
+
clipboardError({
|
|
65
|
+
"message": "Unable to write a string to clipboard",
|
|
66
|
+
"method": "writeString",
|
|
67
|
+
"pathOrDescriptor": "layer"
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import * as PlatformError from "@effect/platform/Error"
|
|
2
|
+
import * as KeyValueStore from "@effect/platform/KeyValueStore"
|
|
3
|
+
import * as Effect from "effect/Effect"
|
|
4
|
+
import * as Layer from "effect/Layer"
|
|
5
|
+
import * as Option from "effect/Option"
|
|
6
|
+
|
|
7
|
+
const storageError = (props: Omit<Parameters<typeof PlatformError.SystemError>[0], "reason" | "module">) =>
|
|
8
|
+
PlatformError.SystemError({
|
|
9
|
+
reason: "PermissionDenied",
|
|
10
|
+
module: "KeyValueStore",
|
|
11
|
+
...props
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
/** @internal */
|
|
15
|
+
export const layerLocalStorage = Layer.succeed(
|
|
16
|
+
KeyValueStore.KeyValueStore,
|
|
17
|
+
KeyValueStore.make({
|
|
18
|
+
get: (key: string) =>
|
|
19
|
+
Effect.try({
|
|
20
|
+
try: () => Option.fromNullable(localStorage.getItem(key)),
|
|
21
|
+
catch: () =>
|
|
22
|
+
storageError({
|
|
23
|
+
pathOrDescriptor: "layerLocalStorage",
|
|
24
|
+
method: "get",
|
|
25
|
+
message: `Unable to get item with key ${key}`
|
|
26
|
+
})
|
|
27
|
+
}),
|
|
28
|
+
|
|
29
|
+
set: (key: string, value: string) =>
|
|
30
|
+
Effect.try({
|
|
31
|
+
try: () => localStorage.setItem(key, value),
|
|
32
|
+
catch: () =>
|
|
33
|
+
storageError({
|
|
34
|
+
pathOrDescriptor: "layerLocalStorage",
|
|
35
|
+
method: "set",
|
|
36
|
+
message: `Unable to set item with key ${key}`
|
|
37
|
+
})
|
|
38
|
+
}),
|
|
39
|
+
|
|
40
|
+
remove: (key: string) =>
|
|
41
|
+
Effect.try({
|
|
42
|
+
try: () => localStorage.removeItem(key),
|
|
43
|
+
catch: () =>
|
|
44
|
+
storageError({
|
|
45
|
+
pathOrDescriptor: "layerLocalStorage",
|
|
46
|
+
method: "remove",
|
|
47
|
+
message: `Unable to remove item with key ${key}`
|
|
48
|
+
})
|
|
49
|
+
}),
|
|
50
|
+
|
|
51
|
+
clear: Effect.try({
|
|
52
|
+
try: () => localStorage.clear(),
|
|
53
|
+
catch: () =>
|
|
54
|
+
storageError({
|
|
55
|
+
pathOrDescriptor: "layerLocalStorage",
|
|
56
|
+
method: "clear",
|
|
57
|
+
message: `Unable to clear storage`
|
|
58
|
+
})
|
|
59
|
+
}),
|
|
60
|
+
|
|
61
|
+
size: Effect.try({
|
|
62
|
+
try: () => localStorage.length,
|
|
63
|
+
catch: () =>
|
|
64
|
+
storageError({
|
|
65
|
+
pathOrDescriptor: "layerLocalStorage",
|
|
66
|
+
method: "size",
|
|
67
|
+
message: `Unable to get size`
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
})
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
/** @internal */
|
|
74
|
+
export const layerSessionStorage = Layer.succeed(
|
|
75
|
+
KeyValueStore.KeyValueStore,
|
|
76
|
+
KeyValueStore.make({
|
|
77
|
+
get: (key: string) =>
|
|
78
|
+
Effect.try({
|
|
79
|
+
try: () => Option.fromNullable(sessionStorage.getItem(key)),
|
|
80
|
+
catch: () =>
|
|
81
|
+
storageError({
|
|
82
|
+
pathOrDescriptor: "layerSessionStorage",
|
|
83
|
+
method: "get",
|
|
84
|
+
message: `Unable to get item with key ${key}`
|
|
85
|
+
})
|
|
86
|
+
}),
|
|
87
|
+
|
|
88
|
+
set: (key: string, value: string) =>
|
|
89
|
+
Effect.try({
|
|
90
|
+
try: () => sessionStorage.setItem(key, value),
|
|
91
|
+
catch: () =>
|
|
92
|
+
storageError({
|
|
93
|
+
pathOrDescriptor: "layerSessionStorage",
|
|
94
|
+
method: "set",
|
|
95
|
+
message: `Unable to set item with key ${key}`
|
|
96
|
+
})
|
|
97
|
+
}),
|
|
98
|
+
|
|
99
|
+
remove: (key: string) =>
|
|
100
|
+
Effect.try({
|
|
101
|
+
try: () => sessionStorage.removeItem(key),
|
|
102
|
+
catch: () =>
|
|
103
|
+
storageError({
|
|
104
|
+
pathOrDescriptor: "layerSessionStorage",
|
|
105
|
+
method: "remove",
|
|
106
|
+
message: `Unable to remove item with key ${key}`
|
|
107
|
+
})
|
|
108
|
+
}),
|
|
109
|
+
|
|
110
|
+
clear: Effect.try({
|
|
111
|
+
try: () => sessionStorage.clear(),
|
|
112
|
+
catch: () =>
|
|
113
|
+
storageError({
|
|
114
|
+
pathOrDescriptor: "layerSessionStorage",
|
|
115
|
+
method: "clear",
|
|
116
|
+
message: `Unable to clear storage`
|
|
117
|
+
})
|
|
118
|
+
}),
|
|
119
|
+
|
|
120
|
+
size: Effect.try({
|
|
121
|
+
try: () => sessionStorage.length,
|
|
122
|
+
catch: () =>
|
|
123
|
+
storageError({
|
|
124
|
+
pathOrDescriptor: "layerSessionStorage",
|
|
125
|
+
method: "size",
|
|
126
|
+
message: `Unable to get size`
|
|
127
|
+
})
|
|
128
|
+
})
|
|
129
|
+
})
|
|
130
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause"
|
|
2
|
+
import * as Effect from "effect/Effect"
|
|
3
|
+
|
|
4
|
+
/** @internal */
|
|
5
|
+
export const runMain = <E, A>(
|
|
6
|
+
effect: Effect.Effect<A, E>
|
|
7
|
+
) => {
|
|
8
|
+
const fiber = Effect.runFork(
|
|
9
|
+
Effect.tapErrorCause(effect, (cause) => {
|
|
10
|
+
if (Cause.isInterruptedOnly(cause)) {
|
|
11
|
+
return Effect.unit
|
|
12
|
+
}
|
|
13
|
+
return Effect.logError(cause)
|
|
14
|
+
})
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
addEventListener("beforeunload", () => {
|
|
18
|
+
Effect.runFork(fiber.interruptAsFork(fiber.id()))
|
|
19
|
+
})
|
|
20
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as Worker from "@effect/platform/Worker"
|
|
2
|
+
import { WorkerError } from "@effect/platform/WorkerError"
|
|
3
|
+
import * as Effect from "effect/Effect"
|
|
4
|
+
import * as Layer from "effect/Layer"
|
|
5
|
+
import * as Queue from "effect/Queue"
|
|
6
|
+
|
|
7
|
+
const platformWorkerImpl = Worker.PlatformWorker.of({
|
|
8
|
+
[Worker.PlatformWorkerTypeId]: Worker.PlatformWorkerTypeId,
|
|
9
|
+
spawn<I, O>(worker_: unknown) {
|
|
10
|
+
return Effect.gen(function*(_) {
|
|
11
|
+
const worker = worker_ as globalThis.SharedWorker | globalThis.Worker
|
|
12
|
+
let port: globalThis.Worker | MessagePort
|
|
13
|
+
if ("port" in worker) {
|
|
14
|
+
port = worker.port
|
|
15
|
+
port.start()
|
|
16
|
+
} else {
|
|
17
|
+
port = worker
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
yield* _(Effect.addFinalizer(() => Effect.sync(() => port.postMessage([1]))))
|
|
21
|
+
|
|
22
|
+
const queue = yield* _(Queue.unbounded<Worker.BackingWorker.Message<O>>())
|
|
23
|
+
|
|
24
|
+
const fiber = yield* _(
|
|
25
|
+
Effect.async<never, WorkerError, never>((resume) => {
|
|
26
|
+
function onMessage(event: MessageEvent) {
|
|
27
|
+
queue.unsafeOffer((event as MessageEvent).data)
|
|
28
|
+
}
|
|
29
|
+
function onError(event: ErrorEvent) {
|
|
30
|
+
resume(Effect.fail(WorkerError("unknown", event.message, event.error?.stack)))
|
|
31
|
+
}
|
|
32
|
+
port.addEventListener("message", onMessage as any)
|
|
33
|
+
port.addEventListener("error", onError as any)
|
|
34
|
+
return Effect.sync(() => {
|
|
35
|
+
port.removeEventListener("message", onMessage as any)
|
|
36
|
+
port.removeEventListener("error", onError as any)
|
|
37
|
+
})
|
|
38
|
+
}),
|
|
39
|
+
Effect.interruptible,
|
|
40
|
+
Effect.forkScoped
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
const send = (message: I, transfers?: ReadonlyArray<unknown>) =>
|
|
44
|
+
Effect.try({
|
|
45
|
+
try: () => port.postMessage([0, message], transfers as any),
|
|
46
|
+
catch: (error) => WorkerError("send", (error as any).message, (error as any).stack)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
return { fiber, queue, send }
|
|
50
|
+
})
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
/** @internal */
|
|
55
|
+
export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerImpl)
|
|
56
|
+
|
|
57
|
+
/** @internal */
|
|
58
|
+
export const layerManager = Layer.provide(Worker.layerManager, layerWorker)
|
|
59
|
+
|
|
60
|
+
/** @internal */
|
|
61
|
+
export const makePool = Worker.makePool<globalThis.Worker | globalThis.SharedWorker>()
|
|
62
|
+
|
|
63
|
+
/** @internal */
|
|
64
|
+
export const makePoolLayer = Worker.makePoolLayer<globalThis.Worker | globalThis.SharedWorker>(layerManager)
|
|
65
|
+
|
|
66
|
+
/** @internal */
|
|
67
|
+
export const makePoolSerialized = Worker.makePoolSerialized<globalThis.Worker | globalThis.SharedWorker>()
|
|
68
|
+
|
|
69
|
+
/** @internal */
|
|
70
|
+
export const makePoolSerializedLayer = Worker.makePoolSerializedLayer<globalThis.Worker | globalThis.SharedWorker>(
|
|
71
|
+
layerManager
|
|
72
|
+
)
|