effect 3.9.2 → 3.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/Arbitrary/package.json +6 -0
  2. package/FastCheck/package.json +6 -0
  3. package/JSONSchema/package.json +6 -0
  4. package/ParseResult/package.json +6 -0
  5. package/Pretty/package.json +6 -0
  6. package/Schema/package.json +6 -0
  7. package/SchemaAST/package.json +6 -0
  8. package/TSubscriptionRef/package.json +6 -0
  9. package/dist/cjs/Arbitrary.js +490 -0
  10. package/dist/cjs/Arbitrary.js.map +1 -0
  11. package/dist/cjs/Effect.js +247 -16
  12. package/dist/cjs/Effect.js.map +1 -1
  13. package/dist/cjs/FastCheck.js +17 -0
  14. package/dist/cjs/FastCheck.js.map +1 -0
  15. package/dist/cjs/Inspectable.js +43 -3
  16. package/dist/cjs/Inspectable.js.map +1 -1
  17. package/dist/cjs/JSONSchema.js +418 -0
  18. package/dist/cjs/JSONSchema.js.map +1 -0
  19. package/dist/cjs/ParseResult.js +1539 -0
  20. package/dist/cjs/ParseResult.js.map +1 -0
  21. package/dist/cjs/Predicate.js +3 -1
  22. package/dist/cjs/Predicate.js.map +1 -1
  23. package/dist/cjs/Pretty.js +183 -0
  24. package/dist/cjs/Pretty.js.map +1 -0
  25. package/dist/cjs/Schema.js +5529 -0
  26. package/dist/cjs/Schema.js.map +1 -0
  27. package/dist/cjs/SchemaAST.js +2365 -0
  28. package/dist/cjs/SchemaAST.js.map +1 -0
  29. package/dist/cjs/Stream.js +17 -3
  30. package/dist/cjs/Stream.js.map +1 -1
  31. package/dist/cjs/TPubSub.js +9 -1
  32. package/dist/cjs/TPubSub.js.map +1 -1
  33. package/dist/cjs/TQueue.js.map +1 -1
  34. package/dist/cjs/TRef.js.map +1 -1
  35. package/dist/cjs/TSubscriptionRef.js +96 -0
  36. package/dist/cjs/TSubscriptionRef.js.map +1 -0
  37. package/dist/cjs/index.js +18 -2
  38. package/dist/cjs/index.js.map +1 -1
  39. package/dist/cjs/internal/cause.js +2 -2
  40. package/dist/cjs/internal/cause.js.map +1 -1
  41. package/dist/cjs/internal/channel/channelExecutor.js +160 -161
  42. package/dist/cjs/internal/channel/channelExecutor.js.map +1 -1
  43. package/dist/cjs/internal/core.js +4 -4
  44. package/dist/cjs/internal/core.js.map +1 -1
  45. package/dist/cjs/internal/fiberRuntime.js +14 -12
  46. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  47. package/dist/cjs/internal/logger.js +7 -6
  48. package/dist/cjs/internal/logger.js.map +1 -1
  49. package/dist/cjs/internal/redacted.js +4 -0
  50. package/dist/cjs/internal/redacted.js.map +1 -1
  51. package/dist/cjs/internal/schema/errors.js +116 -0
  52. package/dist/cjs/internal/schema/errors.js.map +1 -0
  53. package/dist/cjs/internal/schema/filters.js +41 -0
  54. package/dist/cjs/internal/schema/filters.js.map +1 -0
  55. package/dist/cjs/internal/schema/util.js +96 -0
  56. package/dist/cjs/internal/schema/util.js.map +1 -0
  57. package/dist/cjs/internal/stm/core.js +2 -3
  58. package/dist/cjs/internal/stm/core.js.map +1 -1
  59. package/dist/cjs/internal/stm/tPubSub.js.map +1 -1
  60. package/dist/cjs/internal/stm/tQueue.js +1 -2
  61. package/dist/cjs/internal/stm/tQueue.js.map +1 -1
  62. package/dist/cjs/internal/stm/tRef.js +6 -2
  63. package/dist/cjs/internal/stm/tRef.js.map +1 -1
  64. package/dist/cjs/internal/stm/tSubscriptionRef.js +178 -0
  65. package/dist/cjs/internal/stm/tSubscriptionRef.js.map +1 -0
  66. package/dist/cjs/internal/stream.js +36 -16
  67. package/dist/cjs/internal/stream.js.map +1 -1
  68. package/dist/cjs/internal/version.js +1 -1
  69. package/dist/cjs/internal/version.js.map +1 -1
  70. package/dist/dts/Arbitrary.d.ts +45 -0
  71. package/dist/dts/Arbitrary.d.ts.map +1 -0
  72. package/dist/dts/Effect.d.ts +298 -30
  73. package/dist/dts/Effect.d.ts.map +1 -1
  74. package/dist/dts/FastCheck.d.ts +9 -0
  75. package/dist/dts/FastCheck.d.ts.map +1 -0
  76. package/dist/dts/Inspectable.d.ts +28 -0
  77. package/dist/dts/Inspectable.d.ts.map +1 -1
  78. package/dist/dts/JSONSchema.d.ts +181 -0
  79. package/dist/dts/JSONSchema.d.ts.map +1 -0
  80. package/dist/dts/ParseResult.d.ts +551 -0
  81. package/dist/dts/ParseResult.d.ts.map +1 -0
  82. package/dist/dts/Predicate.d.ts.map +1 -1
  83. package/dist/dts/Pretty.d.ts +26 -0
  84. package/dist/dts/Pretty.d.ts.map +1 -0
  85. package/dist/dts/Schema.d.ts +4562 -0
  86. package/dist/dts/Schema.d.ts.map +1 -0
  87. package/dist/dts/SchemaAST.d.ts +1321 -0
  88. package/dist/dts/SchemaAST.d.ts.map +1 -0
  89. package/dist/dts/Stream.d.ts +67 -2
  90. package/dist/dts/Stream.d.ts.map +1 -1
  91. package/dist/dts/TPubSub.d.ts +8 -0
  92. package/dist/dts/TPubSub.d.ts.map +1 -1
  93. package/dist/dts/TQueue.d.ts +7 -7
  94. package/dist/dts/TQueue.d.ts.map +1 -1
  95. package/dist/dts/TRef.d.ts +2 -1
  96. package/dist/dts/TRef.d.ts.map +1 -1
  97. package/dist/dts/TSubscriptionRef.d.ts +251 -0
  98. package/dist/dts/TSubscriptionRef.d.ts.map +1 -0
  99. package/dist/dts/index.d.ts +32 -0
  100. package/dist/dts/index.d.ts.map +1 -1
  101. package/dist/dts/internal/fiberRuntime.d.ts.map +1 -1
  102. package/dist/dts/internal/schema/errors.d.ts +2 -0
  103. package/dist/dts/internal/schema/errors.d.ts.map +1 -0
  104. package/dist/dts/internal/schema/filters.d.ts +2 -0
  105. package/dist/dts/internal/schema/filters.d.ts.map +1 -0
  106. package/dist/dts/internal/schema/util.d.ts +2 -0
  107. package/dist/dts/internal/schema/util.d.ts.map +1 -0
  108. package/dist/dts/internal/stm/tRef.d.ts +3 -1
  109. package/dist/dts/internal/stm/tRef.d.ts.map +1 -1
  110. package/dist/dts/internal/stm/tSubscriptionRef.d.ts +2 -0
  111. package/dist/dts/internal/stm/tSubscriptionRef.d.ts.map +1 -0
  112. package/dist/dts/internal/stream.d.ts.map +1 -1
  113. package/dist/esm/Arbitrary.js +472 -0
  114. package/dist/esm/Arbitrary.js.map +1 -0
  115. package/dist/esm/Effect.js +256 -18
  116. package/dist/esm/Effect.js.map +1 -1
  117. package/dist/esm/FastCheck.js +9 -0
  118. package/dist/esm/FastCheck.js.map +1 -0
  119. package/dist/esm/Inspectable.js +39 -2
  120. package/dist/esm/Inspectable.js.map +1 -1
  121. package/dist/esm/JSONSchema.js +408 -0
  122. package/dist/esm/JSONSchema.js.map +1 -0
  123. package/dist/esm/ParseResult.js +1503 -0
  124. package/dist/esm/ParseResult.js.map +1 -0
  125. package/dist/esm/Predicate.js +2 -1
  126. package/dist/esm/Predicate.js.map +1 -1
  127. package/dist/esm/Pretty.js +173 -0
  128. package/dist/esm/Pretty.js.map +1 -0
  129. package/dist/esm/Schema.js +5328 -0
  130. package/dist/esm/Schema.js.map +1 -0
  131. package/dist/esm/SchemaAST.js +2300 -0
  132. package/dist/esm/SchemaAST.js.map +1 -0
  133. package/dist/esm/Stream.js +14 -0
  134. package/dist/esm/Stream.js.map +1 -1
  135. package/dist/esm/TPubSub.js +8 -0
  136. package/dist/esm/TPubSub.js.map +1 -1
  137. package/dist/esm/TQueue.js.map +1 -1
  138. package/dist/esm/TRef.js.map +1 -1
  139. package/dist/esm/TSubscriptionRef.js +87 -0
  140. package/dist/esm/TSubscriptionRef.js.map +1 -0
  141. package/dist/esm/index.js +32 -0
  142. package/dist/esm/index.js.map +1 -1
  143. package/dist/esm/internal/cause.js +3 -3
  144. package/dist/esm/internal/cause.js.map +1 -1
  145. package/dist/esm/internal/channel/channelExecutor.js +160 -161
  146. package/dist/esm/internal/channel/channelExecutor.js.map +1 -1
  147. package/dist/esm/internal/core.js +4 -4
  148. package/dist/esm/internal/core.js.map +1 -1
  149. package/dist/esm/internal/fiberRuntime.js +14 -12
  150. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  151. package/dist/esm/internal/logger.js +7 -6
  152. package/dist/esm/internal/logger.js.map +1 -1
  153. package/dist/esm/internal/redacted.js +4 -0
  154. package/dist/esm/internal/redacted.js.map +1 -1
  155. package/dist/esm/internal/schema/errors.js +87 -0
  156. package/dist/esm/internal/schema/errors.js.map +1 -0
  157. package/dist/esm/internal/schema/filters.js +35 -0
  158. package/dist/esm/internal/schema/filters.js.map +1 -0
  159. package/dist/esm/internal/schema/util.js +78 -0
  160. package/dist/esm/internal/schema/util.js.map +1 -0
  161. package/dist/esm/internal/stm/core.js +1 -2
  162. package/dist/esm/internal/stm/core.js.map +1 -1
  163. package/dist/esm/internal/stm/tPubSub.js.map +1 -1
  164. package/dist/esm/internal/stm/tQueue.js +1 -2
  165. package/dist/esm/internal/stm/tQueue.js.map +1 -1
  166. package/dist/esm/internal/stm/tRef.js +5 -1
  167. package/dist/esm/internal/stm/tRef.js.map +1 -1
  168. package/dist/esm/internal/stm/tSubscriptionRef.js +166 -0
  169. package/dist/esm/internal/stm/tSubscriptionRef.js.map +1 -0
  170. package/dist/esm/internal/stream.js +33 -15
  171. package/dist/esm/internal/stream.js.map +1 -1
  172. package/dist/esm/internal/version.js +1 -1
  173. package/dist/esm/internal/version.js.map +1 -1
  174. package/package.json +68 -1
  175. package/src/Arbitrary.ts +563 -0
  176. package/src/Effect.ts +302 -31
  177. package/src/FastCheck.ts +9 -0
  178. package/src/Inspectable.ts +56 -2
  179. package/src/JSONSchema.ts +601 -0
  180. package/src/ParseResult.ts +2027 -0
  181. package/src/Predicate.ts +3 -1
  182. package/src/Pretty.ts +204 -0
  183. package/src/Schema.ts +10388 -0
  184. package/src/SchemaAST.ts +2827 -0
  185. package/src/Stream.ts +77 -9
  186. package/src/TPubSub.ts +9 -0
  187. package/src/TQueue.ts +7 -7
  188. package/src/TRef.ts +2 -1
  189. package/src/TSubscriptionRef.ts +284 -0
  190. package/src/index.ts +40 -0
  191. package/src/internal/cause.ts +3 -3
  192. package/src/internal/channel/channelExecutor.ts +213 -214
  193. package/src/internal/core-effect.ts +2 -2
  194. package/src/internal/core.ts +4 -4
  195. package/src/internal/fiberRuntime.ts +14 -12
  196. package/src/internal/logger.ts +7 -6
  197. package/src/internal/redacted.ts +4 -0
  198. package/src/internal/schema/errors.ts +189 -0
  199. package/src/internal/schema/filters.ts +86 -0
  200. package/src/internal/schema/util.ts +113 -0
  201. package/src/internal/stm/core.ts +1 -2
  202. package/src/internal/stm/tPubSub.ts +1 -0
  203. package/src/internal/stm/tQueue.ts +2 -2
  204. package/src/internal/stm/tRef.ts +7 -2
  205. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  206. package/src/internal/stream.ts +97 -20
  207. package/src/internal/version.ts +1 -1
package/src/Predicate.ts CHANGED
@@ -549,7 +549,9 @@ export const isNever: (input: unknown) => input is never = (_: unknown): _ is ne
549
549
  */
550
550
  export const isUnknown: (input: unknown) => input is unknown = (_): _ is unknown => true
551
551
 
552
- const isRecordOrArray = (input: unknown) => typeof input === "object" && input !== null
552
+ /** @internal */
553
+ export const isRecordOrArray = (input: unknown): input is { [x: PropertyKey]: unknown } =>
554
+ typeof input === "object" && input !== null
553
555
 
554
556
  /**
555
557
  * Tests if a value is an `object`.
package/src/Pretty.ts ADDED
@@ -0,0 +1,204 @@
1
+ /**
2
+ * @since 3.10.0
3
+ */
4
+ import * as Arr from "./Array.js"
5
+ import * as errors_ from "./internal/schema/errors.js"
6
+ import * as util_ from "./internal/schema/util.js"
7
+ import * as Option from "./Option.js"
8
+ import * as ParseResult from "./ParseResult.js"
9
+ import type * as Schema from "./Schema.js"
10
+ import * as AST from "./SchemaAST.js"
11
+
12
+ /**
13
+ * @category model
14
+ * @since 3.10.0
15
+ */
16
+ export interface Pretty<To> {
17
+ (a: To): string
18
+ }
19
+
20
+ /**
21
+ * @category annotations
22
+ * @since 3.10.0
23
+ */
24
+ export type PrettyAnnotation<A, TypeParameters extends ReadonlyArray<any> = readonly []> = (
25
+ ...pretties: { readonly [K in keyof TypeParameters]: Pretty<TypeParameters[K]> }
26
+ ) => Pretty<A>
27
+
28
+ /**
29
+ * @category prettify
30
+ * @since 3.10.0
31
+ */
32
+ export const make = <A, I, R>(schema: Schema.Schema<A, I, R>): (a: A) => string => compile(schema.ast, [])
33
+
34
+ const getPrettyAnnotation = AST.getAnnotation<PrettyAnnotation<any, any>>(AST.PrettyAnnotationId)
35
+
36
+ const getMatcher = (defaultPretty: Pretty<any>) => (ast: AST.AST): Pretty<any> =>
37
+ Option.match(getPrettyAnnotation(ast), {
38
+ onNone: () => defaultPretty,
39
+ onSome: (handler) => handler()
40
+ })
41
+
42
+ const toString = getMatcher((a) => String(a))
43
+
44
+ const stringify = getMatcher((a) => JSON.stringify(a))
45
+
46
+ const formatUnknown = getMatcher(util_.formatUnknown)
47
+
48
+ /**
49
+ * @since 3.10.0
50
+ */
51
+ export const match: AST.Match<Pretty<any>> = {
52
+ "Declaration": (ast, go, path) => {
53
+ const annotation = getPrettyAnnotation(ast)
54
+ if (Option.isSome(annotation)) {
55
+ return annotation.value(...ast.typeParameters.map((tp) => go(tp, path)))
56
+ }
57
+ throw new Error(errors_.getPrettyMissingAnnotationErrorMessage(path, ast))
58
+ },
59
+ "VoidKeyword": getMatcher(() => "void(0)"),
60
+ "NeverKeyword": getMatcher(() => {
61
+ throw new Error(errors_.getPrettyNeverErrorMessage)
62
+ }),
63
+ "Literal": getMatcher((literal: AST.LiteralValue): string =>
64
+ typeof literal === "bigint" ?
65
+ `${String(literal)}n` :
66
+ JSON.stringify(literal)
67
+ ),
68
+ "SymbolKeyword": toString,
69
+ "UniqueSymbol": toString,
70
+ "TemplateLiteral": stringify,
71
+ "UndefinedKeyword": toString,
72
+ "UnknownKeyword": formatUnknown,
73
+ "AnyKeyword": formatUnknown,
74
+ "ObjectKeyword": formatUnknown,
75
+ "StringKeyword": stringify,
76
+ "NumberKeyword": toString,
77
+ "BooleanKeyword": toString,
78
+ "BigIntKeyword": getMatcher((a) => `${String(a)}n`),
79
+ "Enums": stringify,
80
+ "TupleType": (ast, go, path) => {
81
+ const hook = getPrettyAnnotation(ast)
82
+ if (Option.isSome(hook)) {
83
+ return hook.value()
84
+ }
85
+ const elements = ast.elements.map((e, i) => go(e.type, path.concat(i)))
86
+ const rest = ast.rest.map((annotatedAST) => go(annotatedAST.type, path))
87
+ return (input: ReadonlyArray<unknown>) => {
88
+ const output: Array<string> = []
89
+ let i = 0
90
+ // ---------------------------------------------
91
+ // handle elements
92
+ // ---------------------------------------------
93
+ for (; i < elements.length; i++) {
94
+ if (input.length < i + 1) {
95
+ if (ast.elements[i].isOptional) {
96
+ continue
97
+ }
98
+ } else {
99
+ output.push(elements[i](input[i]))
100
+ }
101
+ }
102
+ // ---------------------------------------------
103
+ // handle rest element
104
+ // ---------------------------------------------
105
+ if (Arr.isNonEmptyReadonlyArray(rest)) {
106
+ const [head, ...tail] = rest
107
+ for (; i < input.length - tail.length; i++) {
108
+ output.push(head(input[i]))
109
+ }
110
+ // ---------------------------------------------
111
+ // handle post rest elements
112
+ // ---------------------------------------------
113
+ for (let j = 0; j < tail.length; j++) {
114
+ i += j
115
+ output.push(tail[j](input[i]))
116
+ }
117
+ }
118
+
119
+ return "[" + output.join(", ") + "]"
120
+ }
121
+ },
122
+ "TypeLiteral": (ast, go, path) => {
123
+ const hook = getPrettyAnnotation(ast)
124
+ if (Option.isSome(hook)) {
125
+ return hook.value()
126
+ }
127
+ const propertySignaturesTypes = ast.propertySignatures.map((ps) => go(ps.type, path.concat(ps.name)))
128
+ const indexSignatureTypes = ast.indexSignatures.map((is) => go(is.type, path))
129
+ const expectedKeys: any = {}
130
+ for (let i = 0; i < propertySignaturesTypes.length; i++) {
131
+ expectedKeys[ast.propertySignatures[i].name] = null
132
+ }
133
+ return (input: { readonly [x: PropertyKey]: unknown }) => {
134
+ const output: Array<string> = []
135
+ // ---------------------------------------------
136
+ // handle property signatures
137
+ // ---------------------------------------------
138
+ for (let i = 0; i < propertySignaturesTypes.length; i++) {
139
+ const ps = ast.propertySignatures[i]
140
+ const name = ps.name
141
+ if (ps.isOptional && !Object.prototype.hasOwnProperty.call(input, name)) {
142
+ continue
143
+ }
144
+ output.push(
145
+ `${util_.formatPropertyKey(name)}: ${propertySignaturesTypes[i](input[name])}`
146
+ )
147
+ }
148
+ // ---------------------------------------------
149
+ // handle index signatures
150
+ // ---------------------------------------------
151
+ if (indexSignatureTypes.length > 0) {
152
+ for (let i = 0; i < indexSignatureTypes.length; i++) {
153
+ const type = indexSignatureTypes[i]
154
+ const keys = util_.getKeysForIndexSignature(input, ast.indexSignatures[i].parameter)
155
+ for (const key of keys) {
156
+ if (Object.prototype.hasOwnProperty.call(expectedKeys, key)) {
157
+ continue
158
+ }
159
+ output.push(`${util_.formatPropertyKey(key)}: ${type(input[key])}`)
160
+ }
161
+ }
162
+ }
163
+
164
+ return Arr.isNonEmptyReadonlyArray(output) ? "{ " + output.join(", ") + " }" : "{}"
165
+ }
166
+ },
167
+ "Union": (ast, go, path) => {
168
+ const hook = getPrettyAnnotation(ast)
169
+ if (Option.isSome(hook)) {
170
+ return hook.value()
171
+ }
172
+ const types = ast.types.map((ast) => [ParseResult.is({ ast } as any), go(ast, path)] as const)
173
+ return (a) => {
174
+ const index = types.findIndex(([is]) => is(a))
175
+ if (index === -1) {
176
+ throw new Error(errors_.getPrettyNoMatchingSchemaErrorMessage(a, path, ast))
177
+ }
178
+ return types[index][1](a)
179
+ }
180
+ },
181
+ "Suspend": (ast, go, path) => {
182
+ return Option.match(getPrettyAnnotation(ast), {
183
+ onNone: () => {
184
+ const get = util_.memoizeThunk(() => go(ast.f(), path))
185
+ return (a) => get()(a)
186
+ },
187
+ onSome: (handler) => handler()
188
+ })
189
+ },
190
+ "Refinement": (ast, go, path) => {
191
+ return Option.match(getPrettyAnnotation(ast), {
192
+ onNone: () => go(ast.from, path),
193
+ onSome: (handler) => handler()
194
+ })
195
+ },
196
+ "Transformation": (ast, go, path) => {
197
+ return Option.match(getPrettyAnnotation(ast), {
198
+ onNone: () => go(ast.to, path),
199
+ onSome: (handler) => handler()
200
+ })
201
+ }
202
+ }
203
+
204
+ const compile = AST.getCompiler(match)