@shivaedev/effect-trpc 0.3.4 → 0.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.
Files changed (96) hide show
  1. package/CHANGELOG.md +47 -1
  2. package/README.md +93 -0
  3. package/dist/adapter.d.ts +6 -5
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +2 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/client/rejection.d.ts +11 -0
  8. package/dist/client/rejection.d.ts.map +1 -0
  9. package/dist/client/rejection.js +9 -0
  10. package/dist/client/rejection.js.map +1 -0
  11. package/dist/client.d.ts +2 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +2 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/errors.d.ts.map +1 -1
  16. package/dist/errors.js.map +1 -1
  17. package/dist/index.d.ts +9 -6
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/internal/context-bridge.d.ts.map +1 -1
  22. package/dist/internal/context-bridge.js +1 -2
  23. package/dist/internal/context-bridge.js.map +1 -1
  24. package/dist/internal/loose.d.ts +4 -0
  25. package/dist/internal/loose.d.ts.map +1 -0
  26. package/dist/internal/loose.js +7 -0
  27. package/dist/internal/loose.js.map +1 -0
  28. package/dist/internal/procedure-handler.d.ts +5 -12
  29. package/dist/internal/procedure-handler.d.ts.map +1 -1
  30. package/dist/internal/procedure-handler.js +3 -4
  31. package/dist/internal/procedure-handler.js.map +1 -1
  32. package/dist/internal/procedure-types.d.ts +17 -4
  33. package/dist/internal/procedure-types.d.ts.map +1 -1
  34. package/dist/internal/runtime.d.ts +4 -4
  35. package/dist/internal/runtime.d.ts.map +1 -1
  36. package/dist/internal/runtime.js +5 -13
  37. package/dist/internal/runtime.js.map +1 -1
  38. package/dist/internal/subscription-handler.d.ts +5 -12
  39. package/dist/internal/subscription-handler.d.ts.map +1 -1
  40. package/dist/internal/subscription-handler.js +5 -6
  41. package/dist/internal/subscription-handler.js.map +1 -1
  42. package/dist/procedure.d.ts +6 -8
  43. package/dist/procedure.d.ts.map +1 -1
  44. package/dist/procedure.js +8 -17
  45. package/dist/procedure.js.map +1 -1
  46. package/dist/rejection-formatter.d.ts +18 -0
  47. package/dist/rejection-formatter.d.ts.map +1 -0
  48. package/dist/rejection-formatter.js +24 -0
  49. package/dist/rejection-formatter.js.map +1 -0
  50. package/dist/rejection.d.ts +26 -0
  51. package/dist/rejection.d.ts.map +1 -0
  52. package/dist/rejection.js +32 -0
  53. package/dist/rejection.js.map +1 -0
  54. package/dist/request-services.d.ts.map +1 -1
  55. package/dist/request-services.js.map +1 -1
  56. package/dist/request-signal.d.ts.map +1 -1
  57. package/dist/request-signal.js.map +1 -1
  58. package/dist/testing/any-test-layer.d.ts +3 -0
  59. package/dist/testing/any-test-layer.d.ts.map +1 -0
  60. package/dist/testing/any-test-layer.js +2 -0
  61. package/dist/testing/any-test-layer.js.map +1 -0
  62. package/dist/testing/caller.d.ts +5 -3
  63. package/dist/testing/caller.d.ts.map +1 -1
  64. package/dist/testing/caller.js +12 -11
  65. package/dist/testing/caller.js.map +1 -1
  66. package/dist/testing/types.d.ts +5 -4
  67. package/dist/testing/types.d.ts.map +1 -1
  68. package/dist/testing/vitest.d.ts +4 -3
  69. package/dist/testing/vitest.d.ts.map +1 -1
  70. package/dist/testing/vitest.js +13 -14
  71. package/dist/testing/vitest.js.map +1 -1
  72. package/dist/testing.d.ts +3 -3
  73. package/dist/types.d.ts.map +1 -1
  74. package/package.json +12 -3
  75. package/src/adapter.ts +24 -76
  76. package/src/client/rejection.ts +19 -0
  77. package/src/client.ts +1 -0
  78. package/src/errors.ts +8 -19
  79. package/src/index.ts +9 -6
  80. package/src/internal/context-bridge.ts +3 -10
  81. package/src/internal/loose.ts +14 -0
  82. package/src/internal/procedure-handler.ts +11 -34
  83. package/src/internal/procedure-types.ts +37 -50
  84. package/src/internal/runtime.ts +14 -49
  85. package/src/internal/subscription-handler.ts +15 -47
  86. package/src/procedure.ts +33 -142
  87. package/src/rejection-formatter.ts +33 -0
  88. package/src/rejection.ts +60 -0
  89. package/src/request-services.ts +5 -25
  90. package/src/request-signal.ts +1 -4
  91. package/src/testing/any-test-layer.ts +3 -0
  92. package/src/testing/caller.ts +29 -32
  93. package/src/testing/types.ts +15 -47
  94. package/src/testing/vitest.ts +19 -51
  95. package/src/testing.ts +3 -3
  96. package/src/types.ts +3 -12
@@ -1,79 +1,47 @@
1
1
  import { it as effectIt, type Vitest } from "@effect/vitest";
2
2
  import { makeEffectIt } from "@shivaedev/effect-test";
3
3
  import { Effect, type Layer } from "effect";
4
- import { makeEffectCallerFactory } from "./caller.js";
5
- import type {
6
- CallerOptions,
7
- CallerResult,
8
- MakeTrpcHarnessItOptions,
9
- MakeTrpcItOptions,
10
- TrpcHarnessIt,
11
- TrpcIt,
12
- } from "./types.js";
4
+ import type { AnyTestLayer } from "./any-test-layer.ts";
5
+ import { makeEffectCallerFactory } from "./caller.ts";
6
+ import type { CallerOptions, CallerResult, MakeTrpcHarnessItOptions, MakeTrpcItOptions, TrpcHarnessIt, TrpcIt } from "./types.ts";
13
7
 
14
- const withEffectTRPC = <Tester>(
15
- tester: Tester,
16
- ): Vitest.Methods & {
17
- readonly effectTRPC: Tester;
18
- } =>
19
- new Proxy(effectIt, {
8
+ function withEffectTRPC<Tester>(tester: Tester): Vitest.Methods & { readonly effectTRPC: Tester };
9
+ function withEffectTRPC(tester: unknown): unknown {
10
+ return new Proxy(effectIt, {
20
11
  get(target, property, receiver) {
21
12
  if (property === "effectTRPC") {
22
13
  return tester;
23
14
  }
24
15
  return Reflect.get(target, property, receiver);
25
16
  },
26
- }) as Vitest.Methods & { readonly effectTRPC: Tester };
17
+ });
18
+ }
27
19
 
28
- export const makeTrpcHarnessIt = <
29
- CreateCaller extends (...arguments_: never[]) => object,
30
- // biome-ignore lint/suspicious/noExplicitAny: Layer output and error are recovered with Layer utility types
31
- TestLayer extends Layer.Layer<any, any, never>,
32
- Harness,
33
- >(
20
+ export function makeTrpcHarnessIt<CreateCaller extends (...arguments_: never[]) => object, TestLayer extends AnyTestLayer, Harness>(
34
21
  options: MakeTrpcHarnessItOptions<CreateCaller, TestLayer, Harness>,
35
- ): TrpcHarnessIt<Harness, Layer.Success<TestLayer>> => {
36
- type Options = CallerOptions<CreateCaller>;
37
- type Caller = CallerResult<CreateCaller>;
38
- type Provided = Layer.Success<TestLayer>;
39
-
22
+ ): TrpcHarnessIt<Harness, Layer.Success<TestLayer>>;
23
+ export function makeTrpcHarnessIt<TestLayer extends AnyTestLayer, Harness>(
24
+ options: MakeTrpcHarnessItOptions<(options?: unknown) => object, TestLayer, Harness>,
25
+ ): unknown {
40
26
  const { effectApp } = makeEffectIt({
41
27
  around: options.around,
42
28
  clock: options.clock,
43
29
  layer: options.layer,
44
30
  makeHarness: (context) =>
45
31
  Effect.gen(function* () {
46
- const services = yield* Effect.context<Provided>();
47
- const trpc = makeEffectCallerFactory(
48
- options.adapter,
49
- // CreateCaller is a rest-never function type. The option and
50
- // result aliases are the factory TypeScript cannot recover here.
51
- options.createCaller as unknown as (options?: Options) => Caller,
52
- services,
53
- );
32
+ const services = yield* Effect.context<Layer.Success<TestLayer>>();
33
+ const trpc = makeEffectCallerFactory(options.adapter, options.createCaller, services);
54
34
  return yield* options.makeHarness(trpc, context);
55
35
  }),
56
36
  });
57
37
 
58
38
  return withEffectTRPC(effectApp);
59
- };
39
+ }
60
40
 
61
- export const makeTrpcIt = <
62
- CreateCaller extends (...arguments_: never[]) => object,
63
- // biome-ignore lint/suspicious/noExplicitAny: Layer output and error are recovered with Layer utility types
64
- TestLayer extends Layer.Layer<any, any, never>,
65
- >(
41
+ export const makeTrpcIt = <CreateCaller extends (...arguments_: never[]) => object, TestLayer extends AnyTestLayer>(
66
42
  options: MakeTrpcItOptions<CreateCaller, TestLayer>,
67
- ): TrpcIt<
68
- CallerOptions<CreateCaller>,
69
- CallerResult<CreateCaller>,
70
- Layer.Success<TestLayer>
71
- > =>
43
+ ): TrpcIt<CallerOptions<CreateCaller>, CallerResult<CreateCaller>, Layer.Success<TestLayer>> =>
72
44
  makeTrpcHarnessIt({
73
45
  ...options,
74
46
  makeHarness: (trpc) => Effect.succeed(trpc),
75
- }) as TrpcIt<
76
- CallerOptions<CreateCaller>,
77
- CallerResult<CreateCaller>,
78
- Layer.Success<TestLayer>
79
- >;
47
+ });
package/src/testing.ts CHANGED
@@ -3,7 +3,7 @@ export {
3
3
  type EffectCallerFactory,
4
4
  makeEffectCaller,
5
5
  makeEffectCallerFactory,
6
- } from "./testing/caller.js";
6
+ } from "./testing/caller.ts";
7
7
  export type {
8
8
  CallerOptions,
9
9
  CallerResult,
@@ -15,5 +15,5 @@ export type {
15
15
  TrpcIt,
16
16
  TrpcTest,
17
17
  TrpcTester,
18
- } from "./testing/types.js";
19
- export { makeTrpcHarnessIt, makeTrpcIt } from "./testing/vitest.js";
18
+ } from "./testing/types.ts";
19
+ export { makeTrpcHarnessIt, makeTrpcIt } from "./testing/vitest.ts";
package/src/types.ts CHANGED
@@ -13,17 +13,8 @@ export interface EffectTRPCErrorContext extends ProcedureInfo {
13
13
  readonly origin: "defect" | "failure";
14
14
  }
15
15
 
16
- export type EffectTRPCErrorMapper = (
17
- error: unknown,
18
- context: EffectTRPCErrorContext,
19
- ) => TRPCError | undefined;
16
+ export type EffectTRPCErrorMapper = (error: unknown, context: EffectTRPCErrorContext) => TRPCError | undefined;
20
17
 
21
- export type EffectTRPCInstrument = <A, E, R>(
22
- effect: Effect.Effect<A, E, R>,
23
- procedure: ProcedureInfo,
24
- ) => Effect.Effect<A, E, R>;
18
+ export type EffectTRPCInstrument = <A, E, R>(effect: Effect.Effect<A, E, R>, procedure: ProcedureInfo) => Effect.Effect<A, E, R>;
25
19
 
26
- export type EffectTRPCStreamInstrument = <A, E, R>(
27
- stream: Stream.Stream<A, E, R>,
28
- procedure: ProcedureInfo,
29
- ) => Stream.Stream<A, E, R>;
20
+ export type EffectTRPCStreamInstrument = <A, E, R>(stream: Stream.Stream<A, E, R>, procedure: ProcedureInfo) => Stream.Stream<A, E, R>;