@shivaedev/effect-trpc 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/CHANGELOG.md +45 -0
- package/README.md +22 -5
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +9 -1
- package/dist/adapter.js.map +1 -1
- package/dist/client/rejection.d.ts +1 -0
- package/dist/client/rejection.d.ts.map +1 -1
- package/dist/client/rejection.js +1 -1
- package/dist/client/rejection.js.map +1 -1
- package/dist/internal/procedure-types.d.ts +5 -5
- package/dist/internal/procedure-types.d.ts.map +1 -1
- package/dist/internal/runtime.d.ts.map +1 -1
- package/dist/internal/runtime.js +16 -15
- package/dist/internal/runtime.js.map +1 -1
- package/dist/procedure.d.ts +10 -6
- package/dist/procedure.d.ts.map +1 -1
- package/dist/procedure.js +17 -17
- package/dist/procedure.js.map +1 -1
- package/dist/rejection-formatter.d.ts.map +1 -1
- package/dist/rejection-formatter.js +11 -5
- package/dist/rejection-formatter.js.map +1 -1
- package/dist/rejection.d.ts +16 -5
- package/dist/rejection.d.ts.map +1 -1
- package/dist/rejection.js +3 -2
- package/dist/rejection.js.map +1 -1
- package/dist/request-signal.d.ts +0 -1
- package/dist/request-signal.d.ts.map +1 -1
- package/dist/request-signal.js +0 -1
- package/dist/request-signal.js.map +1 -1
- package/dist/testing/caller.js.map +1 -1
- package/dist/testing/types.d.ts +5 -5
- package/dist/testing/types.d.ts.map +1 -1
- package/dist/testing/vitest.d.ts.map +1 -1
- package/dist/testing/vitest.js +1 -1
- package/dist/testing/vitest.js.map +1 -1
- package/package.json +34 -36
- package/src/adapter.ts +18 -4
- package/src/client/rejection.ts +4 -1
- package/src/internal/procedure-types.ts +5 -5
- package/src/internal/runtime.ts +23 -21
- package/src/procedure.ts +30 -28
- package/src/rejection-formatter.ts +15 -5
- package/src/rejection.ts +18 -5
- package/src/request-signal.ts +0 -1
- package/src/testing/caller.ts +2 -2
- package/src/testing/types.ts +6 -6
- package/src/testing/vitest.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0 - 2026-10-04
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Validate packed consumers and executable bins through the shared workspace gate.
|
|
8
|
+
- The function members of the procedure builder types are declared as properties, so TypeScript checks their parameters strictly.
|
|
9
|
+
|
|
10
|
+
- Remove a JSDoc block, so the package passes the comment rules of `@shivaedev/quality`.
|
|
11
|
+
|
|
12
|
+
- Build with the `@shivaedev/quality` tsconfig presets, which target ESNext and allow only erasable TypeScript syntax, so classes declare their fields instead of using constructor parameter properties.
|
|
13
|
+
|
|
14
|
+
- Type-check with TypeScript 7 only. TypeScript 6 still builds the package.
|
|
15
|
+
|
|
16
|
+
- Lint and format with the `@shivaedev/quality` Biome preset through `quality lint` at the repository root, which replaces the package's `check` script.
|
|
17
|
+
|
|
18
|
+
- Run tests through the `@shivaedev/quality` Vitest projects, which take a test's environment from its file name. Type tests are named `*.typecheck.test.ts`.
|
|
19
|
+
|
|
20
|
+
- Keep `package.json` in sort-package-json key order, checked by `quality lint`.
|
|
21
|
+
|
|
22
|
+
## 0.4.1 - 2026-09-26
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- Map the Platform `TooManyRequests` rejection to `TOO_MANY_REQUESTS`, which
|
|
27
|
+
tRPC sends as HTTP 429.
|
|
28
|
+
- Mark the `BadRequest` that `rejectionFormatter` sends for an input the
|
|
29
|
+
procedure's schema rejects with `invalidInput: true`, so a client can tell
|
|
30
|
+
input that did not parse from a declared `BadRequest` with a `field`. The
|
|
31
|
+
rest of the rejection is unchanged and still decodes as `BadRequest`.
|
|
32
|
+
`EncodedRejection`, and so `rejectionOf` and the router-typed
|
|
33
|
+
`TRPCClientError` data, type the mark as `invalidInput?: true`.
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- Reserve `invalidInput` for that mark. `rejectWith` no longer accepts a schema
|
|
38
|
+
whose encoded value has an `invalidInput` field, and `rejectionFormatter`
|
|
39
|
+
strips the key from every declared rejection, which 0.4.0 sent as it was, so
|
|
40
|
+
a handler can neither fake the mark nor turn its rejection into a 500.
|
|
41
|
+
`rejectWith` also requires the encoded value to have a string `_tag`, which
|
|
42
|
+
sending the rejection already required at run time. Both checks happen at
|
|
43
|
+
compile time, so a schema with an encoded `invalidInput` field or without an
|
|
44
|
+
encoded string `_tag` no longer compiles where it used to fail at run time
|
|
45
|
+
or, for `invalidInput`, send a spoofable mark. This stays a patch release
|
|
46
|
+
because such a schema could not be sent correctly before.
|
|
47
|
+
|
|
3
48
|
## 0.4.0 - 2026-09-26
|
|
4
49
|
|
|
5
50
|
### Added
|
package/README.md
CHANGED
|
@@ -159,18 +159,31 @@ adds it to the error data, next to tRPC's own fields:
|
|
|
159
159
|
| `Forbidden` | `FORBIDDEN` | 403 |
|
|
160
160
|
| `Conflict` | `CONFLICT` | 409 |
|
|
161
161
|
| `PreconditionFailed` | `PRECONDITION_FAILED` | 412 |
|
|
162
|
+
| `TooManyRequests` | `TOO_MANY_REQUESTS` | 429 |
|
|
162
163
|
| `AuthUnavailable` | `SERVICE_UNAVAILABLE` | 503 |
|
|
163
164
|
| any other, including `BadRequest` | `BAD_REQUEST` | 400 |
|
|
164
165
|
- When a procedure's input schema rejects the input, the formatter sends a
|
|
165
166
|
`BadRequest` rejection with the first issue's message and, unless the issue
|
|
166
167
|
concerns the whole input, its path as `field` (`"address.city"`,
|
|
167
168
|
`"tags.1"`). The code is `BAD_REQUEST`, as for a `BadRequest` the procedure
|
|
168
|
-
raises, so a form shows the error on its field before the handler runs.
|
|
169
|
+
raises, so a form shows the error on its field before the handler runs. It
|
|
170
|
+
also carries `invalidInput: true`, which a declared rejection never gets, so
|
|
171
|
+
a client can show its own copy for input that did not parse and the
|
|
172
|
+
declared message otherwise:
|
|
173
|
+
|
|
174
|
+
```jsonc
|
|
175
|
+
{ "code": "BAD_REQUEST", "httpStatus": 400, "path": "rename",
|
|
176
|
+
"rejection": { "_tag": "BadRequest", "message": "Expected a value with a length of at least 1", "field": "name", "invalidInput": true } }
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
`invalidInput` is reserved: `rejectWith` does not accept a schema that
|
|
180
|
+
encodes a field by that name, and the formatter strips it from any declared
|
|
181
|
+
rejection, so only input that did not parse carries it.
|
|
169
182
|
- An application with its own `errorFormatter` calls
|
|
170
183
|
`withRejection(shape, error)` inside it.
|
|
171
184
|
- The error channel loses the declared types and gains `RejectionError`. An
|
|
172
185
|
effect-contract operation's `error` schema works directly:
|
|
173
|
-
`rejectWith(
|
|
186
|
+
`rejectWith(SaveOrder.error)`.
|
|
174
187
|
|
|
175
188
|
The browser-safe `@shivaedev/effect-trpc/client` entry reads the rejection from
|
|
176
189
|
a `TRPCClientError`:
|
|
@@ -179,14 +192,18 @@ a `TRPCClientError`:
|
|
|
179
192
|
import { decodeRejection, rejectionOf } from "@shivaedev/effect-trpc/client"
|
|
180
193
|
import { rejectedField } from "@shivaedev/platform/errors"
|
|
181
194
|
|
|
182
|
-
rejectionOf(error) // Option<{ _tag: string, ... }>, still encoded
|
|
195
|
+
rejectionOf(error) // Option<{ _tag: string, invalidInput?: true, ... }>, still encoded
|
|
183
196
|
decodeRejection(Schema.Union([BadRequest, Conflict]))(error) // Option<BadRequest | Conflict>
|
|
184
197
|
Option.flatMap(rejectionOf(error), rejectedField) // Option<{ field, message }>
|
|
198
|
+
Option.exists(rejectionOf(error), (rejection) => rejection.invalidInput === true) // the input did not parse
|
|
185
199
|
```
|
|
186
200
|
|
|
187
201
|
Both return `Option.none()` for any error without a tagged rejection, and
|
|
188
|
-
`decodeRejection` also for a rejection its schema does not declare.
|
|
189
|
-
|
|
202
|
+
`decodeRejection` also for a rejection its schema does not declare.
|
|
203
|
+
`rejectionOf` also returns `Option.none()` when `invalidInput` is present but
|
|
204
|
+
not `true`. An input failure still decodes as the declared `BadRequest`; the
|
|
205
|
+
mark is read from `rejectionOf`, or from `error.data.rejection.invalidInput` on a
|
|
206
|
+
`TRPCClientError` typed by the router. The client entry imports only `effect`.
|
|
190
207
|
|
|
191
208
|
## Vitest
|
|
192
209
|
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js
CHANGED
|
@@ -6,7 +6,15 @@ export const makeEffectTRPC = (options) => {
|
|
|
6
6
|
const contextBridge = makeContextBridge(options.runtime);
|
|
7
7
|
const runtime = makeRuntimeBridge(options.runtime, contextBridge, options);
|
|
8
8
|
return {
|
|
9
|
-
procedure: (builder, requestServices) =>
|
|
9
|
+
procedure: (builder, requestServices) => {
|
|
10
|
+
const loose = looseBuilder(builder);
|
|
11
|
+
return new EffectProcedureBuilder({
|
|
12
|
+
builder: loose,
|
|
13
|
+
requestServices,
|
|
14
|
+
runtime,
|
|
15
|
+
subscriptionBuilder: loose,
|
|
16
|
+
});
|
|
17
|
+
},
|
|
10
18
|
runWithServices: contextBridge.run,
|
|
11
19
|
};
|
|
12
20
|
};
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAiCxD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,OAA0D,EACxB,EAAE;IACpC,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAE3E,OAAO;QACN,SAAS,EAAE,CACV,OAA6G,EAC7G,eAA+H,EAC9H,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAiCxD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,OAA0D,EACxB,EAAE;IACpC,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAE3E,OAAO;QACN,SAAS,EAAE,CACV,OAA6G,EAC7G,eAA+H,EAC9H,EAAE;YACH,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,sBAAsB,CAW/B;gBACD,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,OAAO;gBACP,mBAAmB,EAAE,KAAK;aAC1B,CAAC,CAAC;QACJ,CAAC;QACD,eAAe,EAAE,aAAa,CAAC,GAAG;KAClC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Option, Schema } from "effect";
|
|
2
2
|
export declare const EncodedRejection: Schema.StructWithRest<Schema.Struct<{
|
|
3
3
|
readonly _tag: Schema.String;
|
|
4
|
+
readonly invalidInput: Schema.optionalKey<Schema.Literal<true>>;
|
|
4
5
|
}>, readonly [Schema.$Record<Schema.String, Schema.Unknown>]>;
|
|
5
6
|
export type EncodedRejection = typeof EncodedRejection.Type;
|
|
6
7
|
export declare const rejectionOf: (error: unknown) => Option.Option<EncodedRejection>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rejection.d.ts","sourceRoot":"","sources":["../../src/client/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"rejection.d.ts","sourceRoot":"","sources":["../../src/client/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,eAAO,MAAM,gBAAgB;;;6DAG5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC;AAI5D,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAmE,CAAC;AAE/I,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,CAAC,iBAAiB,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5F,QAAQ,CAAC,KACP,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAG/C,CAAC"}
|
package/dist/client/rejection.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Option, Schema } from "effect";
|
|
2
|
-
export const EncodedRejection = Schema.StructWithRest(Schema.Struct({ _tag: Schema.String }), [Schema.Record(Schema.String, Schema.Unknown)]);
|
|
2
|
+
export const EncodedRejection = Schema.StructWithRest(Schema.Struct({ _tag: Schema.String, invalidInput: Schema.optionalKey(Schema.Literal(true)) }), [Schema.Record(Schema.String, Schema.Unknown)]);
|
|
3
3
|
const decodeCarrier = Schema.decodeUnknownOption(Schema.Struct({ data: Schema.Struct({ rejection: EncodedRejection }) }));
|
|
4
4
|
export const rejectionOf = (error) => Option.map(decodeCarrier(error), ({ data }) => data.rejection);
|
|
5
5
|
export const decodeRejection = (schema) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rejection.js","sourceRoot":"","sources":["../../src/client/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"rejection.js","sourceRoot":"","sources":["../../src/client/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CACpD,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAC9F,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAC9C,CAAC;AAIF,MAAM,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1H,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAmC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAE/I,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,MAAS,EACwC,EAAE;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC"}
|
|
@@ -14,10 +14,10 @@ export interface ProcedureInvocation<Context> {
|
|
|
14
14
|
readonly signal: AbortSignal | undefined;
|
|
15
15
|
}
|
|
16
16
|
export interface ProcedureBuilderSurface<Context> {
|
|
17
|
-
input(schema: StandardSchema.StandardSchemaV1)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
subscription(resolver: (invocation: ProcedureInvocation<Context>) => Promise<AsyncIterable<unknown, void, unknown>>)
|
|
17
|
+
input: (schema: StandardSchema.StandardSchemaV1) => ProcedureBuilderSurface<Context>;
|
|
18
|
+
mutation: (resolver: (invocation: ProcedureInvocation<Context>) => Promise<unknown>) => unknown;
|
|
19
|
+
output: (schema: StandardSchema.StandardSchemaV1) => ProcedureBuilderSurface<Context>;
|
|
20
|
+
query: (resolver: (invocation: ProcedureInvocation<Context>) => Promise<unknown>) => unknown;
|
|
21
|
+
subscription: (resolver: (invocation: ProcedureInvocation<Context>) => Promise<AsyncIterable<unknown, void, unknown>>) => unknown;
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=procedure-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procedure-types.d.ts","sourceRoot":"","sources":["../../src/internal/procedure-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE7D,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,IAAI,oBAAoB,CAC7H,OAAO,EACP,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,KAAK,CACL,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK,SAAS,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE7F,MAAM,MAAM,kBAAkB,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,SAAS,eAAe,GAAG,IAAI,GAAG,IAAI,SAAS,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAEzI,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,IAAI,oCAAoC,CAClG,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC,CACvH,CAAC,KAAK,CAAC,CAAC;AAET,MAAM,MAAM,eAAe,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAE1F,MAAM,MAAM,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE7I,MAAM,MAAM,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CACrE,KAAK,EAAE,KAAK,KACR,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;AAEnG,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC3C,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,uBAAuB,CAAC,OAAO;IAC/C,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"procedure-types.d.ts","sourceRoot":"","sources":["../../src/internal/procedure-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE7D,MAAM,MAAM,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,IAAI,oBAAoB,CAC7H,OAAO,EACP,IAAI,EACJ,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,KAAK,CACL,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK,SAAS,eAAe,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE7F,MAAM,MAAM,kBAAkB,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,SAAS,eAAe,GAAG,IAAI,GAAG,IAAI,SAAS,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;AAEzI,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,IAAI,oCAAoC,CAClG,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,CAAC,CACvH,CAAC,KAAK,CAAC,CAAC;AAET,MAAM,MAAM,eAAe,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAE1F,MAAM,MAAM,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE7I,MAAM,MAAM,0BAA0B,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CACrE,KAAK,EAAE,KAAK,KACR,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;AAEnG,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC3C,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,uBAAuB,CAAC,OAAO;IAC/C,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,gBAAgB,KAAK,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACrF,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IAChG,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,gBAAgB,KAAK,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACtF,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;IAC7F,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC;CAClI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,MAAM,EAAwB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,UAAU,gBAAgB;IACzB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa,CAAC,YAAY;IAC1C,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9H,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAC7I;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,MAAM,EAAwB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,UAAU,gBAAgB;IACzB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa,CAAC,YAAY;IAC1C,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9H,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAC7I;AA8DD,eAAO,MAAM,iBAAiB,GAAI,YAAY,EAAE,YAAY,EAC3D,SAAS,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,EACtD,eAAe,aAAa,EAC5B,SAAS;IACR,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,aAAa,EAAE,0BAA0B,CAAC;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAC1C,KACC,aAAa,CAAC,YAAY,CAgD3B,CAAC"}
|
package/dist/internal/runtime.js
CHANGED
|
@@ -34,8 +34,9 @@ const mapCause = (cause, procedure, consumerMapper) => {
|
|
|
34
34
|
return internalError();
|
|
35
35
|
};
|
|
36
36
|
const interruptOn = (signal) => {
|
|
37
|
-
if (signal === undefined)
|
|
37
|
+
if (signal === undefined) {
|
|
38
38
|
return Effect.never;
|
|
39
|
+
}
|
|
39
40
|
return Effect.callback((resume) => {
|
|
40
41
|
if (signal.aborted) {
|
|
41
42
|
resume(Effect.void);
|
|
@@ -48,20 +49,6 @@ const interruptOn = (signal) => {
|
|
|
48
49
|
};
|
|
49
50
|
export const makeRuntimeBridge = (runtime, contextBridge, options) => ({
|
|
50
51
|
instrument: (effect, procedure) => Effect.suspend(() => (options.instrument === undefined ? effect : options.instrument(effect, procedure))),
|
|
51
|
-
runStream: async (stream, runOptions) => {
|
|
52
|
-
const instrumented = Stream.suspend(() => options.instrumentStream === undefined ? stream : options.instrumentStream(stream, runOptions.procedure)).pipe(Stream.withSpan(runOptions.procedure.path, {
|
|
53
|
-
attributes: {
|
|
54
|
-
"rpc.method": runOptions.procedure.path,
|
|
55
|
-
"rpc.system": "trpc",
|
|
56
|
-
"trpc.type": runOptions.procedure.type,
|
|
57
|
-
},
|
|
58
|
-
captureStackTrace: runOptions.procedure.captureStackTrace,
|
|
59
|
-
}), Stream.interruptWhen(interruptOn(runOptions.signal)), Stream.catchCause((cause) => Stream.fail(mapCause(cause, runOptions.procedure, options.mapError))));
|
|
60
|
-
const context = await runtime.runPromise(Effect.context());
|
|
61
|
-
const ambient = contextBridge.current();
|
|
62
|
-
const provided = ambient === undefined ? context : Context.merge(context, ambient);
|
|
63
|
-
return Stream.toAsyncIterableWith(instrumented, provided);
|
|
64
|
-
},
|
|
65
52
|
runEffect: async (effect, runOptions) => {
|
|
66
53
|
const traced = effect.pipe(Effect.withSpan(runOptions.procedure.path, {
|
|
67
54
|
attributes: {
|
|
@@ -80,5 +67,19 @@ export const makeRuntimeBridge = (runtime, contextBridge, options) => ({
|
|
|
80
67
|
}
|
|
81
68
|
throw mapCause(exit.cause, runOptions.procedure, options.mapError);
|
|
82
69
|
},
|
|
70
|
+
runStream: async (stream, runOptions) => {
|
|
71
|
+
const instrumented = Stream.suspend(() => options.instrumentStream === undefined ? stream : options.instrumentStream(stream, runOptions.procedure)).pipe(Stream.withSpan(runOptions.procedure.path, {
|
|
72
|
+
attributes: {
|
|
73
|
+
"rpc.method": runOptions.procedure.path,
|
|
74
|
+
"rpc.system": "trpc",
|
|
75
|
+
"trpc.type": runOptions.procedure.type,
|
|
76
|
+
},
|
|
77
|
+
captureStackTrace: runOptions.procedure.captureStackTrace,
|
|
78
|
+
}), Stream.interruptWhen(interruptOn(runOptions.signal)), Stream.catchCause((cause) => Stream.fail(mapCause(cause, runOptions.procedure, options.mapError))));
|
|
79
|
+
const context = await runtime.runPromise(Effect.context());
|
|
80
|
+
const ambient = contextBridge.current();
|
|
81
|
+
const provided = ambient === undefined ? context : Context.merge(context, ambient);
|
|
82
|
+
return Stream.toAsyncIterableWith(instrumented, provided);
|
|
83
|
+
},
|
|
83
84
|
});
|
|
84
85
|
//# sourceMappingURL=runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAgB9E,MAAM,aAAa,GAAG,CAAC,KAAe,EAAa,EAAE,CACpD,IAAI,SAAS,CAAC;IACb,KAAK;IACL,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,uBAAuB;CAChC,CAAC,CAAC;AAEJ,MAAM,QAAQ,GAAG,CAChB,KAAc,EACd,MAA4B,EAC5B,SAAwB,EACxB,cAAiD,EACrC,EAAE;IACd,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAA2B,EAAE,SAAwB,EAAE,cAAiD,EAAa,EAAE;IACxI,IAAI,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,SAAS,CAAC;YACpB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,mBAAmB;SAC5B,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,aAAa,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAA+B,EAAuB,EAAE;IAC5E,IAAI,MAAM,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/procedure.d.ts
CHANGED
|
@@ -3,13 +3,16 @@ import { Schema } from "effect";
|
|
|
3
3
|
import type { DefaultValue, EffectProcedureResolver, EffectSubscriptionResolver, IntersectIfDefined, ProcedureBuilderSurface, ResolverContext } from "./internal/procedure-types.ts";
|
|
4
4
|
import type { RuntimeBridge } from "./internal/runtime.ts";
|
|
5
5
|
import type { EffectProcedureRequestServices } from "./request-services.ts";
|
|
6
|
+
interface ProcedureParts<Context, Meta, ContextOverrides, ProvidedServices, LayerError, RuntimeRequirements> {
|
|
7
|
+
readonly builder: ProcedureBuilderSurface<ResolverContext<Context, Meta, ContextOverrides>>;
|
|
8
|
+
readonly requestServices: EffectProcedureRequestServices<ResolverContext<Context, Meta, ContextOverrides>, ProvidedServices, LayerError>;
|
|
9
|
+
readonly runtime: RuntimeBridge<RuntimeRequirements>;
|
|
10
|
+
readonly subscriptionBuilder: ProcedureBuilderSurface<ResolverContext<Context, Meta, ContextOverrides>>;
|
|
11
|
+
readonly subscriptionOutput?: Schema.ConstraintDecoder<unknown> | undefined;
|
|
12
|
+
}
|
|
6
13
|
export declare class EffectProcedureBuilder<Context, Meta, ContextOverrides, InputIn, InputOut, OutputIn, OutputOut, ProvidedServices, LayerError, RuntimeRequirements> {
|
|
7
|
-
private readonly
|
|
8
|
-
|
|
9
|
-
private readonly runtime;
|
|
10
|
-
private readonly subscriptionBuilder;
|
|
11
|
-
private readonly subscriptionOutput?;
|
|
12
|
-
constructor(builder: ProcedureBuilderSurface<ResolverContext<Context, Meta, ContextOverrides>>, requestServices: EffectProcedureRequestServices<ResolverContext<Context, Meta, ContextOverrides>, ProvidedServices, LayerError>, runtime: RuntimeBridge<RuntimeRequirements>, subscriptionBuilder?: ProcedureBuilderSurface<ResolverContext<Context, Meta, ContextOverrides>>, subscriptionOutput?: Schema.ConstraintDecoder<unknown> | undefined);
|
|
14
|
+
private readonly parts;
|
|
15
|
+
constructor(parts: ProcedureParts<Context, Meta, ContextOverrides, ProvidedServices, LayerError, RuntimeRequirements>);
|
|
13
16
|
input<SchemaValue extends Schema.ConstraintDecoder<unknown>>(schema: SchemaValue): EffectProcedureBuilder<Context, Meta, ContextOverrides, IntersectIfDefined<InputIn, SchemaValue["Encoded"]>, IntersectIfDefined<InputOut, SchemaValue["Type"]>, OutputIn, OutputOut, ProvidedServices, LayerError, RuntimeRequirements>;
|
|
14
17
|
output<SchemaValue extends Schema.ConstraintDecoder<unknown>>(schema: SchemaValue): EffectProcedureBuilder<Context, Meta, ContextOverrides, InputIn, InputOut, IntersectIfDefined<OutputIn, SchemaValue["Encoded"]>, IntersectIfDefined<OutputOut, SchemaValue["Type"]>, ProvidedServices, LayerError, RuntimeRequirements>;
|
|
15
18
|
query<Output>(resolver: EffectProcedureResolver<DefaultValue<InputOut, undefined>, ProvidedServices | NoInfer<RuntimeRequirements>, DefaultValue<OutputIn, Output>>): TRPCQueryProcedure<{
|
|
@@ -29,4 +32,5 @@ export declare class EffectProcedureBuilder<Context, Meta, ContextOverrides, Inp
|
|
|
29
32
|
}>;
|
|
30
33
|
private handler;
|
|
31
34
|
}
|
|
35
|
+
export {};
|
|
32
36
|
//# sourceMappingURL=procedure.d.ts.map
|
package/dist/procedure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procedure.d.ts","sourceRoot":"","sources":["../src/procedure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EACX,YAAY,EACZ,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAE5E,
|
|
1
|
+
{"version":3,"file":"procedure.d.ts","sourceRoot":"","sources":["../src/procedure.ts"],"names":[],"mappings":"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"}
|
package/dist/procedure.js
CHANGED
|
@@ -3,36 +3,36 @@ import { makeProcedureHandler } from "./internal/procedure-handler.js";
|
|
|
3
3
|
import { captureStackTrace } from "./internal/stack-trace.js";
|
|
4
4
|
import { makeSubscriptionHandler } from "./internal/subscription-handler.js";
|
|
5
5
|
export class EffectProcedureBuilder {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
subscriptionBuilder;
|
|
10
|
-
subscriptionOutput;
|
|
11
|
-
constructor(builder, requestServices, runtime, subscriptionBuilder = builder, subscriptionOutput) {
|
|
12
|
-
this.builder = builder;
|
|
13
|
-
this.requestServices = requestServices;
|
|
14
|
-
this.runtime = runtime;
|
|
15
|
-
this.subscriptionBuilder = subscriptionBuilder;
|
|
16
|
-
this.subscriptionOutput = subscriptionOutput;
|
|
6
|
+
parts;
|
|
7
|
+
constructor(parts) {
|
|
8
|
+
this.parts = parts;
|
|
17
9
|
}
|
|
18
10
|
input(schema) {
|
|
19
11
|
const parser = Schema.toStandardSchemaV1(schema);
|
|
20
|
-
return new EffectProcedureBuilder(
|
|
12
|
+
return new EffectProcedureBuilder({
|
|
13
|
+
...this.parts,
|
|
14
|
+
builder: this.parts.builder.input(parser),
|
|
15
|
+
subscriptionBuilder: this.parts.subscriptionBuilder.input(parser),
|
|
16
|
+
});
|
|
21
17
|
}
|
|
22
18
|
output(schema) {
|
|
23
|
-
return new EffectProcedureBuilder(
|
|
19
|
+
return new EffectProcedureBuilder({
|
|
20
|
+
...this.parts,
|
|
21
|
+
builder: this.parts.builder.output(Schema.toStandardSchemaV1(schema)),
|
|
22
|
+
subscriptionOutput: schema,
|
|
23
|
+
});
|
|
24
24
|
}
|
|
25
25
|
query(resolver) {
|
|
26
|
-
return this.builder.query(this.handler("query", resolver));
|
|
26
|
+
return this.parts.builder.query(this.handler("query", resolver));
|
|
27
27
|
}
|
|
28
28
|
mutation(resolver) {
|
|
29
|
-
return this.builder.mutation(this.handler("mutation", resolver));
|
|
29
|
+
return this.parts.builder.mutation(this.handler("mutation", resolver));
|
|
30
30
|
}
|
|
31
31
|
subscription(resolver) {
|
|
32
|
-
return this.subscriptionBuilder.subscription(makeSubscriptionHandler(this.runtime, resolver, this.requestServices, { captureStackTrace: captureStackTrace(), type: "subscription" }, this.subscriptionOutput));
|
|
32
|
+
return this.parts.subscriptionBuilder.subscription(makeSubscriptionHandler(this.parts.runtime, resolver, this.parts.requestServices, { captureStackTrace: captureStackTrace(), type: "subscription" }, this.parts.subscriptionOutput));
|
|
33
33
|
}
|
|
34
34
|
handler(type, resolver) {
|
|
35
|
-
return makeProcedureHandler(this.runtime, resolver, this.requestServices, { captureStackTrace: captureStackTrace(), type });
|
|
35
|
+
return makeProcedureHandler(this.parts.runtime, resolver, this.parts.requestServices, { captureStackTrace: captureStackTrace(), type });
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
//# sourceMappingURL=procedure.js.map
|
package/dist/procedure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procedure.js","sourceRoot":"","sources":["../src/procedure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAUvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"procedure.js","sourceRoot":"","sources":["../src/procedure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAUvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAW7E,MAAM,OAAO,sBAAsB;IAYjB,KAAK,CAAqG;IAE3H,YAAY,KAAyG;QACpH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CACJ,MAAmB;QAanB,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,sBAAsB,CAAC;YACjC,GAAG,IAAI,CAAC,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;YACzC,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC;SACjE,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CACL,MAAmB;QAanB,OAAO,IAAI,sBAAsB,CAAC;YACjC,GAAG,IAAI,CAAC,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACrE,kBAAkB,EAAE,MAAM;SAC1B,CAAC,CAAC;IACJ,CAAC;IAaD,KAAK,CAAC,QAAyF;QAC9F,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;IAaD,QAAQ,CAAC,QAAyF;QACjG,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IAaD,YAAY,CAAC,QAA4F;QACxG,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,CACjD,uBAAuB,CACtB,IAAI,CAAC,KAAK,CAAC,OAAO,EAClB,QAAQ,EACR,IAAI,CAAC,KAAK,CAAC,eAAe,EAC1B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAChE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAC7B,CACD,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,IAA0B,EAAE,QAAyF;QACpI,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACzI,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rejection-formatter.d.ts","sourceRoot":"","sources":["../src/rejection-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,qBAAqB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"rejection-formatter.d.ts","sourceRoot":"","sources":["../src/rejection-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,qBAAqB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAwB3F,eAAO,MAAM,aAAa,GAAI,KAAK,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,KAAK,EAAE,OAAO,SAAS,KAAG,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAG7I,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,kBAAkB;IAAE,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,KAAG,mBAChG,CAAC"}
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import { StandardSchemaV1Error } from "@trpc/server";
|
|
2
2
|
import { RejectionError } from "./rejection.js";
|
|
3
3
|
const inputRejection = ({ issues: [issue] }) => {
|
|
4
|
-
if (issue === undefined)
|
|
4
|
+
if (issue === undefined) {
|
|
5
5
|
return undefined;
|
|
6
|
+
}
|
|
6
7
|
const field = (issue.path ?? []).map((segment) => String(typeof segment === "object" ? segment.key : segment)).join(".");
|
|
7
|
-
return field === ""
|
|
8
|
+
return field === ""
|
|
9
|
+
? { _tag: "BadRequest", invalidInput: true, message: issue.message }
|
|
10
|
+
: { _tag: "BadRequest", field, invalidInput: true, message: issue.message };
|
|
8
11
|
};
|
|
12
|
+
const declared = ({ invalidInput: _reserved, ...rejection }) => rejection;
|
|
9
13
|
const rejectionFrom = (error) => {
|
|
10
|
-
if (error instanceof RejectionError)
|
|
11
|
-
return error.rejection;
|
|
12
|
-
|
|
14
|
+
if (error instanceof RejectionError) {
|
|
15
|
+
return declared(error.rejection);
|
|
16
|
+
}
|
|
17
|
+
if (error.code === "BAD_REQUEST" && error.cause instanceof StandardSchemaV1Error) {
|
|
13
18
|
return inputRejection(error.cause);
|
|
19
|
+
}
|
|
14
20
|
return undefined;
|
|
15
21
|
};
|
|
16
22
|
export const withRejection = (shape, error) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rejection-formatter.js","sourceRoot":"","sources":["../src/rejection-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA8C,MAAM,cAAc,CAAC;AAEjG,OAAO,
|
|
1
|
+
{"version":3,"file":"rejection-formatter.js","sourceRoot":"","sources":["../src/rejection-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA8C,MAAM,cAAc,CAAC;AAEjG,OAAO,EAA0B,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQxE,MAAM,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAyB,EAAgC,EAAE;IACnG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzH,OAAO,KAAK,KAAK,EAAE;QAClB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;QACpE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,SAAS,EAAqB,EAAoB,EAAE,CAAC,SAAS,CAAC;AAE/G,MAAM,aAAa,GAAG,CAAC,KAAgB,EAAgC,EAAE;IACxE,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAClF,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAA0C,KAAY,EAAE,KAAgB,EAA4C,EAAE;IAClJ,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;AAC3F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAwE,EAAuB,EAAE,CACjJ,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC"}
|
package/dist/rejection.d.ts
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { type TRPC_ERROR_CODE_KEY, TRPCError } from "@trpc/server";
|
|
2
2
|
import { Effect, Schema } from "effect";
|
|
3
|
-
import { EncodedRejection } from "./client/rejection.ts";
|
|
4
3
|
export declare const rejectionCode: (tag: string) => TRPC_ERROR_CODE_KEY;
|
|
4
|
+
declare const DeclaredRejection: Schema.StructWithRest<Schema.Struct<{
|
|
5
|
+
readonly _tag: Schema.String;
|
|
6
|
+
}>, readonly [Schema.$Record<Schema.String, Schema.Unknown>]>;
|
|
7
|
+
export type DeclaredRejection = typeof DeclaredRejection.Type;
|
|
8
|
+
interface InvalidInputIsReserved {
|
|
9
|
+
readonly "invalidInput is reserved for the mark on input that did not parse": never;
|
|
10
|
+
}
|
|
11
|
+
interface DeclaredEncoding {
|
|
12
|
+
readonly _tag: string;
|
|
13
|
+
readonly invalidInput?: InvalidInputIsReserved;
|
|
14
|
+
}
|
|
5
15
|
export declare class RejectionError extends TRPCError {
|
|
6
|
-
readonly rejection:
|
|
7
|
-
constructor(rejection:
|
|
16
|
+
readonly rejection: DeclaredRejection;
|
|
17
|
+
constructor(rejection: DeclaredRejection, code?: TRPC_ERROR_CODE_KEY);
|
|
8
18
|
}
|
|
9
19
|
export interface RejectWithOptions<Tag extends string> {
|
|
10
20
|
readonly code?: (tag: Tag) => TRPC_ERROR_CODE_KEY;
|
|
11
21
|
}
|
|
12
|
-
export declare function rejectWith<S extends Schema.
|
|
22
|
+
export declare function rejectWith<S extends Schema.ConstraintCodec<{
|
|
13
23
|
readonly _tag: string;
|
|
14
|
-
}, unknown>>(schema: S, options?: RejectWithOptions<S["Type"]["_tag"]>): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, Exclude<E, S["Type"]> | RejectionError, R | S["EncodingServices"]>;
|
|
24
|
+
}, DeclaredEncoding, unknown, unknown>>(schema: S, options?: RejectWithOptions<S["Type"]["_tag"]>): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, Exclude<E, S["Type"]> | RejectionError, R | S["EncodingServices"]>;
|
|
25
|
+
export {};
|
|
15
26
|
//# sourceMappingURL=rejection.d.ts.map
|
package/dist/rejection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rejection.d.ts","sourceRoot":"","sources":["../src/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"rejection.d.ts","sourceRoot":"","sources":["../src/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYxC,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,KAAG,mBAA+D,CAAC;AAE5G,QAAA,MAAM,iBAAiB;;6DAAgH,CAAC;AAExI,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAC;AAE9D,UAAU,sBAAsB;IAC/B,QAAQ,CAAC,mEAAmE,EAAE,KAAK,CAAC;CACpF;AAED,UAAU,gBAAgB;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;CAC/C;AAED,qBAAa,cAAe,SAAQ,SAAS;IAC5C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;gBAE1B,SAAS,EAAE,iBAAiB,EAAE,IAAI,GAAE,mBAAmD;CAInG;AAED,MAAM,WAAW,iBAAiB,CAAC,GAAG,SAAS,MAAM;IACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,mBAAmB,CAAC;CAClD;AAQD,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,eAAe,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,EACzH,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAC5C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC"}
|
package/dist/rejection.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { TRPCError } from "@trpc/server";
|
|
2
2
|
import { Effect, Schema } from "effect";
|
|
3
|
-
import { EncodedRejection } from "./client/rejection.js";
|
|
4
3
|
const TAXONOMY_CODES = new Map([
|
|
5
4
|
["NotFound", "NOT_FOUND"],
|
|
6
5
|
["Unauthorized", "UNAUTHORIZED"],
|
|
7
6
|
["Forbidden", "FORBIDDEN"],
|
|
8
7
|
["Conflict", "CONFLICT"],
|
|
9
8
|
["PreconditionFailed", "PRECONDITION_FAILED"],
|
|
9
|
+
["TooManyRequests", "TOO_MANY_REQUESTS"],
|
|
10
10
|
["AuthUnavailable", "SERVICE_UNAVAILABLE"],
|
|
11
11
|
]);
|
|
12
12
|
export const rejectionCode = (tag) => TAXONOMY_CODES.get(tag) ?? "BAD_REQUEST";
|
|
13
|
+
const DeclaredRejection = Schema.StructWithRest(Schema.Struct({ _tag: Schema.String }), [Schema.Record(Schema.String, Schema.Unknown)]);
|
|
13
14
|
export class RejectionError extends TRPCError {
|
|
14
15
|
rejection;
|
|
15
16
|
constructor(rejection, code = rejectionCode(rejection._tag)) {
|
|
@@ -19,7 +20,7 @@ export class RejectionError extends TRPCError {
|
|
|
19
20
|
}
|
|
20
21
|
const encodeRejection = (schema) => {
|
|
21
22
|
const encode = Schema.encodeUnknownEffect(schema);
|
|
22
|
-
const tagged = Schema.decodeUnknownEffect(
|
|
23
|
+
const tagged = Schema.decodeUnknownEffect(DeclaredRejection);
|
|
23
24
|
return (rejection) => Effect.orDie(Effect.flatMap(encode(rejection), tagged));
|
|
24
25
|
};
|
|
25
26
|
export function rejectWith(schema, options) {
|
package/dist/rejection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rejection.js","sourceRoot":"","sources":["../src/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,SAAS,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"rejection.js","sourceRoot":"","sources":["../src/rejection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,SAAS,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,cAAc,GAAG,IAAI,GAAG,CAA8B;IAC3D,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,cAAc,EAAE,cAAc,CAAC;IAChC,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAC7C,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;IACxC,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAuB,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC;AAE5G,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAaxI,MAAM,OAAO,cAAe,SAAQ,SAAS;IACnC,SAAS,CAAoB;IAEtC,YAAY,SAA4B,EAAE,OAA4B,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC;QAClG,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACrG,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;CACD;AAMD,MAAM,eAAe,GAAG,CAAC,MAAyB,EAAE,EAAE;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAC7D,OAAO,CAAC,SAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC;AAMF,MAAM,UAAU,UAAU,CAAC,MAAyB,EAAE,OAAmC;IACxF,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,aAAa,CAAC;IAC5C,OAAO,CAAU,IAA4B,EAAE,EAAE,CAChD,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CACtC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAC5G,CAAC;AACJ,CAAC"}
|
package/dist/request-signal.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-signal.d.ts","sourceRoot":"","sources":["../src/request-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,
|
|
1
|
+
{"version":3,"file":"request-signal.d.ts","sourceRoot":"","sources":["../src/request-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,eAAO,MAAM,aAAa,4CAAwH,CAAC"}
|
package/dist/request-signal.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { Context } from "effect";
|
|
2
|
-
/** The transport cancellation signal for the current tRPC procedure. */
|
|
3
2
|
export const RequestSignal = Context.Reference("@shivaedev/effect-trpc/RequestSignal", { defaultValue: () => undefined });
|
|
4
3
|
//# sourceMappingURL=request-signal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-signal.js","sourceRoot":"","sources":["../src/request-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,
|
|
1
|
+
{"version":3,"file":"request-signal.js","sourceRoot":"","sources":["../src/request-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAA0B,sCAAsC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caller.js","sourceRoot":"","sources":["../../src/testing/caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAkB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiB9C,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,OAAe,EAAW,EAAE,CAC1D,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAEpH,MAAM,MAAM,GAAG,CAAC,aAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"caller.js","sourceRoot":"","sources":["../../src/testing/caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAkB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiB9C,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,OAAe,EAAW,EAAE,CAC1D,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAEpH,MAAM,MAAM,GAAG,CAAC,aAAqB,EAAE,IAAuB,EAAE,aAAiC,EAAoB,EAAE;IACtH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAU,MAAM,EAAE,aAAa,CAAC,CAAC;IACzD,OAAO,OAAO,IAAI,KAAK,UAAU;QAChC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAChE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAOF,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,aAAqB,EAAE,QAAgC;IACzG,MAAM,KAAK,GAAG,CAAC,IAAuB,EAAW,EAAE,CAClD,IAAI,KAAK,CACR,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EACxC;QACC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa;YAClC,OAAO,MAAM,CAAC,UAAU,CAAC;gBACxB,KAAK,EAAE,uBAAuB;gBAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;aAC9F,CAAC,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,QAAQ;YACpB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACzD,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnC,CAAC;KACD,CACD,CAAC;IAEH,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAOD,MAAM,UAAU,uBAAuB,CAAC,OAAgB,EAAE,YAA2C,EAAE,QAAgC;IACtI,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,CAAC,OAAiB,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEjG,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACxB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ;YAC9B,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/testing/types.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import type { TestContext, Vitest } from "@effect/vitest";
|
|
2
|
-
import type { EffectClock, EffectTestOptions } from "@shivaedev/effect-test";
|
|
3
2
|
import type { Effect, Layer } from "effect";
|
|
3
|
+
import type { EffectClock, EffectTestOptions } from "@shivaedev/effect-test";
|
|
4
4
|
import type { EffectTRPCAdapter } from "../adapter.ts";
|
|
5
5
|
import type { AnyTestLayer } from "./any-test-layer.ts";
|
|
6
6
|
import type { EffectCallerFactory } from "./caller.ts";
|
|
7
7
|
export type TrpcHarnessTest<Harness, Provided> = <A, Eff extends Effect.Effect<unknown, unknown, Provided>>(name: string, body: (harness: Harness, context: TestContext) => Generator<Eff, A, never>, options?: number | EffectTestOptions) => void;
|
|
8
8
|
export interface TrpcHarnessTester<Harness, Provided> extends TrpcHarnessTest<Harness, Provided> {
|
|
9
|
+
readonly each: <Item>(cases: readonly Item[]) => <A, Eff extends Effect.Effect<unknown, unknown, Provided>>(name: string, body: (item: Item, harness: Harness, context: TestContext) => Generator<Eff, A, never>, options?: number | EffectTestOptions) => void;
|
|
10
|
+
readonly fails: TrpcHarnessTest<Harness, Provided>;
|
|
11
|
+
readonly only: TrpcHarnessTest<Harness, Provided>;
|
|
12
|
+
readonly runIf: (condition: unknown) => TrpcHarnessTest<Harness, Provided>;
|
|
9
13
|
readonly skip: TrpcHarnessTest<Harness, Provided>;
|
|
10
14
|
readonly skipIf: (condition: unknown) => TrpcHarnessTest<Harness, Provided>;
|
|
11
|
-
readonly runIf: (condition: unknown) => TrpcHarnessTest<Harness, Provided>;
|
|
12
|
-
readonly only: TrpcHarnessTest<Harness, Provided>;
|
|
13
|
-
readonly each: <Item>(cases: ReadonlyArray<Item>) => <A, Eff extends Effect.Effect<unknown, unknown, Provided>>(name: string, body: (item: Item, harness: Harness, context: TestContext) => Generator<Eff, A, never>, options?: number | EffectTestOptions) => void;
|
|
14
|
-
readonly fails: TrpcHarnessTest<Harness, Provided>;
|
|
15
15
|
}
|
|
16
16
|
export type TrpcTest<Options, Caller, Provided> = TrpcHarnessTest<EffectCallerFactory<Options, Caller>, Provided>;
|
|
17
17
|
export type TrpcTester<Options, Caller, Provided> = TrpcHarnessTester<EffectCallerFactory<Options, Caller>, Provided>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/testing/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/testing/vitest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../../src/testing/vitest.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAclI,wBAAgB,iBAAiB,CAAC,YAAY,SAAS,CAAC,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,SAAS,SAAS,YAAY,EAAE,OAAO,EACjI,OAAO,EAAE,wBAAwB,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,GACjE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AAmBpD,eAAO,MAAM,UAAU,GAAI,YAAY,SAAS,CAAC,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,SAAS,SAAS,YAAY,EACjH,SAAS,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,KACjD,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAIxF,CAAC"}
|
package/dist/testing/vitest.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { it as effectIt } from "@effect/vitest";
|
|
2
|
-
import { makeEffectIt } from "@shivaedev/effect-test";
|
|
3
2
|
import { Effect } from "effect";
|
|
3
|
+
import { makeEffectIt } from "@shivaedev/effect-test";
|
|
4
4
|
import { makeEffectCallerFactory } from "./caller.js";
|
|
5
5
|
function withEffectTRPC(tester) {
|
|
6
6
|
return new Proxy(effectIt, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/testing/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/testing/vitest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAItD,SAAS,cAAc,CAAC,MAAe;IACtC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QAC1B,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;YAC7B,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YACf,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;KACD,CAAC,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,iBAAiB,CAChC,OAAoF;IAEpF,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAA4B,CAAC;YACnE,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACtF,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CACzB,OAAmD,EACyC,EAAE,CAC9F,iBAAiB,CAAC;IACjB,GAAG,OAAO;IACV,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;CAC3C,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/effect-trpc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Effect-native procedures and testing for tRPC",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/ShivaeDev/platform.git",
|
|
10
|
-
"directory": "packages/effect-trpc"
|
|
11
|
-
},
|
|
12
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/effect-trpc#readme",
|
|
13
6
|
"bugs": {
|
|
14
7
|
"url": "https://github.com/ShivaeDev/platform/issues"
|
|
15
8
|
},
|
|
16
|
-
"
|
|
17
|
-
"
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/ShivaeDev/platform.git",
|
|
12
|
+
"directory": "packages/effect-trpc"
|
|
18
13
|
},
|
|
14
|
+
"license": "MIT",
|
|
19
15
|
"sideEffects": false,
|
|
20
|
-
"
|
|
21
|
-
"dist",
|
|
22
|
-
"src",
|
|
23
|
-
"CHANGELOG.md",
|
|
24
|
-
"README.md"
|
|
25
|
-
],
|
|
16
|
+
"type": "module",
|
|
26
17
|
"exports": {
|
|
27
18
|
".": {
|
|
28
19
|
"types": "./dist/index.d.ts",
|
|
@@ -44,26 +35,19 @@
|
|
|
44
35
|
},
|
|
45
36
|
"./package.json": "./package.json"
|
|
46
37
|
},
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
|
|
38
|
+
"files": [
|
|
39
|
+
"dist",
|
|
40
|
+
"src",
|
|
41
|
+
"CHANGELOG.md",
|
|
42
|
+
"README.md"
|
|
43
|
+
],
|
|
51
44
|
"dependencies": {
|
|
52
45
|
"@shivaedev/effect-test": "0.1.2"
|
|
53
46
|
},
|
|
54
|
-
"peerDependencies": {
|
|
55
|
-
"@effect/vitest": "4.0.0-rc.112",
|
|
56
|
-
"@trpc/server": "11.18.0",
|
|
57
|
-
"effect": "4.0.0-rc.112"
|
|
58
|
-
},
|
|
59
|
-
"peerDependenciesMeta": {
|
|
60
|
-
"@effect/vitest": {
|
|
61
|
-
"optional": true
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
47
|
"devDependencies": {
|
|
65
48
|
"@effect/vitest": "4.0.0-rc.112",
|
|
66
|
-
"@shivaedev/effect-contract": "0.
|
|
49
|
+
"@shivaedev/effect-contract": "0.2.0",
|
|
50
|
+
"@shivaedev/quality": "0.7.0",
|
|
67
51
|
"@trpc/client": "11.18.0",
|
|
68
52
|
"@trpc/server": "11.18.0",
|
|
69
53
|
"@types/node": "24.10.1",
|
|
@@ -73,13 +57,27 @@
|
|
|
73
57
|
"typescript": "npm:@typescript/typescript6@6.0.2",
|
|
74
58
|
"vitest": "4.1.9"
|
|
75
59
|
},
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"@effect/vitest": "4.0.0-rc.112",
|
|
62
|
+
"@trpc/server": "11.18.0",
|
|
63
|
+
"effect": "4.0.0-rc.112"
|
|
64
|
+
},
|
|
65
|
+
"peerDependenciesMeta": {
|
|
66
|
+
"@effect/vitest": {
|
|
67
|
+
"optional": true
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"engines": {
|
|
71
|
+
"node": ">=24"
|
|
72
|
+
},
|
|
73
|
+
"publishConfig": {
|
|
74
|
+
"access": "public",
|
|
75
|
+
"provenance": true
|
|
76
|
+
},
|
|
76
77
|
"scripts": {
|
|
77
78
|
"build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc6 --project tsconfig.build.json",
|
|
78
|
-
"
|
|
79
|
+
"ready": "pnpm typecheck && pnpm test && pnpm build",
|
|
79
80
|
"test": "vitest run",
|
|
80
|
-
"
|
|
81
|
-
"typecheck": "tsc --noEmit",
|
|
82
|
-
"typecheck:compat": "tsc6 --noEmit",
|
|
83
|
-
"ready": "pnpm check && pnpm typecheck && pnpm typecheck:compat && pnpm test && pnpm build && pnpm test:package"
|
|
81
|
+
"typecheck": "tsc --noEmit"
|
|
84
82
|
}
|
|
85
83
|
}
|
package/src/adapter.ts
CHANGED
|
@@ -47,12 +47,26 @@ export const makeEffectTRPC = <Requirements, RuntimeError = never>(
|
|
|
47
47
|
procedure: <Context, Meta, ContextOverrides, InputIn, InputOut, OutputIn, OutputOut, ProvidedServices, LayerError>(
|
|
48
48
|
builder: TRPCProcedureBuilder<Context, Meta, ContextOverrides, InputIn, InputOut, OutputIn, OutputOut, false>,
|
|
49
49
|
requestServices: EffectProcedureRequestServices<ResolverContext<Context, Meta, ContextOverrides>, ProvidedServices, LayerError>,
|
|
50
|
-
) =>
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
) => {
|
|
51
|
+
const loose = looseBuilder(builder);
|
|
52
|
+
return new EffectProcedureBuilder<
|
|
53
|
+
Context,
|
|
54
|
+
Meta,
|
|
55
|
+
ContextOverrides,
|
|
56
|
+
InputIn,
|
|
57
|
+
InputOut,
|
|
58
|
+
OutputIn,
|
|
59
|
+
OutputOut,
|
|
60
|
+
ProvidedServices,
|
|
61
|
+
LayerError,
|
|
62
|
+
Requirements
|
|
63
|
+
>({
|
|
64
|
+
builder: loose,
|
|
53
65
|
requestServices,
|
|
54
66
|
runtime,
|
|
55
|
-
|
|
67
|
+
subscriptionBuilder: loose,
|
|
68
|
+
});
|
|
69
|
+
},
|
|
56
70
|
runWithServices: contextBridge.run,
|
|
57
71
|
};
|
|
58
72
|
};
|
package/src/client/rejection.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { Option, Schema } from "effect";
|
|
2
2
|
|
|
3
|
-
export const EncodedRejection = Schema.StructWithRest(
|
|
3
|
+
export const EncodedRejection = Schema.StructWithRest(
|
|
4
|
+
Schema.Struct({ _tag: Schema.String, invalidInput: Schema.optionalKey(Schema.Literal(true)) }),
|
|
5
|
+
[Schema.Record(Schema.String, Schema.Unknown)],
|
|
6
|
+
);
|
|
4
7
|
|
|
5
8
|
export type EncodedRejection = typeof EncodedRejection.Type;
|
|
6
9
|
|
|
@@ -36,9 +36,9 @@ export interface ProcedureInvocation<Context> {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export interface ProcedureBuilderSurface<Context> {
|
|
39
|
-
input(schema: StandardSchema.StandardSchemaV1)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
subscription(resolver: (invocation: ProcedureInvocation<Context>) => Promise<AsyncIterable<unknown, void, unknown>>)
|
|
39
|
+
input: (schema: StandardSchema.StandardSchemaV1) => ProcedureBuilderSurface<Context>;
|
|
40
|
+
mutation: (resolver: (invocation: ProcedureInvocation<Context>) => Promise<unknown>) => unknown;
|
|
41
|
+
output: (schema: StandardSchema.StandardSchemaV1) => ProcedureBuilderSurface<Context>;
|
|
42
|
+
query: (resolver: (invocation: ProcedureInvocation<Context>) => Promise<unknown>) => unknown;
|
|
43
|
+
subscription: (resolver: (invocation: ProcedureInvocation<Context>) => Promise<AsyncIterable<unknown, void, unknown>>) => unknown;
|
|
44
44
|
}
|
package/src/internal/runtime.ts
CHANGED
|
@@ -61,7 +61,9 @@ const mapCause = (cause: Cause.Cause<unknown>, procedure: ProcedureInfo, consume
|
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
const interruptOn = (signal: AbortSignal | undefined): Effect.Effect<void> => {
|
|
64
|
-
if (signal === undefined)
|
|
64
|
+
if (signal === undefined) {
|
|
65
|
+
return Effect.never;
|
|
66
|
+
}
|
|
65
67
|
return Effect.callback<void>((resume) => {
|
|
66
68
|
if (signal.aborted) {
|
|
67
69
|
resume(Effect.void);
|
|
@@ -83,26 +85,6 @@ export const makeRuntimeBridge = <Requirements, RuntimeError>(
|
|
|
83
85
|
},
|
|
84
86
|
): RuntimeBridge<Requirements> => ({
|
|
85
87
|
instrument: (effect, procedure) => Effect.suspend(() => (options.instrument === undefined ? effect : options.instrument(effect, procedure))),
|
|
86
|
-
runStream: async (stream, runOptions) => {
|
|
87
|
-
const instrumented = Stream.suspend(() =>
|
|
88
|
-
options.instrumentStream === undefined ? stream : options.instrumentStream(stream, runOptions.procedure),
|
|
89
|
-
).pipe(
|
|
90
|
-
Stream.withSpan(runOptions.procedure.path, {
|
|
91
|
-
attributes: {
|
|
92
|
-
"rpc.method": runOptions.procedure.path,
|
|
93
|
-
"rpc.system": "trpc",
|
|
94
|
-
"trpc.type": runOptions.procedure.type,
|
|
95
|
-
},
|
|
96
|
-
captureStackTrace: runOptions.procedure.captureStackTrace,
|
|
97
|
-
}),
|
|
98
|
-
Stream.interruptWhen(interruptOn(runOptions.signal)),
|
|
99
|
-
Stream.catchCause((cause) => Stream.fail(mapCause(cause, runOptions.procedure, options.mapError))),
|
|
100
|
-
);
|
|
101
|
-
const context = await runtime.runPromise(Effect.context<Requirements>());
|
|
102
|
-
const ambient = contextBridge.current();
|
|
103
|
-
const provided = ambient === undefined ? context : Context.merge(context, ambient);
|
|
104
|
-
return Stream.toAsyncIterableWith(instrumented, provided);
|
|
105
|
-
},
|
|
106
88
|
runEffect: async (effect, runOptions) => {
|
|
107
89
|
const traced = effect.pipe(
|
|
108
90
|
Effect.withSpan(
|
|
@@ -129,4 +111,24 @@ export const makeRuntimeBridge = <Requirements, RuntimeError>(
|
|
|
129
111
|
}
|
|
130
112
|
throw mapCause(exit.cause, runOptions.procedure, options.mapError);
|
|
131
113
|
},
|
|
114
|
+
runStream: async (stream, runOptions) => {
|
|
115
|
+
const instrumented = Stream.suspend(() =>
|
|
116
|
+
options.instrumentStream === undefined ? stream : options.instrumentStream(stream, runOptions.procedure),
|
|
117
|
+
).pipe(
|
|
118
|
+
Stream.withSpan(runOptions.procedure.path, {
|
|
119
|
+
attributes: {
|
|
120
|
+
"rpc.method": runOptions.procedure.path,
|
|
121
|
+
"rpc.system": "trpc",
|
|
122
|
+
"trpc.type": runOptions.procedure.type,
|
|
123
|
+
},
|
|
124
|
+
captureStackTrace: runOptions.procedure.captureStackTrace,
|
|
125
|
+
}),
|
|
126
|
+
Stream.interruptWhen(interruptOn(runOptions.signal)),
|
|
127
|
+
Stream.catchCause((cause) => Stream.fail(mapCause(cause, runOptions.procedure, options.mapError))),
|
|
128
|
+
);
|
|
129
|
+
const context = await runtime.runPromise(Effect.context<Requirements>());
|
|
130
|
+
const ambient = contextBridge.current();
|
|
131
|
+
const provided = ambient === undefined ? context : Context.merge(context, ambient);
|
|
132
|
+
return Stream.toAsyncIterableWith(instrumented, provided);
|
|
133
|
+
},
|
|
132
134
|
});
|
package/src/procedure.ts
CHANGED
|
@@ -14,6 +14,14 @@ import { captureStackTrace } from "./internal/stack-trace.ts";
|
|
|
14
14
|
import { makeSubscriptionHandler } from "./internal/subscription-handler.ts";
|
|
15
15
|
import type { EffectProcedureRequestServices } from "./request-services.ts";
|
|
16
16
|
|
|
17
|
+
interface ProcedureParts<Context, Meta, ContextOverrides, ProvidedServices, LayerError, RuntimeRequirements> {
|
|
18
|
+
readonly builder: ProcedureBuilderSurface<ResolverContext<Context, Meta, ContextOverrides>>;
|
|
19
|
+
readonly requestServices: EffectProcedureRequestServices<ResolverContext<Context, Meta, ContextOverrides>, ProvidedServices, LayerError>;
|
|
20
|
+
readonly runtime: RuntimeBridge<RuntimeRequirements>;
|
|
21
|
+
readonly subscriptionBuilder: ProcedureBuilderSurface<ResolverContext<Context, Meta, ContextOverrides>>;
|
|
22
|
+
readonly subscriptionOutput?: Schema.ConstraintDecoder<unknown> | undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
17
25
|
export class EffectProcedureBuilder<
|
|
18
26
|
Context,
|
|
19
27
|
Meta,
|
|
@@ -26,13 +34,11 @@ export class EffectProcedureBuilder<
|
|
|
26
34
|
LayerError,
|
|
27
35
|
RuntimeRequirements,
|
|
28
36
|
> {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
private readonly subscriptionOutput?: Schema.ConstraintDecoder<unknown>,
|
|
35
|
-
) {}
|
|
37
|
+
private readonly parts: ProcedureParts<Context, Meta, ContextOverrides, ProvidedServices, LayerError, RuntimeRequirements>;
|
|
38
|
+
|
|
39
|
+
constructor(parts: ProcedureParts<Context, Meta, ContextOverrides, ProvidedServices, LayerError, RuntimeRequirements>) {
|
|
40
|
+
this.parts = parts;
|
|
41
|
+
}
|
|
36
42
|
|
|
37
43
|
input<SchemaValue extends Schema.ConstraintDecoder<unknown>>(
|
|
38
44
|
schema: SchemaValue,
|
|
@@ -49,13 +55,11 @@ export class EffectProcedureBuilder<
|
|
|
49
55
|
RuntimeRequirements
|
|
50
56
|
> {
|
|
51
57
|
const parser = Schema.toStandardSchemaV1(schema);
|
|
52
|
-
return new EffectProcedureBuilder(
|
|
53
|
-
this.
|
|
54
|
-
this.
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
this.subscriptionOutput,
|
|
58
|
-
);
|
|
58
|
+
return new EffectProcedureBuilder({
|
|
59
|
+
...this.parts,
|
|
60
|
+
builder: this.parts.builder.input(parser),
|
|
61
|
+
subscriptionBuilder: this.parts.subscriptionBuilder.input(parser),
|
|
62
|
+
});
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
output<SchemaValue extends Schema.ConstraintDecoder<unknown>>(
|
|
@@ -72,13 +76,11 @@ export class EffectProcedureBuilder<
|
|
|
72
76
|
LayerError,
|
|
73
77
|
RuntimeRequirements
|
|
74
78
|
> {
|
|
75
|
-
return new EffectProcedureBuilder(
|
|
76
|
-
this.
|
|
77
|
-
this.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
schema,
|
|
81
|
-
);
|
|
79
|
+
return new EffectProcedureBuilder({
|
|
80
|
+
...this.parts,
|
|
81
|
+
builder: this.parts.builder.output(Schema.toStandardSchemaV1(schema)),
|
|
82
|
+
subscriptionOutput: schema,
|
|
83
|
+
});
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
query<Output>(
|
|
@@ -93,7 +95,7 @@ export class EffectProcedureBuilder<
|
|
|
93
95
|
meta: Meta;
|
|
94
96
|
}>;
|
|
95
97
|
query(resolver: EffectProcedureResolver<never, ProvidedServices | RuntimeRequirements, unknown>): unknown {
|
|
96
|
-
return this.builder.query(this.handler("query", resolver));
|
|
98
|
+
return this.parts.builder.query(this.handler("query", resolver));
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
mutation<Output>(
|
|
@@ -108,7 +110,7 @@ export class EffectProcedureBuilder<
|
|
|
108
110
|
meta: Meta;
|
|
109
111
|
}>;
|
|
110
112
|
mutation(resolver: EffectProcedureResolver<never, ProvidedServices | RuntimeRequirements, unknown>): unknown {
|
|
111
|
-
return this.builder.mutation(this.handler("mutation", resolver));
|
|
113
|
+
return this.parts.builder.mutation(this.handler("mutation", resolver));
|
|
112
114
|
}
|
|
113
115
|
|
|
114
116
|
subscription<Output>(
|
|
@@ -123,18 +125,18 @@ export class EffectProcedureBuilder<
|
|
|
123
125
|
meta: Meta;
|
|
124
126
|
}>;
|
|
125
127
|
subscription(resolver: EffectSubscriptionResolver<never, ProvidedServices | RuntimeRequirements, unknown>): unknown {
|
|
126
|
-
return this.subscriptionBuilder.subscription(
|
|
128
|
+
return this.parts.subscriptionBuilder.subscription(
|
|
127
129
|
makeSubscriptionHandler(
|
|
128
|
-
this.runtime,
|
|
130
|
+
this.parts.runtime,
|
|
129
131
|
resolver,
|
|
130
|
-
this.requestServices,
|
|
132
|
+
this.parts.requestServices,
|
|
131
133
|
{ captureStackTrace: captureStackTrace(), type: "subscription" },
|
|
132
|
-
this.subscriptionOutput,
|
|
134
|
+
this.parts.subscriptionOutput,
|
|
133
135
|
),
|
|
134
136
|
);
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
private handler(type: "mutation" | "query", resolver: EffectProcedureResolver<never, ProvidedServices | RuntimeRequirements, unknown>) {
|
|
138
|
-
return makeProcedureHandler(this.runtime, resolver, this.requestServices, { captureStackTrace: captureStackTrace(), type });
|
|
140
|
+
return makeProcedureHandler(this.parts.runtime, resolver, this.parts.requestServices, { captureStackTrace: captureStackTrace(), type });
|
|
139
141
|
}
|
|
140
142
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StandardSchemaV1Error, type TRPCDefaultErrorShape, type TRPCError } from "@trpc/server";
|
|
2
2
|
import type { EncodedRejection } from "./client/rejection.ts";
|
|
3
|
-
import { RejectionError } from "./rejection.ts";
|
|
3
|
+
import { type DeclaredRejection, RejectionError } from "./rejection.ts";
|
|
4
4
|
|
|
5
5
|
export interface RejectionData {
|
|
6
6
|
readonly rejection?: EncodedRejection;
|
|
@@ -9,14 +9,24 @@ export interface RejectionData {
|
|
|
9
9
|
export type RejectionErrorShape = TRPCDefaultErrorShape & { readonly data: RejectionData };
|
|
10
10
|
|
|
11
11
|
const inputRejection = ({ issues: [issue] }: StandardSchemaV1Error): EncodedRejection | undefined => {
|
|
12
|
-
if (issue === undefined)
|
|
12
|
+
if (issue === undefined) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
13
15
|
const field = (issue.path ?? []).map((segment) => String(typeof segment === "object" ? segment.key : segment)).join(".");
|
|
14
|
-
return field === ""
|
|
16
|
+
return field === ""
|
|
17
|
+
? { _tag: "BadRequest", invalidInput: true, message: issue.message }
|
|
18
|
+
: { _tag: "BadRequest", field, invalidInput: true, message: issue.message };
|
|
15
19
|
};
|
|
16
20
|
|
|
21
|
+
const declared = ({ invalidInput: _reserved, ...rejection }: DeclaredRejection): EncodedRejection => rejection;
|
|
22
|
+
|
|
17
23
|
const rejectionFrom = (error: TRPCError): EncodedRejection | undefined => {
|
|
18
|
-
if (error instanceof RejectionError)
|
|
19
|
-
|
|
24
|
+
if (error instanceof RejectionError) {
|
|
25
|
+
return declared(error.rejection);
|
|
26
|
+
}
|
|
27
|
+
if (error.code === "BAD_REQUEST" && error.cause instanceof StandardSchemaV1Error) {
|
|
28
|
+
return inputRejection(error.cause);
|
|
29
|
+
}
|
|
20
30
|
return undefined;
|
|
21
31
|
};
|
|
22
32
|
|
package/src/rejection.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type TRPC_ERROR_CODE_KEY, TRPCError } from "@trpc/server";
|
|
2
2
|
import { Effect, Schema } from "effect";
|
|
3
|
-
import { EncodedRejection } from "./client/rejection.ts";
|
|
4
3
|
|
|
5
4
|
const TAXONOMY_CODES = new Map<string, TRPC_ERROR_CODE_KEY>([
|
|
6
5
|
["NotFound", "NOT_FOUND"],
|
|
@@ -8,15 +7,29 @@ const TAXONOMY_CODES = new Map<string, TRPC_ERROR_CODE_KEY>([
|
|
|
8
7
|
["Forbidden", "FORBIDDEN"],
|
|
9
8
|
["Conflict", "CONFLICT"],
|
|
10
9
|
["PreconditionFailed", "PRECONDITION_FAILED"],
|
|
10
|
+
["TooManyRequests", "TOO_MANY_REQUESTS"],
|
|
11
11
|
["AuthUnavailable", "SERVICE_UNAVAILABLE"],
|
|
12
12
|
]);
|
|
13
13
|
|
|
14
14
|
export const rejectionCode = (tag: string): TRPC_ERROR_CODE_KEY => TAXONOMY_CODES.get(tag) ?? "BAD_REQUEST";
|
|
15
15
|
|
|
16
|
+
const DeclaredRejection = Schema.StructWithRest(Schema.Struct({ _tag: Schema.String }), [Schema.Record(Schema.String, Schema.Unknown)]);
|
|
17
|
+
|
|
18
|
+
export type DeclaredRejection = typeof DeclaredRejection.Type;
|
|
19
|
+
|
|
20
|
+
interface InvalidInputIsReserved {
|
|
21
|
+
readonly "invalidInput is reserved for the mark on input that did not parse": never;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface DeclaredEncoding {
|
|
25
|
+
readonly _tag: string;
|
|
26
|
+
readonly invalidInput?: InvalidInputIsReserved;
|
|
27
|
+
}
|
|
28
|
+
|
|
16
29
|
export class RejectionError extends TRPCError {
|
|
17
|
-
readonly rejection:
|
|
30
|
+
readonly rejection: DeclaredRejection;
|
|
18
31
|
|
|
19
|
-
constructor(rejection:
|
|
32
|
+
constructor(rejection: DeclaredRejection, code: TRPC_ERROR_CODE_KEY = rejectionCode(rejection._tag)) {
|
|
20
33
|
super({ code, message: typeof rejection.message === "string" ? rejection.message : rejection._tag });
|
|
21
34
|
this.rejection = rejection;
|
|
22
35
|
}
|
|
@@ -28,11 +41,11 @@ export interface RejectWithOptions<Tag extends string> {
|
|
|
28
41
|
|
|
29
42
|
const encodeRejection = (schema: Schema.Constraint) => {
|
|
30
43
|
const encode = Schema.encodeUnknownEffect(schema);
|
|
31
|
-
const tagged = Schema.decodeUnknownEffect(
|
|
44
|
+
const tagged = Schema.decodeUnknownEffect(DeclaredRejection);
|
|
32
45
|
return (rejection: unknown) => Effect.orDie(Effect.flatMap(encode(rejection), tagged));
|
|
33
46
|
};
|
|
34
47
|
|
|
35
|
-
export function rejectWith<S extends Schema.
|
|
48
|
+
export function rejectWith<S extends Schema.ConstraintCodec<{ readonly _tag: string }, DeclaredEncoding, unknown, unknown>>(
|
|
36
49
|
schema: S,
|
|
37
50
|
options?: RejectWithOptions<S["Type"]["_tag"]>,
|
|
38
51
|
): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, Exclude<E, S["Type"]> | RejectionError, R | S["EncodingServices"]>;
|
package/src/request-signal.ts
CHANGED
package/src/testing/caller.ts
CHANGED
|
@@ -19,7 +19,7 @@ type Adapter = Pick<EffectTRPCAdapter<never>, "runWithServices">;
|
|
|
19
19
|
const member = (node: unknown, segment: string): unknown =>
|
|
20
20
|
(typeof node === "object" && node !== null) || typeof node === "function" ? Reflect.get(node, segment) : undefined;
|
|
21
21
|
|
|
22
|
-
const invoke = (promiseCaller: object, path:
|
|
22
|
+
const invoke = (promiseCaller: object, path: readonly string[], argumentsList: readonly unknown[]): Promise<unknown> => {
|
|
23
23
|
const leaf = path.reduce<unknown>(member, promiseCaller);
|
|
24
24
|
return typeof leaf === "function"
|
|
25
25
|
? Promise.resolve(Reflect.apply(leaf, undefined, argumentsList))
|
|
@@ -32,7 +32,7 @@ export function makeEffectCaller<Caller extends object, Services>(
|
|
|
32
32
|
services: Context.Context<Services>,
|
|
33
33
|
): EffectCaller<Caller>;
|
|
34
34
|
export function makeEffectCaller(adapter: Adapter, promiseCaller: object, services: Context.Context<never>): unknown {
|
|
35
|
-
const build = (path:
|
|
35
|
+
const build = (path: readonly string[]): unknown =>
|
|
36
36
|
new Proxy(
|
|
37
37
|
Object.assign(() => undefined, { path }),
|
|
38
38
|
{
|
package/src/testing/types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TestContext, Vitest } from "@effect/vitest";
|
|
2
|
-
import type { EffectClock, EffectTestOptions } from "@shivaedev/effect-test";
|
|
3
2
|
import type { Effect, Layer } from "effect";
|
|
3
|
+
import type { EffectClock, EffectTestOptions } from "@shivaedev/effect-test";
|
|
4
4
|
import type { EffectTRPCAdapter } from "../adapter.ts";
|
|
5
5
|
import type { AnyTestLayer } from "./any-test-layer.ts";
|
|
6
6
|
import type { EffectCallerFactory } from "./caller.ts";
|
|
@@ -12,18 +12,18 @@ export type TrpcHarnessTest<Harness, Provided> = <A, Eff extends Effect.Effect<u
|
|
|
12
12
|
) => void;
|
|
13
13
|
|
|
14
14
|
export interface TrpcHarnessTester<Harness, Provided> extends TrpcHarnessTest<Harness, Provided> {
|
|
15
|
-
readonly skip: TrpcHarnessTest<Harness, Provided>;
|
|
16
|
-
readonly skipIf: (condition: unknown) => TrpcHarnessTest<Harness, Provided>;
|
|
17
|
-
readonly runIf: (condition: unknown) => TrpcHarnessTest<Harness, Provided>;
|
|
18
|
-
readonly only: TrpcHarnessTest<Harness, Provided>;
|
|
19
15
|
readonly each: <Item>(
|
|
20
|
-
cases:
|
|
16
|
+
cases: readonly Item[],
|
|
21
17
|
) => <A, Eff extends Effect.Effect<unknown, unknown, Provided>>(
|
|
22
18
|
name: string,
|
|
23
19
|
body: (item: Item, harness: Harness, context: TestContext) => Generator<Eff, A, never>,
|
|
24
20
|
options?: number | EffectTestOptions,
|
|
25
21
|
) => void;
|
|
26
22
|
readonly fails: TrpcHarnessTest<Harness, Provided>;
|
|
23
|
+
readonly only: TrpcHarnessTest<Harness, Provided>;
|
|
24
|
+
readonly runIf: (condition: unknown) => TrpcHarnessTest<Harness, Provided>;
|
|
25
|
+
readonly skip: TrpcHarnessTest<Harness, Provided>;
|
|
26
|
+
readonly skipIf: (condition: unknown) => TrpcHarnessTest<Harness, Provided>;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export type TrpcTest<Options, Caller, Provided> = TrpcHarnessTest<EffectCallerFactory<Options, Caller>, Provided>;
|
package/src/testing/vitest.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { it as effectIt, type Vitest } from "@effect/vitest";
|
|
2
|
-
import { makeEffectIt } from "@shivaedev/effect-test";
|
|
3
2
|
import { Effect, type Layer } from "effect";
|
|
3
|
+
import { makeEffectIt } from "@shivaedev/effect-test";
|
|
4
4
|
import type { AnyTestLayer } from "./any-test-layer.ts";
|
|
5
5
|
import { makeEffectCallerFactory } from "./caller.ts";
|
|
6
6
|
import type { CallerOptions, CallerResult, MakeTrpcHarnessItOptions, MakeTrpcItOptions, TrpcHarnessIt, TrpcIt } from "./types.ts";
|