effect 3.15.4 → 3.16.0
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/ExecutionPlan/package.json +6 -0
- package/dist/cjs/Array.js +67 -5
- package/dist/cjs/Array.js.map +1 -1
- package/dist/cjs/BigDecimal.js +150 -1
- package/dist/cjs/BigDecimal.js.map +1 -1
- package/dist/cjs/Chunk.js +16 -3
- package/dist/cjs/Chunk.js.map +1 -1
- package/dist/cjs/Config.js +16 -2
- package/dist/cjs/Config.js.map +1 -1
- package/dist/cjs/Effect.js +31 -3
- package/dist/cjs/Effect.js.map +1 -1
- package/dist/cjs/ExecutionPlan.js +108 -0
- package/dist/cjs/ExecutionPlan.js.map +1 -0
- package/dist/cjs/HashMap.js +18 -1
- package/dist/cjs/HashMap.js.map +1 -1
- package/dist/cjs/Iterable.js +27 -1
- package/dist/cjs/Iterable.js.map +1 -1
- package/dist/cjs/LayerMap.js +86 -64
- package/dist/cjs/LayerMap.js.map +1 -1
- package/dist/cjs/Schedule.js +7 -1
- package/dist/cjs/Schedule.js.map +1 -1
- package/dist/cjs/Stream.js +15 -2
- package/dist/cjs/Stream.js.map +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internal/config.js +18 -1
- package/dist/cjs/internal/config.js.map +1 -1
- package/dist/cjs/internal/effect/circular.js +1 -4
- package/dist/cjs/internal/effect/circular.js.map +1 -1
- package/dist/cjs/internal/executionPlan.js +68 -0
- package/dist/cjs/internal/executionPlan.js.map +1 -0
- package/dist/cjs/internal/hashMap.js +3 -1
- package/dist/cjs/internal/hashMap.js.map +1 -1
- package/dist/cjs/internal/metric/polling.js +3 -4
- package/dist/cjs/internal/metric/polling.js.map +1 -1
- package/dist/cjs/internal/schedule.js +66 -25
- package/dist/cjs/internal/schedule.js.map +1 -1
- package/dist/cjs/internal/stream.js +60 -10
- package/dist/cjs/internal/stream.js.map +1 -1
- package/dist/cjs/internal/version.js +1 -1
- package/dist/dts/Array.d.ts +110 -0
- package/dist/dts/Array.d.ts.map +1 -1
- package/dist/dts/BigDecimal.d.ts +235 -0
- package/dist/dts/BigDecimal.d.ts.map +1 -1
- package/dist/dts/Chunk.d.ts +13 -0
- package/dist/dts/Chunk.d.ts.map +1 -1
- package/dist/dts/Config.d.ts +38 -1
- package/dist/dts/Config.d.ts.map +1 -1
- package/dist/dts/Effect.d.ts +99 -27
- package/dist/dts/Effect.d.ts.map +1 -1
- package/dist/dts/ExecutionPlan.d.ts +213 -0
- package/dist/dts/ExecutionPlan.d.ts.map +1 -0
- package/dist/dts/HashMap.d.ts +52 -0
- package/dist/dts/HashMap.d.ts.map +1 -1
- package/dist/dts/Iterable.d.ts +49 -0
- package/dist/dts/Iterable.d.ts.map +1 -1
- package/dist/dts/LayerMap.d.ts +79 -72
- package/dist/dts/LayerMap.d.ts.map +1 -1
- package/dist/dts/Schedule.d.ts +26 -0
- package/dist/dts/Schedule.d.ts.map +1 -1
- package/dist/dts/Stream.d.ts +57 -2
- package/dist/dts/Stream.d.ts.map +1 -1
- package/dist/dts/index.d.ts +5 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/executionPlan.d.ts +2 -0
- package/dist/dts/internal/executionPlan.d.ts.map +1 -0
- package/dist/dts/internal/hashMap.d.ts.map +1 -1
- package/dist/dts/internal/stream.d.ts.map +1 -1
- package/dist/esm/Array.js +65 -3
- package/dist/esm/Array.js.map +1 -1
- package/dist/esm/BigDecimal.js +148 -0
- package/dist/esm/BigDecimal.js.map +1 -1
- package/dist/esm/Chunk.js +15 -2
- package/dist/esm/Chunk.js.map +1 -1
- package/dist/esm/Config.js +15 -1
- package/dist/esm/Config.js.map +1 -1
- package/dist/esm/Effect.js +29 -1
- package/dist/esm/Effect.js.map +1 -1
- package/dist/esm/ExecutionPlan.js +99 -0
- package/dist/esm/ExecutionPlan.js.map +1 -0
- package/dist/esm/HashMap.js +17 -0
- package/dist/esm/HashMap.js.map +1 -1
- package/dist/esm/Iterable.js +26 -0
- package/dist/esm/Iterable.js.map +1 -1
- package/dist/esm/LayerMap.js +86 -64
- package/dist/esm/LayerMap.js.map +1 -1
- package/dist/esm/Schedule.js +5 -0
- package/dist/esm/Schedule.js.map +1 -1
- package/dist/esm/Stream.js +13 -0
- package/dist/esm/Stream.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/config.js +16 -0
- package/dist/esm/internal/config.js.map +1 -1
- package/dist/esm/internal/effect/circular.js +0 -3
- package/dist/esm/internal/effect/circular.js.map +1 -1
- package/dist/esm/internal/executionPlan.js +59 -0
- package/dist/esm/internal/executionPlan.js.map +1 -0
- package/dist/esm/internal/hashMap.js +2 -0
- package/dist/esm/internal/hashMap.js.map +1 -1
- package/dist/esm/internal/metric/polling.js +3 -4
- package/dist/esm/internal/metric/polling.js.map +1 -1
- package/dist/esm/internal/schedule.js +61 -23
- package/dist/esm/internal/schedule.js.map +1 -1
- package/dist/esm/internal/stream.js +57 -7
- 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 +147 -4
- package/src/BigDecimal.ts +355 -0
- package/src/Chunk.ts +28 -3
- package/src/Config.ts +40 -1
- package/src/Effect.ts +145 -36
- package/src/ExecutionPlan.ts +302 -0
- package/src/HashMap.ts +56 -0
- package/src/Iterable.ts +66 -0
- package/src/LayerMap.ts +126 -114
- package/src/Schedule.ts +32 -0
- package/src/Stream.ts +51 -2
- package/src/index.ts +6 -0
- package/src/internal/config.ts +55 -0
- package/src/internal/effect/circular.ts +0 -15
- package/src/internal/executionPlan.ts +114 -0
- package/src/internal/hashMap.ts +6 -0
- package/src/internal/metric/polling.ts +3 -4
- package/src/internal/schedule.ts +169 -50
- package/src/internal/stream.ts +140 -15
- package/src/internal/version.ts +1 -1
|
@@ -11,6 +11,7 @@ import * as Exit from "../Exit.js";
|
|
|
11
11
|
import * as Fiber from "../Fiber.js";
|
|
12
12
|
import * as FiberRef from "../FiberRef.js";
|
|
13
13
|
import { constTrue, dual, identity, pipe } from "../Function.js";
|
|
14
|
+
import * as internalExecutionPlan from "../internal/executionPlan.js";
|
|
14
15
|
import * as Layer from "../Layer.js";
|
|
15
16
|
import * as MergeDecision from "../MergeDecision.js";
|
|
16
17
|
import * as Option from "../Option.js";
|
|
@@ -32,6 +33,7 @@ import * as MergeStrategy from "./channel/mergeStrategy.js";
|
|
|
32
33
|
import * as core from "./core-stream.js";
|
|
33
34
|
import * as doNotation from "./doNotation.js";
|
|
34
35
|
import { RingBuffer } from "./ringBuffer.js";
|
|
36
|
+
import * as InternalSchedule from "./schedule.js";
|
|
35
37
|
import * as sink_ from "./sink.js";
|
|
36
38
|
import * as DebounceState from "./stream/debounceState.js";
|
|
37
39
|
import * as emit from "./stream/emit.js";
|
|
@@ -1487,6 +1489,8 @@ export const prepend = /*#__PURE__*/dual(2, (self, values) => new StreamImpl(cha
|
|
|
1487
1489
|
/** @internal */
|
|
1488
1490
|
export const provideContext = /*#__PURE__*/dual(2, (self, context) => new StreamImpl(pipe(toChannel(self), core.provideContext(context))));
|
|
1489
1491
|
/** @internal */
|
|
1492
|
+
export const provideSomeContext = /*#__PURE__*/dual(2, (self, context) => mapInputContext(self, Context.merge(context)));
|
|
1493
|
+
/** @internal */
|
|
1490
1494
|
export const provideLayer = /*#__PURE__*/dual(2, (self, layer) => new StreamImpl(channel.unwrapScopedWith(scope => Layer.buildWithScope(layer, scope).pipe(Effect.map(env => pipe(toChannel(self), core.provideContext(env)))))));
|
|
1491
1495
|
/** @internal */
|
|
1492
1496
|
export const provideService = /*#__PURE__*/dual(3, (self, tag, resource) => provideServiceEffect(self, tag, Effect.succeed(resource)));
|
|
@@ -1650,8 +1654,9 @@ export const repeatValue = value => new StreamImpl(channel.repeated(core.write(C
|
|
|
1650
1654
|
/** @internal */
|
|
1651
1655
|
export const repeatWith = /*#__PURE__*/dual(3, (self, schedule, options) => {
|
|
1652
1656
|
return pipe(Schedule.driver(schedule), Effect.map(driver => {
|
|
1657
|
+
const provideLastIterationInfo = provideServiceEffect(Schedule.CurrentIterationMetadata, Ref.get(driver.iterationMeta));
|
|
1653
1658
|
const scheduleOutput = pipe(driver.last, Effect.orDie, Effect.map(options.onSchedule));
|
|
1654
|
-
const process = pipe(self, map(options.onElement), toChannel);
|
|
1659
|
+
const process = pipe(self, provideLastIterationInfo, map(options.onElement), toChannel);
|
|
1655
1660
|
const loop = channel.unwrap(Effect.match(driver.next(void 0), {
|
|
1656
1661
|
onFailure: () => core.void,
|
|
1657
1662
|
onSuccess: () => pipe(process, channel.zipRight(pipe(scheduleOutput, Effect.map(c => pipe(core.write(Chunk.of(c)), core.flatMap(() => loop))), channel.unwrap)))
|
|
@@ -1661,19 +1666,64 @@ export const repeatWith = /*#__PURE__*/dual(3, (self, schedule, options) => {
|
|
|
1661
1666
|
});
|
|
1662
1667
|
const repeatWithSchedule = (value, schedule) => repeatEffectWithSchedule(Effect.succeed(value), schedule);
|
|
1663
1668
|
/** @internal */
|
|
1664
|
-
export const repeatEffectWithSchedule = (effect, schedule) => flatMap(fromEffect(Effect.zip(effect, Schedule.driver(schedule))), ([a, driver]) =>
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1669
|
+
export const repeatEffectWithSchedule = (effect, schedule) => flatMap(fromEffect(Effect.zip(effect, Schedule.driver(schedule))), ([a, driver]) => {
|
|
1670
|
+
const provideLastIterationInfo = Effect.provideServiceEffect(Schedule.CurrentIterationMetadata, Ref.get(driver.iterationMeta));
|
|
1671
|
+
return concat(succeed(a), unfoldEffect(a, s => Effect.matchEffect(driver.next(s), {
|
|
1672
|
+
onFailure: Effect.succeed,
|
|
1673
|
+
onSuccess: () => Effect.map(provideLastIterationInfo(effect), nextA => Option.some([nextA, nextA]))
|
|
1674
|
+
})));
|
|
1675
|
+
});
|
|
1668
1676
|
/** @internal */
|
|
1669
|
-
export const retry = /*#__PURE__*/dual(2, (self,
|
|
1670
|
-
const
|
|
1677
|
+
export const retry = /*#__PURE__*/dual(2, (self, policy) => Schedule.driver(policy).pipe(Effect.map(driver => {
|
|
1678
|
+
const provideLastIterationInfo = provideServiceEffect(Schedule.CurrentIterationMetadata, Ref.get(driver.iterationMeta));
|
|
1679
|
+
const loop = toChannel(provideLastIterationInfo(self)).pipe(channel.mapOutEffect(out => Effect.as(driver.reset, out)), channel.catchAll(error => driver.next(error).pipe(Effect.match({
|
|
1671
1680
|
onFailure: () => core.fail(error),
|
|
1672
1681
|
onSuccess: () => loop
|
|
1673
1682
|
}), channel.unwrap)));
|
|
1674
1683
|
return loop;
|
|
1675
1684
|
}), channel.unwrap, fromChannel));
|
|
1676
1685
|
/** @internal */
|
|
1686
|
+
export const withExecutionPlan = /*#__PURE__*/dual(args => isStream(args[0]), (self, policy, options) => suspend(() => {
|
|
1687
|
+
const preventFallbackOnPartialStream = options?.preventFallbackOnPartialStream ?? false;
|
|
1688
|
+
let i = 0;
|
|
1689
|
+
let lastError = Option.none();
|
|
1690
|
+
const loop = suspend(() => {
|
|
1691
|
+
const step = policy.steps[i++];
|
|
1692
|
+
if (!step) {
|
|
1693
|
+
return fail(Option.getOrThrow(lastError));
|
|
1694
|
+
}
|
|
1695
|
+
let nextStream = Context.isContext(step.provide) ? provideSomeContext(self, step.provide) : provideSomeLayer(self, step.provide);
|
|
1696
|
+
let receivedElements = false;
|
|
1697
|
+
if (Option.isSome(lastError)) {
|
|
1698
|
+
const error = lastError.value;
|
|
1699
|
+
let attempted = false;
|
|
1700
|
+
const wrapped = nextStream;
|
|
1701
|
+
// ensure the schedule is applied at least once
|
|
1702
|
+
nextStream = suspend(() => {
|
|
1703
|
+
if (attempted) return wrapped;
|
|
1704
|
+
attempted = true;
|
|
1705
|
+
return fail(error);
|
|
1706
|
+
});
|
|
1707
|
+
nextStream = scheduleDefectRefail(retry(nextStream, internalExecutionPlan.scheduleFromStep(step, false)));
|
|
1708
|
+
} else {
|
|
1709
|
+
const schedule = internalExecutionPlan.scheduleFromStep(step, true);
|
|
1710
|
+
nextStream = schedule ? scheduleDefectRefail(retry(nextStream, schedule)) : nextStream;
|
|
1711
|
+
}
|
|
1712
|
+
return catchAll(preventFallbackOnPartialStream ? mapChunks(nextStream, chunk => {
|
|
1713
|
+
receivedElements = true;
|
|
1714
|
+
return chunk;
|
|
1715
|
+
}) : nextStream, error => {
|
|
1716
|
+
if (preventFallbackOnPartialStream && receivedElements) {
|
|
1717
|
+
return fail(error);
|
|
1718
|
+
}
|
|
1719
|
+
lastError = Option.some(error);
|
|
1720
|
+
return loop;
|
|
1721
|
+
});
|
|
1722
|
+
});
|
|
1723
|
+
return loop;
|
|
1724
|
+
}));
|
|
1725
|
+
const scheduleDefectRefail = self => catchAllCause(self, cause => failCause(InternalSchedule.scheduleDefectRefailCause(cause)));
|
|
1726
|
+
/** @internal */
|
|
1677
1727
|
export const run = /*#__PURE__*/dual(2, (self, sink) => toChannel(self).pipe(channel.pipeToOrFail(sink_.toChannel(sink)), channel.runDrain));
|
|
1678
1728
|
/** @internal */
|
|
1679
1729
|
export const runCollect = self => run(self, sink_.collectAll());
|