effect-app 4.0.0-beta.21 → 4.0.0-beta.210

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 (219) hide show
  1. package/CHANGELOG.md +952 -0
  2. package/dist/Array.d.ts +1 -1
  3. package/dist/Chunk.d.ts +1 -1
  4. package/dist/Chunk.d.ts.map +1 -1
  5. package/dist/Config/SecretURL.d.ts +1 -1
  6. package/dist/Config/SecretURL.d.ts.map +1 -1
  7. package/dist/Config/SecretURL.js +2 -2
  8. package/dist/Config/internal/configSecretURL.d.ts +1 -1
  9. package/dist/Config/internal/configSecretURL.d.ts.map +1 -1
  10. package/dist/Config.d.ts +7 -0
  11. package/dist/Config.d.ts.map +1 -0
  12. package/dist/Config.js +6 -0
  13. package/dist/ConfigProvider.d.ts +39 -0
  14. package/dist/ConfigProvider.d.ts.map +1 -0
  15. package/dist/ConfigProvider.js +42 -0
  16. package/dist/Context.d.ts +40 -0
  17. package/dist/Context.d.ts.map +1 -0
  18. package/dist/Context.js +67 -0
  19. package/dist/Effect.d.ts +9 -10
  20. package/dist/Effect.d.ts.map +1 -1
  21. package/dist/Effect.js +3 -6
  22. package/dist/Function.d.ts +1 -1
  23. package/dist/Function.d.ts.map +1 -1
  24. package/dist/Inputify.type.d.ts +1 -1
  25. package/dist/Layer.d.ts +7 -6
  26. package/dist/Layer.d.ts.map +1 -1
  27. package/dist/Layer.js +1 -1
  28. package/dist/NonEmptySet.d.ts +1 -1
  29. package/dist/NonEmptySet.d.ts.map +1 -1
  30. package/dist/Option.d.ts +1 -1
  31. package/dist/Option.d.ts.map +1 -1
  32. package/dist/Pure.d.ts +5 -5
  33. package/dist/Pure.d.ts.map +1 -1
  34. package/dist/Pure.js +13 -13
  35. package/dist/Schema/Class.d.ts +66 -20
  36. package/dist/Schema/Class.d.ts.map +1 -1
  37. package/dist/Schema/Class.js +189 -22
  38. package/dist/Schema/FastCheck.d.ts +1 -1
  39. package/dist/Schema/FastCheck.d.ts.map +1 -1
  40. package/dist/Schema/Methods.d.ts +1 -1
  41. package/dist/Schema/SchemaParser.d.ts +5 -0
  42. package/dist/Schema/SchemaParser.d.ts.map +1 -0
  43. package/dist/Schema/SchemaParser.js +6 -0
  44. package/dist/Schema/SpecialJsonSchema.d.ts +33 -0
  45. package/dist/Schema/SpecialJsonSchema.d.ts.map +1 -0
  46. package/dist/Schema/SpecialJsonSchema.js +122 -0
  47. package/dist/Schema/SpecialOpenApi.d.ts +32 -0
  48. package/dist/Schema/SpecialOpenApi.d.ts.map +1 -0
  49. package/dist/Schema/SpecialOpenApi.js +123 -0
  50. package/dist/Schema/brand.d.ts +4 -2
  51. package/dist/Schema/brand.d.ts.map +1 -1
  52. package/dist/Schema/brand.js +1 -1
  53. package/dist/Schema/email.d.ts +1 -1
  54. package/dist/Schema/email.d.ts.map +1 -1
  55. package/dist/Schema/email.js +7 -4
  56. package/dist/Schema/ext.d.ts +117 -45
  57. package/dist/Schema/ext.d.ts.map +1 -1
  58. package/dist/Schema/ext.js +131 -42
  59. package/dist/Schema/moreStrings.d.ts +37 -25
  60. package/dist/Schema/moreStrings.d.ts.map +1 -1
  61. package/dist/Schema/moreStrings.js +15 -16
  62. package/dist/Schema/numbers.d.ts +15 -15
  63. package/dist/Schema/numbers.d.ts.map +1 -1
  64. package/dist/Schema/numbers.js +10 -12
  65. package/dist/Schema/phoneNumber.d.ts +1 -1
  66. package/dist/Schema/phoneNumber.d.ts.map +1 -1
  67. package/dist/Schema/phoneNumber.js +6 -3
  68. package/dist/Schema/schema.d.ts +1 -1
  69. package/dist/Schema/strings.d.ts +5 -5
  70. package/dist/Schema/strings.d.ts.map +1 -1
  71. package/dist/Schema/strings.js +1 -5
  72. package/dist/Schema.d.ts +147 -15
  73. package/dist/Schema.d.ts.map +1 -1
  74. package/dist/Schema.js +131 -16
  75. package/dist/Set.d.ts +1 -1
  76. package/dist/Set.d.ts.map +1 -1
  77. package/dist/TypeTest.d.ts +1 -1
  78. package/dist/Types.d.ts +1 -1
  79. package/dist/Widen.type.d.ts +1 -1
  80. package/dist/_ext/Array.d.ts +1 -1
  81. package/dist/_ext/Array.d.ts.map +1 -1
  82. package/dist/_ext/date.d.ts +1 -1
  83. package/dist/_ext/misc.d.ts +1 -1
  84. package/dist/_ext/ord.ext.d.ts +1 -1
  85. package/dist/_ext/ord.ext.d.ts.map +1 -1
  86. package/dist/builtin.d.ts +1 -1
  87. package/dist/builtin.d.ts.map +1 -1
  88. package/dist/client/InvalidationKeys.d.ts +29 -0
  89. package/dist/client/InvalidationKeys.d.ts.map +1 -0
  90. package/dist/client/InvalidationKeys.js +33 -0
  91. package/dist/client/apiClientFactory.d.ts +20 -32
  92. package/dist/client/apiClientFactory.d.ts.map +1 -1
  93. package/dist/client/apiClientFactory.js +95 -32
  94. package/dist/client/clientFor.d.ts +51 -17
  95. package/dist/client/clientFor.d.ts.map +1 -1
  96. package/dist/client/clientFor.js +9 -1
  97. package/dist/client/errors.d.ts +49 -25
  98. package/dist/client/errors.d.ts.map +1 -1
  99. package/dist/client/errors.js +43 -17
  100. package/dist/client/makeClient.d.ts +481 -33
  101. package/dist/client/makeClient.d.ts.map +1 -1
  102. package/dist/client/makeClient.js +66 -24
  103. package/dist/client.d.ts +2 -1
  104. package/dist/client.d.ts.map +1 -1
  105. package/dist/client.js +2 -1
  106. package/dist/faker.d.ts +1 -1
  107. package/dist/faker.d.ts.map +1 -1
  108. package/dist/http/Request.d.ts +2 -2
  109. package/dist/http/Request.d.ts.map +1 -1
  110. package/dist/http/internal/lib.d.ts +1 -1
  111. package/dist/http.d.ts +1 -1
  112. package/dist/ids.d.ts +12 -12
  113. package/dist/ids.d.ts.map +1 -1
  114. package/dist/ids.js +3 -2
  115. package/dist/index.d.ts +5 -8
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +6 -8
  118. package/dist/logger.d.ts +1 -1
  119. package/dist/middleware.d.ts +14 -8
  120. package/dist/middleware.d.ts.map +1 -1
  121. package/dist/middleware.js +14 -8
  122. package/dist/rpc/Invalidation.d.ts +402 -0
  123. package/dist/rpc/Invalidation.d.ts.map +1 -0
  124. package/dist/rpc/Invalidation.js +150 -0
  125. package/dist/rpc/MiddlewareMaker.d.ts +5 -4
  126. package/dist/rpc/MiddlewareMaker.d.ts.map +1 -1
  127. package/dist/rpc/MiddlewareMaker.js +57 -37
  128. package/dist/rpc/RpcContextMap.d.ts +3 -3
  129. package/dist/rpc/RpcContextMap.d.ts.map +1 -1
  130. package/dist/rpc/RpcContextMap.js +4 -4
  131. package/dist/rpc/RpcMiddleware.d.ts +5 -4
  132. package/dist/rpc/RpcMiddleware.d.ts.map +1 -1
  133. package/dist/rpc/RpcMiddleware.js +1 -1
  134. package/dist/rpc.d.ts +2 -2
  135. package/dist/rpc.d.ts.map +1 -1
  136. package/dist/rpc.js +2 -2
  137. package/dist/transform.d.ts +1 -1
  138. package/dist/transform.d.ts.map +1 -1
  139. package/dist/transform.js +3 -3
  140. package/dist/utils/effectify.d.ts +1 -1
  141. package/dist/utils/extend.d.ts +1 -1
  142. package/dist/utils/extend.d.ts.map +1 -1
  143. package/dist/utils/gen.d.ts +2 -2
  144. package/dist/utils/gen.d.ts.map +1 -1
  145. package/dist/utils/logLevel.d.ts +2 -2
  146. package/dist/utils/logLevel.d.ts.map +1 -1
  147. package/dist/utils/logger.d.ts +3 -3
  148. package/dist/utils/logger.d.ts.map +1 -1
  149. package/dist/utils/logger.js +3 -3
  150. package/dist/utils.d.ts +31 -38
  151. package/dist/utils.d.ts.map +1 -1
  152. package/dist/utils.js +12 -25
  153. package/dist/validation/validators.d.ts +1 -1
  154. package/dist/validation/validators.d.ts.map +1 -1
  155. package/dist/validation.d.ts +1 -1
  156. package/dist/validation.d.ts.map +1 -1
  157. package/package.json +46 -24
  158. package/src/Config/SecretURL.ts +2 -1
  159. package/src/Config.ts +14 -0
  160. package/src/ConfigProvider.ts +48 -0
  161. package/src/{ServiceMap.ts → Context.ts} +52 -59
  162. package/src/Effect.ts +12 -14
  163. package/src/Layer.ts +6 -5
  164. package/src/Pure.ts +17 -18
  165. package/src/Schema/Class.ts +268 -62
  166. package/src/Schema/SchemaParser.ts +12 -0
  167. package/src/Schema/SpecialJsonSchema.ts +137 -0
  168. package/src/Schema/SpecialOpenApi.ts +130 -0
  169. package/src/Schema/brand.ts +21 -1
  170. package/src/Schema/email.ts +7 -2
  171. package/src/Schema/ext.ts +204 -72
  172. package/src/Schema/moreStrings.ts +40 -37
  173. package/src/Schema/numbers.ts +14 -16
  174. package/src/Schema/phoneNumber.ts +5 -1
  175. package/src/Schema/strings.ts +4 -8
  176. package/src/Schema.ts +314 -20
  177. package/src/client/InvalidationKeys.ts +50 -0
  178. package/src/client/apiClientFactory.ts +223 -129
  179. package/src/client/clientFor.ts +95 -29
  180. package/src/client/errors.ts +52 -26
  181. package/src/client/makeClient.ts +572 -71
  182. package/src/client.ts +1 -0
  183. package/src/ids.ts +3 -2
  184. package/src/index.ts +5 -10
  185. package/src/middleware.ts +13 -9
  186. package/src/rpc/Invalidation.ts +226 -0
  187. package/src/rpc/MiddlewareMaker.ts +65 -60
  188. package/src/rpc/README.md +2 -2
  189. package/src/rpc/RpcContextMap.ts +6 -5
  190. package/src/rpc/RpcMiddleware.ts +5 -4
  191. package/src/rpc.ts +1 -1
  192. package/src/transform.ts +2 -2
  193. package/src/utils/gen.ts +1 -1
  194. package/src/utils/logger.ts +2 -2
  195. package/src/utils.ts +50 -132
  196. package/test/dist/rpc.test.d.ts.map +1 -1
  197. package/test/dist/secretURL.test.d.ts.map +1 -0
  198. package/test/dist/special.test.d.ts.map +1 -0
  199. package/test/dist/stream-error.types.d.ts +2 -0
  200. package/test/dist/stream-error.types.d.ts.map +1 -0
  201. package/test/dist/stream-error.types.js +27 -0
  202. package/test/rpc.test.ts +45 -6
  203. package/test/schema.test.ts +581 -7
  204. package/test/secretURL.test.ts +157 -0
  205. package/test/special.test.ts +1023 -0
  206. package/test/utils.test.ts +6 -6
  207. package/tsconfig.base.json +3 -4
  208. package/tsconfig.json +0 -1
  209. package/tsconfig.json.bak +2 -2
  210. package/tsconfig.src.json +29 -29
  211. package/tsconfig.test.json +2 -2
  212. package/dist/Operations.d.ts +0 -123
  213. package/dist/Operations.d.ts.map +0 -1
  214. package/dist/Operations.js +0 -29
  215. package/dist/ServiceMap.d.ts +0 -44
  216. package/dist/ServiceMap.d.ts.map +0 -1
  217. package/dist/ServiceMap.js +0 -91
  218. package/eslint.config.mjs +0 -26
  219. package/src/Operations.ts +0 -55
@@ -2,11 +2,11 @@
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
3
 
4
4
  import { Effect, type LogLevel } from "effect"
5
- import * as ServiceMap from "../ServiceMap.js"
5
+ import * as Context from "../Context.js"
6
6
 
7
7
  type Levels = "info" | "debug" | "warn" | "error"
8
8
 
9
- export class LogLevels extends ServiceMap.Reference("LogLevels", {
9
+ export class LogLevels extends Context.Reference("LogLevels", {
10
10
  defaultValue: () => new Map<string, Levels>()
11
11
  }) {}
12
12
 
package/src/utils.ts CHANGED
@@ -3,9 +3,8 @@
3
3
  /* eslint-disable @typescript-eslint/no-redundant-type-constituents */
4
4
  import { Cause, Effect, Exit, Fiber, Option, Record } from "effect"
5
5
  import { dual } from "effect/Function"
6
- import { isFunction, isObject } from "effect/Predicate"
6
+ import { isFunction } from "effect/Predicate"
7
7
  import * as Result from "effect/Result"
8
- import type { GetFieldType, NumericDictionary, PropertyPath } from "lodash"
9
8
  import { identity, pipe } from "./Function.js"
10
9
  import type { DeepMutable, Equals, Mutable } from "./Types.js"
11
10
 
@@ -24,121 +23,6 @@ export interface Clone {
24
23
  [cloneTrait](this: this, that: any): this
25
24
  }
26
25
 
27
- function get<TObject extends object, TKey extends keyof TObject>(object: TObject, path: TKey | [TKey]): TObject[TKey]
28
- function get<TObject extends object, TKey extends keyof TObject>(
29
- object: TObject | null | undefined,
30
- path: TKey | [TKey]
31
- ): TObject[TKey] | undefined
32
- function get<TObject extends object, TKey extends keyof TObject, TDefault>(
33
- object: TObject | null | undefined,
34
- path: TKey | [TKey],
35
- defaultValue: TDefault
36
- ): Exclude<TObject[TKey], undefined> | TDefault
37
- function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1]>(
38
- object: TObject,
39
- path: [TKey1, TKey2]
40
- ): TObject[TKey1][TKey2]
41
- function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1]>(
42
- object: TObject | null | undefined,
43
- path: [TKey1, TKey2]
44
- ): TObject[TKey1][TKey2] | undefined
45
- function get<TObject extends object, TKey1 extends keyof TObject, TKey2 extends keyof TObject[TKey1], TDefault>(
46
- object: TObject | null | undefined,
47
- path: [TKey1, TKey2],
48
- defaultValue: TDefault
49
- ): Exclude<TObject[TKey1][TKey2], undefined> | TDefault
50
- function get<
51
- TObject extends object,
52
- TKey1 extends keyof TObject,
53
- TKey2 extends keyof TObject[TKey1],
54
- TKey3 extends keyof TObject[TKey1][TKey2]
55
- >(object: TObject, path: [TKey1, TKey2, TKey3]): TObject[TKey1][TKey2][TKey3]
56
- function get<
57
- TObject extends object,
58
- TKey1 extends keyof TObject,
59
- TKey2 extends keyof TObject[TKey1],
60
- TKey3 extends keyof TObject[TKey1][TKey2]
61
- >(object: TObject | null | undefined, path: [TKey1, TKey2, TKey3]): TObject[TKey1][TKey2][TKey3] | undefined
62
- function get<
63
- TObject extends object,
64
- TKey1 extends keyof TObject,
65
- TKey2 extends keyof TObject[TKey1],
66
- TKey3 extends keyof TObject[TKey1][TKey2],
67
- TDefault
68
- >(
69
- object: TObject | null | undefined,
70
- path: [TKey1, TKey2, TKey3],
71
- defaultValue: TDefault
72
- ): Exclude<TObject[TKey1][TKey2][TKey3], undefined> | TDefault
73
- function get<
74
- TObject extends object,
75
- TKey1 extends keyof TObject,
76
- TKey2 extends keyof TObject[TKey1],
77
- TKey3 extends keyof TObject[TKey1][TKey2],
78
- TKey4 extends keyof TObject[TKey1][TKey2][TKey3]
79
- >(object: TObject, path: [TKey1, TKey2, TKey3, TKey4]): TObject[TKey1][TKey2][TKey3][TKey4]
80
- function get<
81
- TObject extends object,
82
- TKey1 extends keyof TObject,
83
- TKey2 extends keyof TObject[TKey1],
84
- TKey3 extends keyof TObject[TKey1][TKey2],
85
- TKey4 extends keyof TObject[TKey1][TKey2][TKey3]
86
- >(
87
- object: TObject | null | undefined,
88
- path: [TKey1, TKey2, TKey3, TKey4]
89
- ): TObject[TKey1][TKey2][TKey3][TKey4] | undefined
90
- function get<
91
- TObject extends object,
92
- TKey1 extends keyof TObject,
93
- TKey2 extends keyof TObject[TKey1],
94
- TKey3 extends keyof TObject[TKey1][TKey2],
95
- TKey4 extends keyof TObject[TKey1][TKey2][TKey3],
96
- TDefault
97
- >(
98
- object: TObject | null | undefined,
99
- path: [TKey1, TKey2, TKey3, TKey4],
100
- defaultValue: TDefault
101
- ): Exclude<TObject[TKey1][TKey2][TKey3][TKey4], undefined> | TDefault
102
- function get<T>(object: NumericDictionary<T>, path: number): T
103
- function get<T>(object: NumericDictionary<T> | null | undefined, path: number): T | undefined
104
- function get<T, TDefault>(
105
- object: NumericDictionary<T> | null | undefined,
106
- path: number,
107
- defaultValue: TDefault
108
- ): T | TDefault
109
- function get<TDefault>(object: null | undefined, path: PropertyPath, defaultValue: TDefault): TDefault
110
- function get(object: null | undefined, path: PropertyPath): undefined
111
- function get<TObject, TPath extends string>(
112
- data: TObject,
113
- path: TPath
114
- ): string extends TPath ? any : GetFieldType<TObject, TPath>
115
- function get<TObject, TPath extends string, TDefault = GetFieldType<TObject, TPath>>(
116
- data: TObject,
117
- path: TPath,
118
- defaultValue: TDefault
119
- ): Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault
120
- function get(object: any, path: PropertyPath, defaultValue?: any): any
121
- function get(obj: any, path: any, defaultValue = undefined) {
122
- // https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore?tab=readme-ov-file#_get
123
- const travel = (regexp: any) =>
124
- String
125
- .prototype
126
- .split
127
- .call(path, regexp)
128
- .filter(Boolean)
129
- .reduce((res, key) => (res !== null && res !== undefined ? res[key] : res), obj)
130
- const result = travel(/[,[\]]+?/) || travel(/[,[\].]+?/)
131
- return result === undefined || result === obj ? defaultValue : result
132
- }
133
-
134
- // codegen:start {preset: barrel, include: ./utils/*.ts }
135
- export * from "./utils/effectify.js"
136
- export * from "./utils/extend.js"
137
- export * from "./utils/gen.js"
138
- export * from "./utils/logger.js"
139
- export * from "./utils/logLevel.js"
140
- // codegen:end
141
-
142
26
  export const unsafeRight = <E, A>(ei: Result.Result<A, E>) => {
143
27
  if (Result.isFailure(ei)) {
144
28
  console.error(ei.failure)
@@ -269,7 +153,7 @@ export type EnforceNonEmptyRecord<R> = keyof R extends never ? never : R
269
153
  export function intersect<AS extends unknown[] & { 0: unknown }>(
270
154
  ...as: AS
271
155
  ): UnionToIntersection<{ [k in keyof AS]: AS[k] }[number]> {
272
- return as.reduce((a: any, b: any) => ({ ...a, ...b })) as any
156
+ return as.reduce((a: any, b: any) => Object.assign(a, b), {}) as any
273
157
  }
274
158
 
275
159
  export type IsEqualTo<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
@@ -280,8 +164,7 @@ export type IsEqualTo<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
280
164
  export const unifyIndex = Symbol()
281
165
  export type unifyIndex = typeof unifyIndex
282
166
 
283
- // @ts-expect-error abc
284
- export interface UnifiableIndexed<X> {}
167
+ export interface UnifiableIndexed<_X> {}
285
168
  export type UnifiableIndexedURI = keyof UnifiableIndexed<any>
286
169
 
287
170
  export interface Unifiable<X> {
@@ -313,9 +196,7 @@ function decorateNew(
313
196
  if (out.descriptor) {
314
197
  out.descriptor = Object.assign({}, out.descriptor)
315
198
  }
316
- const actualDesc: PropertyDescriptor = <any> (
317
- out.descriptor || /* istanbul ignore next */ out
318
- )
199
+ const actualDesc: PropertyDescriptor = out.descriptor || /* istanbul ignore next */ out
319
200
 
320
201
  const originalMethod = validateAndExtractMethodFromDescriptor(actualDesc)
321
202
  const isStatic = inp.placement === "static"
@@ -684,7 +565,7 @@ export type OptPromise<T extends () => any> = (
684
565
  ) => Promise<ReturnType<T>> | ReturnType<T>
685
566
 
686
567
  export function access<T extends string, T2>(t: Record<T, T2>) {
687
- return (key: T) => t[key] as T2
568
+ return (key: T) => t[key]
688
569
  }
689
570
 
690
571
  export function todayAtUTCNoon() {
@@ -736,25 +617,64 @@ export const copy = dual<
736
617
  }
737
618
  >(2, <A>(self: A, f: Partial<A> | ((a: A) => Partial<A>)) => clone(self, { ...self, ...(isFunction(f) ? f(self) : f) }))
738
619
 
739
- type CopyOriginU<U, Ctor extends new(...args: any[]) => any> =
620
+ export type CopyOriginU<U, Ctor extends new(...args: any[]) => any> =
740
621
  & {
741
622
  [K in keyof U & keyof InstanceType<Ctor>]?: U[K]
742
623
  }
743
624
  & {}
744
625
 
745
- type CopyOriginRet<A, U> =
626
+ export type CopyOriginRet<A, U> =
746
627
  & {
747
628
  [K in keyof A | keyof U]: K extends keyof U ? U[K] : A[K & keyof A]
748
629
  }
749
630
  & {}
750
631
 
751
- type CopyOriginSelf<A, U> = Equals<{}, U> extends true
632
+ export type CopyOriginSelf<A, U> = Equals<{}, U> extends true
752
633
  ? Equals<keyof {}, keyof U> extends true ? `updates argument is empty or contains only extra properties`
753
634
  : A
754
635
  : A
755
636
 
637
+ export interface StructuralCopyOrigin<Self extends object> {
638
+ <A extends Self, U extends Partial<Self>>(
639
+ f: (a: A) =>
640
+ & {
641
+ [K in keyof U & keyof Self]?: U[K]
642
+ }
643
+ & {}
644
+ ): (self: CopyOriginSelf<A, U>) => CopyOriginRet<A, U>
645
+ <A extends Self, U extends Partial<Self>>(
646
+ updates:
647
+ & {
648
+ [K in keyof U & keyof Self]?: U[K]
649
+ }
650
+ & {}
651
+ ): (self: CopyOriginSelf<A, U>) => CopyOriginRet<A, U>
652
+ <A extends Self, U extends Partial<Self>>(
653
+ self: CopyOriginSelf<A, U>,
654
+ f: (a: A) =>
655
+ & {
656
+ [K in keyof U & keyof Self]?: U[K]
657
+ }
658
+ & {}
659
+ ): CopyOriginRet<A, U>
660
+ <A extends Self, U extends Partial<Self>>(
661
+ self: CopyOriginSelf<A, U>,
662
+ updates:
663
+ & {
664
+ [K in keyof U & keyof Self]?: U[K]
665
+ }
666
+ & {}
667
+ ): CopyOriginRet<A, U>
668
+ }
669
+
756
670
  // just one input param: the convention is that the ctor takes an object
757
- // containing the properties of the class (I can't put object there as type because of contravariance)
671
+ // containing the properties of the value (I can't put object there as type because of contravariance)
672
+ /**
673
+ * By design this does not return `Self` directly.
674
+ *
675
+ * The return type is computed from `Self` and the update payload so callers can
676
+ * expose an explicit structural return type that remains assignable to `Self`.
677
+ */
758
678
  export const copyOrigin = <Ctor extends new(_: any) => any>(ctor: Ctor) =>
759
679
  dual<
760
680
  {
@@ -883,8 +803,6 @@ export function setMoveElDropUndefined<T>(el: T, newIndex: number) {
883
803
  pipe([...arrInput], arMoveElDropUndefined(el, newIndex), Option.map((ar) => new Set(ar)))
884
804
  }
885
805
 
886
- export { get }
887
-
888
806
  type RemoveNonArray<T> = T extends readonly any[] ? T : never
889
807
  export function isNativeTuple<A>(a: A): a is RemoveNonArray<A> {
890
808
  return Array.isArray(a)
@@ -970,5 +888,5 @@ const genConstructor = (function*() {}).constructor
970
888
  * @category predicates
971
889
  * @since 3.11.0
972
890
  */
973
- export const isGeneratorFunction = (u: unknown): u is (...args: Array<any>) => Generator<any, any, any> =>
974
- isObject(u) && u.constructor === genConstructor
891
+ export const isGeneratorFunction = (u: unknown): u is (...args: Array<any>) => Generator<any> =>
892
+ isFunction(u) && u.constructor === genConstructor
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.test.d.ts","sourceRoot":"","sources":["../rpc.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACrF,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;;;;;;;;;;;;;;;;;;;;;;;;AAE7C,qBAAa,iBAAkB,SAAQ,sBAIrC;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIL,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAI0B,KAAK;;;;AAKpC,qBAAa,KAAM,SAAQ,UAQzB;CAAG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretURL.test.d.ts","sourceRoot":"","sources":["../secretURL.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"special.test.d.ts","sourceRoot":"","sources":["../special.test.ts"],"names":[],"mappings":""}
@@ -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
@@ -1,4 +1,7 @@
1
+ import { type Effect, type Option } from "effect"
2
+ import { expect, test } from "vitest"
1
3
  import { makeRpcClient, NotLoggedInError, UnauthorizedError } from "../src/client.js"
4
+ import { ForceVoid } from "../src/client/makeClient.js"
2
5
  import { S } from "../src/index.js"
3
6
  import { RpcContextMap } from "../src/rpc.js"
4
7
 
@@ -8,16 +11,52 @@ export class RequestContextMap extends RpcContextMap.makeMap({
8
11
  test: RpcContextMap.make()(S.Never)
9
12
  }) {}
10
13
 
11
- const { TaggedRequest } = makeRpcClient(RequestContextMap)
14
+ const stubMiddleware = {
15
+ requestContextMap: RequestContextMap.config,
16
+ requestContext: undefined as never
17
+ }
18
+ const { TaggedRequestFor } = makeRpcClient(stubMiddleware)
19
+ const TaggedRequest = TaggedRequestFor("Test").Query
12
20
 
13
21
  export class Stats extends TaggedRequest<Stats>()("Stats", {}, {
14
22
  allowedRoles: ["manager"],
15
23
  success: {
16
- usersActive24Hours: S.Number,
17
- usersActiveLastWeek: S.Number,
18
- newUsersLast24Hours: S.Number,
19
- newUsersLastWeek: S.Number
24
+ usersActive24Hours: S.Finite,
25
+ usersActiveLastWeek: S.Finite,
26
+ newUsersLast24Hours: S.Finite,
27
+ newUsersLastWeek: S.Finite
20
28
  }
21
29
  }) {}
22
30
 
23
- declare const _stats: typeof Stats.success.Type
31
+ declare const _stats: typeof Stats.Type
32
+ declare const _statsSuccess: typeof Stats.success.Type
33
+ declare const _statsError: typeof Stats.error.Type
34
+ declare const _statsRequestType: typeof Stats.type
35
+
36
+ test("ForceVoid decodes and encodes as void", () => {
37
+ const statsFromMake = Stats.make({})
38
+ const statsFromMakeOption = Stats.makeOption({})
39
+ const statsFromMakeEffect = Stats.makeEffect({})
40
+
41
+ expect(S.decodeUnknownSync(ForceVoid)(undefined)).toBe(undefined)
42
+ expect(S.is(ForceVoid)(undefined)).toBe(true)
43
+ expect(S.decodeUnknownSync(ForceVoid)("test")).toBe(undefined)
44
+ expect(S.is(ForceVoid)("test")).toBe(true)
45
+ expect(S.encodeUnknownSync(ForceVoid)("test")).toBe(undefined)
46
+ expect(S.encodeUnknownSync(S.toCodecJson(ForceVoid))("test")).toBe(null)
47
+ expectTypeOf<typeof _stats>().toEqualTypeOf<Stats>()
48
+ expectTypeOf<typeof _statsSuccess>().toEqualTypeOf<{
49
+ readonly usersActive24Hours: number
50
+ readonly usersActiveLastWeek: number
51
+ readonly newUsersLast24Hours: number
52
+ readonly newUsersLastWeek: number
53
+ }>()
54
+ // Resource error carries only `config.error` (and optional `generalErrors`); rcm-derived
55
+ // middleware errors no longer leak into `resource.error` — they reach the wire via the
56
+ // middleware tag attached to the rpc group (`rpc.middlewares[*].error` failure-union).
57
+ expectTypeOf<typeof _statsError>().toEqualTypeOf<never>()
58
+ expectTypeOf<typeof _statsRequestType>().toEqualTypeOf<"query">()
59
+ expectTypeOf(statsFromMake).toEqualTypeOf<Stats>()
60
+ expectTypeOf(statsFromMakeOption).toEqualTypeOf<Option.Option<Stats>>()
61
+ expectTypeOf(statsFromMakeEffect).toEqualTypeOf<Effect.Effect<Stats, S.SchemaError>>()
62
+ })