effect 3.3.5 → 3.4.1
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/Micro/package.json +6 -0
- package/dist/cjs/Array.js +18 -3
- package/dist/cjs/Array.js.map +1 -1
- package/dist/cjs/Chunk.js +13 -2
- package/dist/cjs/Chunk.js.map +1 -1
- package/dist/cjs/Effect.js +236 -15
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/Either.js +31 -1
- package/dist/cjs/Either.js.map +1 -1
- package/dist/cjs/ManagedRuntime.js.map +1 -1
- package/dist/cjs/Micro.js +2383 -0
- package/dist/cjs/Micro.js.map +1 -0
- package/dist/cjs/Option.js +1 -2
- package/dist/cjs/Option.js.map +1 -1
- package/dist/cjs/Schedule.js +2 -2
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/Tuple.js +16 -9
- package/dist/cjs/Tuple.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/core-effect.js +4 -2
- package/dist/cjs/internal/core-effect.js.map +1 -1
- package/dist/cjs/internal/core.js +12 -2
- package/dist/cjs/internal/core.js.map +1 -1
- package/dist/cjs/internal/fiberRuntime.js +32 -0
- package/dist/cjs/internal/fiberRuntime.js.map +1 -1
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Array.d.ts +14 -0
- package/dist/dts/Array.d.ts.map +1 -1
- package/dist/dts/Cause.d.ts +1 -1
- package/dist/dts/Chunk.d.ts +11 -0
- package/dist/dts/Chunk.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +235 -12
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/Either.d.ts +35 -0
- package/dist/dts/Either.d.ts.map +1 -1
- package/dist/dts/ManagedRuntime.d.ts +15 -0
- package/dist/dts/ManagedRuntime.d.ts.map +1 -1
- package/dist/dts/Micro.d.ts +2010 -0
- package/dist/dts/Micro.d.ts.map +1 -0
- package/dist/dts/Option.d.ts +2 -0
- package/dist/dts/Option.d.ts.map +1 -1
- package/dist/dts/Schedule.d.ts +2 -2
- package/dist/dts/Stream.d.ts +45 -6
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/Tuple.d.ts +18 -0
- package/dist/dts/Tuple.d.ts.map +1 -1
- package/dist/dts/index.d.ts +7 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/core-effect.d.ts.map +1 -1
- package/dist/dts/internal/core.d.ts.map +1 -1
- package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
- package/dist/esm/Array.js +14 -0
- package/dist/esm/Array.js.map +1 -1
- package/dist/esm/Chunk.js +11 -0
- package/dist/esm/Chunk.js.map +1 -1
- package/dist/esm/Effect.js +233 -12
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/Either.js +30 -0
- package/dist/esm/Either.js.map +1 -1
- package/dist/esm/ManagedRuntime.js.map +1 -1
- package/dist/esm/Micro.js +2307 -0
- package/dist/esm/Micro.js.map +1 -0
- package/dist/esm/Option.js +1 -1
- package/dist/esm/Option.js.map +1 -1
- package/dist/esm/Schedule.js +2 -2
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/Tuple.js +15 -8
- package/dist/esm/Tuple.js.map +1 -1
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/core-effect.js +2 -0
- package/dist/esm/internal/core-effect.js.map +1 -1
- package/dist/esm/internal/core.js +10 -1
- package/dist/esm/internal/core.js.map +1 -1
- package/dist/esm/internal/fiberRuntime.js +32 -0
- package/dist/esm/internal/fiberRuntime.js.map +1 -1
- package/dist/esm/internal/stream.js.map +1 -1
- package/dist/esm/internal/version.js +1 -1
- package/package.json +9 -1
- package/src/Array.ts +15 -0
- package/src/Cause.ts +1 -1
- package/src/Chunk.ts +12 -0
- package/src/Effect.ts +243 -12
- package/src/Either.ts +51 -0
- package/src/ManagedRuntime.ts +16 -0
- package/src/Micro.ts +3835 -0
- package/src/Option.ts +12 -1
- package/src/Schedule.ts +2 -2
- package/src/Stream.ts +60 -8
- package/src/Tuple.ts +18 -8
- package/src/index.ts +8 -0
- package/src/internal/core-effect.ts +33 -0
- package/src/internal/core.ts +18 -1
- package/src/internal/fiberRuntime.ts +32 -0
- package/src/internal/stream.ts +8 -4
- package/src/internal/version.ts +1 -1
package/src/Option.ts
CHANGED
|
@@ -1115,7 +1115,18 @@ export const lift2 = <A, B, C>(f: (a: A, b: B) => C): {
|
|
|
1115
1115
|
export const liftPredicate: { // Note: I intentionally avoid using the NoInfer pattern here.
|
|
1116
1116
|
<A, B extends A>(refinement: Refinement<A, B>): (a: A) => Option<B>
|
|
1117
1117
|
<B extends A, A = B>(predicate: Predicate<A>): (b: B) => Option<B>
|
|
1118
|
-
|
|
1118
|
+
<A, B extends A>(
|
|
1119
|
+
self: A,
|
|
1120
|
+
refinement: Refinement<A, B>
|
|
1121
|
+
): Option<B>
|
|
1122
|
+
<B extends A, A = B>(
|
|
1123
|
+
self: B,
|
|
1124
|
+
predicate: Predicate<A>
|
|
1125
|
+
): Option<B>
|
|
1126
|
+
} = dual(
|
|
1127
|
+
2,
|
|
1128
|
+
<B extends A, A = B>(b: B, predicate: Predicate<A>): Option<B> => predicate(b) ? some(b) : none()
|
|
1129
|
+
)
|
|
1119
1130
|
|
|
1120
1131
|
/**
|
|
1121
1132
|
* Returns a function that checks if a `Option` contains a given value using a provided `isEquivalent` function.
|
package/src/Schedule.ts
CHANGED
|
@@ -1262,7 +1262,7 @@ export const upTo: {
|
|
|
1262
1262
|
} = internal.upTo
|
|
1263
1263
|
|
|
1264
1264
|
/**
|
|
1265
|
-
* Returns a new schedule that continues for as long the specified predicate
|
|
1265
|
+
* Returns a new schedule that continues for as long as the specified predicate
|
|
1266
1266
|
* on the input evaluates to true.
|
|
1267
1267
|
*
|
|
1268
1268
|
* @since 2.0.0
|
|
@@ -1274,7 +1274,7 @@ export const whileInput: {
|
|
|
1274
1274
|
} = internal.whileInput
|
|
1275
1275
|
|
|
1276
1276
|
/**
|
|
1277
|
-
* Returns a new schedule that continues for as long the specified effectful
|
|
1277
|
+
* Returns a new schedule that continues for as long as the specified effectful
|
|
1278
1278
|
* predicate on the input evaluates to true.
|
|
1279
1279
|
*
|
|
1280
1280
|
* @since 2.0.0
|
package/src/Stream.ts
CHANGED
|
@@ -112,13 +112,37 @@ export declare namespace Stream {
|
|
|
112
112
|
* @category models
|
|
113
113
|
*/
|
|
114
114
|
export interface Variance<out A, out E, out R> {
|
|
115
|
-
readonly [StreamTypeId]:
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
readonly [StreamTypeId]: VarianceStruct<A, E, R>
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @since 3.4.0
|
|
120
|
+
* @category models
|
|
121
|
+
*/
|
|
122
|
+
export interface VarianceStruct<out A, out E, out R> {
|
|
123
|
+
readonly _A: Covariant<A>
|
|
124
|
+
readonly _E: Covariant<E>
|
|
125
|
+
readonly _R: Covariant<R>
|
|
120
126
|
}
|
|
121
127
|
|
|
128
|
+
/**
|
|
129
|
+
* @since 3.4.0
|
|
130
|
+
* @category type-level
|
|
131
|
+
*/
|
|
132
|
+
export type Success<T extends Stream<any, any, any>> = [T] extends [Stream<infer _A, infer _E, infer _R>] ? _A : never
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @since 3.4.0
|
|
136
|
+
* @category type-level
|
|
137
|
+
*/
|
|
138
|
+
export type Error<T extends Stream<any, any, any>> = [T] extends [Stream<infer _A, infer _E, infer _R>] ? _E : never
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @since 3.4.0
|
|
142
|
+
* @category type-level
|
|
143
|
+
*/
|
|
144
|
+
export type Context<T extends Stream<any, any, any>> = [T] extends [Stream<infer _A, infer _E, infer _R>] ? _R : never
|
|
145
|
+
|
|
122
146
|
/**
|
|
123
147
|
* @since 2.0.0
|
|
124
148
|
* @category models
|
|
@@ -4735,12 +4759,40 @@ export const decodeText: {
|
|
|
4735
4759
|
*/
|
|
4736
4760
|
export const encodeText: <E, R>(self: Stream<string, E, R>) => Stream<Uint8Array, E, R> = internal.encodeText
|
|
4737
4761
|
|
|
4762
|
+
/**
|
|
4763
|
+
* @since 3.4.0
|
|
4764
|
+
* @category models
|
|
4765
|
+
*/
|
|
4766
|
+
export interface EventListener<A> {
|
|
4767
|
+
addEventListener(
|
|
4768
|
+
event: string,
|
|
4769
|
+
f: (event: A) => void,
|
|
4770
|
+
options?: {
|
|
4771
|
+
readonly capture?: boolean
|
|
4772
|
+
readonly passive?: boolean
|
|
4773
|
+
readonly once?: boolean
|
|
4774
|
+
readonly signal?: AbortSignal
|
|
4775
|
+
} | boolean
|
|
4776
|
+
): void
|
|
4777
|
+
removeEventListener(
|
|
4778
|
+
event: string,
|
|
4779
|
+
f: (event: A) => void,
|
|
4780
|
+
options?: {
|
|
4781
|
+
readonly capture?: boolean
|
|
4782
|
+
} | boolean
|
|
4783
|
+
): void
|
|
4784
|
+
}
|
|
4785
|
+
|
|
4738
4786
|
/**
|
|
4739
4787
|
* Creates a `Stream` using addEventListener.
|
|
4740
4788
|
* @since 3.1.0
|
|
4741
4789
|
*/
|
|
4742
|
-
export const fromEventListener: <A =
|
|
4743
|
-
target:
|
|
4790
|
+
export const fromEventListener: <A = unknown>(
|
|
4791
|
+
target: EventListener<A>,
|
|
4744
4792
|
type: string,
|
|
4745
|
-
options?: boolean |
|
|
4793
|
+
options?: boolean | {
|
|
4794
|
+
readonly capture?: boolean
|
|
4795
|
+
readonly passive?: boolean
|
|
4796
|
+
readonly once?: boolean
|
|
4797
|
+
} | undefined
|
|
4746
4798
|
) => Stream<A> = internal.fromEventListener
|
package/src/Tuple.ts
CHANGED
|
@@ -194,14 +194,24 @@ export const appendElement: {
|
|
|
194
194
|
<A extends ReadonlyArray<unknown>, B>(self: A, that: B): [...A, B]
|
|
195
195
|
} = dual(2, <A extends ReadonlyArray<unknown>, B>(self: A, that: B): [...A, B] => [...self, that])
|
|
196
196
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
197
|
+
/**
|
|
198
|
+
* Retrieves the element at a specified index from a tuple.
|
|
199
|
+
*
|
|
200
|
+
* @param self - A tuple from which to retrieve the element.
|
|
201
|
+
* @param index - The index of the element to retrieve.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* import { Tuple } from "effect"
|
|
205
|
+
*
|
|
206
|
+
* assert.deepStrictEqual(Tuple.at([1, 'hello', true], 1), 'hello')
|
|
207
|
+
*
|
|
208
|
+
* @category getters
|
|
209
|
+
* @since 3.4.0
|
|
210
|
+
*/
|
|
211
|
+
export const at: {
|
|
212
|
+
<N extends number>(index: N): <A extends ReadonlyArray<unknown>>(self: A) => A[N]
|
|
213
|
+
<A extends ReadonlyArray<unknown>, N extends number>(self: A, index: N): A[N]
|
|
214
|
+
} = dual(2, <A extends ReadonlyArray<unknown>, N extends number>(self: A, index: N): A[N] => self[index])
|
|
205
215
|
|
|
206
216
|
export {
|
|
207
217
|
/**
|
package/src/index.ts
CHANGED
|
@@ -479,6 +479,14 @@ export * as MetricRegistry from "./MetricRegistry.js"
|
|
|
479
479
|
*/
|
|
480
480
|
export * as MetricState from "./MetricState.js"
|
|
481
481
|
|
|
482
|
+
/**
|
|
483
|
+
* A lightweight alternative to the `Effect` data type, with a subset of the functionality.
|
|
484
|
+
*
|
|
485
|
+
* @since 3.4.0
|
|
486
|
+
* @experimental
|
|
487
|
+
*/
|
|
488
|
+
export * as Micro from "./Micro.js"
|
|
489
|
+
|
|
482
490
|
/**
|
|
483
491
|
* @since 2.0.0
|
|
484
492
|
*
|
|
@@ -582,6 +582,39 @@ export const filterOrElse: {
|
|
|
582
582
|
(a) => predicate(a) ? core.succeed<A | B>(a) : orElse(a)
|
|
583
583
|
))
|
|
584
584
|
|
|
585
|
+
/** @internal */
|
|
586
|
+
export const liftPredicate = dual<
|
|
587
|
+
{
|
|
588
|
+
<A, B extends A, E>(
|
|
589
|
+
refinement: Predicate.Refinement<NoInfer<A>, B>,
|
|
590
|
+
orFailWith: (a: NoInfer<A>) => E
|
|
591
|
+
): (a: A) => Effect.Effect<B, E>
|
|
592
|
+
<A, E>(
|
|
593
|
+
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
594
|
+
orFailWith: (a: NoInfer<A>) => E
|
|
595
|
+
): (a: A) => Effect.Effect<A, E>
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
<A, E, B extends A>(
|
|
599
|
+
self: A,
|
|
600
|
+
refinement: Predicate.Refinement<A, B>,
|
|
601
|
+
orFailWith: (a: A) => E
|
|
602
|
+
): Effect.Effect<B, E>
|
|
603
|
+
<A, E>(
|
|
604
|
+
self: A,
|
|
605
|
+
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
606
|
+
orFailWith: (a: NoInfer<A>) => E
|
|
607
|
+
): Effect.Effect<A, E>
|
|
608
|
+
}
|
|
609
|
+
>(
|
|
610
|
+
3,
|
|
611
|
+
<A, E>(
|
|
612
|
+
self: A,
|
|
613
|
+
predicate: Predicate.Predicate<NoInfer<A>>,
|
|
614
|
+
orFailWith: (a: NoInfer<A>) => E
|
|
615
|
+
): Effect.Effect<A, E> => core.suspend(() => predicate(self) ? core.succeed(self) : core.fail(orFailWith(self)))
|
|
616
|
+
)
|
|
617
|
+
|
|
585
618
|
/* @internal */
|
|
586
619
|
export const filterOrFail: {
|
|
587
620
|
<A, B extends A, E2>(
|
package/src/internal/core.ts
CHANGED
|
@@ -149,7 +149,6 @@ export class RevertFlags {
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
/** @internal */
|
|
153
152
|
class EffectPrimitive {
|
|
154
153
|
public effect_instruction_i0 = undefined
|
|
155
154
|
public effect_instruction_i1 = undefined
|
|
@@ -504,6 +503,24 @@ export const custom: {
|
|
|
504
503
|
return wrapper
|
|
505
504
|
}
|
|
506
505
|
|
|
506
|
+
/* @internal */
|
|
507
|
+
export const unsafeAsync = <A, E = never, R = never>(
|
|
508
|
+
register: (
|
|
509
|
+
callback: (_: Effect.Effect<A, E, R>) => void
|
|
510
|
+
) => void | Effect.Effect<void, never, R>,
|
|
511
|
+
blockingOn: FiberId.FiberId = FiberId.none
|
|
512
|
+
): Effect.Effect<A, E, R> => {
|
|
513
|
+
const effect = new EffectPrimitive(OpCodes.OP_ASYNC) as any
|
|
514
|
+
let cancelerRef: Effect.Effect<void, never, R> | void = undefined
|
|
515
|
+
effect.effect_instruction_i0 = (resume: (_: Effect.Effect<A, E, R>) => void) => {
|
|
516
|
+
cancelerRef = register(resume)
|
|
517
|
+
}
|
|
518
|
+
effect.effect_instruction_i1 = blockingOn
|
|
519
|
+
return cancelerRef !== undefined ?
|
|
520
|
+
onInterrupt(effect, (_) => cancelerRef!) :
|
|
521
|
+
effect
|
|
522
|
+
}
|
|
523
|
+
|
|
507
524
|
/* @internal */
|
|
508
525
|
export const async = <A, E = never, R = never>(
|
|
509
526
|
register: (
|
|
@@ -28,6 +28,7 @@ import * as Inspectable from "../Inspectable.js"
|
|
|
28
28
|
import type { Logger } from "../Logger.js"
|
|
29
29
|
import * as LogLevel from "../LogLevel.js"
|
|
30
30
|
import type * as MetricLabel from "../MetricLabel.js"
|
|
31
|
+
import * as Micro from "../Micro.js"
|
|
31
32
|
import * as MRef from "../MutableRef.js"
|
|
32
33
|
import * as Option from "../Option.js"
|
|
33
34
|
import { pipeArguments } from "../Pipeable.js"
|
|
@@ -1073,6 +1074,37 @@ export class FiberRuntime<in out A, in out E = never> implements Fiber.RuntimeFi
|
|
|
1073
1074
|
return core.exitSucceed(op.value)
|
|
1074
1075
|
}
|
|
1075
1076
|
|
|
1077
|
+
["Micro"](op: Micro.Micro<any, any, never> & { _op: "Micro" }) {
|
|
1078
|
+
return core.unsafeAsync<any, any>((microResume) => {
|
|
1079
|
+
const env = Micro.envUnsafeMakeEmpty().pipe(
|
|
1080
|
+
Micro.envSet(Micro.currentContext, this.getFiberRef(core.currentContext))
|
|
1081
|
+
)
|
|
1082
|
+
let resume = microResume
|
|
1083
|
+
op[Micro.runSymbol](env, (result) => {
|
|
1084
|
+
if (result._tag === "Right") {
|
|
1085
|
+
return resume(core.exitSucceed(result.right))
|
|
1086
|
+
}
|
|
1087
|
+
switch (result.left._tag) {
|
|
1088
|
+
case "Aborted": {
|
|
1089
|
+
return resume(core.exitFailCause(internalCause.interrupt(FiberId.none)))
|
|
1090
|
+
}
|
|
1091
|
+
case "Expected": {
|
|
1092
|
+
return resume(core.fail(result.left.error))
|
|
1093
|
+
}
|
|
1094
|
+
case "Unexpected": {
|
|
1095
|
+
return resume(core.die(result.left.defect))
|
|
1096
|
+
}
|
|
1097
|
+
}
|
|
1098
|
+
})
|
|
1099
|
+
return core.async<void>((abortResume) => {
|
|
1100
|
+
resume = (_: any) => {
|
|
1101
|
+
abortResume(core.void)
|
|
1102
|
+
}
|
|
1103
|
+
Micro.envGet(env, Micro.currentAbortController).abort()
|
|
1104
|
+
})
|
|
1105
|
+
})
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1076
1108
|
[OpCodes.OP_SYNC](op: core.Primitive & { _op: OpCodes.OP_SYNC }) {
|
|
1077
1109
|
const value = internalCall(() => op.effect_instruction_i0())
|
|
1078
1110
|
const cont = this.getNextSuccessCont()
|
package/src/internal/stream.ts
CHANGED
|
@@ -8103,10 +8103,14 @@ export const encodeText = <E, R>(self: Stream.Stream<string, E, R>): Stream.Stre
|
|
|
8103
8103
|
})
|
|
8104
8104
|
|
|
8105
8105
|
/** @internal */
|
|
8106
|
-
export const fromEventListener = <A =
|
|
8107
|
-
target:
|
|
8106
|
+
export const fromEventListener = <A = unknown>(
|
|
8107
|
+
target: Stream.EventListener<A>,
|
|
8108
8108
|
type: string,
|
|
8109
|
-
options?: boolean |
|
|
8109
|
+
options?: boolean | {
|
|
8110
|
+
readonly capture?: boolean
|
|
8111
|
+
readonly passive?: boolean
|
|
8112
|
+
readonly once?: boolean
|
|
8113
|
+
} | undefined
|
|
8110
8114
|
): Stream.Stream<A> =>
|
|
8111
8115
|
_async<A>((emit) => {
|
|
8112
8116
|
let batch: Array<A> = []
|
|
@@ -8124,5 +8128,5 @@ export const fromEventListener = <A = Event>(
|
|
|
8124
8128
|
}
|
|
8125
8129
|
}
|
|
8126
8130
|
target.addEventListener(type, cb as any, options)
|
|
8127
|
-
return Effect.sync(() => target.removeEventListener(type, cb
|
|
8131
|
+
return Effect.sync(() => target.removeEventListener(type, cb, options))
|
|
8128
8132
|
})
|
package/src/internal/version.ts
CHANGED