effect 4.0.0-rc.118 → 4.0.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/README.md +17 -4
- package/dist/Array.d.ts +25 -25
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +16 -16
- package/dist/Array.js.map +1 -1
- package/dist/Chunk.d.ts +26 -26
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Chunk.js +15 -15
- package/dist/Chunk.js.map +1 -1
- package/dist/Effect.d.ts +17 -17
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +5 -5
- package/dist/MutableHashMap.d.ts.map +1 -1
- package/dist/MutableHashMap.js +4 -22
- package/dist/MutableHashMap.js.map +1 -1
- package/dist/Option.d.ts +17 -17
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js +6 -6
- package/dist/Option.js.map +1 -1
- package/dist/Queue.d.ts +19 -2
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +9 -4
- package/dist/Queue.js.map +1 -1
- package/dist/Record.d.ts +14 -14
- package/dist/Record.d.ts.map +1 -1
- package/dist/Record.js +10 -10
- package/dist/Record.js.map +1 -1
- package/dist/Schema.d.ts +37 -21
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +29 -10
- package/dist/Schema.js.map +1 -1
- package/dist/SchemaAST.d.ts.map +1 -1
- package/dist/SchemaAST.js +116 -97
- package/dist/SchemaAST.js.map +1 -1
- package/dist/SchemaRepresentation.d.ts +3 -1
- package/dist/SchemaRepresentation.d.ts.map +1 -1
- package/dist/SchemaRepresentation.js +3 -1
- package/dist/SchemaRepresentation.js.map +1 -1
- package/dist/ai/McpSchema.d.ts +110 -110
- package/dist/ai/McpSchema.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
- package/dist/cluster/ClusterWorkflowEngine.js +5 -1
- package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
- package/dist/cluster/MessageStorage.d.ts +32 -8
- package/dist/cluster/MessageStorage.d.ts.map +1 -1
- package/dist/cluster/MessageStorage.js +2 -1
- package/dist/cluster/MessageStorage.js.map +1 -1
- package/dist/cluster/Sharding.d.ts +5 -2
- package/dist/cluster/Sharding.d.ts.map +1 -1
- package/dist/cluster/Sharding.js +1 -1
- package/dist/cluster/Sharding.js.map +1 -1
- package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
- package/dist/cluster/SqlMessageStorage.js +15 -4
- package/dist/cluster/SqlMessageStorage.js.map +1 -1
- package/dist/http/HttpEffect.d.ts +1 -0
- package/dist/http/HttpEffect.d.ts.map +1 -1
- package/dist/http/HttpEffect.js +29 -22
- package/dist/http/HttpEffect.js.map +1 -1
- package/dist/internal/effect.js +75 -84
- package/dist/internal/effect.js.map +1 -1
- package/dist/internal/schema/annotations.js +1 -7
- package/dist/internal/schema/annotations.js.map +1 -1
- package/dist/internal/schema/codegen.js +56 -28
- package/dist/internal/schema/codegen.js.map +1 -1
- package/dist/internal/schema/toCodeDocument.js +10 -30
- package/dist/internal/schema/toCodeDocument.js.map +1 -1
- package/dist/internal/schema/toCodec.js +1 -15
- package/dist/internal/schema/toCodec.js.map +1 -1
- package/dist/internal/schema/toEquivalence.js +4 -3
- package/dist/internal/schema/toEquivalence.js.map +1 -1
- package/dist/internal/schema/toFormatter.js +4 -4
- package/dist/internal/schema/toFormatter.js.map +1 -1
- package/dist/reactivity/Atom.d.ts.map +1 -1
- package/dist/reactivity/Atom.js +6 -2
- package/dist/reactivity/Atom.js.map +1 -1
- package/dist/reactivity/AtomRpc.d.ts +3 -3
- package/dist/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/rpc/Rpc.d.ts +2 -2
- package/dist/rpc/Rpc.d.ts.map +1 -1
- package/dist/rpc/RpcClient.d.ts +7 -7
- package/dist/rpc/RpcClient.d.ts.map +1 -1
- package/dist/rpc/RpcClient.js +1 -2
- package/dist/rpc/RpcClient.js.map +1 -1
- package/dist/rpc/RpcMessage.d.ts +1 -1
- package/dist/rpc/RpcMessage.d.ts.map +1 -1
- package/dist/schema/SchemaCompiler/runtime.js +6 -1
- package/dist/schema/SchemaCompiler/runtime.js.map +1 -1
- package/dist/testing/TestSchema.d.ts +234 -6
- package/dist/testing/TestSchema.d.ts.map +1 -1
- package/dist/testing/TestSchema.js +244 -25
- package/dist/testing/TestSchema.js.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/workflow/DurableDeferred.js +1 -1
- package/dist/workflow/DurableDeferred.js.map +1 -1
- package/dist/workflow/Workflow.js +1 -1
- package/dist/workflow/Workflow.js.map +1 -1
- package/package.json +1 -1
- package/src/Array.ts +31 -31
- package/src/Chunk.ts +29 -29
- package/src/Effect.ts +17 -17
- package/src/MutableHashMap.ts +4 -24
- package/src/Option.ts +19 -19
- package/src/Queue.ts +26 -6
- package/src/Record.ts +20 -20
- package/src/Schema.ts +48 -24
- package/src/SchemaAST.ts +135 -115
- package/src/SchemaRepresentation.ts +3 -1
- package/src/cluster/ClusterWorkflowEngine.ts +8 -1
- package/src/cluster/MessageStorage.ts +22 -5
- package/src/cluster/Sharding.ts +8 -4
- package/src/cluster/SqlMessageStorage.ts +19 -8
- package/src/http/HttpEffect.ts +15 -9
- package/src/internal/effect.ts +37 -62
- package/src/internal/schema/annotations.ts +0 -9
- package/src/internal/schema/codegen.ts +90 -43
- package/src/internal/schema/toCodeDocument.ts +10 -47
- package/src/internal/schema/toCodec.ts +3 -16
- package/src/internal/schema/toEquivalence.ts +4 -5
- package/src/internal/schema/toFormatter.ts +4 -6
- package/src/reactivity/Atom.ts +6 -2
- package/src/reactivity/AtomRpc.ts +5 -5
- package/src/rpc/Rpc.ts +2 -2
- package/src/rpc/RpcClient.ts +9 -10
- package/src/rpc/RpcMessage.ts +1 -1
- package/src/schema/SchemaCompiler/runtime.ts +17 -1
- package/src/testing/TestSchema.ts +315 -63
- package/src/testing/index.ts +1 -0
- package/src/workflow/DurableDeferred.ts +1 -1
- package/src/workflow/Workflow.ts +1 -1
package/dist/internal/effect.js
CHANGED
|
@@ -852,7 +852,7 @@ const asyncFinalizer = /*#__PURE__*/makePrimitive({
|
|
|
852
852
|
}
|
|
853
853
|
},
|
|
854
854
|
[contE](cause, _fiber) {
|
|
855
|
-
return hasInterrupts(cause) ? flatMap(this[args](), () => failCause(cause)) : failCause(cause);
|
|
855
|
+
return hasInterrupts(cause) ? flatMap(combineFinalizerCause(exitFailCause(cause), this[args]()), () => failCause(cause)) : failCause(cause);
|
|
856
856
|
}
|
|
857
857
|
});
|
|
858
858
|
/** @internal */
|
|
@@ -1079,73 +1079,75 @@ export const asVoid = self => new ContImpl(self, returnPayload, exitVoid);
|
|
|
1079
1079
|
/** @internal */
|
|
1080
1080
|
export const sandbox = self => catchCause(self, fail);
|
|
1081
1081
|
/** @internal */
|
|
1082
|
-
export const raceAll = (all, options) => withFiber(parent =>
|
|
1083
|
-
const effects = Arr.fromIterable(all);
|
|
1084
|
-
const len = effects.length;
|
|
1085
|
-
let doneCount = 0;
|
|
1086
|
-
let done = false;
|
|
1082
|
+
export const raceAll = (all, options) => withFiber(parent => {
|
|
1087
1083
|
const fibers = new Set();
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1084
|
+
// Read fibers on exit to include losers forked after the race settles.
|
|
1085
|
+
onExitUnsafe(parent, () => fibers.size === 0 ? undefined : fiberInterruptAll(fibers));
|
|
1086
|
+
return callback(resume => {
|
|
1087
|
+
const effects = Arr.fromIterable(all);
|
|
1088
|
+
const len = effects.length;
|
|
1089
|
+
let doneCount = 0;
|
|
1090
|
+
let done = false;
|
|
1091
|
+
const failures = [];
|
|
1092
|
+
const onExit = (exit, fiber, i) => {
|
|
1093
|
+
doneCount++;
|
|
1094
|
+
if (exit._tag === "Failure") {
|
|
1095
|
+
failures.push(...exit.cause.reasons);
|
|
1096
|
+
if (doneCount >= len) {
|
|
1097
|
+
resume(failCause(causeFromReasons(failures)));
|
|
1098
|
+
}
|
|
1099
|
+
return;
|
|
1095
1100
|
}
|
|
1096
|
-
return;
|
|
1097
|
-
}
|
|
1098
|
-
const isWinner = !done;
|
|
1099
|
-
done = true;
|
|
1100
|
-
resume(fibers.size === 0 ? exit : flatMap(uninterruptible(fiberInterruptAll(fibers)), () => exit));
|
|
1101
|
-
if (isWinner && options?.onWinner) {
|
|
1102
|
-
options.onWinner({
|
|
1103
|
-
fiber,
|
|
1104
|
-
index: i,
|
|
1105
|
-
parentFiber: parent
|
|
1106
|
-
});
|
|
1107
|
-
}
|
|
1108
|
-
};
|
|
1109
|
-
for (let i = 0; i < len; i++) {
|
|
1110
|
-
const fiber = forkUnsafe(parent, effects[i], true, true, false);
|
|
1111
|
-
fibers.add(fiber);
|
|
1112
|
-
fiber.addObserver(exit => {
|
|
1113
|
-
fibers.delete(fiber);
|
|
1114
|
-
onExit(exit, fiber, i);
|
|
1115
|
-
});
|
|
1116
|
-
if (done) break;
|
|
1117
|
-
}
|
|
1118
|
-
return fiberInterruptAll(fibers);
|
|
1119
|
-
}));
|
|
1120
|
-
/** @internal */
|
|
1121
|
-
export const raceAllFirst = (all, options) => withFiber(parent => callback(resume => {
|
|
1122
|
-
let done = false;
|
|
1123
|
-
const fibers = new Set();
|
|
1124
|
-
const onExit = exit => {
|
|
1125
|
-
done = true;
|
|
1126
|
-
resume(fibers.size === 0 ? exit : flatMap(uninterruptible(fiberInterruptAll(fibers)), () => exit));
|
|
1127
|
-
};
|
|
1128
|
-
let i = 0;
|
|
1129
|
-
for (const effect of all) {
|
|
1130
|
-
if (done) break;
|
|
1131
|
-
const index = i++;
|
|
1132
|
-
const fiber = forkUnsafe(parent, effect, true, true, false);
|
|
1133
|
-
fibers.add(fiber);
|
|
1134
|
-
fiber.addObserver(exit => {
|
|
1135
|
-
fibers.delete(fiber);
|
|
1136
1101
|
const isWinner = !done;
|
|
1137
|
-
|
|
1102
|
+
done = true;
|
|
1103
|
+
resume(exit);
|
|
1138
1104
|
if (isWinner && options?.onWinner) {
|
|
1139
1105
|
options.onWinner({
|
|
1140
1106
|
fiber,
|
|
1141
|
-
index,
|
|
1107
|
+
index: i,
|
|
1142
1108
|
parentFiber: parent
|
|
1143
1109
|
});
|
|
1144
1110
|
}
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1111
|
+
};
|
|
1112
|
+
for (let i = 0; i < len; i++) {
|
|
1113
|
+
const fiber = forkUnsafe(parent, effects[i], true, true, false);
|
|
1114
|
+
fibers.add(fiber);
|
|
1115
|
+
fiber.addObserver(exit => {
|
|
1116
|
+
fibers.delete(fiber);
|
|
1117
|
+
onExit(exit, fiber, i);
|
|
1118
|
+
});
|
|
1119
|
+
if (done) break;
|
|
1120
|
+
}
|
|
1121
|
+
});
|
|
1122
|
+
});
|
|
1123
|
+
/** @internal */
|
|
1124
|
+
export const raceAllFirst = (all, options) => withFiber(parent => {
|
|
1125
|
+
const fibers = new Set();
|
|
1126
|
+
onExitUnsafe(parent, () => fibers.size === 0 ? undefined : fiberInterruptAll(fibers));
|
|
1127
|
+
return callback(resume => {
|
|
1128
|
+
let done = false;
|
|
1129
|
+
let i = 0;
|
|
1130
|
+
for (const effect of all) {
|
|
1131
|
+
if (done) break;
|
|
1132
|
+
const index = i++;
|
|
1133
|
+
const fiber = forkUnsafe(parent, effect, true, true, false);
|
|
1134
|
+
fibers.add(fiber);
|
|
1135
|
+
fiber.addObserver(exit => {
|
|
1136
|
+
fibers.delete(fiber);
|
|
1137
|
+
const isWinner = !done;
|
|
1138
|
+
done = true;
|
|
1139
|
+
resume(exit);
|
|
1140
|
+
if (isWinner && options?.onWinner) {
|
|
1141
|
+
options.onWinner({
|
|
1142
|
+
fiber,
|
|
1143
|
+
index,
|
|
1144
|
+
parentFiber: parent
|
|
1145
|
+
});
|
|
1146
|
+
}
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1149
|
+
});
|
|
1150
|
+
});
|
|
1149
1151
|
/** @internal */
|
|
1150
1152
|
export const race = /*#__PURE__*/dual(args => isEffect(args[1]), (self, that, options) => raceAll([self, that], options));
|
|
1151
1153
|
/** @internal */
|
|
@@ -2100,11 +2102,11 @@ export const reduce = /*#__PURE__*/dual(3, (elements, zero, f) => {
|
|
|
2100
2102
|
/** @internal */
|
|
2101
2103
|
export const validate = /*#__PURE__*/dual(args => isIterable(args[0]) && !isEffect(args[0]), (elements, f, options) => flatMap(partition(elements, f, {
|
|
2102
2104
|
concurrency: options?.concurrency
|
|
2103
|
-
}), ([
|
|
2104
|
-
if (Arr.isArrayNonEmpty(
|
|
2105
|
-
return fail(
|
|
2105
|
+
}), ([passes, fails]) => {
|
|
2106
|
+
if (Arr.isArrayNonEmpty(fails)) {
|
|
2107
|
+
return fail(fails);
|
|
2106
2108
|
}
|
|
2107
|
-
return options?.discard ? void_ : succeed(
|
|
2109
|
+
return options?.discard ? void_ : succeed(passes);
|
|
2108
2110
|
}));
|
|
2109
2111
|
/** @internal */
|
|
2110
2112
|
export const findFirst = /*#__PURE__*/dual(args => isIterable(args[0]) && !isEffect(args[0]), (elements, predicate) => suspend(() => {
|
|
@@ -2233,26 +2235,22 @@ const iterateConcurrentImpl = options => {
|
|
|
2233
2235
|
let parentFiber;
|
|
2234
2236
|
let fibers;
|
|
2235
2237
|
let resume;
|
|
2236
|
-
let interrupted = false;
|
|
2237
2238
|
let terminal;
|
|
2238
2239
|
let effect;
|
|
2239
2240
|
const failDefect = error => {
|
|
2240
2241
|
const defect = exitDie(error);
|
|
2241
2242
|
terminal = defect;
|
|
2242
2243
|
done = true;
|
|
2243
|
-
|
|
2244
|
-
return fibers && fibers.size > 0 ? flatMap(uninterruptible(fiberInterruptAll(Array.from(fibers))), () => defect) : defect;
|
|
2244
|
+
return fibers && fibers.size > 0 ? flatMap(uninterruptible(fiberInterruptAll(Array.from(fibers))), () => terminal ?? defect) : defect;
|
|
2245
2245
|
};
|
|
2246
2246
|
const go = () => {
|
|
2247
2247
|
let paused = false;
|
|
2248
2248
|
for (; !terminal && index < end; index++) {
|
|
2249
2249
|
const item = items[index];
|
|
2250
2250
|
const eff = effect ?? onItem(state, item, index);
|
|
2251
|
-
// fast case (already an exit)
|
|
2252
2251
|
if (effectIsExit(eff)) {
|
|
2253
2252
|
terminal = step(state, item, eff, index);
|
|
2254
2253
|
if (terminal) break;
|
|
2255
|
-
// We have an effect, so enter "async" mode
|
|
2256
2254
|
} else if (!parentFiber) {
|
|
2257
2255
|
return callback(cb => {
|
|
2258
2256
|
parentFiber = getCurrentFiber();
|
|
@@ -2267,14 +2265,12 @@ const iterateConcurrentImpl = options => {
|
|
|
2267
2265
|
}
|
|
2268
2266
|
if (result) return cb(result);
|
|
2269
2267
|
return suspend(() => {
|
|
2270
|
-
terminal
|
|
2271
|
-
|
|
2272
|
-
return fibers ? fiberInterruptAll(fibers) : void_;
|
|
2268
|
+
terminal ??= exitVoid;
|
|
2269
|
+
return flatMap(fibers ? fiberInterruptAll(fibers) : void_, () => terminal?._tag === "Failure" ? terminal : void_);
|
|
2273
2270
|
});
|
|
2274
2271
|
});
|
|
2275
|
-
// Fork the effect with concurrency > 1
|
|
2276
2272
|
} else {
|
|
2277
|
-
// Clear the
|
|
2273
|
+
// Clear the effect cached before the parent fiber was available.
|
|
2278
2274
|
effect = undefined;
|
|
2279
2275
|
const fiber = forkUnsafe(parentFiber, eff, true, true, "inherit");
|
|
2280
2276
|
if (fiber._exit) {
|
|
@@ -2282,27 +2278,23 @@ const iterateConcurrentImpl = options => {
|
|
|
2282
2278
|
if (terminal) break;
|
|
2283
2279
|
continue;
|
|
2284
2280
|
}
|
|
2285
|
-
// Add the fiber to the Set
|
|
2286
2281
|
fibers.add(fiber);
|
|
2287
2282
|
const currentIndex = index;
|
|
2288
2283
|
fiber.addObserver(exit => {
|
|
2289
2284
|
fibers.delete(fiber);
|
|
2290
2285
|
try {
|
|
2291
2286
|
if (terminal) {
|
|
2292
|
-
if (
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
} else {
|
|
2298
|
-
terminal = exitFailCause(causeFromReasons([reason]));
|
|
2299
|
-
}
|
|
2287
|
+
if (exit._tag === "Failure") {
|
|
2288
|
+
const reasons = exit.cause.reasons.filter(reason => reason._tag !== "Interrupt");
|
|
2289
|
+
if (reasons.length > 0) {
|
|
2290
|
+
const cause = causeFromReasons(reasons);
|
|
2291
|
+
terminal = exitFailCause(terminal._tag === "Failure" ? causeCombine(terminal.cause, cause) : cause);
|
|
2300
2292
|
}
|
|
2301
2293
|
}
|
|
2302
2294
|
} else {
|
|
2303
2295
|
const result = step(state, item, exit, currentIndex);
|
|
2304
2296
|
if (result) {
|
|
2305
|
-
terminal = result
|
|
2297
|
+
terminal = result;
|
|
2306
2298
|
go();
|
|
2307
2299
|
}
|
|
2308
2300
|
}
|
|
@@ -2316,7 +2308,6 @@ const iterateConcurrentImpl = options => {
|
|
|
2316
2308
|
resume(failDefect(error));
|
|
2317
2309
|
}
|
|
2318
2310
|
});
|
|
2319
|
-
// Check if we have reached the concurrency limit
|
|
2320
2311
|
if (fibers.size < concurrency) continue;
|
|
2321
2312
|
paused = true;
|
|
2322
2313
|
index++;
|