From 633b66ba87de1be6197be1e20d1f872483014ee6 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 8 Feb 2024 11:53:52 +1300 Subject: [PATCH 1/3] remove more platform re-exports --- .../examples/keyValueStore.ts | 2 +- ...yValueStore.ts => BrowserKeyValueStore.ts} | 13 ++-- .../src/{Runtime.ts => BrowserRuntime.ts} | 0 .../platform-browser/src/BrowserWorker.ts | 17 +++++ .../src/BrowserWorkerRunner.ts | 12 ++++ packages/platform-browser/src/Effectify.ts | 22 ------- packages/platform-browser/src/Error.ts | 34 ---------- packages/platform-browser/src/HttpClient.ts | 62 ------------------ packages/platform-browser/src/Path.ts | 7 -- packages/platform-browser/src/Transferable.ts | 7 -- packages/platform-browser/src/Worker.ts | 64 ------------------- packages/platform-browser/src/WorkerRunner.ts | 45 ------------- packages/platform-browser/src/index.ts | 45 ++----------- .../platform-browser/src/internal/worker.ts | 14 ---- .../src/internal/workerRunner.ts | 23 +------ .../test/KeyValueStore.test.ts | 2 +- packages/platform-browser/test/Worker.test.ts | 23 ++++--- .../platform-browser/test/fixtures/schema.ts | 2 +- .../test/fixtures/serializedWorker.ts | 5 +- .../platform-browser/test/fixtures/worker.ts | 7 +- packages/platform-bun/examples/worker.ts | 10 +-- .../platform-bun/examples/worker/range.ts | 2 +- packages/platform-bun/src/BunWorker.ts | 39 ----------- packages/platform-bun/src/BunWorkerRunner.ts | 28 +------- packages/platform-bun/src/internal/worker.ts | 14 ---- .../platform-bun/src/internal/workerRunner.ts | 22 +------ packages/platform-node/examples/worker.ts | 10 +-- .../platform-node/examples/worker/range.ts | 2 +- packages/platform-node/src/NodeWorker.ts | 41 ------------ .../platform-node/src/NodeWorkerRunner.ts | 28 +------- packages/platform-node/src/internal/worker.ts | 14 ---- .../src/internal/workerRunner.ts | 22 +------ packages/platform/src/Http/Body.ts | 6 +- packages/platform/src/Http/ClientRequest.ts | 14 ++-- packages/platform/src/Http/ClientResponse.ts | 5 +- packages/platform/src/Http/IncomingMessage.ts | 24 ++++--- packages/platform/src/Http/ServerResponse.ts | 2 +- packages/platform/src/Worker.ts | 26 ++++---- packages/platform/src/WorkerError.ts | 4 +- packages/platform/src/internal/http/body.ts | 10 +-- .../src/internal/http/clientRequest.ts | 8 +-- .../src/internal/http/clientResponse.ts | 10 +-- .../src/internal/http/serverResponse.ts | 4 +- packages/platform/src/internal/worker.ts | 29 ++++----- packages/platform/src/internal/workerError.ts | 2 +- packages/rpc-workers/src/internal/resolver.ts | 2 +- packages/rpc-workers/test/e2e.test.ts | 8 +-- packages/rpc-workers/test/e2e/worker-setup.ts | 6 +- packages/rpc-workers/test/e2e/worker.ts | 6 +- 49 files changed, 163 insertions(+), 641 deletions(-) rename packages/platform-browser/src/{KeyValueStore.ts => BrowserKeyValueStore.ts} (54%) rename packages/platform-browser/src/{Runtime.ts => BrowserRuntime.ts} (100%) create mode 100644 packages/platform-browser/src/BrowserWorker.ts create mode 100644 packages/platform-browser/src/BrowserWorkerRunner.ts delete mode 100644 packages/platform-browser/src/Effectify.ts delete mode 100644 packages/platform-browser/src/Error.ts delete mode 100644 packages/platform-browser/src/HttpClient.ts delete mode 100644 packages/platform-browser/src/Path.ts delete mode 100644 packages/platform-browser/src/Transferable.ts delete mode 100644 packages/platform-browser/src/Worker.ts delete mode 100644 packages/platform-browser/src/WorkerRunner.ts diff --git a/packages/platform-browser/examples/keyValueStore.ts b/packages/platform-browser/examples/keyValueStore.ts index 7f17042f2d..c4036ef0ef 100644 --- a/packages/platform-browser/examples/keyValueStore.ts +++ b/packages/platform-browser/examples/keyValueStore.ts @@ -1,4 +1,4 @@ -import * as KeyValueStore from "@effect/platform-browser/KeyValueStore" +import * as KeyValueStore from "@effect/platform/KeyValueStore" import * as Effect from "effect/Effect" const program = KeyValueStore.KeyValueStore.pipe( diff --git a/packages/platform-browser/src/KeyValueStore.ts b/packages/platform-browser/src/BrowserKeyValueStore.ts similarity index 54% rename from packages/platform-browser/src/KeyValueStore.ts rename to packages/platform-browser/src/BrowserKeyValueStore.ts index 42cb9c5a98..382636ff0d 100644 --- a/packages/platform-browser/src/KeyValueStore.ts +++ b/packages/platform-browser/src/BrowserKeyValueStore.ts @@ -1,22 +1,17 @@ /** * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/KeyValueStore`](https://effect-ts.github.io/effect/platform/KeyValueStore.ts.html). */ +import type * as KeyValueStore from "@effect/platform/KeyValueStore" +import type * as Layer from "effect/Layer" import * as internal from "./internal/keyValueStore.js" -/** - * @since 1.0.0 - */ -export * from "@effect/platform/KeyValueStore" - /** * Creates a KeyValueStore layer that uses the browser's localStorage api. Values are stored between sessions. * * @since 1.0.0 * @category models */ -export const layerLocalStorage = internal.layerLocalStorage +export const layerLocalStorage: Layer.Layer = internal.layerLocalStorage /** * Creates a KeyValueStore layer that uses the browser's sessionStorage api. Values are stored only for the current session. @@ -24,4 +19,4 @@ export const layerLocalStorage = internal.layerLocalStorage * @since 1.0.0 * @category models */ -export const layerSessionStorage = internal.layerSessionStorage +export const layerSessionStorage: Layer.Layer = internal.layerSessionStorage diff --git a/packages/platform-browser/src/Runtime.ts b/packages/platform-browser/src/BrowserRuntime.ts similarity index 100% rename from packages/platform-browser/src/Runtime.ts rename to packages/platform-browser/src/BrowserRuntime.ts diff --git a/packages/platform-browser/src/BrowserWorker.ts b/packages/platform-browser/src/BrowserWorker.ts new file mode 100644 index 0000000000..220923e701 --- /dev/null +++ b/packages/platform-browser/src/BrowserWorker.ts @@ -0,0 +1,17 @@ +/** + * @since 1.0.0 + */ +import type * as Worker from "@effect/platform/Worker" +import type * as Layer from "effect/Layer" +import * as internal from "./internal/worker.js" +/** + * @since 1.0.0 + * @category layers + */ +export const layerManager: Layer.Layer = internal.layerManager + +/** + * @since 1.0.0 + * @category layers + */ +export const layerWorker: Layer.Layer = internal.layerWorker diff --git a/packages/platform-browser/src/BrowserWorkerRunner.ts b/packages/platform-browser/src/BrowserWorkerRunner.ts new file mode 100644 index 0000000000..b0c67fd5d0 --- /dev/null +++ b/packages/platform-browser/src/BrowserWorkerRunner.ts @@ -0,0 +1,12 @@ +/** + * @since 1.0.0 + */ +import type * as Runner from "@effect/platform/WorkerRunner" +import type * as Layer from "effect/Layer" +import * as internal from "./internal/workerRunner.js" + +/** + * @since 1.0.0 + * @category layers + */ +export const layer: Layer.Layer = internal.layer diff --git a/packages/platform-browser/src/Effectify.ts b/packages/platform-browser/src/Effectify.ts deleted file mode 100644 index 4d5ea89042..0000000000 --- a/packages/platform-browser/src/Effectify.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @since 1.0.0 - */ - -export type { - /** - * @since 1.0.0 - */ - Effectify, - /** - * @since 1.0.0 - */ - EffectifyError -} from "@effect/platform/Effectify" - -export { - /** - * @since 1.0.0 - * @category constructor - */ - effectify -} from "@effect/platform/Effectify" diff --git a/packages/platform-browser/src/Error.ts b/packages/platform-browser/src/Error.ts deleted file mode 100644 index 05a38c7808..0000000000 --- a/packages/platform-browser/src/Error.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @since 1.0.0 - */ - -export { - /** - * @since 1.0.0 - * @category error - */ - BadArgument, - /** - * @since 1.0.0 - * @category type id - */ - PlatformErrorTypeId, - /** - * @since 1.0.0 - * @category error - */ - SystemError -} from "@effect/platform/Error" - -export type { - /** - * @since 1.0.0 - * @category model - */ - PlatformError, - /** - * @since 1.0.0 - * @category model - */ - SystemErrorReason -} from "@effect/platform/Error" diff --git a/packages/platform-browser/src/HttpClient.ts b/packages/platform-browser/src/HttpClient.ts deleted file mode 100644 index bd19826712..0000000000 --- a/packages/platform-browser/src/HttpClient.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @since 1.0.0 - */ -import * as body from "@effect/platform/Http/Body" -import * as client from "@effect/platform/Http/Client" -import * as error from "@effect/platform/Http/ClientError" -import * as request from "@effect/platform/Http/ClientRequest" -import * as response from "@effect/platform/Http/ClientResponse" -import * as headers from "@effect/platform/Http/Headers" -import * as urlParams from "@effect/platform/Http/UrlParams" - -export { - /** - * @since 1.0.0 - * - * - Docs: [Http/Body](https://effect-ts.github.io/effect/platform/Http/Body.ts.html) - * - Module: `@effect/platform/Http/Body` - */ - body, - /** - * @since 1.0.0 - * - * - Docs: [Http/Client](https://effect-ts.github.io/effect/platform/Http/Client.ts.html) - * - Module: `@effect/platform/Http/Client` - */ - client, - /** - * @since 1.0.0 - * - * - Docs: [Http/ClientError](https://effect-ts.github.io/effect/platform/Http/ClientError.ts.html) - * - Module: `@effect/platform/Http/ClientError` - */ - error, - /** - * @since 1.0.0 - * - * - Docs: [Http/Headers](https://effect-ts.github.io/effect/platform/Http/Headers.ts.html) - * - Module: `@effect/platform/Http/Headers` - */ - headers, - /** - * @since 1.0.0 - * - * - Docs: [Http/ClientRequest](https://effect-ts.github.io/effect/platform/Http/ClientRequest.ts.html) - * - Module: `@effect/platform/Http/ClientRequest` - */ - request, - /** - * @since 1.0.0 - * - * - Docs: [Http/ClientResponse](https://effect-ts.github.io/effect/platform/Http/ClientResponse.ts.html) - * - Module: `@effect/platform/Http/ClientResponse` - */ - response, - /** - * @since 1.0.0 - * - * - Docs: [Http/UrlParams](https://effect-ts.github.io/effect/platform/Http/UrlParams.ts.html) - * - Module: `@effect/platform/Http/UrlParams` - */ - urlParams -} diff --git a/packages/platform-browser/src/Path.ts b/packages/platform-browser/src/Path.ts deleted file mode 100644 index 056f158fe5..0000000000 --- a/packages/platform-browser/src/Path.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/Path`](https://effect-ts.github.io/effect/platform/Path.ts.html). - */ - -export * from "@effect/platform/Path" diff --git a/packages/platform-browser/src/Transferable.ts b/packages/platform-browser/src/Transferable.ts deleted file mode 100644 index 89a7ea081b..0000000000 --- a/packages/platform-browser/src/Transferable.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/Transferable`](https://effect-ts.github.io/effect/platform/Transferable.ts.html). - */ - -export * from "@effect/platform/Transferable" diff --git a/packages/platform-browser/src/Worker.ts b/packages/platform-browser/src/Worker.ts deleted file mode 100644 index 787bfe74fb..0000000000 --- a/packages/platform-browser/src/Worker.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/effect/platform/Worker.ts.html). - */ -import type * as Worker from "@effect/platform/Worker" -import type * as Schema from "@effect/schema/Schema" -import type * as Context from "effect/Context" -import type * as Effect from "effect/Effect" -import type * as Layer from "effect/Layer" -import type * as Scope from "effect/Scope" -import * as internal from "./internal/worker.js" - -/** - * @since 1.0.0 - */ -export * from "@effect/platform/Worker" - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePool: ( - options: Worker.WorkerPool.Options -) => Effect.Effect, never, Worker.WorkerManager | Scope.Scope> = internal.makePool - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolLayer: ( - tag: Context.Tag>, - options: Worker.WorkerPool.Options -) => Layer.Layer = internal.makePoolLayer - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolSerialized: ( - options: Worker.SerializedWorkerPool.Options -) => Effect.Effect, never, Worker.WorkerManager | Scope.Scope> = - internal.makePoolSerialized - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolSerializedLayer: ( - tag: Context.Tag>, - options: Worker.SerializedWorkerPool.Options -) => Layer.Layer = internal.makePoolSerializedLayer - -/** - * @since 1.0.0 - * @category layers - */ -export const layerManager: Layer.Layer = internal.layerManager - -/** - * @since 1.0.0 - * @category layers - */ -export const layerWorker: Layer.Layer = internal.layerWorker diff --git a/packages/platform-browser/src/WorkerRunner.ts b/packages/platform-browser/src/WorkerRunner.ts deleted file mode 100644 index 10af26cac6..0000000000 --- a/packages/platform-browser/src/WorkerRunner.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/effect/platform/WorkerRunner.ts.html). - */ -import type { WorkerError } from "@effect/platform/WorkerError" -import type * as Runner from "@effect/platform/WorkerRunner" -import type * as Schema from "@effect/schema/Schema" -import type * as Layer from "effect/Layer" -import type * as Stream from "effect/Stream" -import * as internal from "./internal/workerRunner.js" - -/** - * @since 1.0.0 - */ -export * from "@effect/platform/WorkerRunner" - -/** - * @since 1.0.0 - * @category layers - */ -export const layerPlatform: Layer.Layer = internal.layerPlatform - -/** - * @since 1.0.0 - * @category layers - */ -export const layer: ( - process: (request: I) => Stream.Stream, - options?: Runner.Runner.Options | undefined -) => Layer.Layer = internal.layer - -/** - * @since 1.0.0 - * @category layers - */ -export const layerSerialized: < - A extends Schema.TaggedRequest.Any, - I, - R, - Handlers extends Runner.SerializedRunner.Handlers ->( - schema: Schema.Schema, - handlers: Handlers -) => Layer.Layer> = internal.layerSerialized diff --git a/packages/platform-browser/src/index.ts b/packages/platform-browser/src/index.ts index 686b18a846..97c5d0561b 100644 --- a/packages/platform-browser/src/index.ts +++ b/packages/platform-browser/src/index.ts @@ -1,59 +1,24 @@ /** * @since 1.0.0 */ -export * as Clipboard from "./Clipboard.js" - -/** - * @since 1.0.0 - */ -export * as Effectify from "./Effectify.js" - -/** - * @since 1.0.0 - */ -export * as Error from "./Error.js" - -/** - * @since 1.0.0 - */ -export * as HttpClient from "./HttpClient.js" - -/** - * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/KeyValueStore`](https://effect-ts.github.io/effect/platform/KeyValueStore.ts.html). - */ -export * as KeyValueStore from "./KeyValueStore.js" +export * as BrowserKeyValueStore from "./BrowserKeyValueStore.js" /** * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/Path`](https://effect-ts.github.io/effect/platform/Path.ts.html). */ -export * as Path from "./Path.js" +export * as BrowserRuntime from "./BrowserRuntime.js" /** * @since 1.0.0 */ -export * as Runtime from "./Runtime.js" +export * as BrowserWorker from "./BrowserWorker.js" /** * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/Transferable`](https://effect-ts.github.io/effect/platform/Transferable.ts.html). */ -export * as Transferable from "./Transferable.js" +export * as BrowserWorkerRunner from "./BrowserWorkerRunner.js" /** * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/effect/platform/Worker.ts.html). */ -export * as Worker from "./Worker.js" - -/** - * @since 1.0.0 - * - * Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/effect/platform/WorkerRunner.ts.html). - */ -export * as WorkerRunner from "./WorkerRunner.js" +export * as Clipboard from "./Clipboard.js" diff --git a/packages/platform-browser/src/internal/worker.ts b/packages/platform-browser/src/internal/worker.ts index deeead9f79..12702884b2 100644 --- a/packages/platform-browser/src/internal/worker.ts +++ b/packages/platform-browser/src/internal/worker.ts @@ -56,17 +56,3 @@ export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerIm /** @internal */ export const layerManager = Layer.provide(Worker.layerManager, layerWorker) - -/** @internal */ -export const makePool = Worker.makePool() - -/** @internal */ -export const makePoolLayer = Worker.makePoolLayer(layerManager) - -/** @internal */ -export const makePoolSerialized = Worker.makePoolSerialized() - -/** @internal */ -export const makePoolSerializedLayer = Worker.makePoolSerializedLayer( - layerManager -) diff --git a/packages/platform-browser/src/internal/workerRunner.ts b/packages/platform-browser/src/internal/workerRunner.ts index 0a5f287758..8ae5adc5c1 100644 --- a/packages/platform-browser/src/internal/workerRunner.ts +++ b/packages/platform-browser/src/internal/workerRunner.ts @@ -1,13 +1,10 @@ import { WorkerError } from "@effect/platform/WorkerError" import * as Runner from "@effect/platform/WorkerRunner" -import type * as Schema from "@effect/schema/Schema" import * as Cause from "effect/Cause" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" import * as Queue from "effect/Queue" import * as Schedule from "effect/Schedule" -import type * as Stream from "effect/Stream" -import type { WorkerRunner } from "../index.js" const platformRunnerImpl = Runner.PlatformRunner.of({ [Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId, @@ -71,22 +68,4 @@ const platformRunnerImpl = Runner.PlatformRunner.of({ }) /** @internal */ -export const layerPlatform = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl) - -/** @internal */ -export const layer = ( - process: (request: I) => Stream.Stream, - options?: Runner.Runner.Options -): Layer.Layer => Layer.provide(Runner.layer(process, options), layerPlatform) - -/** @internal */ -export const layerSerialized = < - A extends Schema.TaggedRequest.Any, - I, - R, - Handlers extends WorkerRunner.SerializedRunner.Handlers ->( - schema: Schema.Schema, - handlers: Handlers -): Layer.Layer> => - Layer.provide(Runner.layerSerialized(schema, handlers), layerPlatform) +export const layer = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl) diff --git a/packages/platform-browser/test/KeyValueStore.test.ts b/packages/platform-browser/test/KeyValueStore.test.ts index a4f9a40b91..0411e5466b 100644 --- a/packages/platform-browser/test/KeyValueStore.test.ts +++ b/packages/platform-browser/test/KeyValueStore.test.ts @@ -1,4 +1,4 @@ -import * as Kv from "@effect/platform-browser/KeyValueStore" +import * as Kv from "@effect/platform-browser/BrowserKeyValueStore" // @ts-ignore import { testLayer } from "@effect/platform/test/KeyValueStore.test" import { describe } from "vitest" diff --git a/packages/platform-browser/test/Worker.test.ts b/packages/platform-browser/test/Worker.test.ts index 8c0eabcc9e..7f477172ce 100644 --- a/packages/platform-browser/test/Worker.test.ts +++ b/packages/platform-browser/test/Worker.test.ts @@ -1,4 +1,5 @@ -import * as EffectWorker from "@effect/platform-browser/Worker" +import * as BrowerWorker from "@effect/platform-browser/BrowserWorker" +import * as EffectWorker from "@effect/platform/Worker" import "@vitest/web-worker" import { Chunk, Effect, Option, Stream } from "effect" import { assert, describe, it } from "vitest" @@ -8,15 +9,17 @@ import { GetPersonById, GetSpan, GetUserById, InitialMessage, Person, User } fro describe.sequential("Worker", () => { it("executes streams", () => Effect.gen(function*(_) { - const pool = yield* _(EffectWorker.makePool({ - spawn: () => new globalThis.Worker(new URL("./fixtures/worker.ts", import.meta.url)), - size: 1 - })) + const pool = yield* _( + EffectWorker.makePool({ + spawn: () => new globalThis.Worker(new URL("./fixtures/worker.ts", import.meta.url)), + size: 1 + }) + ) const items = yield* _(pool.execute(99), Stream.runCollect) assert.strictEqual(items.length, 100) }).pipe( Effect.scoped, - Effect.provide(EffectWorker.layerManager), + Effect.provide(BrowerWorker.layerManager), Effect.runPromise )) @@ -33,7 +36,7 @@ describe.sequential("Worker", () => { ]) }).pipe( Effect.scoped, - Effect.provide(EffectWorker.layerManager), + Effect.provide(BrowerWorker.layerManager), Effect.runPromise )) @@ -54,7 +57,7 @@ describe.sequential("Worker", () => { ]) }).pipe( Effect.scoped, - Effect.provide(EffectWorker.layerManager), + Effect.provide(BrowerWorker.layerManager), Effect.runPromise )) @@ -76,7 +79,7 @@ describe.sequential("Worker", () => { }).pipe( Effect.withSpan("test"), Effect.scoped, - Effect.provide(EffectWorker.layerManager), + Effect.provide(BrowerWorker.layerManager), Effect.runPromise )) @@ -90,7 +93,7 @@ describe.sequential("Worker", () => { assert.strictEqual(items.length, 100) }).pipe( Effect.scoped, - Effect.provide(EffectWorker.layerManager), + Effect.provide(BrowerWorker.layerManager), Effect.runPromise )) diff --git a/packages/platform-browser/test/fixtures/schema.ts b/packages/platform-browser/test/fixtures/schema.ts index 79e2fcf41f..d639a27683 100644 --- a/packages/platform-browser/test/fixtures/schema.ts +++ b/packages/platform-browser/test/fixtures/schema.ts @@ -1,4 +1,4 @@ -import * as Transferable from "@effect/platform-browser/Transferable" +import * as Transferable from "@effect/platform/Transferable" import * as Schema from "@effect/schema/Schema" export class User extends Schema.Class()({ diff --git a/packages/platform-browser/test/fixtures/serializedWorker.ts b/packages/platform-browser/test/fixtures/serializedWorker.ts index 78c9a28ed8..0b55b68165 100644 --- a/packages/platform-browser/test/fixtures/serializedWorker.ts +++ b/packages/platform-browser/test/fixtures/serializedWorker.ts @@ -1,4 +1,5 @@ -import * as Runner from "@effect/platform-browser/WorkerRunner" +import * as BrowserRunner from "@effect/platform-browser/BrowserWorkerRunner" +import * as Runner from "@effect/platform/WorkerRunner" import { Context, Effect, Layer, Option, Stream } from "effect" import { Person, User, WorkerMessage } from "./schema.js" @@ -30,7 +31,7 @@ const WorkerLive = Runner.layerSerialized(WorkerMessage, { }).pipe(Effect.withSpan("GetSpan")) }) .pipe( - Layer.provide(Runner.layerPlatform) + Layer.provide(BrowserRunner.layer) ) Effect.runFork(Layer.launch(WorkerLive)) diff --git a/packages/platform-browser/test/fixtures/worker.ts b/packages/platform-browser/test/fixtures/worker.ts index 16dd5e3f7a..bbdb217aab 100644 --- a/packages/platform-browser/test/fixtures/worker.ts +++ b/packages/platform-browser/test/fixtures/worker.ts @@ -1,6 +1,9 @@ -import * as Runner from "@effect/platform-browser/WorkerRunner" +import * as BrowserRunner from "@effect/platform-browser/BrowserWorkerRunner" +import * as Runner from "@effect/platform/WorkerRunner" import { Effect, Layer, Stream } from "effect" -const WorkerLive = Runner.layer((n: number) => Stream.range(0, n)) +const WorkerLive = Runner.layer((n: number) => Stream.range(0, n)).pipe( + Layer.provide(BrowserRunner.layer) +) Effect.runFork(Layer.launch(WorkerLive)) diff --git a/packages/platform-bun/examples/worker.ts b/packages/platform-bun/examples/worker.ts index 60428470d3..f511830004 100644 --- a/packages/platform-bun/examples/worker.ts +++ b/packages/platform-bun/examples/worker.ts @@ -1,18 +1,20 @@ -import type { Worker } from "@effect/platform" +import { Worker } from "@effect/platform" import { BunRuntime, BunWorker } from "@effect/platform-bun" -import { Console, Context, Effect, Stream } from "effect" +import { Console, Context, Effect, Layer, Stream } from "effect" import * as OS from "node:os" interface MyWorkerPool { readonly _: unique symbol } const Pool = Context.GenericTag>("@app/MyWorkerPool") -const PoolLive = BunWorker.makePoolLayer(Pool, { +const PoolLive = Worker.makePoolLayer(Pool, { spawn: () => new globalThis.Worker("./examples/worker/range.ts"), minSize: 0, maxSize: OS.availableParallelism(), timeToLive: 10000 -}) +}).pipe( + Layer.provide(BunWorker.layerManager) +) Effect.gen(function*(_) { const pool = yield* _(Pool) diff --git a/packages/platform-bun/examples/worker/range.ts b/packages/platform-bun/examples/worker/range.ts index 8275263980..531505761f 100644 --- a/packages/platform-bun/examples/worker/range.ts +++ b/packages/platform-bun/examples/worker/range.ts @@ -6,6 +6,6 @@ const WorkerLive = Effect.gen(function*(_) { yield* _(Runner.make((n: number) => Stream.range(0, n))) yield* _(Effect.log("worker started")) yield* _(Effect.addFinalizer(() => Effect.log("worker closed"))) -}).pipe(Layer.scopedDiscard, Layer.provide(BunWorkerRunner.layerPlatform)) +}).pipe(Layer.scopedDiscard, Layer.provide(BunWorkerRunner.layer)) BunRuntime.runMain(Layer.launch(WorkerLive)) diff --git a/packages/platform-bun/src/BunWorker.ts b/packages/platform-bun/src/BunWorker.ts index d99ad8f193..8f87429442 100644 --- a/packages/platform-bun/src/BunWorker.ts +++ b/packages/platform-bun/src/BunWorker.ts @@ -2,48 +2,9 @@ * @since 1.0.0 */ import type * as Worker from "@effect/platform/Worker" -import type * as Schema from "@effect/schema/Schema" -import type * as Context from "effect/Context" -import type * as Effect from "effect/Effect" import type * as Layer from "effect/Layer" -import type * as Scope from "effect/Scope" import * as internal from "./internal/worker.js" -/** - * @since 1.0.0 - * @category constructors - */ -export const makePool: ( - options: Worker.WorkerPool.Options -) => Effect.Effect, never, Worker.WorkerManager | Scope.Scope> = internal.makePool - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolLayer: ( - tag: Context.Tag>, - options: Worker.WorkerPool.Options -) => Layer.Layer = internal.makePoolLayer - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolSerialized: ( - options: Worker.SerializedWorkerPool.Options -) => Effect.Effect, never, Worker.WorkerManager | Scope.Scope> = - internal.makePoolSerialized - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolSerializedLayer: ( - tag: Context.Tag>, - options: Worker.SerializedWorkerPool.Options -) => Layer.Layer = internal.makePoolSerializedLayer - /** * @since 1.0.0 * @category layers diff --git a/packages/platform-bun/src/BunWorkerRunner.ts b/packages/platform-bun/src/BunWorkerRunner.ts index ce2847838b..b0c67fd5d0 100644 --- a/packages/platform-bun/src/BunWorkerRunner.ts +++ b/packages/platform-bun/src/BunWorkerRunner.ts @@ -1,38 +1,12 @@ /** * @since 1.0.0 */ -import type { WorkerError } from "@effect/platform/WorkerError" import type * as Runner from "@effect/platform/WorkerRunner" -import type * as Schema from "@effect/schema/Schema" import type * as Layer from "effect/Layer" -import type * as Stream from "effect/Stream" import * as internal from "./internal/workerRunner.js" /** * @since 1.0.0 * @category layers */ -export const layerPlatform: Layer.Layer = internal.layerPlatform - -/** - * @since 1.0.0 - * @category layers - */ -export const layer: ( - process: (request: I) => Stream.Stream, - options?: Runner.Runner.Options | undefined -) => Layer.Layer = internal.layer - -/** - * @since 1.0.0 - * @category layers - */ -export const layerSerialized: < - A extends Schema.TaggedRequest.Any, - I, - R, - Handlers extends Runner.SerializedRunner.Handlers ->( - schema: Schema.Schema, - handlers: Handlers -) => Layer.Layer> = internal.layerSerialized +export const layer: Layer.Layer = internal.layer diff --git a/packages/platform-bun/src/internal/worker.ts b/packages/platform-bun/src/internal/worker.ts index a5e9ad49ba..ff22b31386 100644 --- a/packages/platform-bun/src/internal/worker.ts +++ b/packages/platform-bun/src/internal/worker.ts @@ -61,17 +61,3 @@ export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerIm /** @internal */ export const layerManager = Layer.provide(Worker.layerManager, layerWorker) - -/** @internal */ -export const makePool = Worker.makePool() - -/** @internal */ -export const makePoolLayer = Worker.makePoolLayer(layerManager) - -/** @internal */ -export const makePoolSerialized = Worker.makePoolSerialized() - -/** @internal */ -export const makePoolSerializedLayer = Worker.makePoolSerializedLayer( - layerManager -) diff --git a/packages/platform-bun/src/internal/workerRunner.ts b/packages/platform-bun/src/internal/workerRunner.ts index 3356d9f357..7206906155 100644 --- a/packages/platform-bun/src/internal/workerRunner.ts +++ b/packages/platform-bun/src/internal/workerRunner.ts @@ -1,12 +1,10 @@ import { WorkerError } from "@effect/platform/WorkerError" import * as Runner from "@effect/platform/WorkerRunner" -import type * as Schema from "@effect/schema/Schema" import * as Cause from "effect/Cause" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" import * as Queue from "effect/Queue" import * as Schedule from "effect/Schedule" -import type * as Stream from "effect/Stream" declare const self: Worker @@ -62,22 +60,4 @@ const platformRunnerImpl = Runner.PlatformRunner.of({ }) /** @internal */ -export const layerPlatform = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl) - -/** @internal */ -export const layer = ( - process: (request: I) => Stream.Stream, - options?: Runner.Runner.Options -): Layer.Layer => Layer.provide(Runner.layer(process, options), layerPlatform) - -/** @internal */ -export const layerSerialized = < - A extends Schema.TaggedRequest.Any, - I, - R, - Handlers extends Runner.SerializedRunner.Handlers ->( - schema: Schema.Schema, - handlers: Handlers -): Layer.Layer> => - Layer.provide(Runner.layerSerialized(schema, handlers), layerPlatform) +export const layer = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl) diff --git a/packages/platform-node/examples/worker.ts b/packages/platform-node/examples/worker.ts index de4d39573d..d75e5d9a48 100644 --- a/packages/platform-node/examples/worker.ts +++ b/packages/platform-node/examples/worker.ts @@ -1,18 +1,20 @@ -import type { Worker } from "@effect/platform" +import { Worker } from "@effect/platform" import { NodeRuntime, NodeWorker } from "@effect/platform-node" -import { Console, Context, Effect, Stream } from "effect" +import { Console, Context, Effect, Layer, Stream } from "effect" import * as WT from "node:worker_threads" interface MyWorkerPool { readonly _: unique symbol } const Pool = Context.GenericTag>("@app/MyWorkerPool") -const PoolLive = NodeWorker.makePoolLayer(Pool, { +const PoolLive = Worker.makePoolLayer(Pool, { spawn: () => new WT.Worker("./examples/worker/range.ts"), minSize: 0, maxSize: 3, timeToLive: 30000 -}) +}).pipe( + Layer.provide(NodeWorker.layerManager) +) Effect.gen(function*(_) { const pool = yield* _(Pool) diff --git a/packages/platform-node/examples/worker/range.ts b/packages/platform-node/examples/worker/range.ts index 237c806584..824a258f32 100644 --- a/packages/platform-node/examples/worker/range.ts +++ b/packages/platform-node/examples/worker/range.ts @@ -6,6 +6,6 @@ const WorkerLive = Effect.gen(function*(_) { yield* _(WorkerRunner.make((n: number) => Stream.range(0, n))) yield* _(Effect.log("worker started")) yield* _(Effect.addFinalizer(() => Effect.log("worker closed"))) -}).pipe(Layer.scopedDiscard, Layer.provide(NodeWorkerRunner.layerPlatform)) +}).pipe(Layer.scopedDiscard, Layer.provide(NodeWorkerRunner.layer)) NodeRuntime.runMain(Layer.launch(WorkerLive)) diff --git a/packages/platform-node/src/NodeWorker.ts b/packages/platform-node/src/NodeWorker.ts index 705824160e..220923e701 100644 --- a/packages/platform-node/src/NodeWorker.ts +++ b/packages/platform-node/src/NodeWorker.ts @@ -2,49 +2,8 @@ * @since 1.0.0 */ import type * as Worker from "@effect/platform/Worker" -import type * as Schema from "@effect/schema/Schema" -import type * as Context from "effect/Context" -import type * as Effect from "effect/Effect" import type * as Layer from "effect/Layer" -import type * as Scope from "effect/Scope" -import type * as WorkerThreads from "node:worker_threads" import * as internal from "./internal/worker.js" - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePool: ( - options: Worker.WorkerPool.Options -) => Effect.Effect, never, Worker.WorkerManager | Scope.Scope> = internal.makePool - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolLayer: ( - tag: Context.Tag>, - options: Worker.WorkerPool.Options -) => Layer.Layer = internal.makePoolLayer - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolSerialized: ( - options: Worker.SerializedWorkerPool.Options -) => Effect.Effect, never, Worker.WorkerManager | Scope.Scope> = - internal.makePoolSerialized - -/** - * @since 1.0.0 - * @category constructors - */ -export const makePoolSerializedLayer: ( - tag: Context.Tag>, - options: Worker.SerializedWorkerPool.Options -) => Layer.Layer = internal.makePoolSerializedLayer - /** * @since 1.0.0 * @category layers diff --git a/packages/platform-node/src/NodeWorkerRunner.ts b/packages/platform-node/src/NodeWorkerRunner.ts index ce2847838b..b0c67fd5d0 100644 --- a/packages/platform-node/src/NodeWorkerRunner.ts +++ b/packages/platform-node/src/NodeWorkerRunner.ts @@ -1,38 +1,12 @@ /** * @since 1.0.0 */ -import type { WorkerError } from "@effect/platform/WorkerError" import type * as Runner from "@effect/platform/WorkerRunner" -import type * as Schema from "@effect/schema/Schema" import type * as Layer from "effect/Layer" -import type * as Stream from "effect/Stream" import * as internal from "./internal/workerRunner.js" /** * @since 1.0.0 * @category layers */ -export const layerPlatform: Layer.Layer = internal.layerPlatform - -/** - * @since 1.0.0 - * @category layers - */ -export const layer: ( - process: (request: I) => Stream.Stream, - options?: Runner.Runner.Options | undefined -) => Layer.Layer = internal.layer - -/** - * @since 1.0.0 - * @category layers - */ -export const layerSerialized: < - A extends Schema.TaggedRequest.Any, - I, - R, - Handlers extends Runner.SerializedRunner.Handlers ->( - schema: Schema.Schema, - handlers: Handlers -) => Layer.Layer> = internal.layerSerialized +export const layer: Layer.Layer = internal.layer diff --git a/packages/platform-node/src/internal/worker.ts b/packages/platform-node/src/internal/worker.ts index 68d5b7785b..edaca87dcc 100644 --- a/packages/platform-node/src/internal/worker.ts +++ b/packages/platform-node/src/internal/worker.ts @@ -58,17 +58,3 @@ export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerIm /** @internal */ export const layerManager = Layer.provide(Worker.layerManager, layerWorker) - -/** @internal */ -export const makePool = Worker.makePool() - -/** @internal */ -export const makePoolLayer = Worker.makePoolLayer(layerManager) - -/** @internal */ -export const makePoolSerialized = Worker.makePoolSerialized() - -/** @internal */ -export const makePoolSerializedLayer = Worker.makePoolSerializedLayer( - layerManager -) diff --git a/packages/platform-node/src/internal/workerRunner.ts b/packages/platform-node/src/internal/workerRunner.ts index 960c4d521d..d9e255a56b 100644 --- a/packages/platform-node/src/internal/workerRunner.ts +++ b/packages/platform-node/src/internal/workerRunner.ts @@ -1,12 +1,10 @@ import { WorkerError } from "@effect/platform/WorkerError" import * as Runner from "@effect/platform/WorkerRunner" -import type * as Schema from "@effect/schema/Schema" import * as Cause from "effect/Cause" import * as Effect from "effect/Effect" import * as Layer from "effect/Layer" import * as Queue from "effect/Queue" import * as Schedule from "effect/Schedule" -import type * as Stream from "effect/Stream" import * as WorkerThreads from "node:worker_threads" const platformRunnerImpl = Runner.PlatformRunner.of({ @@ -53,22 +51,4 @@ const platformRunnerImpl = Runner.PlatformRunner.of({ }) /** @internal */ -export const layerPlatform = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl) - -/** @internal */ -export const layer = ( - process: (request: I) => Stream.Stream, - options?: Runner.Runner.Options -): Layer.Layer => Layer.provide(Runner.layer(process, options), layerPlatform) - -/** @internal */ -export const layerSerialized = < - A extends Schema.TaggedRequest.Any, - I, - R, - Handlers extends Runner.SerializedRunner.Handlers ->( - schema: Schema.Schema, - handlers: Handlers -): Layer.Layer> => - Layer.provide(Runner.layerSerialized(schema, handlers), layerPlatform) +export const layer = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl) diff --git a/packages/platform/src/Http/Body.ts b/packages/platform/src/Http/Body.ts index 1d9fb58f86..58e3c57e7f 100644 --- a/packages/platform/src/Http/Body.ts +++ b/packages/platform/src/Http/Body.ts @@ -39,8 +39,8 @@ export declare namespace Body { export interface Proto { readonly [TypeId]: TypeId readonly _tag: string - readonly contentType?: string - readonly contentLength?: number + readonly contentType?: string | undefined + readonly contentLength?: number | undefined } /** @@ -196,7 +196,7 @@ export interface Stream extends Body.Proto { readonly _tag: "Stream" readonly stream: Stream_.Stream readonly contentType: string - readonly contentLength?: number + readonly contentLength?: number | undefined } /** diff --git a/packages/platform/src/Http/ClientRequest.ts b/packages/platform/src/Http/ClientRequest.ts index 2825e0c65e..f86b65c997 100644 --- a/packages/platform/src/Http/ClientRequest.ts +++ b/packages/platform/src/Http/ClientRequest.ts @@ -43,13 +43,13 @@ export interface ClientRequest extends Pipeable { * @category models */ export interface Options { - readonly method?: Method - readonly url?: string - readonly urlParams?: UrlParams.Input - readonly headers?: Headers.Input - readonly body?: Body.Body - readonly accept?: string - readonly acceptJson?: boolean + readonly method?: Method | undefined + readonly url?: string | undefined + readonly urlParams?: UrlParams.Input | undefined + readonly headers?: Headers.Input | undefined + readonly body?: Body.Body | undefined + readonly accept?: string | undefined + readonly acceptJson?: boolean | undefined } /** diff --git a/packages/platform/src/Http/ClientResponse.ts b/packages/platform/src/Http/ClientResponse.ts index 904075b9a0..6eedaaf4e5 100644 --- a/packages/platform/src/Http/ClientResponse.ts +++ b/packages/platform/src/Http/ClientResponse.ts @@ -77,7 +77,10 @@ export const schemaJson: < */ export const schemaNoBody: < R, - I extends { readonly status?: number | undefined; readonly headers?: Readonly> | undefined }, + I extends { + readonly status?: number | undefined + readonly headers?: Readonly> | undefined + }, A >(schema: Schema.Schema) => (self: ClientResponse) => Effect.Effect = internal.schemaNoBody diff --git a/packages/platform/src/Http/IncomingMessage.ts b/packages/platform/src/Http/IncomingMessage.ts index 865e064917..7476dd9f53 100644 --- a/packages/platform/src/Http/IncomingMessage.ts +++ b/packages/platform/src/Http/IncomingMessage.ts @@ -84,7 +84,9 @@ const SpanSchema = Schema.struct({ * @since 1.0.0 * @category schema */ -export const schemaExternalSpan = flow( +export const schemaExternalSpan: ( + self: IncomingMessage +) => Effect.Effect = flow( schemaHeaders(Schema.union( Schema.transformOrFail( Schema.struct({ @@ -94,16 +96,18 @@ export const schemaExternalSpan = flow( (input, _, ast) => { const parts = input.b3.split("-") if (parts.length >= 2) { - return ParseResult.succeed({ - traceId: parts[0], - spanId: parts[1], - sampled: parts[2] ? parts[2] === "1" : true, - parentSpanId: parts[3] - }) + return ParseResult.succeed( + { + traceId: parts[0], + spanId: parts[1], + sampled: parts[2] ? parts[2] === "1" : true, + parentSpanId: parts[3] + } as const + ) } return ParseResult.fail(ParseResult.type(ast, input)) }, - (_) => ParseResult.succeed({ b3: "" }) + (_) => ParseResult.succeed({ b3: "" } as const) ), Schema.transform( Schema.struct({ @@ -118,13 +122,13 @@ export const schemaExternalSpan = flow( spanId: _["x-b3-spanid"], parentSpanId: _["x-b3-parentspanid"], sampled: _["x-b3-sampled"] === "1" - }), + } as const), (_) => ({ "x-b3-traceid": _.traceId, "x-b3-spanid": _.spanId, "x-b3-parentspanid": _.parentSpanId, "x-b3-sampled": _.sampled ? "1" : "0" - }) + } as const) ) )), Effect.map((_): ExternalSpan => diff --git a/packages/platform/src/Http/ServerResponse.ts b/packages/platform/src/Http/ServerResponse.ts index 27f9cd8c23..c3dfe81ca7 100644 --- a/packages/platform/src/Http/ServerResponse.ts +++ b/packages/platform/src/Http/ServerResponse.ts @@ -31,7 +31,7 @@ export type TypeId = typeof TypeId export interface ServerResponse extends Effect.Effect { readonly [TypeId]: TypeId readonly status: number - readonly statusText?: string + readonly statusText?: string | undefined readonly headers: Headers.Headers readonly body: Body.Body } diff --git a/packages/platform/src/Worker.ts b/packages/platform/src/Worker.ts index 124cb36b3d..c48a152745 100644 --- a/packages/platform/src/Worker.ts +++ b/packages/platform/src/Worker.ts @@ -101,7 +101,7 @@ export declare namespace Worker { * @category models */ export type Request = - | readonly [id: number, data: 0, I, trace?: Span] + | readonly [id: number, data: 0, I, trace: Span | undefined] | readonly [id: number, interrupt: 1] /** @@ -210,20 +210,18 @@ export const layerManager: Layer.Layer = i * @since 1.0.0 * @category constructors */ -export const makePool: () => ( - options: WorkerPool.Options +export const makePool: ( + options: WorkerPool.Options ) => Effect.Effect, never, WorkerManager | Scope.Scope> = internal.makePool /** * @since 1.0.0 * @category constructors */ -export const makePoolLayer: ( - managerLayer: Layer.Layer -) => ( +export const makePoolLayer: ( tag: Context.Tag>, - options: WorkerPool.Options -) => Layer.Layer = internal.makePoolLayer + options: WorkerPool.Options +) => Layer.Layer = internal.makePoolLayer /** * @since 1.0.0 @@ -328,17 +326,15 @@ export const makeSerialized: ( * @since 1.0.0 * @category constructors */ -export const makePoolSerialized: () => ( - options: SerializedWorkerPool.Options +export const makePoolSerialized: ( + options: SerializedWorkerPool.Options ) => Effect.Effect, never, WorkerManager | Scope.Scope> = internal.makePoolSerialized /** * @since 1.0.0 * @category layers */ -export const makePoolSerializedLayer: ( - managerLayer: Layer.Layer -) => ( +export const makePoolSerializedLayer: ( tag: Context.Tag>, - options: SerializedWorkerPool.Options -) => Layer.Layer = internal.makePoolSerializedLayer + options: SerializedWorkerPool.Options +) => Layer.Layer = internal.makePoolSerializedLayer diff --git a/packages/platform/src/WorkerError.ts b/packages/platform/src/WorkerError.ts index 57abc93c3d..2de683dc67 100644 --- a/packages/platform/src/WorkerError.ts +++ b/packages/platform/src/WorkerError.ts @@ -24,7 +24,7 @@ export interface WorkerError { readonly _tag: "WorkerError" readonly reason: "spawn" | "decode" | "send" | "unknown" | "encode" readonly error: unknown - readonly stack?: string + readonly stack?: string | undefined } /** @@ -34,5 +34,5 @@ export interface WorkerError { export const WorkerError: ( reason: "spawn" | "decode" | "send" | "unknown" | "encode", error: unknown, - stack?: string + stack?: string | undefined ) => WorkerError = internal.WorkerError diff --git a/packages/platform/src/internal/http/body.ts b/packages/platform/src/internal/http/body.ts index 0a4ea49bc8..1f95995ef6 100644 --- a/packages/platform/src/internal/http/body.ts +++ b/packages/platform/src/internal/http/body.ts @@ -40,8 +40,8 @@ class RawImpl implements Body.Raw { readonly _tag = "Raw" constructor( readonly body: unknown, - readonly contentType?: string, - readonly contentLength?: number + readonly contentType?: string | undefined, + readonly contentLength?: number | undefined ) { this[TypeId] = TypeId } @@ -154,7 +154,7 @@ class StreamImpl implements Body.Stream { constructor( readonly stream: Stream_.Stream, readonly contentType: string, - readonly contentLength?: number + readonly contentLength?: number | undefined ) { this[TypeId] = TypeId } @@ -163,6 +163,6 @@ class StreamImpl implements Body.Stream { /** @internal */ export const stream = ( body: Stream_.Stream, - contentType?: string, - contentLength?: number + contentType?: string | undefined, + contentLength?: number | undefined ): Body.Stream => new StreamImpl(body, contentType ?? "application/octet-stream", contentLength) diff --git a/packages/platform/src/internal/http/clientRequest.ts b/packages/platform/src/internal/http/clientRequest.ts index 6b2f02b796..02443cc904 100644 --- a/packages/platform/src/internal/http/clientRequest.ts +++ b/packages/platform/src/internal/http/clientRequest.ts @@ -398,16 +398,16 @@ export const streamBody = dual< ( body: Stream.Stream, options?: { - readonly contentType?: string - readonly contentLength?: number + readonly contentType?: string | undefined + readonly contentLength?: number | undefined } ) => (self: ClientRequest.ClientRequest) => ClientRequest.ClientRequest, ( self: ClientRequest.ClientRequest, body: Stream.Stream, options?: { - readonly contentType?: string - readonly contentLength?: number + readonly contentType?: string | undefined + readonly contentLength?: number | undefined } ) => ClientRequest.ClientRequest >( diff --git a/packages/platform/src/internal/http/clientResponse.ts b/packages/platform/src/internal/http/clientResponse.ts index 71dac83ace..7b29ee90f2 100644 --- a/packages/platform/src/internal/http/clientResponse.ts +++ b/packages/platform/src/internal/http/clientResponse.ts @@ -135,9 +135,9 @@ class ClientResponseImpl implements ClientResponse.ClientResponse { export const schemaJson = < R, I extends { - readonly status?: number - readonly headers?: Readonly> - readonly body?: unknown + readonly status?: number | undefined + readonly headers?: Readonly> | undefined + readonly body?: unknown | undefined }, A >(schema: Schema.Schema) => { @@ -158,8 +158,8 @@ export const schemaJson = < export const schemaNoBody = < R, I extends { - readonly status?: number - readonly headers?: Readonly> + readonly status?: number | undefined + readonly headers?: Readonly> | undefined }, A >(schema: Schema.Schema) => { diff --git a/packages/platform/src/internal/http/serverResponse.ts b/packages/platform/src/internal/http/serverResponse.ts index 60697c5ced..bc444382b0 100644 --- a/packages/platform/src/internal/http/serverResponse.ts +++ b/packages/platform/src/internal/http/serverResponse.ts @@ -268,7 +268,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal if (withoutBody) { return new Response(undefined, { status: response.status, - statusText: response.statusText, + statusText: response.statusText as string, headers: response.headers }) } @@ -277,7 +277,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal case "Empty": { return new Response(undefined, { status: response.status, - statusText: response.statusText, + statusText: response.statusText as string, headers: response.headers }) } diff --git a/packages/platform/src/internal/worker.ts b/packages/platform/src/internal/worker.ts index 1a3a3ed024..b7721e05af 100644 --- a/packages/platform/src/internal/worker.ts +++ b/packages/platform/src/internal/worker.ts @@ -291,9 +291,8 @@ export const makeManager = Effect.gen(function*(_) { export const layerManager = Layer.effect(WorkerManager, makeManager) /** @internal */ -export const makePool = () => -( - options: Worker.WorkerPool.Options +export const makePool = ( + options: Worker.WorkerPool.Options ) => Effect.gen(function*(_) { const manager = yield* _(WorkerManager) @@ -342,11 +341,10 @@ export const makePool = () => }) /** @internal */ -export const makePoolLayer = (managerLayer: Layer.Layer) => -( +export const makePoolLayer = ( tag: Context.Tag>, - options: Worker.WorkerPool.Options -) => Layer.scoped(tag, makePool()(options)).pipe(Layer.provide(managerLayer)) + options: Worker.WorkerPool.Options +) => Layer.scoped(tag, makePool(options)) /** @internal */ export const makeSerialized = < @@ -390,15 +388,14 @@ export const makeSerialized = < }) /** @internal */ -export const makePoolSerialized = () => -( - options: Worker.SerializedWorkerPool.Options +export const makePoolSerialized = ( + options: Worker.SerializedWorkerPool.Options ) => Effect.gen(function*(_) { const manager = yield* _(WorkerManager) const workers = new Set>() const acquire = pipe( - makeSerialized(options), + makeSerialized(options), Effect.tap((worker) => Effect.sync(() => workers.add(worker))), Effect.tap((worker) => Effect.addFinalizer(() => Effect.sync(() => workers.delete(worker)))), options.onCreate ? Effect.tap(options.onCreate) : identity, @@ -442,9 +439,7 @@ export const makePoolSerialized = () => }) /** @internal */ -export const makePoolSerializedLayer = - (managerLayer: Layer.Layer) => - ( - tag: Context.Tag>, - options: Worker.SerializedWorkerPool.Options - ) => Layer.scoped(tag, makePoolSerialized()(options)).pipe(Layer.provide(managerLayer)) +export const makePoolSerializedLayer = ( + tag: Context.Tag>, + options: Worker.SerializedWorkerPool.Options +) => Layer.scoped(tag, makePoolSerialized(options)) diff --git a/packages/platform/src/internal/workerError.ts b/packages/platform/src/internal/workerError.ts index 10a037cd75..d880c6c253 100644 --- a/packages/platform/src/internal/workerError.ts +++ b/packages/platform/src/internal/workerError.ts @@ -10,7 +10,7 @@ export const WorkerErrorTypeId: WorkerError_.WorkerErrorTypeId = Symbol.for( export const WorkerError = ( reason: WorkerError_.WorkerError["reason"], error: unknown, - stack?: string + stack?: string | undefined ): WorkerError_.WorkerError => Data.struct({ [WorkerErrorTypeId]: WorkerErrorTypeId, diff --git a/packages/rpc-workers/src/internal/resolver.ts b/packages/rpc-workers/src/internal/resolver.ts index 71551c179f..635b19f0c8 100644 --- a/packages/rpc-workers/src/internal/resolver.ts +++ b/packages/rpc-workers/src/internal/resolver.ts @@ -18,7 +18,7 @@ export const makePool = ( Effect.suspend(() => { let setup: any return Effect.map( - Worker.makePool()({ + Worker.makePool({ ...options, onCreate(worker) { if (setup) { diff --git a/packages/rpc-workers/test/e2e.test.ts b/packages/rpc-workers/test/e2e.test.ts index 08b902205c..9c72f18e00 100644 --- a/packages/rpc-workers/test/e2e.test.ts +++ b/packages/rpc-workers/test/e2e.test.ts @@ -1,4 +1,4 @@ -import * as Worker from "@effect/platform-browser/Worker" +import * as BrowserWorker from "@effect/platform-browser/BrowserWorker" import * as Client from "@effect/rpc-workers/Client" import * as Resolver from "@effect/rpc-workers/Resolver" import "@vitest/web-worker" @@ -17,21 +17,21 @@ const PoolLive = Resolver.makePoolLayer({ spawn: () => new globalThis.Worker(new URL("./e2e/worker", import.meta.url)), size: 1 }).pipe( - Layer.provide(Worker.layerManager) + Layer.provide(BrowserWorker.layerManager) ) const SetupPoolLive = Resolver.makePoolLayer({ spawn: () => new globalThis.Worker(new URL("./e2e/worker-setup", import.meta.url)), size: 1 }).pipe( - Layer.provide(Worker.layerManager) + Layer.provide(BrowserWorker.layerManager) ) const SharedPoolLive = Resolver.makePoolLayer({ spawn: () => new globalThis.SharedWorker(new URL("./e2e/worker", import.meta.url)), size: 1 }).pipe( - Layer.provide(Worker.layerManager) + Layer.provide(BrowserWorker.layerManager) ) const client = Client.make(schema) diff --git a/packages/rpc-workers/test/e2e/worker-setup.ts b/packages/rpc-workers/test/e2e/worker-setup.ts index a42405fa06..61b5d7a9e4 100644 --- a/packages/rpc-workers/test/e2e/worker-setup.ts +++ b/packages/rpc-workers/test/e2e/worker-setup.ts @@ -1,5 +1,5 @@ -import { runMain } from "@effect/platform-browser/Runtime" -import * as Runner from "@effect/platform-browser/WorkerRunner" +import { runMain } from "@effect/platform-browser/BrowserRuntime" +import * as BrowserRunner from "@effect/platform-browser/BrowserWorkerRunner" import * as Router from "@effect/rpc-workers/Router" import * as Server from "@effect/rpc-workers/Server" import * as Effect from "effect/Effect" @@ -23,7 +23,7 @@ const router = Router.make(schemaWithSetup, { Server.make(router).pipe( Layer.scopedDiscard, - Layer.provide(Runner.layerPlatform), + Layer.provide(BrowserRunner.layer), Layer.launch, runMain ) diff --git a/packages/rpc-workers/test/e2e/worker.ts b/packages/rpc-workers/test/e2e/worker.ts index 54ead72703..e2fcc0a01c 100644 --- a/packages/rpc-workers/test/e2e/worker.ts +++ b/packages/rpc-workers/test/e2e/worker.ts @@ -1,5 +1,5 @@ -import { runMain } from "@effect/platform-browser/Runtime" -import * as Runner from "@effect/platform-browser/WorkerRunner" +import { runMain } from "@effect/platform-browser/BrowserRuntime" +import * as BrowserRunner from "@effect/platform-browser/BrowserWorkerRunner" import * as Router from "@effect/rpc-workers/Router" import * as Server from "@effect/rpc-workers/Server" import * as Duration from "effect/Duration" @@ -16,7 +16,7 @@ const router = Router.make(schema, { Server.make(router).pipe( Layer.scopedDiscard, - Layer.provide(Runner.layerPlatform), + Layer.provide(BrowserRunner.layer), Layer.launch, runMain ) From 80951bcb79d380be009f72d7f73b821f1e73a310 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 8 Feb 2024 12:00:17 +1300 Subject: [PATCH 2/3] fix runtime docs --- packages/effect/src/Runtime.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/effect/src/Runtime.ts b/packages/effect/src/Runtime.ts index e7c69fa554..498fbe55e5 100644 --- a/packages/effect/src/Runtime.ts +++ b/packages/effect/src/Runtime.ts @@ -267,10 +267,7 @@ export const updateContext: { * @example * import { Context, Runtime } from "effect" * - * interface Name { - * readonly _: unique symbol - * } - * const Name = Context.Tag("Name") + * class Name extends Context.Tag("Name")() {} * * const runtime: Runtime.Runtime = Runtime.defaultRuntime.pipe( * Runtime.provideService(Name, "John") From 1a8d7093c51ba6d1b998dc9093cec8598d284fc2 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 8 Feb 2024 12:01:12 +1300 Subject: [PATCH 3/3] fix typo --- packages/platform-browser/test/Worker.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/platform-browser/test/Worker.test.ts b/packages/platform-browser/test/Worker.test.ts index 7f477172ce..6e3fff42f8 100644 --- a/packages/platform-browser/test/Worker.test.ts +++ b/packages/platform-browser/test/Worker.test.ts @@ -1,4 +1,4 @@ -import * as BrowerWorker from "@effect/platform-browser/BrowserWorker" +import * as BrowserWorker from "@effect/platform-browser/BrowserWorker" import * as EffectWorker from "@effect/platform/Worker" import "@vitest/web-worker" import { Chunk, Effect, Option, Stream } from "effect" @@ -19,7 +19,7 @@ describe.sequential("Worker", () => { assert.strictEqual(items.length, 100) }).pipe( Effect.scoped, - Effect.provide(BrowerWorker.layerManager), + Effect.provide(BrowserWorker.layerManager), Effect.runPromise )) @@ -36,7 +36,7 @@ describe.sequential("Worker", () => { ]) }).pipe( Effect.scoped, - Effect.provide(BrowerWorker.layerManager), + Effect.provide(BrowserWorker.layerManager), Effect.runPromise )) @@ -57,7 +57,7 @@ describe.sequential("Worker", () => { ]) }).pipe( Effect.scoped, - Effect.provide(BrowerWorker.layerManager), + Effect.provide(BrowserWorker.layerManager), Effect.runPromise )) @@ -79,7 +79,7 @@ describe.sequential("Worker", () => { }).pipe( Effect.withSpan("test"), Effect.scoped, - Effect.provide(BrowerWorker.layerManager), + Effect.provide(BrowserWorker.layerManager), Effect.runPromise )) @@ -93,7 +93,7 @@ describe.sequential("Worker", () => { assert.strictEqual(items.length, 100) }).pipe( Effect.scoped, - Effect.provide(BrowerWorker.layerManager), + Effect.provide(BrowserWorker.layerManager), Effect.runPromise ))