effect-orpc 0.4.0 → 0.5.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 +81 -93
- package/dist/index.js +350 -80
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/effect-builder.ts +36 -22
- package/src/effect-procedure.ts +31 -7
- package/src/effect-runtime.ts +622 -80
- package/src/tests/effect-builder.proxy.test.ts +15 -17
- package/src/tests/effect-builder.test.ts +296 -139
- package/src/tests/effect-callback-shapes.test.ts +410 -0
- package/src/tests/effect-error-map.test.ts +4 -6
- package/src/tests/effect-procedure.test.ts +44 -5
- package/src/tests/parity-shared.ts +2 -2
- package/src/types/index.ts +70 -40
package/package.json
CHANGED
package/src/effect-builder.ts
CHANGED
|
@@ -12,8 +12,10 @@ import { Layer, ManagedRuntime } from "effect";
|
|
|
12
12
|
import { enhanceEffectRouter } from "./effect-enhance-router";
|
|
13
13
|
import { EffectDecoratedProcedure } from "./effect-procedure";
|
|
14
14
|
import {
|
|
15
|
+
createEffectOrORPCMiddleware,
|
|
15
16
|
createEffectPipelineMiddleware,
|
|
16
17
|
createEffectProcedureHandler,
|
|
18
|
+
isDecoratedMiddleware,
|
|
17
19
|
isEffectMiddleware,
|
|
18
20
|
} from "./effect-runtime";
|
|
19
21
|
import {
|
|
@@ -248,27 +250,25 @@ function createEffectBuilderProxy(
|
|
|
248
250
|
case "middleware":
|
|
249
251
|
return getOrCreateVirtualMethod(context, prop, () => {
|
|
250
252
|
return (middleware: any) => {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
);
|
|
266
|
-
}
|
|
253
|
+
const effectMiddleware = isEffectMiddleware(middleware)
|
|
254
|
+
? createEffectPipelineMiddleware({
|
|
255
|
+
effectErrorMap: state.effectErrorMap,
|
|
256
|
+
runner: state.runner,
|
|
257
|
+
steps: [
|
|
258
|
+
...(state.effectSteps ?? []),
|
|
259
|
+
{ _tag: "middleware" as const, middleware },
|
|
260
|
+
],
|
|
261
|
+
})
|
|
262
|
+
: createEffectOrORPCMiddleware({
|
|
263
|
+
effectErrorMap: state.effectErrorMap,
|
|
264
|
+
middleware,
|
|
265
|
+
runner: state.runner,
|
|
266
|
+
});
|
|
267
267
|
|
|
268
268
|
return Reflect.apply(
|
|
269
269
|
Reflect.get(source, "middleware", source),
|
|
270
270
|
source,
|
|
271
|
-
[
|
|
271
|
+
[effectMiddleware],
|
|
272
272
|
);
|
|
273
273
|
};
|
|
274
274
|
});
|
|
@@ -302,7 +302,7 @@ function createEffectBuilderProxy(
|
|
|
302
302
|
case "use":
|
|
303
303
|
return getOrCreateVirtualMethod(context, prop, () => {
|
|
304
304
|
return (middleware: any, ...rest: unknown[]) => {
|
|
305
|
-
if (
|
|
305
|
+
if (rest.length === 0 && isEffectMiddleware(middleware)) {
|
|
306
306
|
return wrapBuilderLike(
|
|
307
307
|
source,
|
|
308
308
|
appendEffectStep(state, {
|
|
@@ -316,7 +316,16 @@ function createEffectBuilderProxy(
|
|
|
316
316
|
const nextBuilder: AnyBuilderLike = Reflect.apply(
|
|
317
317
|
Reflect.get(flushed.builder, "use", flushed.builder),
|
|
318
318
|
flushed.builder,
|
|
319
|
-
[
|
|
319
|
+
[
|
|
320
|
+
rest.length === 0 && !isDecoratedMiddleware(middleware)
|
|
321
|
+
? createEffectOrORPCMiddleware({
|
|
322
|
+
effectErrorMap: flushed.state.effectErrorMap,
|
|
323
|
+
middleware,
|
|
324
|
+
runner: flushed.state.runner,
|
|
325
|
+
})
|
|
326
|
+
: middleware,
|
|
327
|
+
...rest,
|
|
328
|
+
],
|
|
320
329
|
);
|
|
321
330
|
return wrapBuilderLike(nextBuilder, flushed.state);
|
|
322
331
|
};
|
|
@@ -347,11 +356,16 @@ function createEffectBuilderProxy(
|
|
|
347
356
|
any
|
|
348
357
|
>["handler"]
|
|
349
358
|
>[0],
|
|
350
|
-
) =>
|
|
351
|
-
|
|
352
|
-
|
|
359
|
+
) => {
|
|
360
|
+
const flushed = flushEffectSteps(source, state);
|
|
361
|
+
return new EffectDecoratedProcedure({
|
|
362
|
+
...flushed.builder["~orpc"],
|
|
363
|
+
effectErrorMap: flushed.state.effectErrorMap,
|
|
364
|
+
runner: flushed.state.runner,
|
|
365
|
+
effectSteps: flushed.state.effectSteps,
|
|
353
366
|
handler,
|
|
354
367
|
});
|
|
368
|
+
};
|
|
355
369
|
});
|
|
356
370
|
case "router":
|
|
357
371
|
return getOrCreateVirtualMethod(context, prop, () => {
|
package/src/effect-procedure.ts
CHANGED
|
@@ -20,9 +20,11 @@ import { Layer } from "effect";
|
|
|
20
20
|
|
|
21
21
|
import {
|
|
22
22
|
createEffectOptionalProviderMiddleware,
|
|
23
|
+
createEffectOrORPCMiddleware,
|
|
23
24
|
createEffectPipelineMiddleware,
|
|
24
25
|
createEffectProcedureHandler,
|
|
25
26
|
createEffectProviderMiddleware,
|
|
27
|
+
isDecoratedMiddleware,
|
|
26
28
|
isEffectMiddleware,
|
|
27
29
|
} from "./effect-runtime";
|
|
28
30
|
import { composeSurfaceProxy } from "./extension/compose-surfaces";
|
|
@@ -323,18 +325,40 @@ function createEffectProcedureProxy<
|
|
|
323
325
|
) => {
|
|
324
326
|
const def = getEffectProcedureDef(context);
|
|
325
327
|
if (!mapInput && isEffectMiddleware(middleware)) {
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
)
|
|
328
|
+
const step: EffectPipelineStep = {
|
|
329
|
+
_tag: "middleware" as const,
|
|
330
|
+
middleware,
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
if (def.effectHandler) {
|
|
334
|
+
return new EffectDecoratedProcedure(
|
|
335
|
+
appendEffectStep(def, step),
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return new EffectDecoratedProcedure({
|
|
340
|
+
...def,
|
|
341
|
+
middlewares: addMiddleware(
|
|
342
|
+
def.middlewares,
|
|
343
|
+
createEffectPipelineMiddleware({
|
|
344
|
+
effectErrorMap: state.effectErrorMap,
|
|
345
|
+
runner: state.runner,
|
|
346
|
+
steps: [step],
|
|
347
|
+
}),
|
|
348
|
+
),
|
|
349
|
+
});
|
|
332
350
|
}
|
|
333
351
|
|
|
334
352
|
const flushedDef = flushEffectSteps(def);
|
|
335
353
|
const mapped = mapInput
|
|
336
354
|
? decorateMiddleware(middleware).mapInput(mapInput)
|
|
337
|
-
: middleware
|
|
355
|
+
: isDecoratedMiddleware(middleware)
|
|
356
|
+
? middleware
|
|
357
|
+
: createEffectOrORPCMiddleware({
|
|
358
|
+
effectErrorMap: state.effectErrorMap,
|
|
359
|
+
middleware: middleware as any,
|
|
360
|
+
runner: state.runner,
|
|
361
|
+
});
|
|
338
362
|
|
|
339
363
|
return new EffectDecoratedProcedure({
|
|
340
364
|
...flushedDef,
|