effect 4.0.0-beta.6 → 4.0.0-beta.8
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/Cache.d.ts +2 -2
- package/dist/Cache.d.ts.map +1 -1
- package/dist/Cache.js +1 -1
- package/dist/Cache.js.map +1 -1
- package/dist/Combiner.d.ts +280 -13
- package/dist/Combiner.d.ts.map +1 -1
- package/dist/Combiner.js +198 -7
- package/dist/Combiner.js.map +1 -1
- package/dist/Config.d.ts +2 -2
- package/dist/Config.js +3 -3
- package/dist/Config.js.map +1 -1
- package/dist/DateTime.d.ts +23 -161
- package/dist/DateTime.d.ts.map +1 -1
- package/dist/DateTime.js +6 -51
- package/dist/DateTime.js.map +1 -1
- package/dist/Duration.d.ts +12 -12
- package/dist/Duration.d.ts.map +1 -1
- package/dist/Duration.js +12 -12
- package/dist/Duration.js.map +1 -1
- package/dist/Effect.d.ts +13 -13
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +1 -1
- package/dist/Effect.js.map +1 -1
- package/dist/Formatter.d.ts +131 -47
- package/dist/Formatter.d.ts.map +1 -1
- package/dist/Formatter.js +228 -50
- package/dist/Formatter.js.map +1 -1
- package/dist/JsonSchema.d.ts +299 -10
- package/dist/JsonSchema.d.ts.map +1 -1
- package/dist/JsonSchema.js +323 -4
- package/dist/JsonSchema.js.map +1 -1
- package/dist/LayerMap.d.ts +4 -4
- package/dist/LayerMap.d.ts.map +1 -1
- package/dist/LogLevel.d.ts +27 -0
- package/dist/LogLevel.d.ts.map +1 -1
- package/dist/LogLevel.js +28 -100
- package/dist/LogLevel.js.map +1 -1
- package/dist/Logger.d.ts +4 -4
- package/dist/Logger.d.ts.map +1 -1
- package/dist/Metric.d.ts +2 -2
- package/dist/Metric.d.ts.map +1 -1
- package/dist/Metric.js +1 -1
- package/dist/Metric.js.map +1 -1
- package/dist/Pool.d.ts +1 -1
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +1 -1
- package/dist/Pool.js.map +1 -1
- package/dist/Random.d.ts +1 -1
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +3 -12
- package/dist/Random.js.map +1 -1
- package/dist/RcMap.d.ts +2 -2
- package/dist/RcMap.d.ts.map +1 -1
- package/dist/RcMap.js +1 -1
- package/dist/RcMap.js.map +1 -1
- package/dist/RcRef.d.ts +1 -1
- package/dist/RcRef.d.ts.map +1 -1
- package/dist/Reducer.d.ts +166 -7
- package/dist/Reducer.d.ts.map +1 -1
- package/dist/Reducer.js +135 -1
- package/dist/Reducer.js.map +1 -1
- package/dist/RequestResolver.d.ts +6 -6
- package/dist/RequestResolver.d.ts.map +1 -1
- package/dist/RequestResolver.js.map +1 -1
- package/dist/Schedule.d.ts +20 -11
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +23 -9
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +4 -4
- package/dist/Schema.d.ts.map +1 -1
- package/dist/ScopedCache.d.ts +2 -2
- package/dist/ScopedCache.d.ts.map +1 -1
- package/dist/ScopedCache.js +1 -1
- package/dist/ScopedCache.js.map +1 -1
- package/dist/Stream.d.ts +19 -19
- package/dist/Stream.d.ts.map +1 -1
- package/dist/Stream.js +3 -3
- package/dist/Stream.js.map +1 -1
- package/dist/index.d.ts +258 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/dateTime.js +3 -11
- package/dist/internal/dateTime.js.map +1 -1
- package/dist/internal/effect.js +2 -2
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/random.d.ts +2 -0
- package/dist/internal/random.d.ts.map +1 -0
- package/dist/internal/random.js +13 -0
- package/dist/internal/random.js.map +1 -0
- package/dist/internal/rcRef.js +1 -1
- package/dist/internal/rcRef.js.map +1 -1
- package/dist/testing/TestClock.d.ts +4 -4
- package/dist/testing/TestClock.d.ts.map +1 -1
- package/dist/testing/TestClock.js +1 -1
- package/dist/testing/TestClock.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +6 -6
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/unstable/ai/AiError.d.ts +10 -10
- package/dist/unstable/ai/AiError.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.d.ts +3 -3
- package/dist/unstable/ai/Chat.d.ts.map +1 -1
- package/dist/unstable/ai/Chat.js +2 -2
- package/dist/unstable/ai/Chat.js.map +1 -1
- package/dist/unstable/ai/LanguageModel.d.ts +2 -2
- package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.d.ts +1 -1
- package/dist/unstable/ai/McpServer.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.js.map +1 -1
- package/dist/unstable/ai/Prompt.d.ts +17 -17
- package/dist/unstable/ai/Prompt.d.ts.map +1 -1
- package/dist/unstable/ai/Response.d.ts +23 -23
- package/dist/unstable/ai/Response.d.ts.map +1 -1
- package/dist/unstable/ai/Response.js +1 -1
- package/dist/unstable/ai/Response.js.map +1 -1
- package/dist/unstable/cluster/ClusterCron.d.ts +1 -1
- package/dist/unstable/cluster/ClusterCron.d.ts.map +1 -1
- package/dist/unstable/cluster/ClusterCron.js +1 -1
- package/dist/unstable/cluster/ClusterCron.js.map +1 -1
- package/dist/unstable/cluster/Entity.d.ts +3 -3
- package/dist/unstable/cluster/Entity.d.ts.map +1 -1
- package/dist/unstable/cluster/EntityResource.d.ts +2 -2
- package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
- package/dist/unstable/cluster/K8sHttpClient.js +1 -1
- package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
- package/dist/unstable/cluster/MessageStorage.js.map +1 -1
- package/dist/unstable/cluster/Sharding.d.ts +2 -2
- package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
- package/dist/unstable/cluster/Sharding.js +1 -1
- package/dist/unstable/cluster/Sharding.js.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.d.ts +21 -21
- package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
- package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.js +1 -1
- package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
- package/dist/unstable/cluster/internal/entityManager.js +1 -1
- package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
- package/dist/unstable/encoding/Sse.d.ts +2 -2
- package/dist/unstable/encoding/Sse.d.ts.map +1 -1
- package/dist/unstable/encoding/Sse.js.map +1 -1
- package/dist/unstable/http/Cookies.d.ts +1 -1
- package/dist/unstable/http/Cookies.d.ts.map +1 -1
- package/dist/unstable/http/Cookies.js +2 -2
- package/dist/unstable/http/Cookies.js.map +1 -1
- package/dist/unstable/http/HttpClient.d.ts +4 -4
- package/dist/unstable/http/HttpClient.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.d.ts +11 -11
- package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
- package/dist/unstable/http/HttpClientRequest.js +8 -1
- package/dist/unstable/http/HttpClientRequest.js.map +1 -1
- package/dist/unstable/http/HttpMethod.d.ts +4 -4
- package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
- package/dist/unstable/http/HttpMethod.js +3 -3
- package/dist/unstable/http/HttpMethod.js.map +1 -1
- package/dist/unstable/observability/Otlp.d.ts +12 -12
- package/dist/unstable/observability/Otlp.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.d.ts +2 -2
- package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpExporter.js +1 -1
- package/dist/unstable/observability/OtlpExporter.js.map +1 -1
- package/dist/unstable/observability/OtlpLogger.d.ts +4 -4
- package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpMetrics.d.ts +4 -4
- package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
- package/dist/unstable/observability/OtlpTracer.d.ts +4 -4
- package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistable.d.ts +2 -2
- package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.d.ts +12 -12
- package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
- package/dist/unstable/persistence/PersistedQueue.js +6 -6
- package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
- package/dist/unstable/persistence/Persistence.d.ts +1 -1
- package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
- package/dist/unstable/persistence/Persistence.js +2 -2
- package/dist/unstable/persistence/Persistence.js.map +1 -1
- package/dist/unstable/persistence/RateLimiter.d.ts +3 -3
- package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
- package/dist/unstable/persistence/RateLimiter.js +1 -1
- package/dist/unstable/persistence/RateLimiter.js.map +1 -1
- package/dist/unstable/process/ChildProcess.d.ts +2 -2
- package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.d.ts +6 -6
- package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
- package/dist/unstable/reactivity/Atom.js +3 -3
- package/dist/unstable/reactivity/Atom.js.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.js +1 -1
- package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
- package/dist/unstable/rpc/Rpc.d.ts +2 -2
- package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts +5 -26
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +3 -11
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/socket/Socket.d.ts +4 -4
- package/dist/unstable/socket/Socket.d.ts.map +1 -1
- package/dist/unstable/sql/SqlModel.d.ts +2 -2
- package/dist/unstable/sql/SqlModel.d.ts.map +1 -1
- package/dist/unstable/sql/SqlModel.js +3 -3
- package/dist/unstable/sql/SqlModel.js.map +1 -1
- package/dist/unstable/sql/SqlSchema.d.ts +16 -5
- package/dist/unstable/sql/SqlSchema.d.ts.map +1 -1
- package/dist/unstable/sql/SqlSchema.js +17 -7
- package/dist/unstable/sql/SqlSchema.js.map +1 -1
- package/dist/unstable/workflow/DurableClock.d.ts +3 -3
- package/dist/unstable/workflow/DurableClock.d.ts.map +1 -1
- package/dist/unstable/workflow/DurableClock.js +3 -3
- package/dist/unstable/workflow/DurableClock.js.map +1 -1
- package/package.json +1 -1
- package/src/Cache.ts +3 -3
- package/src/Combiner.ts +280 -13
- package/src/Config.ts +3 -3
- package/src/DateTime.ts +24 -164
- package/src/Duration.ts +15 -15
- package/src/Effect.ts +15 -15
- package/src/Formatter.ts +252 -50
- package/src/JsonSchema.ts +383 -10
- package/src/LayerMap.ts +5 -5
- package/src/LogLevel.ts +31 -0
- package/src/Logger.ts +5 -5
- package/src/Metric.ts +4 -4
- package/src/Pool.ts +4 -4
- package/src/Random.ts +5 -14
- package/src/RcMap.ts +5 -5
- package/src/RcRef.ts +1 -1
- package/src/Reducer.ts +166 -7
- package/src/RequestResolver.ts +9 -9
- package/src/Schedule.ts +44 -25
- package/src/Schema.ts +4 -4
- package/src/ScopedCache.ts +3 -3
- package/src/Stream.ts +34 -34
- package/src/index.ts +258 -0
- package/src/internal/dateTime.ts +9 -30
- package/src/internal/effect.ts +21 -21
- package/src/internal/random.ts +20 -0
- package/src/internal/rcRef.ts +2 -2
- package/src/testing/TestClock.ts +5 -5
- package/src/testing/TestSchema.ts +8 -8
- package/src/unstable/ai/AiError.ts +1 -1
- package/src/unstable/ai/Chat.ts +10 -10
- package/src/unstable/ai/LanguageModel.ts +3 -3
- package/src/unstable/ai/McpServer.ts +2 -2
- package/src/unstable/ai/Prompt.ts +17 -17
- package/src/unstable/ai/Response.ts +23 -23
- package/src/unstable/cluster/ClusterCron.ts +2 -2
- package/src/unstable/cluster/Entity.ts +5 -5
- package/src/unstable/cluster/EntityResource.ts +4 -4
- package/src/unstable/cluster/K8sHttpClient.ts +1 -1
- package/src/unstable/cluster/MessageStorage.ts +1 -4
- package/src/unstable/cluster/Sharding.ts +3 -3
- package/src/unstable/cluster/ShardingConfig.ts +10 -11
- package/src/unstable/cluster/SqlRunnerStorage.ts +1 -1
- package/src/unstable/cluster/internal/entityManager.ts +3 -3
- package/src/unstable/encoding/Sse.ts +2 -4
- package/src/unstable/http/Cookies.ts +3 -3
- package/src/unstable/http/HttpClient.ts +4 -4
- package/src/unstable/http/HttpClientRequest.ts +15 -11
- package/src/unstable/http/HttpMethod.ts +16 -4
- package/src/unstable/observability/Otlp.ts +12 -12
- package/src/unstable/observability/OtlpExporter.ts +3 -3
- package/src/unstable/observability/OtlpLogger.ts +4 -4
- package/src/unstable/observability/OtlpMetrics.ts +4 -4
- package/src/unstable/observability/OtlpTracer.ts +4 -4
- package/src/unstable/persistence/Persistable.ts +2 -2
- package/src/unstable/persistence/PersistedQueue.ts +18 -18
- package/src/unstable/persistence/Persistence.ts +3 -3
- package/src/unstable/persistence/RateLimiter.ts +4 -4
- package/src/unstable/process/ChildProcess.ts +2 -2
- package/src/unstable/reactivity/Atom.ts +13 -13
- package/src/unstable/reactivity/AtomHttpApi.ts +3 -3
- package/src/unstable/reactivity/AtomRpc.ts +3 -3
- package/src/unstable/rpc/Rpc.ts +3 -3
- package/src/unstable/rpc/RpcClient.ts +8 -51
- package/src/unstable/socket/Socket.ts +4 -4
- package/src/unstable/sql/SqlModel.ts +5 -5
- package/src/unstable/sql/SqlSchema.ts +41 -25
- package/src/unstable/workflow/DurableClock.ts +8 -8
package/src/Duration.ts
CHANGED
|
@@ -90,7 +90,7 @@ export type Unit =
|
|
|
90
90
|
* @since 2.0.0
|
|
91
91
|
* @category models
|
|
92
92
|
*/
|
|
93
|
-
export type
|
|
93
|
+
export type Input =
|
|
94
94
|
| Duration
|
|
95
95
|
| number // millis
|
|
96
96
|
| bigint // nanos
|
|
@@ -100,23 +100,23 @@ export type DurationInput =
|
|
|
100
100
|
const DURATION_REGEXP = /^(-?\d+(?:\.\d+)?)\s+(nanos?|micros?|millis?|seconds?|minutes?|hours?|days?|weeks?)$/
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
|
-
* Decodes a `
|
|
103
|
+
* Decodes a `Duration.Input` into a `Duration`.
|
|
104
104
|
*
|
|
105
|
-
* If the input is not a valid `
|
|
105
|
+
* If the input is not a valid `Duration.Input`, it throws an error.
|
|
106
106
|
*
|
|
107
107
|
* @example
|
|
108
108
|
* ```ts
|
|
109
109
|
* import { Duration } from "effect"
|
|
110
110
|
*
|
|
111
|
-
* const duration1 = Duration.
|
|
112
|
-
* const duration2 = Duration.
|
|
113
|
-
* const duration3 = Duration.
|
|
111
|
+
* const duration1 = Duration.fromInputUnsafe(1000) // 1000 milliseconds
|
|
112
|
+
* const duration2 = Duration.fromInputUnsafe("5 seconds")
|
|
113
|
+
* const duration3 = Duration.fromInputUnsafe([2, 500_000_000]) // 2 seconds and 500ms
|
|
114
114
|
* ```
|
|
115
115
|
*
|
|
116
116
|
* @since 2.0.0
|
|
117
117
|
* @category constructors
|
|
118
118
|
*/
|
|
119
|
-
export const
|
|
119
|
+
export const fromInputUnsafe = (input: Input): Duration => {
|
|
120
120
|
if (isDuration(input)) return input
|
|
121
121
|
if (isNumber(input)) return millis(input)
|
|
122
122
|
if (isBigInt(input)) return nanos(input)
|
|
@@ -168,11 +168,11 @@ export const fromDurationInputUnsafe = (input: DurationInput): Duration => {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
throw new Error(`Invalid
|
|
171
|
+
throw new Error(`Invalid Input: ${input}`)
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
/**
|
|
175
|
-
* Safely decodes a `
|
|
175
|
+
* Safely decodes a `Input` value into a `Duration`, returning
|
|
176
176
|
* `undefined` if decoding fails.
|
|
177
177
|
*
|
|
178
178
|
* **Example**
|
|
@@ -180,16 +180,16 @@ export const fromDurationInputUnsafe = (input: DurationInput): Duration => {
|
|
|
180
180
|
* ```ts
|
|
181
181
|
* import { Duration } from "effect"
|
|
182
182
|
*
|
|
183
|
-
* Duration.
|
|
183
|
+
* Duration.fromInput(1000)?.pipe(Duration.toSeconds) // 1
|
|
184
184
|
*
|
|
185
|
-
* Duration.
|
|
185
|
+
* Duration.fromInput("invalid" as any) // undefined
|
|
186
186
|
* ```
|
|
187
187
|
*
|
|
188
188
|
* @category constructors
|
|
189
189
|
* @since 4.0.0
|
|
190
190
|
*/
|
|
191
|
-
export const
|
|
192
|
-
|
|
191
|
+
export const fromInput: (u: Input) => Duration | undefined = UndefinedOr.liftThrowable(
|
|
192
|
+
fromInputUnsafe
|
|
193
193
|
)
|
|
194
194
|
|
|
195
195
|
const zeroDurationValue: DurationValue = { _tag: "Millis", millis: 0 }
|
|
@@ -611,8 +611,8 @@ export const weeks = (weeks: number): Duration => make(weeks * 604_800_000)
|
|
|
611
611
|
* @since 2.0.0
|
|
612
612
|
* @category getters
|
|
613
613
|
*/
|
|
614
|
-
export const toMillis = (self:
|
|
615
|
-
match(self, {
|
|
614
|
+
export const toMillis = (self: Input): number =>
|
|
615
|
+
match(fromInputUnsafe(self), {
|
|
616
616
|
onMillis: identity,
|
|
617
617
|
onNanos: (nanos) => Number(nanos) / 1_000_000,
|
|
618
618
|
onInfinity: () => Infinity,
|
package/src/Effect.ts
CHANGED
|
@@ -7224,7 +7224,7 @@ export const timeout: {
|
|
|
7224
7224
|
* @since 2.0.0
|
|
7225
7225
|
* @category Delays & Timeouts
|
|
7226
7226
|
*/
|
|
7227
|
-
(duration: Duration.
|
|
7227
|
+
(duration: Duration.Input): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E | Cause.TimeoutError, R>
|
|
7228
7228
|
// -----------------------------------------------------------------------------
|
|
7229
7229
|
// Delays & timeouts
|
|
7230
7230
|
// -----------------------------------------------------------------------------
|
|
@@ -7275,7 +7275,7 @@ export const timeout: {
|
|
|
7275
7275
|
* @since 2.0.0
|
|
7276
7276
|
* @category Delays & Timeouts
|
|
7277
7277
|
*/
|
|
7278
|
-
<A, E, R>(self: Effect<A, E, R>, duration: Duration.
|
|
7278
|
+
<A, E, R>(self: Effect<A, E, R>, duration: Duration.Input): Effect<A, E | Cause.TimeoutError, R>
|
|
7279
7279
|
} = internal.timeout
|
|
7280
7280
|
|
|
7281
7281
|
/**
|
|
@@ -7377,7 +7377,7 @@ export const timeoutOption: {
|
|
|
7377
7377
|
* @since 3.1.0
|
|
7378
7378
|
* @category Delays & Timeouts
|
|
7379
7379
|
*/
|
|
7380
|
-
(duration: Duration.
|
|
7380
|
+
(duration: Duration.Input): <A, E, R>(self: Effect<A, E, R>) => Effect<Option<A>, E, R>
|
|
7381
7381
|
/**
|
|
7382
7382
|
* Handles timeouts by returning an `Option` that represents either the result
|
|
7383
7383
|
* or a timeout.
|
|
@@ -7427,7 +7427,7 @@ export const timeoutOption: {
|
|
|
7427
7427
|
* @since 3.1.0
|
|
7428
7428
|
* @category Delays & Timeouts
|
|
7429
7429
|
*/
|
|
7430
|
-
<A, E, R>(self: Effect<A, E, R>, duration: Duration.
|
|
7430
|
+
<A, E, R>(self: Effect<A, E, R>, duration: Duration.Input): Effect<Option<A>, E, R>
|
|
7431
7431
|
} = internal.timeoutOption
|
|
7432
7432
|
|
|
7433
7433
|
/**
|
|
@@ -7505,7 +7505,7 @@ export const timeoutOrElse: {
|
|
|
7505
7505
|
*/
|
|
7506
7506
|
<A2, E2, R2>(
|
|
7507
7507
|
options: {
|
|
7508
|
-
readonly duration: Duration.
|
|
7508
|
+
readonly duration: Duration.Input
|
|
7509
7509
|
readonly onTimeout: LazyArg<Effect<A2, E2, R2>>
|
|
7510
7510
|
}
|
|
7511
7511
|
): <A, E, R>(self: Effect<A, E, R>) => Effect<A | A2, E | E2, R | R2>
|
|
@@ -7548,7 +7548,7 @@ export const timeoutOrElse: {
|
|
|
7548
7548
|
<A, E, R, A2, E2, R2>(
|
|
7549
7549
|
self: Effect<A, E, R>,
|
|
7550
7550
|
options: {
|
|
7551
|
-
readonly duration: Duration.
|
|
7551
|
+
readonly duration: Duration.Input
|
|
7552
7552
|
readonly onTimeout: LazyArg<Effect<A2, E2, R2>>
|
|
7553
7553
|
}
|
|
7554
7554
|
): Effect<A | A2, E | E2, R | R2>
|
|
@@ -7595,7 +7595,7 @@ export const delay: {
|
|
|
7595
7595
|
* @since 2.0.0
|
|
7596
7596
|
* @category Delays & Timeouts
|
|
7597
7597
|
*/
|
|
7598
|
-
(duration: Duration.
|
|
7598
|
+
(duration: Duration.Input): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R>
|
|
7599
7599
|
/**
|
|
7600
7600
|
* Returns an effect that is delayed from this effect by the specified
|
|
7601
7601
|
* `Duration`.
|
|
@@ -7616,7 +7616,7 @@ export const delay: {
|
|
|
7616
7616
|
* @since 2.0.0
|
|
7617
7617
|
* @category Delays & Timeouts
|
|
7618
7618
|
*/
|
|
7619
|
-
<A, E, R>(self: Effect<A, E, R>, duration: Duration.
|
|
7619
|
+
<A, E, R>(self: Effect<A, E, R>, duration: Duration.Input): Effect<A, E, R>
|
|
7620
7620
|
} = internal.delay
|
|
7621
7621
|
|
|
7622
7622
|
/**
|
|
@@ -7641,7 +7641,7 @@ export const delay: {
|
|
|
7641
7641
|
* @since 2.0.0
|
|
7642
7642
|
* @category Delays & Timeouts
|
|
7643
7643
|
*/
|
|
7644
|
-
export const sleep: (duration: Duration.
|
|
7644
|
+
export const sleep: (duration: Duration.Input) => Effect<void> = internal.sleep
|
|
7645
7645
|
|
|
7646
7646
|
/**
|
|
7647
7647
|
* Measures the runtime of an effect and returns the duration with its result.
|
|
@@ -12272,7 +12272,7 @@ export const cachedWithTTL: {
|
|
|
12272
12272
|
* @since 2.0.0
|
|
12273
12273
|
* @category Caching
|
|
12274
12274
|
*/
|
|
12275
|
-
(timeToLive: Duration.
|
|
12275
|
+
(timeToLive: Duration.Input): <A, E, R>(self: Effect<A, E, R>) => Effect<Effect<A, E, R>>
|
|
12276
12276
|
/**
|
|
12277
12277
|
* Returns an effect that caches its result for a specified `Duration`,
|
|
12278
12278
|
* known as "timeToLive" (TTL).
|
|
@@ -12339,7 +12339,7 @@ export const cachedWithTTL: {
|
|
|
12339
12339
|
* @since 2.0.0
|
|
12340
12340
|
* @category Caching
|
|
12341
12341
|
*/
|
|
12342
|
-
<A, E, R>(self: Effect<A, E, R>, timeToLive: Duration.
|
|
12342
|
+
<A, E, R>(self: Effect<A, E, R>, timeToLive: Duration.Input): Effect<Effect<A, E, R>>
|
|
12343
12343
|
} = internal.cachedWithTTL
|
|
12344
12344
|
|
|
12345
12345
|
/**
|
|
@@ -12481,7 +12481,7 @@ export const cachedInvalidateWithTTL: {
|
|
|
12481
12481
|
* @since 2.0.0
|
|
12482
12482
|
* @category Caching
|
|
12483
12483
|
*/
|
|
12484
|
-
(timeToLive: Duration.
|
|
12484
|
+
(timeToLive: Duration.Input): <A, E, R>(self: Effect<A, E, R>) => Effect<[Effect<A, E, R>, Effect<void>]>
|
|
12485
12485
|
/**
|
|
12486
12486
|
* Caches an effect's result for a specified duration and allows manual
|
|
12487
12487
|
* invalidation before expiration.
|
|
@@ -12551,7 +12551,7 @@ export const cachedInvalidateWithTTL: {
|
|
|
12551
12551
|
* @since 2.0.0
|
|
12552
12552
|
* @category Caching
|
|
12553
12553
|
*/
|
|
12554
|
-
<A, E, R>(self: Effect<A, E, R>, timeToLive: Duration.
|
|
12554
|
+
<A, E, R>(self: Effect<A, E, R>, timeToLive: Duration.Input): Effect<[Effect<A, E, R>, Effect<void>]>
|
|
12555
12555
|
} = internal.cachedInvalidateWithTTL
|
|
12556
12556
|
|
|
12557
12557
|
// -----------------------------------------------------------------------------
|
|
@@ -21905,8 +21905,8 @@ export const trackDuration: {
|
|
|
21905
21905
|
return onExit(self, () => {
|
|
21906
21906
|
const endTime = clock.currentTimeNanosUnsafe()
|
|
21907
21907
|
const duration = Duration.subtract(
|
|
21908
|
-
Duration.
|
|
21909
|
-
Duration.
|
|
21908
|
+
Duration.fromInputUnsafe(endTime),
|
|
21909
|
+
Duration.fromInputUnsafe(startTime)
|
|
21910
21910
|
)
|
|
21911
21911
|
const input = f === undefined ? duration : internalCall(() => f(duration))
|
|
21912
21912
|
return Metric.update(metric, input as any)
|
package/src/Formatter.ts
CHANGED
|
@@ -1,10 +1,85 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* Utilities for converting arbitrary JavaScript values into human-readable
|
|
3
|
+
* strings, with support for circular references, redaction, and common JS
|
|
4
|
+
* types that `JSON.stringify` handles poorly.
|
|
5
|
+
*
|
|
6
|
+
* Mental model:
|
|
7
|
+
* - A `Formatter<Value, Format>` is a callable `(value: Value) => Format`.
|
|
8
|
+
* - {@link format} is the general-purpose pretty-printer: it handles
|
|
9
|
+
* primitives, arrays, objects, `BigInt`, `Symbol`, `Date`, `RegExp`,
|
|
10
|
+
* `Set`, `Map`, class instances, and circular references.
|
|
11
|
+
* - {@link formatJson} is a safe `JSON.stringify` wrapper that silently
|
|
12
|
+
* drops circular references and applies redaction.
|
|
13
|
+
* - Both functions accept a `space` option for indentation control.
|
|
14
|
+
*
|
|
15
|
+
* Common tasks:
|
|
16
|
+
* - Pretty-print any value for debugging / logging -> {@link format}
|
|
17
|
+
* - Serialize to JSON safely (no circular throws) -> {@link formatJson}
|
|
18
|
+
* - Format a single object property key -> {@link formatPropertyKey}
|
|
19
|
+
* - Format a property path like `["a"]["b"]` -> {@link formatPath}
|
|
20
|
+
* - Format a `Date` to ISO string safely -> {@link formatDate}
|
|
21
|
+
*
|
|
22
|
+
* Gotchas:
|
|
23
|
+
* - {@link format} output is **not** valid JSON; use {@link formatJson} when
|
|
24
|
+
* you need parseable JSON.
|
|
25
|
+
* - {@link format} calls `toString()` on objects by default; pass
|
|
26
|
+
* `ignoreToString: true` to disable.
|
|
27
|
+
* - {@link formatJson} silently omits circular references (the key is
|
|
28
|
+
* dropped from the output).
|
|
29
|
+
* - Values implementing the `Redactable` protocol are automatically
|
|
30
|
+
* redacted by both {@link format} and {@link formatJson}.
|
|
31
|
+
*
|
|
32
|
+
* **Example** (Pretty-print a value)
|
|
33
|
+
*
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { Formatter } from "effect"
|
|
36
|
+
*
|
|
37
|
+
* const obj = { name: "Alice", scores: [100, 97] }
|
|
38
|
+
* console.log(Formatter.format(obj))
|
|
39
|
+
* // {"name":"Alice","scores":[100,97]}
|
|
40
|
+
*
|
|
41
|
+
* console.log(Formatter.format(obj, { space: 2 }))
|
|
42
|
+
* // {
|
|
43
|
+
* // "name": "Alice",
|
|
44
|
+
* // "scores": [
|
|
45
|
+
* // 100,
|
|
46
|
+
* // 97
|
|
47
|
+
* // ]
|
|
48
|
+
* // }
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* See also: {@link Formatter}, {@link format}, {@link formatJson}
|
|
52
|
+
*
|
|
2
53
|
* @since 4.0.0
|
|
3
54
|
*/
|
|
4
55
|
import * as Predicate from "./Predicate.ts"
|
|
5
56
|
import { getRedacted, redact, symbolRedactable } from "./Redactable.ts"
|
|
6
57
|
|
|
7
58
|
/**
|
|
59
|
+
* A callable interface representing a function that converts a `Value` into a
|
|
60
|
+
* `Format` (defaults to `string`).
|
|
61
|
+
*
|
|
62
|
+
* When to use:
|
|
63
|
+
* - You want to type a formatting / rendering function generically.
|
|
64
|
+
* - You are building a pipeline that accepts pluggable formatters.
|
|
65
|
+
*
|
|
66
|
+
* Behavior:
|
|
67
|
+
* - Pure callable type; carries no runtime implementation.
|
|
68
|
+
* - Contravariant in `Value`, covariant in `Format`.
|
|
69
|
+
*
|
|
70
|
+
* **Example** (Define a custom formatter)
|
|
71
|
+
*
|
|
72
|
+
* ```ts
|
|
73
|
+
* import type { Formatter } from "effect"
|
|
74
|
+
*
|
|
75
|
+
* const upper: Formatter.Formatter<string> = (s) => s.toUpperCase()
|
|
76
|
+
*
|
|
77
|
+
* console.log(upper("hello"))
|
|
78
|
+
* // HELLO
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* See also: {@link format}, {@link formatJson}
|
|
82
|
+
*
|
|
8
83
|
* @category Model
|
|
9
84
|
* @since 4.0.0
|
|
10
85
|
*/
|
|
@@ -15,31 +90,71 @@ export interface Formatter<in Value, out Format = string> {
|
|
|
15
90
|
/**
|
|
16
91
|
* Converts any JavaScript value into a human-readable string.
|
|
17
92
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* -
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* - Does not
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* - Primitives
|
|
30
|
-
*
|
|
31
|
-
* -
|
|
32
|
-
*
|
|
33
|
-
* -
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* -
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* -
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
93
|
+
* When to use:
|
|
94
|
+
* - Pretty-printing values for debugging, logging, or error messages.
|
|
95
|
+
* - You need to handle `BigInt`, `Symbol`, `Set`, `Map`, `Date`, `RegExp`,
|
|
96
|
+
* or class instances that `JSON.stringify` cannot represent.
|
|
97
|
+
* - You want circular references shown as `"[Circular]"` instead of
|
|
98
|
+
* throwing.
|
|
99
|
+
*
|
|
100
|
+
* Behavior:
|
|
101
|
+
* - Does not mutate input.
|
|
102
|
+
* - Output is **not** valid JSON; use {@link formatJson} when you need
|
|
103
|
+
* parseable JSON.
|
|
104
|
+
* - Primitives: stringified naturally (`null`, `undefined`, `123`, `true`).
|
|
105
|
+
* Strings are JSON-quoted.
|
|
106
|
+
* - Objects with a custom `toString` (not `Object.prototype.toString`):
|
|
107
|
+
* `toString()` is called unless `ignoreToString` is `true`.
|
|
108
|
+
* - Errors with a `cause`: formatted as `"<message> (cause: <cause>)"`.
|
|
109
|
+
* - Iterables (`Set`, `Map`, etc.): formatted as
|
|
110
|
+
* `ClassName([...elements])`.
|
|
111
|
+
* - Class instances: wrapped as `ClassName({...})`.
|
|
112
|
+
* - `Redactable` values are automatically redacted.
|
|
113
|
+
* - Arrays/objects with 0–1 entries are inline; larger ones are
|
|
114
|
+
* pretty-printed when `space` is set.
|
|
115
|
+
* - Circular references are replaced with `"[Circular]"`.
|
|
116
|
+
*
|
|
117
|
+
* Options:
|
|
118
|
+
* - `space` — indentation unit (number of spaces, or a string like
|
|
119
|
+
* `"\t"`). Defaults to `0` (compact).
|
|
120
|
+
* - `ignoreToString` — skip calling `toString()`. Defaults to `false`.
|
|
121
|
+
*
|
|
122
|
+
* **Example** (Compact output)
|
|
123
|
+
*
|
|
124
|
+
* ```ts
|
|
125
|
+
* import { Formatter } from "effect"
|
|
126
|
+
*
|
|
127
|
+
* console.log(Formatter.format({ a: 1, b: [2, 3] }))
|
|
128
|
+
* // {"a":1,"b":[2,3]}
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
131
|
+
* **Example** (Pretty-printed output)
|
|
132
|
+
*
|
|
133
|
+
* ```ts
|
|
134
|
+
* import { Formatter } from "effect"
|
|
135
|
+
*
|
|
136
|
+
* console.log(Formatter.format({ a: 1, b: [2, 3] }, { space: 2 }))
|
|
137
|
+
* // {
|
|
138
|
+
* // "a": 1,
|
|
139
|
+
* // "b": [
|
|
140
|
+
* // 2,
|
|
141
|
+
* // 3
|
|
142
|
+
* // ]
|
|
143
|
+
* // }
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* **Example** (Circular reference handling)
|
|
147
|
+
*
|
|
148
|
+
* ```ts
|
|
149
|
+
* import { Formatter } from "effect"
|
|
150
|
+
*
|
|
151
|
+
* const obj: any = { name: "loop" }
|
|
152
|
+
* obj.self = obj
|
|
153
|
+
* console.log(Formatter.format(obj))
|
|
154
|
+
* // {"name":"loop","self":[Circular]}
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* See also: {@link formatJson}, {@link Formatter}
|
|
43
158
|
*
|
|
44
159
|
* @since 4.0.0
|
|
45
160
|
*/
|
|
@@ -131,7 +246,29 @@ export function format(input: unknown, options?: {
|
|
|
131
246
|
const CIRCULAR = "[Circular]"
|
|
132
247
|
|
|
133
248
|
/**
|
|
134
|
-
*
|
|
249
|
+
* Formats a single property key for display.
|
|
250
|
+
*
|
|
251
|
+
* When to use:
|
|
252
|
+
* - You are building a custom formatter that needs to render object keys.
|
|
253
|
+
*
|
|
254
|
+
* Behavior:
|
|
255
|
+
* - String keys are JSON-quoted (e.g. `"foo"`).
|
|
256
|
+
* - Symbol and number keys are converted with `String()`.
|
|
257
|
+
* - Pure function; does not mutate input.
|
|
258
|
+
*
|
|
259
|
+
* **Example** (Format property keys)
|
|
260
|
+
*
|
|
261
|
+
* ```ts
|
|
262
|
+
* import { Formatter } from "effect"
|
|
263
|
+
*
|
|
264
|
+
* console.log(Formatter.formatPropertyKey("name"))
|
|
265
|
+
* // "name"
|
|
266
|
+
*
|
|
267
|
+
* console.log(Formatter.formatPropertyKey(Symbol.for("id")))
|
|
268
|
+
* // Symbol(id)
|
|
269
|
+
* ```
|
|
270
|
+
*
|
|
271
|
+
* See also: {@link formatPath}, {@link format}
|
|
135
272
|
*
|
|
136
273
|
* @internal
|
|
137
274
|
*/
|
|
@@ -140,7 +277,28 @@ export function formatPropertyKey(name: PropertyKey): string {
|
|
|
140
277
|
}
|
|
141
278
|
|
|
142
279
|
/**
|
|
143
|
-
*
|
|
280
|
+
* Formats an array of property keys as a bracket-notation path string.
|
|
281
|
+
*
|
|
282
|
+
* When to use:
|
|
283
|
+
* - You need to display a path through a nested object (e.g. in error
|
|
284
|
+
* messages or schema validation output).
|
|
285
|
+
*
|
|
286
|
+
* Behavior:
|
|
287
|
+
* - Each key is wrapped in brackets and formatted via
|
|
288
|
+
* {@link formatPropertyKey}.
|
|
289
|
+
* - Returns an empty string for an empty path.
|
|
290
|
+
* - Pure function; does not mutate input.
|
|
291
|
+
*
|
|
292
|
+
* **Example** (Render a property path)
|
|
293
|
+
*
|
|
294
|
+
* ```ts
|
|
295
|
+
* import { Formatter } from "effect"
|
|
296
|
+
*
|
|
297
|
+
* console.log(Formatter.formatPath(["users", 0, "name"]))
|
|
298
|
+
* // ["users"][0]["name"]
|
|
299
|
+
* ```
|
|
300
|
+
*
|
|
301
|
+
* See also: {@link formatPropertyKey}, {@link format}
|
|
144
302
|
*
|
|
145
303
|
* @internal
|
|
146
304
|
*/
|
|
@@ -149,7 +307,31 @@ export function formatPath(path: ReadonlyArray<PropertyKey>): string {
|
|
|
149
307
|
}
|
|
150
308
|
|
|
151
309
|
/**
|
|
152
|
-
*
|
|
310
|
+
* Formats a `Date` as an ISO 8601 string, returning `"Invalid Date"` for
|
|
311
|
+
* invalid dates instead of throwing.
|
|
312
|
+
*
|
|
313
|
+
* When to use:
|
|
314
|
+
* - You want a safe `toISOString()` that never throws.
|
|
315
|
+
*
|
|
316
|
+
* Behavior:
|
|
317
|
+
* - Returns `date.toISOString()` on success.
|
|
318
|
+
* - Returns `"Invalid Date"` if `toISOString()` throws (e.g. for
|
|
319
|
+
* `new Date(NaN)`).
|
|
320
|
+
* - Pure function; does not mutate input.
|
|
321
|
+
*
|
|
322
|
+
* **Example** (Safe date formatting)
|
|
323
|
+
*
|
|
324
|
+
* ```ts
|
|
325
|
+
* import { Formatter } from "effect"
|
|
326
|
+
*
|
|
327
|
+
* console.log(Formatter.formatDate(new Date("2024-01-15T10:30:00Z")))
|
|
328
|
+
* // 2024-01-15T10:30:00.000Z
|
|
329
|
+
*
|
|
330
|
+
* console.log(Formatter.formatDate(new Date("invalid")))
|
|
331
|
+
* // Invalid Date
|
|
332
|
+
* ```
|
|
333
|
+
*
|
|
334
|
+
* See also: {@link format}
|
|
153
335
|
*
|
|
154
336
|
* @internal
|
|
155
337
|
*/
|
|
@@ -171,42 +353,62 @@ function safeToString(input: any): string {
|
|
|
171
353
|
}
|
|
172
354
|
|
|
173
355
|
/**
|
|
174
|
-
* Safely stringifies
|
|
356
|
+
* Safely stringifies a value to JSON, silently dropping circular references.
|
|
357
|
+
*
|
|
358
|
+
* When to use:
|
|
359
|
+
* - You need valid JSON output (unlike {@link format}).
|
|
360
|
+
* - The input may contain circular references and you want them silently
|
|
361
|
+
* omitted rather than throwing a `TypeError`.
|
|
175
362
|
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
363
|
+
* Behavior:
|
|
364
|
+
* - Does not mutate input.
|
|
365
|
+
* - Uses `JSON.stringify` internally with a replacer that tracks seen
|
|
366
|
+
* objects.
|
|
367
|
+
* - Circular references are replaced with `undefined` (omitted from
|
|
368
|
+
* output).
|
|
369
|
+
* - `Redactable` values are automatically redacted before serialization.
|
|
370
|
+
* - Types not supported by JSON (`BigInt`, `Symbol`, `undefined`,
|
|
371
|
+
* functions) follow standard `JSON.stringify` behavior (omitted or
|
|
372
|
+
* `null` in arrays).
|
|
179
373
|
*
|
|
180
|
-
*
|
|
181
|
-
* - `space
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* Defaults to `0`.
|
|
374
|
+
* Options:
|
|
375
|
+
* - `space` — indentation unit (number of spaces, or a string like
|
|
376
|
+
* `"\t"`). Defaults to `0` (compact).
|
|
377
|
+
*
|
|
378
|
+
* **Example** (Compact JSON)
|
|
186
379
|
*
|
|
187
|
-
* @example
|
|
188
380
|
* ```ts
|
|
189
|
-
* import {
|
|
381
|
+
* import { Formatter } from "effect"
|
|
190
382
|
*
|
|
191
|
-
*
|
|
192
|
-
* const simple = { name: "Alice", age: 30 }
|
|
193
|
-
* console.log(formatJson(simple))
|
|
383
|
+
* console.log(Formatter.formatJson({ name: "Alice", age: 30 }))
|
|
194
384
|
* // {"name":"Alice","age":30}
|
|
385
|
+
* ```
|
|
386
|
+
*
|
|
387
|
+
* **Example** (Circular reference handling)
|
|
388
|
+
*
|
|
389
|
+
* ```ts
|
|
390
|
+
* import { Formatter } from "effect"
|
|
195
391
|
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
392
|
+
* const obj: any = { name: "test" }
|
|
393
|
+
* obj.self = obj
|
|
394
|
+
* console.log(Formatter.formatJson(obj))
|
|
395
|
+
* // {"name":"test"}
|
|
396
|
+
* ```
|
|
397
|
+
*
|
|
398
|
+
* **Example** (Pretty-printed JSON)
|
|
201
399
|
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
400
|
+
* ```ts
|
|
401
|
+
* import { Formatter } from "effect"
|
|
402
|
+
*
|
|
403
|
+
* console.log(Formatter.formatJson({ name: "Alice", age: 30 }, { space: 2 }))
|
|
204
404
|
* // {
|
|
205
405
|
* // "name": "Alice",
|
|
206
406
|
* // "age": 30
|
|
207
407
|
* // }
|
|
208
408
|
* ```
|
|
209
409
|
*
|
|
410
|
+
* See also: {@link format}, {@link Formatter}
|
|
411
|
+
*
|
|
210
412
|
* @since 4.0.0
|
|
211
413
|
*/
|
|
212
414
|
export function formatJson(input: unknown, options?: {
|