effect 4.0.0-beta.4 → 4.0.0-beta.6
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/dist/Cause.d.ts +1 -1
- package/dist/Cause.d.ts.map +1 -1
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +6 -4
- package/dist/Channel.js.map +1 -1
- package/dist/Config.d.ts +1 -1
- package/dist/Data.d.ts +3 -2
- package/dist/Data.d.ts.map +1 -1
- package/dist/Data.js +9 -8
- package/dist/Data.js.map +1 -1
- package/dist/Effect.d.ts +0 -226
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +0 -118
- package/dist/Effect.js.map +1 -1
- package/dist/Encoding.d.ts +194 -0
- package/dist/Encoding.d.ts.map +1 -0
- package/dist/Encoding.js +352 -0
- package/dist/Encoding.js.map +1 -0
- package/dist/Equal.js.map +1 -1
- package/dist/FileSystem.d.ts +1 -1
- package/dist/FileSystem.d.ts.map +1 -1
- package/dist/FileSystem.js +5 -5
- package/dist/FileSystem.js.map +1 -1
- package/dist/Filter.d.ts +30 -1
- package/dist/Filter.d.ts.map +1 -1
- package/dist/Filter.js +15 -0
- package/dist/Filter.js.map +1 -1
- package/dist/Formatter.js +1 -1
- package/dist/Formatter.js.map +1 -1
- package/dist/Graph.d.ts.map +1 -1
- package/dist/Graph.js +2 -2
- package/dist/Graph.js.map +1 -1
- package/dist/Latch.d.ts +109 -0
- package/dist/Latch.d.ts.map +1 -0
- package/dist/Latch.js +72 -0
- package/dist/Latch.js.map +1 -0
- package/dist/Pipeable.d.ts +17 -0
- package/dist/Pipeable.d.ts.map +1 -1
- package/dist/Pipeable.js +19 -1
- package/dist/Pipeable.js.map +1 -1
- package/dist/PlatformError.d.ts +8 -7
- package/dist/PlatformError.d.ts.map +1 -1
- package/dist/PlatformError.js +2 -2
- package/dist/PlatformError.js.map +1 -1
- package/dist/Pool.d.ts +5 -3
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +6 -4
- package/dist/Pool.js.map +1 -1
- package/dist/PubSub.d.ts +3 -2
- package/dist/PubSub.d.ts.map +1 -1
- package/dist/PubSub.js +3 -2
- package/dist/PubSub.js.map +1 -1
- package/dist/Request.d.ts +1 -1
- package/dist/Request.d.ts.map +1 -1
- package/dist/Request.js +2 -1
- package/dist/Request.js.map +1 -1
- package/dist/RequestResolver.d.ts +0 -20
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js +0 -20
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Schedule.d.ts +2 -2
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +30 -16
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +192 -42
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +385 -71
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaGetter.d.ts +2 -2
- package/dist/SchemaGetter.d.ts.map +1 -1
- package/dist/SchemaGetter.js +12 -14
- package/dist/SchemaGetter.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +44 -43
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +5 -2
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/SchemaTransformation.d.ts +37 -0
- package/dist/SchemaTransformation.d.ts.map +1 -1
- package/dist/SchemaTransformation.js +80 -0
- package/dist/SchemaTransformation.js.map +1 -1
- package/dist/Semaphore.d.ts +211 -0
- package/dist/Semaphore.d.ts.map +1 -0
- package/dist/{PartitionedSemaphore.js → Semaphore.js} +97 -13
- package/dist/Semaphore.js.map +1 -0
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +9 -8
- package/dist/Stream.js.map +1 -1
- package/dist/Struct.d.ts +16 -0
- package/dist/Struct.d.ts.map +1 -1
- package/dist/Struct.js +22 -0
- package/dist/Struct.js.map +1 -1
- package/dist/SubscriptionRef.d.ts +2 -1
- package/dist/SubscriptionRef.d.ts.map +1 -1
- package/dist/SubscriptionRef.js +2 -1
- package/dist/SubscriptionRef.js.map +1 -1
- package/dist/SynchronizedRef.d.ts +2 -1
- package/dist/SynchronizedRef.d.ts.map +1 -1
- package/dist/SynchronizedRef.js +2 -1
- package/dist/SynchronizedRef.js.map +1 -1
- package/dist/Types.d.ts +14 -6
- package/dist/Types.d.ts.map +1 -1
- package/dist/index.d.ts +14 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -5
- package/dist/index.js.map +1 -1
- package/dist/internal/core.js +11 -3
- package/dist/internal/core.js.map +1 -1
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/rcRef.js +2 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/testing/TestClock.d.ts +3 -2
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +5 -3
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +39 -39
- package/dist/unstable/ai/Chat.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.js +2 -1
- package/dist/unstable/ai/Chat.js.map +1 -1
- package/dist/unstable/ai/McpSchema.d.ts +51 -51
- package/dist/unstable/ai/Prompt.d.ts +20 -20
- package/dist/unstable/ai/Response.d.ts +25 -25
- package/dist/unstable/cli/CliError.d.ts +5 -5
- package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js +2 -1
- package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +2 -1
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/Entity.js.map +1 -1
- package/dist/unstable/cluster/Envelope.d.ts +1 -1
- package/dist/unstable/cluster/K8sHttpClient.d.ts +1 -1
- package/dist/unstable/cluster/Message.d.ts +5 -5
- package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/unstable/cluster/MessageStorage.js +2 -1
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Reply.d.ts +3 -3
- package/dist/unstable/cluster/Runner.d.ts +1 -1
- package/dist/unstable/cluster/Runners.d.ts.map +1 -1
- package/dist/unstable/cluster/Runners.js +4 -3
- package/dist/unstable/cluster/Runners.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +7 -5
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +4 -3
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/cluster/internal/entityReaper.js +2 -1
- package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
- package/dist/unstable/cluster/internal/resourceRef.js +2 -1
- package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
- package/dist/unstable/devtools/DevToolsSchema.d.ts +36 -36
- package/dist/unstable/encoding/Sse.d.ts +1 -1
- package/dist/unstable/eventlog/EventJournal.d.ts +1 -1
- package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLog.js +2 -1
- package/dist/unstable/eventlog/EventLog.js.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.d.ts +5 -5
- package/dist/unstable/http/Cookies.d.ts +1 -1
- package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
- package/dist/unstable/http/HttpEffect.js +18 -26
- package/dist/unstable/http/HttpEffect.js.map +1 -1
- package/dist/unstable/http/Multipart.d.ts +2 -2
- package/dist/unstable/http/UrlParams.d.ts +1 -1
- package/dist/unstable/httpapi/HttpApiBuilder.js +2 -2
- package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.d.ts +6 -0
- package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
- package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
- package/dist/unstable/persistence/KeyValueStore.js +6 -6
- package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
- package/dist/unstable/persistence/PersistedCache.d.ts +6 -5
- package/dist/unstable/persistence/PersistedCache.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedCache.js +2 -1
- package/dist/unstable/persistence/PersistedCache.js.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.js +6 -5
- package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.d.ts +6 -0
- package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
- package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +12 -9
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/Hydration.d.ts +39 -0
- package/dist/unstable/reactivity/Hydration.d.ts.map +1 -0
- package/dist/unstable/reactivity/Hydration.js +76 -0
- package/dist/unstable/reactivity/Hydration.js.map +1 -0
- package/dist/unstable/reactivity/index.d.ts +4 -0
- package/dist/unstable/reactivity/index.d.ts.map +1 -1
- package/dist/unstable/reactivity/index.js +4 -0
- package/dist/unstable/reactivity/index.js.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +3 -2
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +5 -3
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/rpc/Utils.d.ts.map +1 -1
- package/dist/unstable/rpc/Utils.js +2 -1
- package/dist/unstable/rpc/Utils.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/socket/Socket.js +3 -2
- package/dist/unstable/socket/Socket.js.map +1 -1
- package/dist/unstable/sql/Statement.js +0 -1
- package/dist/unstable/sql/Statement.js.map +1 -1
- package/dist/unstable/workers/Worker.d.ts.map +1 -1
- package/dist/unstable/workers/Worker.js +2 -1
- package/dist/unstable/workers/Worker.js.map +1 -1
- package/dist/unstable/workflow/DurableDeferred.js +2 -2
- package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
- package/dist/unstable/workflow/Workflow.d.ts +1 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts +2 -1
- package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
- package/dist/unstable/workflow/WorkflowEngine.js +2 -1
- package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
- package/package.json +1 -2
- package/src/Cause.ts +1 -1
- package/src/Channel.ts +6 -4
- package/src/Data.ts +10 -9
- package/src/Effect.ts +0 -246
- package/src/Encoding.ts +879 -0
- package/src/Equal.ts +2 -2
- package/src/FileSystem.ts +7 -8
- package/src/Filter.ts +48 -1
- package/src/Formatter.ts +1 -1
- package/src/Graph.ts +8 -5
- package/src/Latch.ts +112 -0
- package/src/Pipeable.ts +32 -1
- package/src/PlatformError.ts +5 -5
- package/src/Pool.ts +9 -7
- package/src/PubSub.ts +10 -9
- package/src/Request.ts +3 -2
- package/src/RequestResolver.ts +0 -20
- package/src/Schedule.ts +217 -115
- package/src/Schema.ts +567 -105
- package/src/SchemaGetter.ts +12 -14
- package/src/SchemaRepresentation.ts +5 -2
- package/src/SchemaTransformation.ts +104 -0
- package/src/Semaphore.ts +356 -0
- package/src/Stream.ts +9 -8
- package/src/Struct.ts +26 -0
- package/src/SubscriptionRef.ts +3 -2
- package/src/SynchronizedRef.ts +3 -2
- package/src/Types.ts +12 -2
- package/src/index.ts +17 -6
- package/src/internal/core.ts +10 -2
- package/src/internal/effect.ts +3 -2
- package/src/internal/rcRef.ts +2 -1
- package/src/testing/TestClock.ts +8 -6
- package/src/unstable/ai/AiError.ts +1 -1
- package/src/unstable/ai/Chat.ts +2 -1
- package/src/unstable/ai/Prompt.ts +20 -20
- package/src/unstable/ai/Response.ts +22 -22
- package/src/unstable/cluster/ClusterWorkflowEngine.ts +3 -2
- package/src/unstable/cluster/Entity.ts +2 -1
- package/src/unstable/cluster/Envelope.ts +1 -1
- package/src/unstable/cluster/MessageStorage.ts +2 -1
- package/src/unstable/cluster/Runners.ts +6 -5
- package/src/unstable/cluster/Sharding.ts +8 -6
- package/src/unstable/cluster/internal/entityManager.ts +6 -5
- package/src/unstable/cluster/internal/entityReaper.ts +2 -1
- package/src/unstable/cluster/internal/resourceRef.ts +2 -1
- package/src/unstable/eventlog/EventLog.ts +2 -1
- package/src/unstable/http/HttpEffect.ts +17 -25
- package/src/unstable/http/Multipart.ts +2 -2
- package/src/unstable/http/UrlParams.ts +1 -1
- package/src/unstable/httpapi/HttpApiBuilder.ts +2 -2
- package/src/unstable/httpapi/HttpApiScalar.ts +6 -0
- package/src/unstable/persistence/KeyValueStore.ts +6 -6
- package/src/unstable/persistence/PersistedCache.ts +20 -9
- package/src/unstable/persistence/PersistedQueue.ts +7 -6
- package/src/unstable/process/ChildProcessSpawner.ts +6 -0
- package/src/unstable/reactivity/Atom.ts +7 -5
- package/src/unstable/reactivity/Hydration.ts +112 -0
- package/src/unstable/reactivity/index.ts +5 -0
- package/src/unstable/rpc/RpcClient.ts +4 -3
- package/src/unstable/rpc/RpcServer.ts +6 -4
- package/src/unstable/rpc/Utils.ts +2 -1
- package/src/unstable/socket/Socket.ts +3 -2
- package/src/unstable/sql/Statement.ts +0 -1
- package/src/unstable/workers/Worker.ts +2 -1
- package/src/unstable/workflow/DurableDeferred.ts +2 -2
- package/src/unstable/workflow/WorkflowEngine.ts +3 -2
- package/dist/PartitionedSemaphore.d.ts +0 -52
- package/dist/PartitionedSemaphore.d.ts.map +0 -1
- package/dist/PartitionedSemaphore.js.map +0 -1
- package/dist/encoding/Base64.d.ts +0 -67
- package/dist/encoding/Base64.d.ts.map +0 -1
- package/dist/encoding/Base64.js +0 -146
- package/dist/encoding/Base64.js.map +0 -1
- package/dist/encoding/Base64Url.d.ts +0 -60
- package/dist/encoding/Base64Url.d.ts.map +0 -1
- package/dist/encoding/Base64Url.js +0 -89
- package/dist/encoding/Base64Url.js.map +0 -1
- package/dist/encoding/EncodingError.d.ts +0 -31
- package/dist/encoding/EncodingError.d.ts.map +0 -1
- package/dist/encoding/EncodingError.js +0 -22
- package/dist/encoding/EncodingError.js.map +0 -1
- package/dist/encoding/Hex.d.ts +0 -61
- package/dist/encoding/Hex.d.ts.map +0 -1
- package/dist/encoding/Hex.js +0 -115
- package/dist/encoding/Hex.js.map +0 -1
- package/dist/encoding/index.d.ts +0 -26
- package/dist/encoding/index.d.ts.map +0 -1
- package/dist/encoding/index.js +0 -27
- package/dist/encoding/index.js.map +0 -1
- package/src/PartitionedSemaphore.ts +0 -182
- package/src/encoding/Base64.ts +0 -366
- package/src/encoding/Base64Url.ts +0 -104
- package/src/encoding/EncodingError.ts +0 -35
- package/src/encoding/Hex.ts +0 -390
- package/src/encoding/index.ts +0 -31
package/src/Data.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import type * as Cause from "./Cause.ts"
|
|
15
15
|
import * as core from "./internal/core.ts"
|
|
16
|
+
import * as Pipeable from "./Pipeable.ts"
|
|
16
17
|
import * as Predicate from "./Predicate.ts"
|
|
17
18
|
import type * as Types from "./Types.ts"
|
|
18
19
|
import type { Unify } from "./Unify.ts"
|
|
@@ -43,9 +44,12 @@ import type { Unify } from "./Unify.ts"
|
|
|
43
44
|
export const Class: new<A extends Record<string, any> = {}>(
|
|
44
45
|
args: Types.Equals<A, {}> extends true ? void
|
|
45
46
|
: { readonly [P in keyof A]: A[P] }
|
|
46
|
-
) => Readonly<A> =
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
) => Readonly<A> & Pipeable.Pipeable = class extends Pipeable.Class {
|
|
48
|
+
constructor(props: any) {
|
|
49
|
+
super()
|
|
50
|
+
if (props) {
|
|
51
|
+
Object.assign(this, props)
|
|
52
|
+
}
|
|
49
53
|
}
|
|
50
54
|
} as any
|
|
51
55
|
|
|
@@ -79,12 +83,9 @@ export const TaggedClass = <Tag extends string>(
|
|
|
79
83
|
): new<A extends Record<string, any> = {}>(
|
|
80
84
|
args: Types.Equals<A, {}> extends true ? void
|
|
81
85
|
: { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }
|
|
82
|
-
) => Readonly<A> & { readonly _tag: Tag } =>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (props) {
|
|
86
|
-
Object.assign(this, props)
|
|
87
|
-
}
|
|
86
|
+
) => Readonly<A> & { readonly _tag: Tag } & Pipeable.Pipeable =>
|
|
87
|
+
class extends Class {
|
|
88
|
+
readonly _tag = tag
|
|
88
89
|
} as any
|
|
89
90
|
|
|
90
91
|
/**
|
package/src/Effect.ts
CHANGED
|
@@ -12777,252 +12777,6 @@ export const interruptibleMask: <A, E, R>(
|
|
|
12777
12777
|
) => Effect<A, E, R>
|
|
12778
12778
|
) => Effect<A, E, R> = internal.interruptibleMask
|
|
12779
12779
|
|
|
12780
|
-
// -----------------------------------------------------------------------------
|
|
12781
|
-
// Semaphore
|
|
12782
|
-
// -----------------------------------------------------------------------------
|
|
12783
|
-
|
|
12784
|
-
/**
|
|
12785
|
-
* @category Semaphore
|
|
12786
|
-
* @since 2.0.0
|
|
12787
|
-
* @example
|
|
12788
|
-
* ```ts
|
|
12789
|
-
* import { Effect } from "effect"
|
|
12790
|
-
*
|
|
12791
|
-
* // Create and use a semaphore for controlling concurrent access
|
|
12792
|
-
* const program = Effect.gen(function*() {
|
|
12793
|
-
* const semaphore = yield* Effect.makeSemaphore(2)
|
|
12794
|
-
*
|
|
12795
|
-
* return yield* semaphore.withPermits(1)(
|
|
12796
|
-
* Effect.succeed("Resource accessed")
|
|
12797
|
-
* )
|
|
12798
|
-
* })
|
|
12799
|
-
* ```
|
|
12800
|
-
*/
|
|
12801
|
-
export interface Semaphore {
|
|
12802
|
-
/**
|
|
12803
|
-
* Adjusts the number of permits available in the semaphore.
|
|
12804
|
-
*/
|
|
12805
|
-
resize(permits: number): Effect<void>
|
|
12806
|
-
|
|
12807
|
-
/**
|
|
12808
|
-
* Runs an effect with the given number of permits and releases the permits
|
|
12809
|
-
* when the effect completes.
|
|
12810
|
-
*
|
|
12811
|
-
* **Details**
|
|
12812
|
-
*
|
|
12813
|
-
* This function acquires the specified number of permits before executing
|
|
12814
|
-
* the provided effect. Once the effect finishes, the permits are released.
|
|
12815
|
-
* If insufficient permits are available, the function will wait until they
|
|
12816
|
-
* are released by other tasks.
|
|
12817
|
-
*/
|
|
12818
|
-
withPermits(permits: number): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
|
|
12819
|
-
|
|
12820
|
-
/**
|
|
12821
|
-
* Runs an effect with the given number of permits and releases the permits
|
|
12822
|
-
* when the effect completes.
|
|
12823
|
-
*
|
|
12824
|
-
* **Details**
|
|
12825
|
-
*
|
|
12826
|
-
* This function acquires the specified number of permits before executing
|
|
12827
|
-
* the provided effect. Once the effect finishes, the permits are released.
|
|
12828
|
-
* If insufficient permits are available, the function will wait until they
|
|
12829
|
-
* are released by other tasks.
|
|
12830
|
-
*/
|
|
12831
|
-
withPermit<A, E, R>(self: Effect<A, E, R>): Effect<A, E, R>
|
|
12832
|
-
|
|
12833
|
-
/**
|
|
12834
|
-
* Runs an effect only if the specified number of permits are immediately
|
|
12835
|
-
* available.
|
|
12836
|
-
*
|
|
12837
|
-
* **Details**
|
|
12838
|
-
*
|
|
12839
|
-
* This function attempts to acquire the specified number of permits. If they
|
|
12840
|
-
* are available, it runs the effect and releases the permits after the effect
|
|
12841
|
-
* completes. If permits are not available, the effect does not execute, and
|
|
12842
|
-
* the result is `Option.none`.
|
|
12843
|
-
*/
|
|
12844
|
-
withPermitsIfAvailable(permits: number): <A, E, R>(self: Effect<A, E, R>) => Effect<Option<A>, E, R>
|
|
12845
|
-
|
|
12846
|
-
/**
|
|
12847
|
-
* Acquires the specified number of permits and returns the resulting
|
|
12848
|
-
* available permits, suspending the task if they are not yet available.
|
|
12849
|
-
* Concurrent pending `take` calls are processed in a first-in, first-out manner.
|
|
12850
|
-
*/
|
|
12851
|
-
take(permits: number): Effect<number>
|
|
12852
|
-
|
|
12853
|
-
/**
|
|
12854
|
-
* Releases the specified number of permits and returns the resulting
|
|
12855
|
-
* available permits.
|
|
12856
|
-
*/
|
|
12857
|
-
release(permits: number): Effect<number>
|
|
12858
|
-
|
|
12859
|
-
/**
|
|
12860
|
-
* Releases all permits held by this semaphore and returns the resulting available permits.
|
|
12861
|
-
*/
|
|
12862
|
-
releaseAll: Effect<number>
|
|
12863
|
-
}
|
|
12864
|
-
|
|
12865
|
-
/**
|
|
12866
|
-
* Unsafely creates a new Semaphore.
|
|
12867
|
-
*
|
|
12868
|
-
* @example
|
|
12869
|
-
* ```ts
|
|
12870
|
-
* import { Effect } from "effect"
|
|
12871
|
-
*
|
|
12872
|
-
* const semaphore = Effect.makeSemaphoreUnsafe(3)
|
|
12873
|
-
*
|
|
12874
|
-
* const task = (id: number) =>
|
|
12875
|
-
* semaphore.withPermits(1)(
|
|
12876
|
-
* Effect.gen(function*() {
|
|
12877
|
-
* yield* Effect.log(`Task ${id} started`)
|
|
12878
|
-
* yield* Effect.sleep("1 second")
|
|
12879
|
-
* yield* Effect.log(`Task ${id} completed`)
|
|
12880
|
-
* })
|
|
12881
|
-
* )
|
|
12882
|
-
*
|
|
12883
|
-
* // Only 3 tasks can run concurrently
|
|
12884
|
-
* const program = Effect.all([
|
|
12885
|
-
* task(1),
|
|
12886
|
-
* task(2),
|
|
12887
|
-
* task(3),
|
|
12888
|
-
* task(4),
|
|
12889
|
-
* task(5)
|
|
12890
|
-
* ], { concurrency: "unbounded" })
|
|
12891
|
-
* ```
|
|
12892
|
-
*
|
|
12893
|
-
* @since 2.0.0
|
|
12894
|
-
* @category Semaphore
|
|
12895
|
-
*/
|
|
12896
|
-
export const makeSemaphoreUnsafe: (permits: number) => Semaphore = internal.makeSemaphoreUnsafe
|
|
12897
|
-
|
|
12898
|
-
/**
|
|
12899
|
-
* Creates a new Semaphore.
|
|
12900
|
-
*
|
|
12901
|
-
* @example
|
|
12902
|
-
* ```ts
|
|
12903
|
-
* import { Effect } from "effect"
|
|
12904
|
-
*
|
|
12905
|
-
* const program = Effect.gen(function*() {
|
|
12906
|
-
* const semaphore = yield* Effect.makeSemaphore(2)
|
|
12907
|
-
*
|
|
12908
|
-
* const task = (id: number) =>
|
|
12909
|
-
* semaphore.withPermits(1)(
|
|
12910
|
-
* Effect.gen(function*() {
|
|
12911
|
-
* yield* Effect.log(`Task ${id} acquired permit`)
|
|
12912
|
-
* yield* Effect.sleep("1 second")
|
|
12913
|
-
* yield* Effect.log(`Task ${id} releasing permit`)
|
|
12914
|
-
* })
|
|
12915
|
-
* )
|
|
12916
|
-
*
|
|
12917
|
-
* // Run 4 tasks, but only 2 can run concurrently
|
|
12918
|
-
* yield* Effect.all([task(1), task(2), task(3), task(4)])
|
|
12919
|
-
* })
|
|
12920
|
-
* ```
|
|
12921
|
-
*
|
|
12922
|
-
* @since 2.0.0
|
|
12923
|
-
* @category Semaphore
|
|
12924
|
-
*/
|
|
12925
|
-
export const makeSemaphore: (permits: number) => Effect<Semaphore> = internal.makeSemaphore
|
|
12926
|
-
|
|
12927
|
-
// -----------------------------------------------------------------------------
|
|
12928
|
-
// Latch
|
|
12929
|
-
// -----------------------------------------------------------------------------
|
|
12930
|
-
|
|
12931
|
-
/**
|
|
12932
|
-
* @category Latch
|
|
12933
|
-
* @since 3.8.0
|
|
12934
|
-
* @example
|
|
12935
|
-
* ```ts
|
|
12936
|
-
* import { Effect } from "effect"
|
|
12937
|
-
*
|
|
12938
|
-
* // Create and use a latch for coordination between fibers
|
|
12939
|
-
* const program = Effect.gen(function*() {
|
|
12940
|
-
* const latch = yield* Effect.makeLatch()
|
|
12941
|
-
*
|
|
12942
|
-
* // Wait for the latch to be opened
|
|
12943
|
-
* yield* latch.await
|
|
12944
|
-
*
|
|
12945
|
-
* return "Latch was opened!"
|
|
12946
|
-
* })
|
|
12947
|
-
* ```
|
|
12948
|
-
*/
|
|
12949
|
-
export interface Latch {
|
|
12950
|
-
/** open the latch, releasing all fibers waiting on it */
|
|
12951
|
-
readonly open: Effect<boolean>
|
|
12952
|
-
/** open the latch, releasing all fibers waiting on it */
|
|
12953
|
-
readonly openUnsafe: () => boolean
|
|
12954
|
-
/** release all fibers waiting on the latch, without opening it */
|
|
12955
|
-
readonly release: Effect<boolean>
|
|
12956
|
-
/** wait for the latch to be opened */
|
|
12957
|
-
readonly await: Effect<void>
|
|
12958
|
-
/** close the latch */
|
|
12959
|
-
readonly close: Effect<boolean>
|
|
12960
|
-
/** close the latch */
|
|
12961
|
-
readonly closeUnsafe: () => boolean
|
|
12962
|
-
/** only run the given effect when the latch is open */
|
|
12963
|
-
readonly whenOpen: <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
|
|
12964
|
-
}
|
|
12965
|
-
|
|
12966
|
-
/**
|
|
12967
|
-
* Creates a new Latch.
|
|
12968
|
-
*
|
|
12969
|
-
* @example
|
|
12970
|
-
* ```ts
|
|
12971
|
-
* import { Effect } from "effect"
|
|
12972
|
-
*
|
|
12973
|
-
* const latch = Effect.makeLatchUnsafe(false)
|
|
12974
|
-
*
|
|
12975
|
-
* const waiter = Effect.gen(function*() {
|
|
12976
|
-
* yield* Effect.log("Waiting for latch to open...")
|
|
12977
|
-
* yield* latch.await
|
|
12978
|
-
* yield* Effect.log("Latch opened! Continuing...")
|
|
12979
|
-
* })
|
|
12980
|
-
*
|
|
12981
|
-
* const opener = Effect.gen(function*() {
|
|
12982
|
-
* yield* Effect.sleep("2 seconds")
|
|
12983
|
-
* yield* Effect.log("Opening latch...")
|
|
12984
|
-
* yield* latch.open
|
|
12985
|
-
* })
|
|
12986
|
-
*
|
|
12987
|
-
* const program = Effect.all([waiter, opener])
|
|
12988
|
-
* ```
|
|
12989
|
-
*
|
|
12990
|
-
* @category Latch
|
|
12991
|
-
* @since 3.8.0
|
|
12992
|
-
*/
|
|
12993
|
-
export const makeLatchUnsafe: (open?: boolean | undefined) => Latch = internal.makeLatchUnsafe
|
|
12994
|
-
|
|
12995
|
-
/**
|
|
12996
|
-
* Creates a new Latch.
|
|
12997
|
-
*
|
|
12998
|
-
* @example
|
|
12999
|
-
* ```ts
|
|
13000
|
-
* import { Effect } from "effect"
|
|
13001
|
-
*
|
|
13002
|
-
* const program = Effect.gen(function*() {
|
|
13003
|
-
* const latch = yield* Effect.makeLatch(false)
|
|
13004
|
-
*
|
|
13005
|
-
* const waiter = Effect.gen(function*() {
|
|
13006
|
-
* yield* Effect.log("Waiting for latch to open...")
|
|
13007
|
-
* yield* latch.await
|
|
13008
|
-
* yield* Effect.log("Latch opened! Continuing...")
|
|
13009
|
-
* })
|
|
13010
|
-
*
|
|
13011
|
-
* const opener = Effect.gen(function*() {
|
|
13012
|
-
* yield* Effect.sleep("2 seconds")
|
|
13013
|
-
* yield* Effect.log("Opening latch...")
|
|
13014
|
-
* yield* latch.open
|
|
13015
|
-
* })
|
|
13016
|
-
*
|
|
13017
|
-
* yield* Effect.all([waiter, opener])
|
|
13018
|
-
* })
|
|
13019
|
-
* ```
|
|
13020
|
-
*
|
|
13021
|
-
* @category Latch
|
|
13022
|
-
* @since 3.8.0
|
|
13023
|
-
*/
|
|
13024
|
-
export const makeLatch: (open?: boolean | undefined) => Effect<Latch> = internal.makeLatch
|
|
13025
|
-
|
|
13026
12780
|
// -----------------------------------------------------------------------------
|
|
13027
12781
|
// Repetition & Recursion
|
|
13028
12782
|
// -----------------------------------------------------------------------------
|