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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-orpc",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "keywords": [
5
5
  "effect",
6
6
  "orpc",
@@ -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
- if (isEffectMiddleware(middleware)) {
252
- const effectMiddleware = createEffectPipelineMiddleware({
253
- effectErrorMap: state.effectErrorMap,
254
- runner: state.runner,
255
- steps: [
256
- ...(state.effectSteps ?? []),
257
- { _tag: "middleware" as const, middleware },
258
- ],
259
- });
260
-
261
- return Reflect.apply(
262
- Reflect.get(source, "middleware", source),
263
- source,
264
- [effectMiddleware],
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
- [middleware],
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 (isEffectMiddleware(middleware) && rest.length === 0) {
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
- [middleware, ...rest],
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
- new EffectDecoratedProcedure({
352
- ...effectDef,
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, () => {
@@ -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
- return new EffectDecoratedProcedure(
327
- appendEffectStep(def, {
328
- _tag: "middleware",
329
- middleware,
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,