effect-app 4.0.0-beta.200 → 4.0.0-beta.202

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 (41) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/Schema/brand.d.ts +3 -6
  3. package/dist/Schema/brand.d.ts.map +1 -1
  4. package/dist/Schema/brand.js +1 -1
  5. package/dist/Schema/moreStrings.d.ts +18 -106
  6. package/dist/Schema/moreStrings.d.ts.map +1 -1
  7. package/dist/Schema/numbers.d.ts +15 -127
  8. package/dist/Schema/numbers.d.ts.map +1 -1
  9. package/dist/Schema/strings.d.ts +5 -37
  10. package/dist/Schema/strings.d.ts.map +1 -1
  11. package/dist/client/apiClientFactory.d.ts +2 -2
  12. package/dist/client/apiClientFactory.d.ts.map +1 -1
  13. package/dist/client/apiClientFactory.js +23 -23
  14. package/dist/client/clientFor.d.ts +11 -1
  15. package/dist/client/clientFor.d.ts.map +1 -1
  16. package/dist/client/clientFor.js +1 -1
  17. package/dist/client/makeClient.d.ts +52 -52
  18. package/dist/client/makeClient.d.ts.map +1 -1
  19. package/dist/client/makeClient.js +5 -4
  20. package/dist/middleware.d.ts +8 -9
  21. package/dist/middleware.d.ts.map +1 -1
  22. package/dist/middleware.js +8 -6
  23. package/dist/rpc/Invalidation.d.ts +9 -4
  24. package/dist/rpc/Invalidation.d.ts.map +1 -1
  25. package/dist/rpc/Invalidation.js +3 -3
  26. package/dist/rpc/MiddlewareMaker.d.ts +1 -1
  27. package/dist/rpc/MiddlewareMaker.d.ts.map +1 -1
  28. package/dist/rpc/MiddlewareMaker.js +7 -10
  29. package/package.json +1 -1
  30. package/src/Schema/brand.ts +19 -7
  31. package/src/client/apiClientFactory.ts +24 -27
  32. package/src/client/clientFor.ts +11 -0
  33. package/src/client/makeClient.ts +13 -6
  34. package/src/middleware.ts +7 -5
  35. package/src/rpc/Invalidation.ts +8 -3
  36. package/src/rpc/MiddlewareMaker.ts +6 -10
  37. package/test/dist/rpc.test.d.ts.map +1 -1
  38. package/test/dist/stream-error.types.d.ts +2 -0
  39. package/test/dist/stream-error.types.d.ts.map +1 -0
  40. package/test/dist/stream-error.types.js +27 -0
  41. package/test/rpc.test.ts +4 -1
@@ -7,7 +7,6 @@ import { type HandlersFrom } from "effect/unstable/rpc/RpcGroup"
7
7
  import * as Context from "../Context.js"
8
8
  import { PreludeLogger } from "../logger.js"
9
9
  import { type TypeTestId } from "../TypeTest.js"
10
- import { typedValuesOf } from "../utils.js"
11
10
  import { type GetContextConfig, type RequestContextMapTagAny, type RpcContextMap } from "./RpcContextMap.js"
12
11
  import { type AddMiddleware, type AnyDynamic, type RpcDynamic, type RpcMiddlewareV4, type TagClassAny } from "./RpcMiddleware.js"
13
12
  import * as RpcMiddlewareX from "./RpcMiddleware.js"
@@ -424,19 +423,16 @@ export const Tag = <Self>() =>
424
423
  {
425
424
  const config = options?.config ?? {} as Config
426
425
 
427
- // based on the config, we must enhance (union) or set failures.
428
- // TODO: we should only include errors that are relevant based on the middleware config.ks
429
- const error = options?.error
430
- const errors = typedValuesOf(rcm.config).map((_) => _.error).filter((_) => _ && _ !== S.Never) // TODO: only the errors relevant based on config
431
- const allErrors = error ? [error, ...errors] : errors
432
- const [firstError, ...restErrors] = allErrors
433
- const newError = firstError ? S.Union([firstError, ...restErrors]) : S.Never
434
-
426
+ // The rpc's `error` schema carries ONLY the request's own declared errors.
427
+ // Middleware errors (rcm-derived) reach the wire via the middleware tag
428
+ // attached to the rpc group later (`RpcGroup.middleware(...)` at the
429
+ // routing/client level), and are unioned into the failure schema by
430
+ // `Rpc.exitSchema`'s `rpc.middlewares[*].error` walk.
435
431
  // @ts-expect-error — TypeScript can't prove Simplify<T> ≡ { [K in keyof T]: T[K] } for unresolved generics (primaryKey)
436
432
  const rpc = Rpc.make(tag, {
437
433
  ...options?.payload !== undefined ? { payload: options.payload } : {},
438
434
  ...options?.success !== undefined ? { success: options.success } : {},
439
- error: newError,
435
+ ...options?.error !== undefined ? { error: options.error } : {},
440
436
  ...options?.stream !== undefined ? { stream: options.stream } : {},
441
437
  ...options?.primaryKey !== undefined ? { primaryKey: options.primaryKey } : {}
442
438
  }) as any
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.test.d.ts","sourceRoot":"","sources":["../rpc.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAErF,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,qBAAa,iBAAkB,SAAQ,sBAIrC;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKL,qBAAa,KAAM,SAAQ,UAQzB;CAAG"}
1
+ {"version":3,"file":"rpc.test.d.ts","sourceRoot":"","sources":["../rpc.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAErF,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,qBAAa,iBAAkB,SAAQ,sBAIrC;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKL,qBAAa,KAAM,SAAQ,UAQzB;CAAG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWVycm9yLnR5cGVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zdHJlYW0tZXJyb3IudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-error.types.d.ts","sourceRoot":"","sources":["../stream-error.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { S } from "effect-app";
2
+ import { makeRpcClient } from "effect-app/client";
3
+ class GeneralError extends S.TaggedError("GeneralError")("GeneralError", {
4
+ message: S.String
5
+ }) {
6
+ }
7
+ class CustomError extends S.TaggedError("CustomError")("CustomError", {
8
+ reason: S.String
9
+ }) {
10
+ }
11
+ const { TaggedRequestFor } = makeRpcClient({ config: {} }, GeneralError);
12
+ const Req = TaggedRequestFor("Test");
13
+ class StreamWithError extends Req.Stream()("StreamWithError", {}, {
14
+ success: S.Number,
15
+ error: CustomError
16
+ }) {
17
+ }
18
+ const _check = true;
19
+ const _check2 = true;
20
+ class StreamNoError extends Req.Stream()("StreamNoError", {}, {
21
+ success: S.Number
22
+ }) {
23
+ }
24
+ const _check3 = true;
25
+ const _check4 = true;
26
+ console.log("ok");
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWVycm9yLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3RyZWFtLWVycm9yLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRWpELE1BQU0sWUFBYSxTQUFRLENBQUMsQ0FBQyxXQUFXLENBQWUsY0FBYyxDQUFDLENBQUMsY0FBYyxFQUFFO0lBQ3JGLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtDQUNsQixDQUFDO0NBQUc7QUFFTCxNQUFNLFdBQVksU0FBUSxDQUFDLENBQUMsV0FBVyxDQUFjLGFBQWEsQ0FBQyxDQUFDLGFBQWEsRUFBRTtJQUNqRixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07Q0FDakIsQ0FBQztDQUFHO0FBRUwsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQVMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFBO0FBQy9FLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBRXBDLE1BQU0sZUFBZ0IsU0FBUSxHQUFHLENBQUMsTUFBTSxFQUFtQixDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRTtJQUNqRixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDakIsS0FBSyxFQUFFLFdBQVc7Q0FDbkIsQ0FBQztDQUFHO0FBR0wsTUFBTSxNQUFNLEdBQXdELElBQUksQ0FBQTtBQUN4RSxNQUFNLE9BQU8sR0FBd0QsSUFBSSxDQUFBO0FBRXpFLE1BQU0sYUFBYyxTQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQWlCLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRTtJQUMzRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07Q0FDbEIsQ0FBQztDQUFHO0FBRUwsTUFBTSxPQUFPLEdBQTJDLElBQUksQ0FBQTtBQUM1RCxNQUFNLE9BQU8sR0FBMkMsSUFBSSxDQUFBO0FBRTVELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUEifQ==
package/test/rpc.test.ts CHANGED
@@ -47,7 +47,10 @@ test("ForceVoid decodes and encodes as void", () => {
47
47
  readonly newUsersLast24Hours: number
48
48
  readonly newUsersLastWeek: number
49
49
  }>()
50
- expectTypeOf<typeof _statsError>().toEqualTypeOf<NotLoggedInError | UnauthorizedError>()
50
+ // Resource error carries only `config.error` (and optional `generalErrors`); rcm-derived
51
+ // middleware errors no longer leak into `resource.error` — they reach the wire via the
52
+ // middleware tag attached to the rpc group (`rpc.middlewares[*].error` failure-union).
53
+ expectTypeOf<typeof _statsError>().toEqualTypeOf<never>()
51
54
  expectTypeOf<typeof _statsRequestType>().toEqualTypeOf<"query">()
52
55
  expectTypeOf(statsFromMake).toEqualTypeOf<Stats>()
53
56
  expectTypeOf(statsFromMakeOption).toEqualTypeOf<Option.Option<Stats>>()