@atproto/lex-schema 0.0.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.
Files changed (243) hide show
  1. package/dist/core/$type.d.ts +4 -0
  2. package/dist/core/$type.d.ts.map +1 -0
  3. package/dist/core/$type.js +7 -0
  4. package/dist/core/$type.js.map +1 -0
  5. package/dist/core/record-key.d.ts +4 -0
  6. package/dist/core/record-key.d.ts.map +1 -0
  7. package/dist/core/record-key.js +16 -0
  8. package/dist/core/record-key.js.map +1 -0
  9. package/dist/core/result.d.ts +57 -0
  10. package/dist/core/result.d.ts.map +1 -0
  11. package/dist/core/result.js +74 -0
  12. package/dist/core/result.js.map +1 -0
  13. package/dist/core/string-format.d.ts +31 -0
  14. package/dist/core/string-format.d.ts.map +1 -0
  15. package/dist/core/string-format.js +81 -0
  16. package/dist/core/string-format.js.map +1 -0
  17. package/dist/core/types.d.ts +19 -0
  18. package/dist/core/types.d.ts.map +1 -0
  19. package/dist/core/types.js +3 -0
  20. package/dist/core/types.js.map +1 -0
  21. package/dist/core.d.ts +6 -0
  22. package/dist/core.d.ts.map +1 -0
  23. package/dist/core.js +9 -0
  24. package/dist/core.js.map +1 -0
  25. package/dist/external.d.ts +86 -0
  26. package/dist/external.d.ts.map +1 -0
  27. package/dist/external.js +171 -0
  28. package/dist/external.js.map +1 -0
  29. package/dist/index.d.ts +4 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +8 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/schema/_parameters.d.ts +17 -0
  34. package/dist/schema/_parameters.d.ts.map +1 -0
  35. package/dist/schema/_parameters.js +20 -0
  36. package/dist/schema/_parameters.js.map +1 -0
  37. package/dist/schema/array.d.ts +13 -0
  38. package/dist/schema/array.d.ts.map +1 -0
  39. package/dist/schema/array.js +40 -0
  40. package/dist/schema/array.js.map +1 -0
  41. package/dist/schema/blob.d.ts +32 -0
  42. package/dist/schema/blob.d.ts.map +1 -0
  43. package/dist/schema/blob.js +40 -0
  44. package/dist/schema/blob.js.map +1 -0
  45. package/dist/schema/boolean.d.ts +11 -0
  46. package/dist/schema/boolean.d.ts.map +1 -0
  47. package/dist/schema/boolean.js +20 -0
  48. package/dist/schema/boolean.js.map +1 -0
  49. package/dist/schema/bytes.d.ts +12 -0
  50. package/dist/schema/bytes.d.ts.map +1 -0
  51. package/dist/schema/bytes.js +31 -0
  52. package/dist/schema/bytes.js.map +1 -0
  53. package/dist/schema/cid.d.ts +13 -0
  54. package/dist/schema/cid.d.ts.map +1 -0
  55. package/dist/schema/cid.js +22 -0
  56. package/dist/schema/cid.js.map +1 -0
  57. package/dist/schema/custom.d.ts +15 -0
  58. package/dist/schema/custom.d.ts.map +1 -0
  59. package/dist/schema/custom.js +22 -0
  60. package/dist/schema/custom.js.map +1 -0
  61. package/dist/schema/dict.d.ts +18 -0
  62. package/dist/schema/dict.d.ts.map +1 -0
  63. package/dist/schema/dict.js +48 -0
  64. package/dist/schema/dict.js.map +1 -0
  65. package/dist/schema/discriminated-union.d.ts +34 -0
  66. package/dist/schema/discriminated-union.d.ts.map +1 -0
  67. package/dist/schema/discriminated-union.js +93 -0
  68. package/dist/schema/discriminated-union.js.map +1 -0
  69. package/dist/schema/enum.d.ts +7 -0
  70. package/dist/schema/enum.d.ts.map +1 -0
  71. package/dist/schema/enum.js +19 -0
  72. package/dist/schema/enum.js.map +1 -0
  73. package/dist/schema/integer.d.ts +13 -0
  74. package/dist/schema/integer.d.ts.map +1 -0
  75. package/dist/schema/integer.js +32 -0
  76. package/dist/schema/integer.js.map +1 -0
  77. package/dist/schema/intersection.d.ts +16 -0
  78. package/dist/schema/intersection.d.ts.map +1 -0
  79. package/dist/schema/intersection.js +33 -0
  80. package/dist/schema/intersection.js.map +1 -0
  81. package/dist/schema/literal.d.ts +7 -0
  82. package/dist/schema/literal.d.ts.map +1 -0
  83. package/dist/schema/literal.js +19 -0
  84. package/dist/schema/literal.js.map +1 -0
  85. package/dist/schema/never.d.ts +5 -0
  86. package/dist/schema/never.d.ts.map +1 -0
  87. package/dist/schema/never.js +11 -0
  88. package/dist/schema/never.js.map +1 -0
  89. package/dist/schema/null.d.ts +7 -0
  90. package/dist/schema/null.d.ts.map +1 -0
  91. package/dist/schema/null.js +18 -0
  92. package/dist/schema/null.js.map +1 -0
  93. package/dist/schema/object.d.ts +47 -0
  94. package/dist/schema/object.d.ts.map +1 -0
  95. package/dist/schema/object.js +89 -0
  96. package/dist/schema/object.js.map +1 -0
  97. package/dist/schema/params.d.ts +22 -0
  98. package/dist/schema/params.d.ts.map +1 -0
  99. package/dist/schema/params.js +115 -0
  100. package/dist/schema/params.js.map +1 -0
  101. package/dist/schema/payload.d.ts +19 -0
  102. package/dist/schema/payload.d.ts.map +1 -0
  103. package/dist/schema/payload.js +16 -0
  104. package/dist/schema/payload.js.map +1 -0
  105. package/dist/schema/permission-set.d.ts +15 -0
  106. package/dist/schema/permission-set.d.ts.map +1 -0
  107. package/dist/schema/permission-set.js +16 -0
  108. package/dist/schema/permission-set.js.map +1 -0
  109. package/dist/schema/permission.d.ts +9 -0
  110. package/dist/schema/permission.d.ts.map +1 -0
  111. package/dist/schema/permission.js +14 -0
  112. package/dist/schema/permission.js.map +1 -0
  113. package/dist/schema/procedure.d.ts +17 -0
  114. package/dist/schema/procedure.d.ts.map +1 -0
  115. package/dist/schema/procedure.js +20 -0
  116. package/dist/schema/procedure.js.map +1 -0
  117. package/dist/schema/query.d.ts +15 -0
  118. package/dist/schema/query.d.ts.map +1 -0
  119. package/dist/schema/query.js +18 -0
  120. package/dist/schema/query.js.map +1 -0
  121. package/dist/schema/record.d.ts +37 -0
  122. package/dist/schema/record.d.ts.map +1 -0
  123. package/dist/schema/record.js +64 -0
  124. package/dist/schema/record.js.map +1 -0
  125. package/dist/schema/ref.d.ts +10 -0
  126. package/dist/schema/ref.d.ts.map +1 -0
  127. package/dist/schema/ref.js +36 -0
  128. package/dist/schema/ref.js.map +1 -0
  129. package/dist/schema/string.d.ts +24 -0
  130. package/dist/schema/string.d.ts.map +1 -0
  131. package/dist/schema/string.js +107 -0
  132. package/dist/schema/string.js.map +1 -0
  133. package/dist/schema/subscription.d.ts +16 -0
  134. package/dist/schema/subscription.d.ts.map +1 -0
  135. package/dist/schema/subscription.js +18 -0
  136. package/dist/schema/subscription.js.map +1 -0
  137. package/dist/schema/token.d.ts +10 -0
  138. package/dist/schema/token.d.ts.map +1 -0
  139. package/dist/schema/token.js +36 -0
  140. package/dist/schema/token.js.map +1 -0
  141. package/dist/schema/typed-object.d.ts +32 -0
  142. package/dist/schema/typed-object.d.ts.map +1 -0
  143. package/dist/schema/typed-object.js +40 -0
  144. package/dist/schema/typed-object.js.map +1 -0
  145. package/dist/schema/typed-ref.d.ts +30 -0
  146. package/dist/schema/typed-ref.d.ts.map +1 -0
  147. package/dist/schema/typed-ref.js +44 -0
  148. package/dist/schema/typed-ref.js.map +1 -0
  149. package/dist/schema/typed-union.d.ts +26 -0
  150. package/dist/schema/typed-union.d.ts.map +1 -0
  151. package/dist/schema/typed-union.js +54 -0
  152. package/dist/schema/typed-union.js.map +1 -0
  153. package/dist/schema/union.d.ts +9 -0
  154. package/dist/schema/union.d.ts.map +1 -0
  155. package/dist/schema/union.js +29 -0
  156. package/dist/schema/union.js.map +1 -0
  157. package/dist/schema/unknown-object.d.ts +9 -0
  158. package/dist/schema/unknown-object.d.ts.map +1 -0
  159. package/dist/schema/unknown-object.js +16 -0
  160. package/dist/schema/unknown-object.js.map +1 -0
  161. package/dist/schema/unknown.d.ts +5 -0
  162. package/dist/schema/unknown.d.ts.map +1 -0
  163. package/dist/schema/unknown.js +11 -0
  164. package/dist/schema/unknown.js.map +1 -0
  165. package/dist/schema.d.ts +34 -0
  166. package/dist/schema.d.ts.map +1 -0
  167. package/dist/schema.js +41 -0
  168. package/dist/schema.js.map +1 -0
  169. package/dist/util/array-agg.d.ts +20 -0
  170. package/dist/util/array-agg.d.ts.map +1 -0
  171. package/dist/util/array-agg.js +42 -0
  172. package/dist/util/array-agg.js.map +1 -0
  173. package/dist/validation/property-key.d.ts +2 -0
  174. package/dist/validation/property-key.d.ts.map +1 -0
  175. package/dist/validation/property-key.js +3 -0
  176. package/dist/validation/property-key.js.map +1 -0
  177. package/dist/validation/validation-error.d.ts +9 -0
  178. package/dist/validation/validation-error.d.ts.map +1 -0
  179. package/dist/validation/validation-error.js +27 -0
  180. package/dist/validation/validation-error.js.map +1 -0
  181. package/dist/validation/validation-issue.d.ts +45 -0
  182. package/dist/validation/validation-issue.d.ts.map +1 -0
  183. package/dist/validation/validation-issue.js +167 -0
  184. package/dist/validation/validation-issue.js.map +1 -0
  185. package/dist/validation/validator.d.ts +113 -0
  186. package/dist/validation/validator.d.ts.map +1 -0
  187. package/dist/validation/validator.js +209 -0
  188. package/dist/validation/validator.js.map +1 -0
  189. package/dist/validation.d.ts +5 -0
  190. package/dist/validation.d.ts.map +1 -0
  191. package/dist/validation.js +8 -0
  192. package/dist/validation.js.map +1 -0
  193. package/package.json +45 -0
  194. package/src/core/$type.ts +19 -0
  195. package/src/core/record-key.ts +15 -0
  196. package/src/core/result.ts +73 -0
  197. package/src/core/string-format.ts +124 -0
  198. package/src/core/types.ts +22 -0
  199. package/src/core.ts +5 -0
  200. package/src/external.ts +365 -0
  201. package/src/index.ts +3 -0
  202. package/src/schema/_parameters.ts +26 -0
  203. package/src/schema/array.ts +51 -0
  204. package/src/schema/blob.ts +82 -0
  205. package/src/schema/boolean.ts +24 -0
  206. package/src/schema/bytes.ts +38 -0
  207. package/src/schema/cid.ts +27 -0
  208. package/src/schema/custom.ts +36 -0
  209. package/src/schema/dict.ts +69 -0
  210. package/src/schema/discriminated-union.ts +144 -0
  211. package/src/schema/enum.ts +20 -0
  212. package/src/schema/integer.ts +41 -0
  213. package/src/schema/intersection.ts +57 -0
  214. package/src/schema/literal.ts +20 -0
  215. package/src/schema/never.ts +14 -0
  216. package/src/schema/null.ts +20 -0
  217. package/src/schema/object.test.ts +138 -0
  218. package/src/schema/object.ts +180 -0
  219. package/src/schema/params.ts +157 -0
  220. package/src/schema/payload.ts +53 -0
  221. package/src/schema/permission-set.ts +22 -0
  222. package/src/schema/permission.ts +15 -0
  223. package/src/schema/procedure.ts +35 -0
  224. package/src/schema/query.ts +28 -0
  225. package/src/schema/record.ts +106 -0
  226. package/src/schema/ref.ts +47 -0
  227. package/src/schema/string.ts +139 -0
  228. package/src/schema/subscription.ts +35 -0
  229. package/src/schema/token.ts +41 -0
  230. package/src/schema/typed-object.ts +64 -0
  231. package/src/schema/typed-ref.ts +68 -0
  232. package/src/schema/typed-union.ts +106 -0
  233. package/src/schema/union.ts +40 -0
  234. package/src/schema/unknown-object.ts +20 -0
  235. package/src/schema/unknown.ts +10 -0
  236. package/src/schema.ts +40 -0
  237. package/src/util/array-agg.test.ts +41 -0
  238. package/src/util/array-agg.ts +43 -0
  239. package/src/validation/property-key.ts +1 -0
  240. package/src/validation/validation-error.ts +32 -0
  241. package/src/validation/validation-issue.ts +231 -0
  242. package/src/validation/validator.ts +361 -0
  243. package/src/validation.ts +4 -0
@@ -0,0 +1,18 @@
1
+ import { Infer, ValidationResult, Validator, ValidatorContext } from '../validation.js';
2
+ export type DictSchemaOutput<KeySchema extends Validator, ValueSchema extends Validator> = Infer<KeySchema> extends never ? Record<string, never> : Record<Infer<KeySchema> & string, Infer<ValueSchema>>;
3
+ /**
4
+ * @note There is no dictionary in Lexicon schemas. This is a custom extension
5
+ * to allow map-like objects when using the lex library programmatically (i.e.
6
+ * not code generated from a lexicon schema).
7
+ */
8
+ export declare class DictSchema<const KeySchema extends Validator = any, const ValueSchema extends Validator = any> extends Validator<DictSchemaOutput<KeySchema, ValueSchema>> {
9
+ readonly keySchema: KeySchema;
10
+ readonly valueSchema: ValueSchema;
11
+ constructor(keySchema: KeySchema, valueSchema: ValueSchema);
12
+ validateInContext(input: unknown, ctx: ValidatorContext, options?: {
13
+ ignoredKeys?: {
14
+ has(k: string): boolean;
15
+ };
16
+ }): ValidationResult<DictSchemaOutput<KeySchema, ValueSchema>>;
17
+ }
18
+ //# sourceMappingURL=dict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dict.d.ts","sourceRoot":"","sources":["../../src/schema/dict.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,SAAS,EAC3B,WAAW,SAAS,SAAS,IAE7B,KAAK,CAAC,SAAS,CAAC,SAAS,KAAK,GAC1B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACrB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;AAE3D;;;;GAIG;AACH,qBAAa,UAAU,CACrB,KAAK,CAAC,SAAS,SAAS,SAAS,GAAG,GAAG,EACvC,KAAK,CAAC,WAAW,SAAS,SAAS,GAAG,GAAG,CACzC,SAAQ,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEzD,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW;gBADxB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW;IAK1B,iBAAiB,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,EACrB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAA;KAAE,GACtD,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;CAgC9D"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DictSchema = void 0;
4
+ const lex_data_1 = require("@atproto/lex-data");
5
+ const validation_js_1 = require("../validation.js");
6
+ /**
7
+ * @note There is no dictionary in Lexicon schemas. This is a custom extension
8
+ * to allow map-like objects when using the lex library programmatically (i.e.
9
+ * not code generated from a lexicon schema).
10
+ */
11
+ class DictSchema extends validation_js_1.Validator {
12
+ keySchema;
13
+ valueSchema;
14
+ constructor(keySchema, valueSchema) {
15
+ super();
16
+ this.keySchema = keySchema;
17
+ this.valueSchema = valueSchema;
18
+ }
19
+ validateInContext(input, ctx, options) {
20
+ if (!(0, lex_data_1.isPlainObject)(input)) {
21
+ return ctx.issueInvalidType(input, 'dict');
22
+ }
23
+ let copy;
24
+ for (const key in input) {
25
+ if (options?.ignoredKeys?.has(key))
26
+ continue;
27
+ const keyResult = ctx.validate(key, this.keySchema);
28
+ if (!keyResult.success)
29
+ return keyResult;
30
+ if (keyResult.value !== key) {
31
+ // We can't safely "move" the key to a different name in the output
32
+ // object (because there may already be something there), so we issue a
33
+ // "required key" error if the key validation changes the key
34
+ return ctx.issueRequiredKey(input, key);
35
+ }
36
+ const valueResult = ctx.validateChild(input, key, this.valueSchema);
37
+ if (!valueResult.success)
38
+ return valueResult;
39
+ if (valueResult.value !== input[key]) {
40
+ copy ??= { ...input };
41
+ copy[key] = valueResult.value;
42
+ }
43
+ }
44
+ return ctx.success((copy ?? input));
45
+ }
46
+ }
47
+ exports.DictSchema = DictSchema;
48
+ //# sourceMappingURL=dict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dict.js","sourceRoot":"","sources":["../../src/schema/dict.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AACjD,oDAKyB;AAUzB;;;;GAIG;AACH,MAAa,UAGX,SAAQ,yBAAmD;IAEhD;IACA;IAFX,YACW,SAAoB,EACpB,WAAwB;QAEjC,KAAK,EAAE,CAAA;QAHE,cAAS,GAAT,SAAS,CAAW;QACpB,gBAAW,GAAX,WAAW,CAAa;IAGnC,CAAC;IAEQ,iBAAiB,CACxB,KAAc,EACd,GAAqB,EACrB,OAAuD;QAEvD,IAAI,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAyC,CAAA;QAE7C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAQ;YAE5C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACnD,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAA;YACxC,IAAI,SAAS,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAC5B,mEAAmE;gBACnE,uEAAuE;gBACvE,6DAA6D;gBAC7D,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACzC,CAAC;YAED,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YACnE,IAAI,CAAC,WAAW,CAAC,OAAO;gBAAE,OAAO,WAAW,CAAA;YAE5C,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,KAAK,EAAE,GAAG,KAAK,EAAE,CAAA;gBACrB,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAChB,CAAC,IAAI,IAAI,KAAK,CAA6C,CAC5D,CAAA;IACH,CAAC;CACF;AA/CD,gCA+CC","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport {\n Infer,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../validation.js'\n\nexport type DictSchemaOutput<\n KeySchema extends Validator,\n ValueSchema extends Validator,\n> =\n Infer<KeySchema> extends never\n ? Record<string, never>\n : Record<Infer<KeySchema> & string, Infer<ValueSchema>>\n\n/**\n * @note There is no dictionary in Lexicon schemas. This is a custom extension\n * to allow map-like objects when using the lex library programmatically (i.e.\n * not code generated from a lexicon schema).\n */\nexport class DictSchema<\n const KeySchema extends Validator = any,\n const ValueSchema extends Validator = any,\n> extends Validator<DictSchemaOutput<KeySchema, ValueSchema>> {\n constructor(\n readonly keySchema: KeySchema,\n readonly valueSchema: ValueSchema,\n ) {\n super()\n }\n\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n options?: { ignoredKeys?: { has(k: string): boolean } },\n ): ValidationResult<DictSchemaOutput<KeySchema, ValueSchema>> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'dict')\n }\n\n let copy: undefined | Record<string, unknown>\n\n for (const key in input) {\n if (options?.ignoredKeys?.has(key)) continue\n\n const keyResult = ctx.validate(key, this.keySchema)\n if (!keyResult.success) return keyResult\n if (keyResult.value !== key) {\n // We can't safely \"move\" the key to a different name in the output\n // object (because there may already be something there), so we issue a\n // \"required key\" error if the key validation changes the key\n return ctx.issueRequiredKey(input, key)\n }\n\n const valueResult = ctx.validateChild(input, key, this.valueSchema)\n if (!valueResult.success) return valueResult\n\n if (valueResult.value !== input[key]) {\n copy ??= { ...input }\n copy[key] = valueResult.value\n }\n }\n\n return ctx.success(\n (copy ?? input) as DictSchemaOutput<KeySchema, ValueSchema>,\n )\n }\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import { ArrayContaining } from '../core.js';
2
+ import { ValidationResult, Validator, ValidatorContext } from '../validation.js';
3
+ import { ObjectSchema } from './object.js';
4
+ export type DiscriminatedUnionSchemaVariant<Discriminator extends string> = ObjectSchema<{
5
+ [_ in Discriminator]: Validator;
6
+ }, {
7
+ required: ArrayContaining<Discriminator, string>;
8
+ }>;
9
+ export type DiscriminatedUnionSchemaVariants<Discriminator extends string> = readonly [
10
+ DiscriminatedUnionSchemaVariant<Discriminator>,
11
+ ...DiscriminatedUnionSchemaVariant<Discriminator>[]
12
+ ];
13
+ export type DiscriminatedUnionSchemaOutput<Options extends readonly Validator[]> = Options extends readonly [Validator<infer V>] ? V : Options extends readonly [
14
+ Validator<infer V>,
15
+ ...infer Rest extends Validator[]
16
+ ] ? V | DiscriminatedUnionSchemaOutput<Rest> : never;
17
+ /**
18
+ * @note There is no discriminated union in Lexicon schemas. This is a custom
19
+ * extension to allow optimized validation of union of objects when using the
20
+ * lex library programmatically (i.e. not code generated from a lexicon schema).
21
+ */
22
+ export declare class DiscriminatedUnionSchema<const Discriminator extends string = any, const Options extends DiscriminatedUnionSchemaVariants<Discriminator> = any> extends Validator<DiscriminatedUnionSchemaOutput<Options>> {
23
+ readonly discriminator: Discriminator;
24
+ readonly variants: Options;
25
+ constructor(discriminator: Discriminator, variants: Options);
26
+ /**
27
+ * If all variants have a literal or enum for the discriminator property,
28
+ * and there are no overlapping values, returns a map of discriminator values
29
+ * to variants. Otherwise, returns null.
30
+ */
31
+ protected get variantsMap(): Map<unknown, DiscriminatedUnionSchemaVariant<Discriminator>> | null;
32
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<DiscriminatedUnionSchemaOutput<Options>>;
33
+ }
34
+ //# sourceMappingURL=discriminated-union.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminated-union.d.ts","sourceRoot":"","sources":["../../src/schema/discriminated-union.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAGL,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,+BAA+B,CAAC,aAAa,SAAS,MAAM,IACtE,YAAY,CACV;KAAG,CAAC,IAAI,aAAa,GAAG,SAAS;CAAE,EACnC;IAAE,QAAQ,EAAE,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;CAAE,CACrD,CAAA;AAEH,MAAM,MAAM,gCAAgC,CAAC,aAAa,SAAS,MAAM,IACvE,SAAS;IACP,+BAA+B,CAAC,aAAa,CAAC;IAC9C,GAAG,+BAA+B,CAAC,aAAa,CAAC,EAAE;CACpD,CAAA;AAEH,MAAM,MAAM,8BAA8B,CACxC,OAAO,SAAS,SAAS,SAAS,EAAE,IAClC,OAAO,SAAS,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAC7C,CAAC,GACD,OAAO,SAAS,SAAS;IACrB,SAAS,CAAC,MAAM,CAAC,CAAC;IAClB,GAAG,MAAM,IAAI,SAAS,SAAS,EAAE;CAClC,GACD,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,GACxC,KAAK,CAAA;AAEX;;;;GAIG;AACH,qBAAa,wBAAwB,CACnC,KAAK,CAAC,aAAa,SAAS,MAAM,GAAG,GAAG,EACxC,KAAK,CAAC,OAAO,SAAS,gCAAgC,CAAC,aAAa,CAAC,GAAG,GAAG,CAC3E,SAAQ,SAAS,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAExD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO;gBADjB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,OAAO;IAK5B;;;;OAIG;IACH,SAAS,KAAK,WAAW,wEA6BxB;IAEQ,iBAAiB,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;CAoD7D"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiscriminatedUnionSchema = void 0;
4
+ const lex_data_1 = require("@atproto/lex-data");
5
+ const validation_js_1 = require("../validation.js");
6
+ const enum_js_1 = require("./enum.js");
7
+ const literal_js_1 = require("./literal.js");
8
+ /**
9
+ * @note There is no discriminated union in Lexicon schemas. This is a custom
10
+ * extension to allow optimized validation of union of objects when using the
11
+ * lex library programmatically (i.e. not code generated from a lexicon schema).
12
+ */
13
+ class DiscriminatedUnionSchema extends validation_js_1.Validator {
14
+ discriminator;
15
+ variants;
16
+ constructor(discriminator, variants) {
17
+ super();
18
+ this.discriminator = discriminator;
19
+ this.variants = variants;
20
+ }
21
+ /**
22
+ * If all variants have a literal or enum for the discriminator property,
23
+ * and there are no overlapping values, returns a map of discriminator values
24
+ * to variants. Otherwise, returns null.
25
+ */
26
+ get variantsMap() {
27
+ const map = new Map();
28
+ for (const variant of this.variants) {
29
+ const schema = variant.validators[this.discriminator];
30
+ if (schema instanceof literal_js_1.LiteralSchema) {
31
+ if (map.has(schema.value))
32
+ return null; // overlapping value
33
+ map.set(schema.value, variant);
34
+ }
35
+ else if (schema instanceof enum_js_1.EnumSchema) {
36
+ for (const val of schema.values) {
37
+ if (map.has(val))
38
+ return null; // overlapping value
39
+ map.set(val, variant);
40
+ }
41
+ }
42
+ else {
43
+ return null; // not a literal or enum
44
+ }
45
+ }
46
+ // Cache the map on the instance (to avoid re-computing)
47
+ Object.defineProperty(this, 'variantsMap', {
48
+ value: map,
49
+ writable: false,
50
+ enumerable: false,
51
+ configurable: true,
52
+ });
53
+ return map;
54
+ }
55
+ validateInContext(input, ctx) {
56
+ if (!(0, lex_data_1.isPlainObject)(input)) {
57
+ return ctx.issueInvalidType(input, 'object');
58
+ }
59
+ if (!Object.hasOwn(input, this.discriminator)) {
60
+ return ctx.issueRequiredKey(input, this.discriminator);
61
+ }
62
+ // Fast path: if we have a mapping of discriminator values to variants,
63
+ // we can directly select the correct variant to validate against. This also
64
+ // outputs a better error (with a single failure issue) when the discriminator.
65
+ if (this.variantsMap) {
66
+ const variant = this.variantsMap.get(input[this.discriminator]);
67
+ if (!variant) {
68
+ return ctx.issueInvalidPropertyValue(input, this.discriminator, [
69
+ ...this.variantsMap.keys(),
70
+ ]);
71
+ }
72
+ return ctx.validate(input, variant);
73
+ }
74
+ // Slow path: try validating against each variant and return the first
75
+ // successful one (or aggregate all failures if none match).
76
+ const failures = [];
77
+ for (const variant of this.variants) {
78
+ const discSchema = variant.validators[this.discriminator];
79
+ const discResult = ctx.validateChild(input, this.discriminator, discSchema);
80
+ if (!discResult.success) {
81
+ failures.push(discResult);
82
+ continue;
83
+ }
84
+ return ctx.validate(input, variant);
85
+ }
86
+ return {
87
+ success: false,
88
+ error: validation_js_1.ValidationError.fromFailures(failures),
89
+ };
90
+ }
91
+ }
92
+ exports.DiscriminatedUnionSchema = DiscriminatedUnionSchema;
93
+ //# sourceMappingURL=discriminated-union.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discriminated-union.js","sourceRoot":"","sources":["../../src/schema/discriminated-union.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport { ArrayContaining } from '../core.js'\nimport {\n ValidationError,\n ValidationFailure,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../validation.js'\nimport { EnumSchema } from './enum.js'\nimport { LiteralSchema } from './literal.js'\nimport { ObjectSchema } from './object.js'\n\nexport type DiscriminatedUnionSchemaVariant<Discriminator extends string> =\n ObjectSchema<\n { [_ in Discriminator]: Validator },\n { required: ArrayContaining<Discriminator, string> }\n >\n\nexport type DiscriminatedUnionSchemaVariants<Discriminator extends string> =\n readonly [\n DiscriminatedUnionSchemaVariant<Discriminator>,\n ...DiscriminatedUnionSchemaVariant<Discriminator>[],\n ]\n\nexport type DiscriminatedUnionSchemaOutput<\n Options extends readonly Validator[],\n> = Options extends readonly [Validator<infer V>]\n ? V\n : Options extends readonly [\n Validator<infer V>,\n ...infer Rest extends Validator[],\n ]\n ? V | DiscriminatedUnionSchemaOutput<Rest>\n : never\n\n/**\n * @note There is no discriminated union in Lexicon schemas. This is a custom\n * extension to allow optimized validation of union of objects when using the\n * lex library programmatically (i.e. not code generated from a lexicon schema).\n */\nexport class DiscriminatedUnionSchema<\n const Discriminator extends string = any,\n const Options extends DiscriminatedUnionSchemaVariants<Discriminator> = any,\n> extends Validator<DiscriminatedUnionSchemaOutput<Options>> {\n constructor(\n readonly discriminator: Discriminator,\n readonly variants: Options,\n ) {\n super()\n }\n\n /**\n * If all variants have a literal or enum for the discriminator property,\n * and there are no overlapping values, returns a map of discriminator values\n * to variants. Otherwise, returns null.\n */\n protected get variantsMap() {\n const map = new Map<\n unknown,\n DiscriminatedUnionSchemaVariant<Discriminator>\n >()\n for (const variant of this.variants) {\n const schema = variant.validators[this.discriminator]\n if (schema instanceof LiteralSchema) {\n if (map.has(schema.value)) return null // overlapping value\n map.set(schema.value, variant)\n } else if (schema instanceof EnumSchema) {\n for (const val of schema.values) {\n if (map.has(val)) return null // overlapping value\n map.set(val, variant)\n }\n } else {\n return null // not a literal or enum\n }\n }\n\n // Cache the map on the instance (to avoid re-computing)\n Object.defineProperty(this, 'variantsMap', {\n value: map,\n writable: false,\n enumerable: false,\n configurable: true,\n })\n\n return map\n }\n\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<DiscriminatedUnionSchemaOutput<Options>> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'object')\n }\n\n if (!Object.hasOwn(input, this.discriminator)) {\n return ctx.issueRequiredKey(input, this.discriminator)\n }\n\n // Fast path: if we have a mapping of discriminator values to variants,\n // we can directly select the correct variant to validate against. This also\n // outputs a better error (with a single failure issue) when the discriminator.\n if (this.variantsMap) {\n const variant = this.variantsMap.get(input[this.discriminator])\n if (!variant) {\n return ctx.issueInvalidPropertyValue(input, this.discriminator, [\n ...this.variantsMap.keys(),\n ])\n }\n\n return ctx.validate(input, variant) as ValidationResult<\n DiscriminatedUnionSchemaOutput<Options>\n >\n }\n\n // Slow path: try validating against each variant and return the first\n // successful one (or aggregate all failures if none match).\n const failures: ValidationFailure[] = []\n\n for (const variant of this.variants) {\n const discSchema = variant.validators[this.discriminator]\n const discResult = ctx.validateChild(\n input,\n this.discriminator,\n discSchema,\n )\n\n if (!discResult.success) {\n failures.push(discResult)\n continue\n }\n\n return ctx.validate(input, variant) as ValidationResult<\n DiscriminatedUnionSchemaOutput<Options>\n >\n }\n\n return {\n success: false,\n error: ValidationError.fromFailures(failures),\n }\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { ValidationResult, Validator, ValidatorContext } from '../validation.js';
2
+ export declare class EnumSchema<Output extends null | string | number | boolean = any> extends Validator<Output> {
3
+ readonly values: readonly Output[];
4
+ constructor(values: readonly Output[]);
5
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<Output>;
6
+ }
7
+ //# sourceMappingURL=enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/schema/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEhF,qBAAa,UAAU,CACrB,MAAM,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG,CACrD,SAAQ,SAAS,CAAC,MAAM,CAAC;IACb,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;gBAAzB,MAAM,EAAE,SAAS,MAAM,EAAE;IAIrC,iBAAiB,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,MAAM,CAAC;CAO5B"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnumSchema = void 0;
4
+ const validation_js_1 = require("../validation.js");
5
+ class EnumSchema extends validation_js_1.Validator {
6
+ values;
7
+ constructor(values) {
8
+ super();
9
+ this.values = values;
10
+ }
11
+ validateInContext(input, ctx) {
12
+ if (!this.values.includes(input)) {
13
+ return ctx.issueInvalidValue(input, this.values);
14
+ }
15
+ return ctx.success(input);
16
+ }
17
+ }
18
+ exports.EnumSchema = EnumSchema;
19
+ //# sourceMappingURL=enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/schema/enum.ts"],"names":[],"mappings":";;;AAAA,oDAAgF;AAEhF,MAAa,UAEX,SAAQ,yBAAiB;IACJ;IAArB,YAAqB,MAAyB;QAC5C,KAAK,EAAE,CAAA;QADY,WAAM,GAAN,MAAM,CAAmB;IAE9C,CAAC;IAEQ,iBAAiB,CACxB,KAAc,EACd,GAAqB;QAErB,IAAI,CAAE,IAAI,CAAC,MAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAClD,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,KAAe,CAAC,CAAA;IACrC,CAAC;CACF;AAjBD,gCAiBC","sourcesContent":["import { ValidationResult, Validator, ValidatorContext } from '../validation.js'\n\nexport class EnumSchema<\n Output extends null | string | number | boolean = any,\n> extends Validator<Output> {\n constructor(readonly values: readonly Output[]) {\n super()\n }\n\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<Output> {\n if (!(this.values as readonly unknown[]).includes(input)) {\n return ctx.issueInvalidValue(input, this.values)\n }\n\n return ctx.success(input as Output)\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { ValidationResult, Validator, ValidatorContext } from '../validation.js';
2
+ export type IntegerSchemaOptions = {
3
+ default?: number;
4
+ minimum?: number;
5
+ maximum?: number;
6
+ };
7
+ export declare class IntegerSchema extends Validator<number> {
8
+ readonly options: IntegerSchemaOptions;
9
+ readonly lexiconType: "integer";
10
+ constructor(options: IntegerSchemaOptions);
11
+ validateInContext(input: unknown | undefined, ctx: ValidatorContext): ValidationResult<number>;
12
+ }
13
+ //# sourceMappingURL=integer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integer.d.ts","sourceRoot":"","sources":["../../src/schema/integer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEhF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,aAAc,SAAQ,SAAS,CAAC,MAAM,CAAC;IAGtC,QAAQ,CAAC,OAAO,EAAE,oBAAoB;IAFlD,QAAQ,CAAC,WAAW,EAAG,SAAS,CAAS;gBAEpB,OAAO,EAAE,oBAAoB;IAIzC,iBAAiB,CACxB,KAAK,EAAE,OAAO,YAAuB,EACrC,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,MAAM,CAAC;CAe5B"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntegerSchema = void 0;
4
+ const validation_js_1 = require("../validation.js");
5
+ class IntegerSchema extends validation_js_1.Validator {
6
+ options;
7
+ lexiconType = 'integer';
8
+ constructor(options) {
9
+ super();
10
+ this.options = options;
11
+ }
12
+ validateInContext(input = this.options.default, ctx) {
13
+ if (!isInteger(input)) {
14
+ return ctx.issueInvalidType(input, 'integer');
15
+ }
16
+ if (this.options.minimum !== undefined && input < this.options.minimum) {
17
+ return ctx.issueTooSmall(input, 'integer', this.options.minimum, input);
18
+ }
19
+ if (this.options.maximum !== undefined && input > this.options.maximum) {
20
+ return ctx.issueTooBig(input, 'integer', this.options.maximum, input);
21
+ }
22
+ return ctx.success(input);
23
+ }
24
+ }
25
+ exports.IntegerSchema = IntegerSchema;
26
+ /**
27
+ * Simple wrapper around {@link Number.isInteger} that acts as a type guard.
28
+ */
29
+ function isInteger(input) {
30
+ return Number.isInteger(input);
31
+ }
32
+ //# sourceMappingURL=integer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integer.js","sourceRoot":"","sources":["../../src/schema/integer.ts"],"names":[],"mappings":";;;AAAA,oDAAgF;AAQhF,MAAa,aAAc,SAAQ,yBAAiB;IAG7B;IAFZ,WAAW,GAAG,SAAkB,CAAA;IAEzC,YAAqB,OAA6B;QAChD,KAAK,EAAE,CAAA;QADY,YAAO,GAAP,OAAO,CAAsB;IAElD,CAAC;IAEQ,iBAAiB,CACxB,QAAiB,IAAI,CAAC,OAAO,CAAC,OAAO,EACrC,GAAqB;QAErB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACzE,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACvE,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;CACF;AAzBD,sCAyBC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC","sourcesContent":["import { ValidationResult, Validator, ValidatorContext } from '../validation.js'\n\nexport type IntegerSchemaOptions = {\n default?: number\n minimum?: number\n maximum?: number\n}\n\nexport class IntegerSchema extends Validator<number> {\n readonly lexiconType = 'integer' as const\n\n constructor(readonly options: IntegerSchemaOptions) {\n super()\n }\n\n override validateInContext(\n input: unknown = this.options.default,\n ctx: ValidatorContext,\n ): ValidationResult<number> {\n if (!isInteger(input)) {\n return ctx.issueInvalidType(input, 'integer')\n }\n\n if (this.options.minimum !== undefined && input < this.options.minimum) {\n return ctx.issueTooSmall(input, 'integer', this.options.minimum, input)\n }\n\n if (this.options.maximum !== undefined && input > this.options.maximum) {\n return ctx.issueTooBig(input, 'integer', this.options.maximum, input)\n }\n\n return ctx.success(input)\n }\n}\n\n/**\n * Simple wrapper around {@link Number.isInteger} that acts as a type guard.\n */\nfunction isInteger(input: unknown): input is number {\n return Number.isInteger(input)\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { Infer, ValidationResult, Validator, ValidatorContext } from '../validation.js';
2
+ export type IntersectionSchemaValidators = readonly [
3
+ Validator,
4
+ Validator,
5
+ ...Validator[]
6
+ ];
7
+ export type IntersectionSchemaOutput<V extends readonly Validator[], Base = unknown> = V extends readonly [
8
+ infer First extends Validator,
9
+ ...infer Rest extends Validator[]
10
+ ] ? IntersectionSchemaOutput<Rest, Base & Infer<First>> : Base;
11
+ export declare class IntersectionSchema<V extends IntersectionSchemaValidators = any> extends Validator<IntersectionSchemaOutput<V>> {
12
+ protected readonly validators: V;
13
+ constructor(validators: V);
14
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<IntersectionSchemaOutput<V>>;
15
+ }
16
+ //# sourceMappingURL=intersection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intersection.d.ts","sourceRoot":"","sources":["../../src/schema/intersection.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,4BAA4B,GAAG,SAAS;IAClD,SAAS;IACT,SAAS;IACT,GAAG,SAAS,EAAE;CACf,CAAA;AACD,MAAM,MAAM,wBAAwB,CAClC,CAAC,SAAS,SAAS,SAAS,EAAE,EAC9B,IAAI,GAAG,OAAO,IACZ,CAAC,SAAS,SAAS;IACrB,MAAM,KAAK,SAAS,SAAS;IAC7B,GAAG,MAAM,IAAI,SAAS,SAAS,EAAE;CAClC,GACG,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GACnD,IAAI,CAAA;AAER,qBAAa,kBAAkB,CAC7B,CAAC,SAAS,4BAA4B,GAAG,GAAG,CAC5C,SAAQ,SAAS,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAAb,UAAU,EAAE,CAAC;IAInC,iBAAiB,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;CAwBjD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntersectionSchema = void 0;
4
+ const validation_js_1 = require("../validation.js");
5
+ class IntersectionSchema extends validation_js_1.Validator {
6
+ validators;
7
+ constructor(validators) {
8
+ super();
9
+ this.validators = validators;
10
+ }
11
+ validateInContext(input, ctx) {
12
+ for (let i = 0; i < this.validators.length; i++) {
13
+ const result = ctx.validate(input, this.validators[i]);
14
+ if (!result.success) {
15
+ return result;
16
+ }
17
+ // @NOTE because transforming the value could make it invalid for previous
18
+ // validators, we need to ensure the input remains unchanged only gets
19
+ // transformed by the first validator.
20
+ if (i !== 0 && input !== result.value) {
21
+ // The alternative would be to allow transforms on a first pass
22
+ // (ignoring errors) and then re-validate the final value against all
23
+ // validators (without allowing further transforms). This would be way
24
+ // less efficient (we could make this optional).
25
+ return ctx.issueInvalidValue(input, [result.value]);
26
+ }
27
+ input = result.value;
28
+ }
29
+ return ctx.success(input);
30
+ }
31
+ }
32
+ exports.IntersectionSchema = IntersectionSchema;
33
+ //# sourceMappingURL=intersection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intersection.js","sourceRoot":"","sources":["../../src/schema/intersection.ts"],"names":[],"mappings":";;;AAAA,oDAKyB;AAiBzB,MAAa,kBAEX,SAAQ,yBAAsC;IACf;IAA/B,YAA+B,UAAa;QAC1C,KAAK,EAAE,CAAA;QADsB,eAAU,GAAV,UAAU,CAAG;IAE5C,CAAC;IAEQ,iBAAiB,CACxB,KAAc,EACd,GAAqB;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;YAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAA;YACf,CAAC;YAED,0EAA0E;YAC1E,sEAAsE;YACtE,sCAAsC;YACtC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtC,+DAA+D;gBAC/D,qEAAqE;gBACrE,sEAAsE;gBACtE,gDAAgD;gBAChD,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YACrD,CAAC;YAED,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QACtB,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,KAAoC,CAAC,CAAA;IAC1D,CAAC;CACF;AAlCD,gDAkCC","sourcesContent":["import {\n Infer,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../validation.js'\n\nexport type IntersectionSchemaValidators = readonly [\n Validator,\n Validator,\n ...Validator[],\n]\nexport type IntersectionSchemaOutput<\n V extends readonly Validator[],\n Base = unknown,\n> = V extends readonly [\n infer First extends Validator,\n ...infer Rest extends Validator[],\n]\n ? IntersectionSchemaOutput<Rest, Base & Infer<First>>\n : Base\n\nexport class IntersectionSchema<\n V extends IntersectionSchemaValidators = any,\n> extends Validator<IntersectionSchemaOutput<V>> {\n constructor(protected readonly validators: V) {\n super()\n }\n\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<IntersectionSchemaOutput<V>> {\n for (let i = 0; i < this.validators.length; i++) {\n const result = ctx.validate(input, this.validators[i])\n\n if (!result.success) {\n return result\n }\n\n // @NOTE because transforming the value could make it invalid for previous\n // validators, we need to ensure the input remains unchanged only gets\n // transformed by the first validator.\n if (i !== 0 && input !== result.value) {\n // The alternative would be to allow transforms on a first pass\n // (ignoring errors) and then re-validate the final value against all\n // validators (without allowing further transforms). This would be way\n // less efficient (we could make this optional).\n return ctx.issueInvalidValue(input, [result.value])\n }\n\n input = result.value\n }\n\n return ctx.success(input as IntersectionSchemaOutput<V>)\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { ValidationResult, Validator, ValidatorContext } from '../validation.js';
2
+ export declare class LiteralSchema<Output extends null | string | number | boolean = any> extends Validator<Output> {
3
+ readonly value: Output;
4
+ constructor(value: Output);
5
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<Output>;
6
+ }
7
+ //# sourceMappingURL=literal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/schema/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEhF,qBAAa,aAAa,CACxB,MAAM,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG,CACrD,SAAQ,SAAS,CAAC,MAAM,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAIzB,iBAAiB,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,MAAM,CAAC;CAO5B"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LiteralSchema = void 0;
4
+ const validation_js_1 = require("../validation.js");
5
+ class LiteralSchema extends validation_js_1.Validator {
6
+ value;
7
+ constructor(value) {
8
+ super();
9
+ this.value = value;
10
+ }
11
+ validateInContext(input, ctx) {
12
+ if (input !== this.value) {
13
+ return ctx.issueInvalidValue(input, [this.value]);
14
+ }
15
+ return ctx.success(this.value);
16
+ }
17
+ }
18
+ exports.LiteralSchema = LiteralSchema;
19
+ //# sourceMappingURL=literal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/schema/literal.ts"],"names":[],"mappings":";;;AAAA,oDAAgF;AAEhF,MAAa,aAEX,SAAQ,yBAAiB;IACJ;IAArB,YAAqB,KAAa;QAChC,KAAK,EAAE,CAAA;QADY,UAAK,GAAL,KAAK,CAAQ;IAElC,CAAC;IAEQ,iBAAiB,CACxB,KAAc,EACd,GAAqB;QAErB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;CACF;AAjBD,sCAiBC","sourcesContent":["import { ValidationResult, Validator, ValidatorContext } from '../validation.js'\n\nexport class LiteralSchema<\n Output extends null | string | number | boolean = any,\n> extends Validator<Output> {\n constructor(readonly value: Output) {\n super()\n }\n\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<Output> {\n if (input !== this.value) {\n return ctx.issueInvalidValue(input, [this.value])\n }\n\n return ctx.success(this.value)\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { ValidationFailure, Validator, ValidatorContext } from '../validation.js';
2
+ export declare class NeverSchema extends Validator<never> {
3
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationFailure;
4
+ }
5
+ //# sourceMappingURL=never.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"never.d.ts","sourceRoot":"","sources":["../../src/schema/never.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,qBAAa,WAAY,SAAQ,SAAS,CAAC,KAAK,CAAC;IACtC,iBAAiB,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,iBAAiB;CAGrB"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NeverSchema = void 0;
4
+ const validation_js_1 = require("../validation.js");
5
+ class NeverSchema extends validation_js_1.Validator {
6
+ validateInContext(input, ctx) {
7
+ return ctx.issueInvalidType(input, 'never');
8
+ }
9
+ }
10
+ exports.NeverSchema = NeverSchema;
11
+ //# sourceMappingURL=never.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"never.js","sourceRoot":"","sources":["../../src/schema/never.ts"],"names":[],"mappings":";;;AAAA,oDAIyB;AAEzB,MAAa,WAAY,SAAQ,yBAAgB;IACtC,iBAAiB,CACxB,KAAc,EACd,GAAqB;QAErB,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;CACF;AAPD,kCAOC","sourcesContent":["import {\n ValidationFailure,\n Validator,\n ValidatorContext,\n} from '../validation.js'\n\nexport class NeverSchema extends Validator<never> {\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationFailure {\n return ctx.issueInvalidType(input, 'never')\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { ValidationResult, Validator, ValidatorContext } from '../validation.js';
2
+ export declare class NullSchema extends Validator<null> {
3
+ readonly lexiconType: "null";
4
+ constructor();
5
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<null>;
6
+ }
7
+ //# sourceMappingURL=null.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null.d.ts","sourceRoot":"","sources":["../../src/schema/null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEhF,qBAAa,UAAW,SAAQ,SAAS,CAAC,IAAI,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAG,MAAM,CAAS;;IAM7B,iBAAiB,CACxB,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,IAAI,CAAC;CAO1B"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NullSchema = void 0;
4
+ const validation_js_1 = require("../validation.js");
5
+ class NullSchema extends validation_js_1.Validator {
6
+ lexiconType = 'null';
7
+ constructor() {
8
+ super();
9
+ }
10
+ validateInContext(input, ctx) {
11
+ if (input !== null) {
12
+ return ctx.issueInvalidType(input, 'null');
13
+ }
14
+ return ctx.success(null);
15
+ }
16
+ }
17
+ exports.NullSchema = NullSchema;
18
+ //# sourceMappingURL=null.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null.js","sourceRoot":"","sources":["../../src/schema/null.ts"],"names":[],"mappings":";;;AAAA,oDAAgF;AAEhF,MAAa,UAAW,SAAQ,yBAAe;IACpC,WAAW,GAAG,MAAe,CAAA;IAEtC;QACE,KAAK,EAAE,CAAA;IACT,CAAC;IAEQ,iBAAiB,CACxB,KAAc,EACd,GAAqB;QAErB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;CACF;AAjBD,gCAiBC","sourcesContent":["import { ValidationResult, Validator, ValidatorContext } from '../validation.js'\n\nexport class NullSchema extends Validator<null> {\n readonly lexiconType = 'null' as const\n\n constructor() {\n super()\n }\n\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<null> {\n if (input !== null) {\n return ctx.issueInvalidType(input, 'null')\n }\n\n return ctx.success(null)\n }\n}\n"]}
@@ -0,0 +1,47 @@
1
+ import { Simplify } from '../core.js';
2
+ import { Infer, ValidationResult, Validator, ValidatorContext } from '../validation.js';
3
+ import { DictSchema } from './dict.js';
4
+ export type ObjectSchemaProperties = {
5
+ [_ in string]: Validator<any>;
6
+ };
7
+ export type ObjectSchemaOptions = {
8
+ required?: readonly string[];
9
+ nullable?: readonly string[];
10
+ unknownProperties?: 'strict' | DictSchema;
11
+ };
12
+ export type ObjectSchemaNullValue<O extends ObjectSchemaOptions, K extends string> = O extends {
13
+ nullable: readonly (infer N extends string)[];
14
+ } ? K extends N ? null : never : never;
15
+ export type ObjectSchemaPropertiesOutput<P extends ObjectSchemaProperties, O extends ObjectSchemaOptions> = O extends {
16
+ required: readonly (infer R extends string)[];
17
+ } ? {
18
+ -readonly [K in string & keyof P & R]-?: Infer<P[K]> | ObjectSchemaNullValue<O, K>;
19
+ } & {
20
+ -readonly [K in Exclude<string & keyof P, R>]?: Infer<P[K]> | ObjectSchemaNullValue<O, K>;
21
+ } : {
22
+ -readonly [K in string & keyof P]?: Infer<P[K]> | ObjectSchemaNullValue<O, K>;
23
+ };
24
+ /**
25
+ * Allows to more accurately represent the intersection of two object types
26
+ * where both types may share some keys, and one of them uses an index
27
+ * signature.
28
+ *
29
+ * @see {@link https://www.typescriptlang.org/play/?#code/C4TwDgpgBAglC8UDeUBmB7dAuKByARgIYBOuUAvlAGTJQDaA+lAJYB2UAzsMWwOYC6OVgFcAtvgjEKAKGkATCAGMANiWiL0rLlEI4YsjVuBQA1hBA4uPVrwRQARBnT2Dm7QDdCy4dESE6ZiD8UAD0IVAi4pJQABQcABbowspyUBIORMT2AJSyEAAeYOjExqCQUACSrMCSHErAzJoAPNJQsFAFNaxyHFAASkrFck1WfAA0UMKsJqzoAO6sAHxjrVAAQh35XT39g8TDozYTUzPzSyuLdqtwVKttMYHoqO00j88bnRDdvawQ7pJ3NpQAD860BbRwSHBQLadAA0ix2G91oJ1vDggAfWABcxPF5QOH8aFtci5aRlaAwVDMfIQVKIKo1Yh1RQNZq0Jw4AgkMjkCYoRiIzjcPioyISKTkRayBQqNRQQzaQgAMRpdL01NpclcRignm8EFVWrsKrVchxQVC4XF0SxmSAA Playground link}
30
+ */
31
+ type Intersect<A extends Record<string, unknown>, B extends Record<string, unknown>> = B[keyof B] extends never ? A : keyof A & keyof B extends never ? // If A and B don't overlap, just return A & B
32
+ A & B : // Otherwise, properly represent the fact that accessing using an
33
+ A & {
34
+ [K in keyof B]: B[K] | A[keyof A & K];
35
+ };
36
+ export type ObjectSchemaOutput<P extends ObjectSchemaProperties, O extends ObjectSchemaOptions> = O extends {
37
+ unknownProperties: Validator<infer D extends Record<string, unknown>>;
38
+ } ? Simplify<Intersect<ObjectSchemaPropertiesOutput<P, O>, D>> : Simplify<ObjectSchemaPropertiesOutput<P, O>>;
39
+ export declare class ObjectSchema<const Validators extends ObjectSchemaProperties = any, const Options extends ObjectSchemaOptions = any, const Output extends ObjectSchemaOutput<Validators, Options> = ObjectSchemaOutput<Validators, Options>> extends Validator<Output> {
40
+ readonly validators: Validators;
41
+ readonly options: Options;
42
+ constructor(validators: Validators, options: Options);
43
+ get validatorsMap(): Map<string, Validator>;
44
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<Output>;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/schema/object.ts"],"names":[],"mappings":"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"}