justus 0.5.1 → 0.5.3

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.
@@ -1,7 +1,9 @@
1
1
  // dts-generator.ts
2
2
  import ts from "typescript";
3
3
  import { assertSchema } from "./errors.mjs";
4
+ import { EAN13Validator } from "./extra/ean13.mjs";
4
5
  import { URLValidator } from "./extra/url.mjs";
6
+ import { UUIDValidator } from "./extra/uuid.mjs";
5
7
  import { getValidator } from "./utilities.mjs";
6
8
  import { AnyValidator } from "./validators/any.mjs";
7
9
  import { AnyArrayValidator, ArrayValidator } from "./validators/array.mjs";
@@ -15,45 +17,228 @@ import { OptionalValidator } from "./validators/optional.mjs";
15
17
  import { AnyStringValidator, StringValidator } from "./validators/string.mjs";
16
18
  import { TupleValidator } from "./validators/tuple.mjs";
17
19
  import { AllOfValidator, OneOfValidator } from "./validators/union.mjs";
20
+ function typeEqual(a, b) {
21
+ function eq(a2, b2) {
22
+ if (typeof a2 == "object" && a2 != null && (typeof b2 == "object" && b2 != null)) {
23
+ for (const key in a2) {
24
+ if (!eq(a2[key], b2[key]))
25
+ return false;
26
+ }
27
+ for (const key in b2) {
28
+ if (!eq(a2[key], b2[key]))
29
+ return false;
30
+ }
31
+ return true;
32
+ } else {
33
+ return a2 === b2;
34
+ }
35
+ }
36
+ return eq(a, b);
37
+ }
18
38
  var generators = /* @__PURE__ */ new Map();
19
39
  function registerTypeGenerator(validator, generator) {
20
40
  generators.set(validator, generator);
21
41
  }
22
- function generateTypes(validations) {
42
+ function generateTypes(validations, isInput = false) {
23
43
  const validators = /* @__PURE__ */ new Map();
24
44
  const references = /* @__PURE__ */ new Map();
25
- Object.entries(validations).forEach(([name, validation]) => {
45
+ for (const [name, validation] of Object.entries(validations)) {
26
46
  const validator = getValidator(validation);
47
+ validators.set(name, validator);
27
48
  if (!references.has(validator))
28
49
  references.set(validator, name);
29
- validators.set(name, validator);
30
- });
31
- const types = [];
32
- for (const [name, validator] of validators.entries()) {
33
- const referenceable = new Map(references);
34
- if (referenceable.get(validator) === name) {
35
- referenceable.delete(validator);
36
- }
37
- const type = generateTypeNode(validator, referenceable);
38
- const modifiers = [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)];
39
- const decl = ts.factory.createTypeAliasDeclaration(modifiers, name, [], type);
40
- types.push(decl);
50
+ }
51
+ const types = generateTypeNodes(validators, references, isInput);
52
+ const aliases = [];
53
+ for (const [name, type] of types.entries()) {
54
+ const alias = ts.factory.createTypeAliasDeclaration(exportModifiers, name, [], type);
55
+ aliases.push(alias);
41
56
  }
42
57
  return ts.createPrinter().printList(
43
58
  ts.ListFormat.SourceFileStatements,
44
- ts.factory.createNodeArray(types),
59
+ ts.factory.createNodeArray(aliases),
45
60
  ts.createSourceFile("types.d.ts", "", ts.ScriptTarget.Latest)
46
61
  );
47
62
  }
48
- function generateTypeNode(validator, references) {
63
+ function generateDeclarations(validations) {
64
+ const names = [];
65
+ const outputValidators = /* @__PURE__ */ new Map();
66
+ const outputReferences = /* @__PURE__ */ new Map();
67
+ const inputValidators = /* @__PURE__ */ new Map();
68
+ const inputReferences = /* @__PURE__ */ new Map();
69
+ for (const [name, validation] of Object.entries(validations)) {
70
+ const prefix = /validator$/i.test(name) ? name.slice(0, -9) : /validation$/i.test(name) ? name.slice(0, -10) : name;
71
+ const output = `${prefix.slice(0, 1).toUpperCase()}${prefix.slice(1)}`;
72
+ const input = `${prefix.slice(0, 1).toUpperCase()}${prefix.slice(1)}Input`;
73
+ const validator = getValidator(validation);
74
+ names.push({ name, output, input });
75
+ outputValidators.set(output, validator);
76
+ inputValidators.set(input, validator);
77
+ if (!outputReferences.has(validator))
78
+ outputReferences.set(validator, output);
79
+ if (!inputReferences.has(validator))
80
+ inputReferences.set(validator, input);
81
+ }
82
+ const outputTypes = generateTypeNodes(outputValidators, outputReferences, false);
83
+ const inputTypes = generateTypeNodes(inputValidators, inputReferences, true);
84
+ const statements = [];
85
+ for (const { name, input, output } of names) {
86
+ const outputType = outputTypes.get(output);
87
+ const inputType = inputTypes.get(input);
88
+ const validation = validations[name];
89
+ const validator = outputValidators.get(output);
90
+ assertSchema(!!outputType, `No output type "${output}" generated for validation "${name}"`);
91
+ assertSchema(!!inputType, `No input type "${input}" generated for validation "${name}"`);
92
+ assertSchema(!!validator, `No validator for "${name}"`);
93
+ const sameType = typeEqual(inputType, outputType);
94
+ const inputAlias = sameType ? ts.factory.createTypeReferenceNode(output) : inputType;
95
+ const outputDeclaration = ts.factory.createTypeAliasDeclaration(exportModifiers, output, [], outputType);
96
+ const inputDeclaration = ts.factory.createTypeAliasDeclaration(exportModifiers, input, [], inputAlias);
97
+ const variableDeclarationType = generateVariableDeclarationType(validation, validator, outputReferences);
98
+ const variableDeclaration = ts.factory.createVariableStatement(
99
+ exportModifiers,
100
+ // "export"
101
+ ts.factory.createVariableDeclarationList([
102
+ ts.factory.createVariableDeclaration(
103
+ name,
104
+ // ..................................... "myTypeValidator"
105
+ void 0,
106
+ // no exclamation token
107
+ variableDeclarationType
108
+ )
109
+ ], ts.NodeFlags.Const)
110
+ // ......................... "const"
111
+ );
112
+ ts.addSyntheticLeadingComment(
113
+ outputDeclaration,
114
+ ts.SyntaxKind.MultiLineCommentTrivia,
115
+ ` ${`----- ${name} `.padEnd(74, "-")} `,
116
+ true
117
+ // newline
118
+ );
119
+ ts.addSyntheticLeadingComment(
120
+ outputDeclaration,
121
+ ts.SyntaxKind.MultiLineCommentTrivia,
122
+ `* Validated type for {@link ${name}} `,
123
+ true
124
+ // newline
125
+ );
126
+ ts.addSyntheticLeadingComment(
127
+ inputDeclaration,
128
+ ts.SyntaxKind.MultiLineCommentTrivia,
129
+ `* Input type for {@link ${name}} `,
130
+ true
131
+ // newline
132
+ );
133
+ ts.addSyntheticLeadingComment(
134
+ variableDeclaration,
135
+ ts.SyntaxKind.MultiLineCommentTrivia,
136
+ `* The \`${name}\` validator `,
137
+ true
138
+ // newline
139
+ );
140
+ statements.push(
141
+ outputDeclaration,
142
+ inputDeclaration,
143
+ variableDeclaration
144
+ );
145
+ }
146
+ return ts.createPrinter().printList(
147
+ ts.ListFormat.SourceFileStatements,
148
+ ts.factory.createNodeArray(statements),
149
+ ts.createSourceFile("types.d.ts", "", ts.ScriptTarget.Latest)
150
+ );
151
+ }
152
+ function isValidator(validation) {
153
+ assertSchema(validation !== void 0, 'Found "undefined" validation in tree');
154
+ if (validation === null)
155
+ return false;
156
+ if (typeof validation !== "function" && typeof validation !== "object") {
157
+ return false;
158
+ }
159
+ if (Array.isArray(validation))
160
+ return false;
161
+ if ("validate" in validation && typeof validation.validate === "function") {
162
+ return !isValidator(validation.validate);
163
+ } else {
164
+ return false;
165
+ }
166
+ }
167
+ function generateJustusTypeImport(typeName, typeArguments = []) {
168
+ return ts.factory.createImportTypeNode(
169
+ // .................... "import"
170
+ ts.factory.createLiteralTypeNode(
171
+ ts.factory.createStringLiteral("justus")
172
+ // .......... "justus"
173
+ ),
174
+ void 0,
175
+ // import assertions
176
+ ts.factory.createIdentifier(typeName),
177
+ // ................. "JustusType"
178
+ typeArguments
179
+ );
180
+ }
181
+ function generateVariableDeclarationType(validation, validator, references) {
182
+ if (isValidator(validation)) {
183
+ const validatedType = generateTypeNode(validator, references, false);
184
+ return generateJustusTypeImport("Validator", [validatedType]);
185
+ }
186
+ if (validator instanceof ConstantValidator) {
187
+ return generateTypeNode(validator, references, false);
188
+ }
189
+ if (validator instanceof ObjectValidator) {
190
+ const properties = [];
191
+ for (const [key, valueValidator] of validator.validators.entries()) {
192
+ const value = validator.schema[key];
193
+ const type = generateVariableDeclarationType(value, valueValidator, references);
194
+ properties.push(ts.factory.createPropertySignature(
195
+ readonlyModifiers,
196
+ key,
197
+ void 0,
198
+ // no question mark
199
+ type
200
+ ));
201
+ }
202
+ if (validator.additionalProperties) {
203
+ const additional = validator.additionalProperties;
204
+ const type = generateVariableDeclarationType(additional, additional, references);
205
+ properties.push(ts.factory.createPropertySignature(
206
+ readonlyModifiers,
207
+ ts.factory.createComputedPropertyName(
208
+ ts.factory.createPropertyAccessExpression(
209
+ ts.factory.createIdentifier("Symbol"),
210
+ "justusAdditionalValidator"
211
+ )
212
+ ),
213
+ void 0,
214
+ // no question mark
215
+ type
216
+ ));
217
+ }
218
+ return ts.factory.createTypeLiteralNode(properties);
219
+ }
220
+ assertSchema(false, `Unable to generate variable declaration for ${validator.constructor.name}`);
221
+ }
222
+ function generateTypeNodes(validators, references, isInput) {
223
+ const types = /* @__PURE__ */ new Map();
224
+ for (const [name, validator] of validators.entries()) {
225
+ const referenceable = new Map(references);
226
+ if (referenceable.get(validator) === name)
227
+ referenceable.delete(validator);
228
+ types.set(name, generateTypeNode(validator, referenceable, isInput));
229
+ }
230
+ return types;
231
+ }
232
+ function generateTypeNode(validator, references, isInput) {
49
233
  const reference = references.get(validator);
50
234
  if (reference)
51
235
  return ts.factory.createTypeReferenceNode(reference);
52
236
  const generator = generators.get(validator) || generators.get(validator.constructor);
53
237
  assertSchema(!!generator, `Type generator for "${validator.constructor.name}" not found`);
54
- const type = generator(validator, references);
55
- if (!validator.optional)
238
+ const type = generator(validator, references, isInput);
239
+ if (!(validator.optional || isInput && validator.defaultValue !== void 0)) {
56
240
  return type;
241
+ }
57
242
  if (type === neverType)
58
243
  return undefinedType;
59
244
  if (ts.isUnionTypeNode(type)) {
@@ -64,6 +249,7 @@ function generateTypeNode(validator, references) {
64
249
  var anyType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword);
65
250
  var anyArrayType = ts.factory.createArrayTypeNode(anyType);
66
251
  var booleanType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);
252
+ var dateType = ts.factory.createTypeReferenceNode("Date");
67
253
  var numberType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);
68
254
  var neverType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);
69
255
  var stringType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
@@ -81,42 +267,54 @@ var recordType = ts.factory.createMappedTypeNode(
81
267
  void 0
82
268
  );
83
269
  var optionalKeyword = ts.factory.createToken(ts.SyntaxKind.QuestionToken);
270
+ var exportModifiers = [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)];
271
+ var readonlyModifiers = [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)];
84
272
  registerTypeGenerator(AnyValidator, () => anyType);
85
273
  registerTypeGenerator(AnyArrayValidator, () => anyArrayType);
86
274
  registerTypeGenerator(AnyNumberValidator, () => numberType);
87
275
  registerTypeGenerator(AnyObjectValidator, () => recordType);
88
276
  registerTypeGenerator(AnyStringValidator, () => stringType);
89
- registerTypeGenerator(BooleanValidator, () => booleanType);
90
277
  registerTypeGenerator(NeverValidator, () => neverType);
91
- registerTypeGenerator(DateValidator, () => ts.factory.createTypeReferenceNode("Date"));
92
- registerTypeGenerator(URLValidator, () => ts.factory.createTypeReferenceNode("URL"));
93
- registerTypeGenerator(ArrayValidator, (validator, references) => {
94
- const itemType = generateTypeNode(validator.items, references);
278
+ registerTypeGenerator(ArrayValidator, (validator, references, isInput) => {
279
+ const itemType = generateTypeNode(validator.items, references, isInput);
95
280
  return ts.factory.createArrayTypeNode(itemType);
96
281
  });
282
+ registerTypeGenerator(BooleanValidator, (validator, _references, isInput) => {
283
+ return isInput && validator.fromString ? ts.factory.createUnionTypeNode([
284
+ booleanType,
285
+ ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("true")),
286
+ ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("false"))
287
+ ]) : booleanType;
288
+ });
97
289
  registerTypeGenerator(ConstantValidator, (validator) => {
98
290
  const literal = typeof validator.constant === "number" ? ts.factory.createNumericLiteral(validator.constant) : typeof validator.constant === "string" ? ts.factory.createStringLiteral(validator.constant) : validator.constant === false ? ts.factory.createFalse() : validator.constant === true ? ts.factory.createTrue() : validator.constant === null ? ts.factory.createNull() : void 0;
99
291
  assertSchema(!!literal, `Invalid constant "${validator.constant}"`);
100
292
  return ts.factory.createLiteralTypeNode(literal);
101
293
  });
102
- registerTypeGenerator(NumberValidator, (validator) => {
294
+ registerTypeGenerator(DateValidator, (validator, _references, isInput) => {
295
+ return isInput ? validator.format === "iso" ? stringType : validator.format === "timestamp" ? numberType : ts.factory.createUnionTypeNode([dateType, numberType, stringType]) : dateType;
296
+ });
297
+ registerTypeGenerator(NumberValidator, (validator, _references, isInput) => {
298
+ if (isInput) {
299
+ return validator.fromString ? ts.factory.createUnionTypeNode([numberType, stringType]) : numberType;
300
+ }
103
301
  if (!validator.brand)
104
302
  return numberType;
105
303
  const signature = ts.factory.createPropertySignature(void 0, `__brand_${validator.brand}`, void 0, neverType);
106
304
  const literal = ts.factory.createTypeLiteralNode([signature]);
107
305
  return ts.factory.createIntersectionTypeNode([numberType, literal]);
108
306
  });
109
- registerTypeGenerator(OptionalValidator, (validator, references) => {
110
- return generateTypeNode(validator.validator, references);
307
+ registerTypeGenerator(OptionalValidator, (validator, references, isInput) => {
308
+ return generateTypeNode(validator.validator, references, isInput);
111
309
  });
112
- registerTypeGenerator(StringValidator, (validator) => {
113
- if (!validator.brand)
310
+ registerTypeGenerator(StringValidator, (validator, _references, isInput) => {
311
+ if (!validator.brand || isInput)
114
312
  return stringType;
115
313
  const signature = ts.factory.createPropertySignature(void 0, `__brand_${validator.brand}`, void 0, neverType);
116
314
  const literal = ts.factory.createTypeLiteralNode([signature]);
117
315
  return ts.factory.createIntersectionTypeNode([stringType, literal]);
118
316
  });
119
- registerTypeGenerator(TupleValidator, (validator, references) => {
317
+ registerTypeGenerator(TupleValidator, (validator, references, isInput) => {
120
318
  const members = validator.members;
121
319
  const { count, first, next } = members.reduce(({ count: count2, first: first2, next: next2 }, { single }, i) => {
122
320
  if (!single) {
@@ -129,35 +327,35 @@ registerTypeGenerator(TupleValidator, (validator, references) => {
129
327
  }, { count: 0, first: members.length, next: -1 });
130
328
  if (count < 2) {
131
329
  const types2 = members.map(({ single, validator: validator2 }) => {
132
- const memberType = generateTypeNode(validator2, references);
330
+ const memberType = generateTypeNode(validator2, references, isInput);
133
331
  if (single)
134
- return generateTypeNode(validator2, references);
332
+ return generateTypeNode(validator2, references, isInput);
135
333
  const arrayType = ts.factory.createArrayTypeNode(memberType);
136
334
  return ts.factory.createRestTypeNode(arrayType);
137
335
  });
138
336
  return ts.factory.createTupleTypeNode(types2);
139
337
  }
140
- const before = members.slice(0, first).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
141
- const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
142
- const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
338
+ const before = members.slice(0, first).map(({ validator: validator2 }) => generateTypeNode(validator2, references, isInput));
339
+ const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references, isInput));
340
+ const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references, isInput));
143
341
  const union = ts.factory.createUnionTypeNode(types);
144
342
  const array = ts.factory.createArrayTypeNode(union);
145
343
  const rest = ts.factory.createRestTypeNode(array);
146
344
  return ts.factory.createTupleTypeNode([...before, rest, ...after]);
147
345
  });
148
- registerTypeGenerator(AllOfValidator, (validator, references) => {
149
- const members = validator.validators.map((validator2) => generateTypeNode(validator2, references));
346
+ registerTypeGenerator(AllOfValidator, (validator, references, isInput) => {
347
+ const members = validator.validators.map((validator2) => generateTypeNode(validator2, references, isInput));
150
348
  return ts.factory.createIntersectionTypeNode(members);
151
349
  });
152
- registerTypeGenerator(OneOfValidator, (validator, references) => {
153
- const members = validator.validators.map((validator2) => generateTypeNode(validator2, references));
350
+ registerTypeGenerator(OneOfValidator, (validator, references, isInput) => {
351
+ const members = validator.validators.map((validator2) => generateTypeNode(validator2, references, isInput));
154
352
  return ts.factory.createUnionTypeNode(members);
155
353
  });
156
- registerTypeGenerator(ObjectValidator, (validator, references) => {
354
+ registerTypeGenerator(ObjectValidator, (validator, references, isInput) => {
157
355
  const properties = [];
158
356
  for (const [key, valueValidator] of validator.validators.entries()) {
159
- const type = generateTypeNode(valueValidator, references);
160
- const optional = valueValidator.optional;
357
+ const type = generateTypeNode(valueValidator, references, isInput);
358
+ const optional = isInput && valueValidator.defaultValue !== void 0 || valueValidator.optional;
161
359
  const signature = ts.factory.createPropertySignature(
162
360
  void 0,
163
361
  key,
@@ -167,7 +365,7 @@ registerTypeGenerator(ObjectValidator, (validator, references) => {
167
365
  properties.push(signature);
168
366
  }
169
367
  if (validator.additionalProperties) {
170
- const propertyType = generateTypeNode(validator.additionalProperties, references);
368
+ const propertyType = generateTypeNode(validator.additionalProperties, references, isInput);
171
369
  const extra = ts.factory.createMappedTypeNode(
172
370
  void 0,
173
371
  // readonly
@@ -188,7 +386,30 @@ registerTypeGenerator(ObjectValidator, (validator, references) => {
188
386
  return ts.factory.createTypeLiteralNode(properties);
189
387
  }
190
388
  });
389
+ registerTypeGenerator(EAN13Validator, (_validator, _references, isInput) => {
390
+ if (isInput)
391
+ return ts.factory.createUnionTypeNode([numberType, stringType]);
392
+ const signature = ts.factory.createPropertySignature(void 0, "__ean_13", void 0, neverType);
393
+ const literal = ts.factory.createTypeLiteralNode([signature]);
394
+ return ts.factory.createIntersectionTypeNode([stringType, literal]);
395
+ });
396
+ registerTypeGenerator(UUIDValidator, (_validator, _references, isInput) => {
397
+ if (isInput)
398
+ return stringType;
399
+ const signature = ts.factory.createPropertySignature(void 0, "__uuid", void 0, neverType);
400
+ const literal = ts.factory.createTypeLiteralNode([signature]);
401
+ return ts.factory.createIntersectionTypeNode([stringType, literal]);
402
+ });
403
+ registerTypeGenerator(URLValidator, (_validator, _references, isInput) => {
404
+ const urlType = ts.factory.createTypeReferenceNode("URL");
405
+ if (isInput) {
406
+ return ts.factory.createUnionTypeNode([urlType, stringType]);
407
+ } else {
408
+ return urlType;
409
+ }
410
+ });
191
411
  export {
412
+ generateDeclarations,
192
413
  generateTypes,
193
414
  registerTypeGenerator
194
415
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/dts-generator.ts"],
4
- "mappings": "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",
5
- "names": ["count", "first", "next", "types", "validator"]
4
+ "mappings": "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",
5
+ "names": ["a", "b", "count", "first", "next", "types", "validator"]
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/extra/uuid.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgC;AAEzB,IAAM,YAAY;AAIlB,IAAM,gBAAN,cAA4B,8BAA4B;AAAA,EAC7D,cAAc;AACZ,UAAM,EAAE,WAAW,IAAI,WAAW,IAAI,SAAS,UAAU,CAAC;AAAA,EAC5D;AAAA,EAGA,SAAS,OAAwB;AAC/B,WAAO,MAAM,SAAS,KAAK,EAAE,YAAY;AAAA,EAC3C;AACF;AAEO,IAAM,OAAO,IAAI,cAAc;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgC;AAEzB,IAAM,YAAY;AAIlB,IAAM,gBAAN,cAA4B,8BAAoC;AAAA,EACrE,cAAc;AACZ,UAAM,EAAE,WAAW,IAAI,WAAW,IAAI,SAAS,UAAU,CAAC;AAAA,EAC5D;AAAA,EAGA,SAAS,OAAwB;AAC/B,WAAO,MAAM,SAAS,KAAK,EAAE,YAAY;AAAA,EAC3C;AACF;AAEO,IAAM,OAAO,IAAI,cAAc;",
5
5
  "names": []
6
6
  }
@@ -3,7 +3,7 @@ export declare const UUID_EXPR: RegExp;
3
3
  export type UUIDString = string & {
4
4
  __uuid: never;
5
5
  };
6
- export declare class UUIDValidator extends StringValidator<UUIDString> {
6
+ export declare class UUIDValidator extends StringValidator<UUIDString, string> {
7
7
  constructor();
8
8
  validate(value: unknown): UUIDString;
9
9
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/extra/uuid.ts"],
4
- "mappings": ";AAAA,SAAS,uBAAuB;AAEzB,IAAM,YAAY;AAIlB,IAAM,gBAAN,cAA4B,gBAA4B;AAAA,EAC7D,cAAc;AACZ,UAAM,EAAE,WAAW,IAAI,WAAW,IAAI,SAAS,UAAU,CAAC;AAAA,EAC5D;AAAA,EAGA,SAAS,OAAwB;AAC/B,WAAO,MAAM,SAAS,KAAK,EAAE,YAAY;AAAA,EAC3C;AACF;AAEO,IAAM,OAAO,IAAI,cAAc;",
4
+ "mappings": ";AAAA,SAAS,uBAAuB;AAEzB,IAAM,YAAY;AAIlB,IAAM,gBAAN,cAA4B,gBAAoC;AAAA,EACrE,cAAc;AACZ,UAAM,EAAE,WAAW,IAAI,WAAW,IAAI,SAAS,UAAU,CAAC;AAAA,EAC5D;AAAA,EAGA,SAAS,OAAwB;AAC/B,WAAO,MAAM,SAAS,KAAK,EAAE,YAAY;AAAA,EAC3C;AACF;AAEO,IAAM,OAAO,IAAI,cAAc;",
5
5
  "names": []
6
6
  }
package/dist/types.cjs CHANGED
@@ -38,6 +38,7 @@ var defaultValidationOptions = {
38
38
  function makeValidatorFactory(validator, factory) {
39
39
  return Object.assign(factory, {
40
40
  optional: validator.optional,
41
+ defaultValue: validator.defaultValue,
41
42
  validate: validator.validate.bind(validator),
42
43
  [Symbol.iterator]: validator[Symbol.iterator].bind(validator),
43
44
  [Symbol.justusValidator]: validator
@@ -45,7 +46,8 @@ function makeValidatorFactory(validator, factory) {
45
46
  }
46
47
  var AbstractValidator = class {
47
48
  [Symbol.justusValidator] = this;
48
- optional = void 0;
49
+ optional = false;
50
+ defaultValue = void 0;
49
51
  /** Allow any `Validator` to be used as a rest parameter in `Tuple`s */
50
52
  *[Symbol.iterator]() {
51
53
  yield { [Symbol.justusRestValidator]: this };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/types.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,OAAO,iBAAiB,QAAQ;AAAA,EAC9B,iBAAiB,EAAE,OAAO,OAAO,IAAI,kBAAkB,EAAE;AAAA,EACzD,qBAAqB,EAAE,OAAO,OAAO,IAAI,sBAAsB,EAAE;AAAA,EACjE,2BAA2B,EAAE,OAAO,OAAO,IAAI,4BAA4B,EAAE;AAC/E,CAAC;AAqBM,IAAM,2BAAkE;AAAA,EAC7E,2BAA2B;AAAA,EAC3B,0BAA0B;AAAA,EAC1B,oBAAoB;AACtB;AAwBO,SAAS,qBAGd,WAAc,SAAmB;AACjC,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B,UAAU,UAAU;AAAA,IACpB,UAAU,UAAU,SAAS,KAAK,SAAS;AAAA,IAC3C,CAAC,OAAO,QAAQ,GAAG,UAAU,OAAO,QAAQ,EAAE,KAAK,SAAS;AAAA,IAC5D,CAAC,OAAO,eAAe,GAAG;AAAA,EAC5B,CAAC;AACH;AAMO,IAAe,oBAAf,MACwD;AAAA,EAC7D,CAAC,OAAO,eAAe,IAAI;AAAA,EAE3B,WAAqB;AAAA;AAAA,EAMrB,EAAG,OAAO,QAAQ,IAAyC;AACzD,UAAM,EAAE,CAAC,OAAO,mBAAmB,GAAG,KAAK;AAAA,EAC7C;AACF;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,OAAO,iBAAiB,QAAQ;AAAA,EAC9B,iBAAiB,EAAE,OAAO,OAAO,IAAI,kBAAkB,EAAE;AAAA,EACzD,qBAAqB,EAAE,OAAO,OAAO,IAAI,sBAAsB,EAAE;AAAA,EACjE,2BAA2B,EAAE,OAAO,OAAO,IAAI,4BAA4B,EAAE;AAC/E,CAAC;AAqBM,IAAM,2BAAkE;AAAA,EAC7E,2BAA2B;AAAA,EAC3B,0BAA0B;AAAA,EAC1B,oBAAoB;AACtB;AAkCO,SAAS,qBAGd,WAAc,SAAmB;AACjC,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B,UAAU,UAAU;AAAA,IACpB,cAAc,UAAU;AAAA,IACxB,UAAU,UAAU,SAAS,KAAK,SAAS;AAAA,IAC3C,CAAC,OAAO,QAAQ,GAAG,UAAU,OAAO,QAAQ,EAAE,KAAK,SAAS;AAAA,IAC5D,CAAC,OAAO,eAAe,GAAG;AAAA,EAC5B,CAAC;AACH;AAMO,IAAe,oBAAf,MACwD;AAAA,EAC7D,CAAC,OAAO,eAAe,IAAI;AAAA,EAE3B,WAAoB;AAAA,EACpB,eAA8B;AAAA;AAAA,EAM9B,EAAG,OAAO,QAAQ,IAAyC;AACzD,UAAM,EAAE,CAAC,OAAO,mBAAmB,GAAG,KAAK;AAAA,EAC7C;AACF;",
5
5
  "names": []
6
6
  }
package/dist/types.d.ts CHANGED
@@ -29,7 +29,17 @@ export declare const defaultValidationOptions: Readonly<Required<ValidationOptio
29
29
  */
30
30
  export interface Validator<T = any, I = T> extends Iterable<TupleRestParameter<T, I>> {
31
31
  [Symbol.justusValidator]: this;
32
- optional?: boolean;
32
+ /**
33
+ * A flag indicating whether the type being validated is _optional_ (the input
34
+ * can be `undefined`) or not (default: `false`).
35
+ */
36
+ optional: boolean;
37
+ /**
38
+ * The _default_ replaced by this `Validator` when the input is `undefined`.
39
+ *
40
+ * This is used in conjunction with the `optional` flag.
41
+ */
42
+ defaultValue: T | undefined;
33
43
  /** Validate a _value_ and optionally convert it to the required `Type` */
34
44
  validate(value: unknown, options?: ValidationOptions | undefined): T;
35
45
  /** Allow any `Validator` to be used as a rest parameter in `Tuple`s */
@@ -48,7 +58,8 @@ export declare function makeValidatorFactory<V extends Validator, F extends (...
48
58
  */
49
59
  export declare abstract class AbstractValidator<T, I = T> implements Validator<T, I>, Iterable<TupleRestParameter<T, I>> {
50
60
  [Symbol.justusValidator]: this;
51
- optional?: boolean;
61
+ optional: boolean;
62
+ defaultValue: T | undefined;
52
63
  /** Validate a _value_ and optionally convert it to the required `Type` */
53
64
  abstract validate(value: unknown, options?: ValidationOptions | undefined): T;
54
65
  /** Allow any `Validator` to be used as a rest parameter in `Tuple`s */
@@ -144,9 +155,9 @@ export type InferSchema<S> = S extends AdditionalProperties<Validator<infer V>>
144
155
  } & InferSchema2<S> : InferSchema2<S>;
145
156
  /** Infer the property types described by a `Schema` */
146
157
  export type InferSchema2<S> = {
147
- [key in keyof S as key extends string ? key : never]?: InferValidation<S[key]>;
158
+ -readonly [key in keyof S as key extends string ? key : never]?: InferValidation<S[key]>;
148
159
  } & {
149
- [key in keyof S as key extends string ? undefined extends InferValidation<S[key]> ? never : key : never]-?: InferValidation<S[key]>;
160
+ -readonly [key in keyof S as key extends string ? undefined extends InferValidation<S[key]> ? never : key : never]-?: InferValidation<S[key]>;
150
161
  };
151
162
  /** Infer the input type compatible with a `Schema` */
152
163
  export type InferInputSchema<S> = S extends AdditionalProperties<Validator<any, infer X>> ? {
@@ -154,9 +165,9 @@ export type InferInputSchema<S> = S extends AdditionalProperties<Validator<any,
154
165
  } & InferInputSchema2<S> : InferInputSchema2<S>;
155
166
  /** Infer the input type of the properties described by a `Schema` */
156
167
  export type InferInputSchema2<S> = {
157
- [key in keyof S as key extends string ? key : never]?: InferInput<S[key]>;
168
+ -readonly [key in keyof S as key extends string ? key : never]?: InferInput<S[key]>;
158
169
  } & {
159
- [key in keyof S as key extends string ? InferInput<S[key]> extends never ? never : undefined extends InferInput<S[key]> ? never : key : never]-?: InferInput<S[key]>;
170
+ -readonly [key in keyof S as key extends string ? InferInput<S[key]> extends never ? never : undefined extends InferInput<S[key]> ? never : key : never]-?: InferInput<S[key]>;
160
171
  };
161
172
  /** Utility type to infer primitive branding according to a string */
162
173
  export type Branding<S extends string> = {
package/dist/types.mjs CHANGED
@@ -12,6 +12,7 @@ var defaultValidationOptions = {
12
12
  function makeValidatorFactory(validator, factory) {
13
13
  return Object.assign(factory, {
14
14
  optional: validator.optional,
15
+ defaultValue: validator.defaultValue,
15
16
  validate: validator.validate.bind(validator),
16
17
  [Symbol.iterator]: validator[Symbol.iterator].bind(validator),
17
18
  [Symbol.justusValidator]: validator
@@ -19,7 +20,8 @@ function makeValidatorFactory(validator, factory) {
19
20
  }
20
21
  var AbstractValidator = class {
21
22
  [Symbol.justusValidator] = this;
22
- optional = void 0;
23
+ optional = false;
24
+ defaultValue = void 0;
23
25
  /** Allow any `Validator` to be used as a rest parameter in `Tuple`s */
24
26
  *[Symbol.iterator]() {
25
27
  yield { [Symbol.justusRestValidator]: this };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/types.ts"],
4
- "mappings": ";AAgBA,OAAO,iBAAiB,QAAQ;AAAA,EAC9B,iBAAiB,EAAE,OAAO,OAAO,IAAI,kBAAkB,EAAE;AAAA,EACzD,qBAAqB,EAAE,OAAO,OAAO,IAAI,sBAAsB,EAAE;AAAA,EACjE,2BAA2B,EAAE,OAAO,OAAO,IAAI,4BAA4B,EAAE;AAC/E,CAAC;AAqBM,IAAM,2BAAkE;AAAA,EAC7E,2BAA2B;AAAA,EAC3B,0BAA0B;AAAA,EAC1B,oBAAoB;AACtB;AAwBO,SAAS,qBAGd,WAAc,SAAmB;AACjC,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B,UAAU,UAAU;AAAA,IACpB,UAAU,UAAU,SAAS,KAAK,SAAS;AAAA,IAC3C,CAAC,OAAO,QAAQ,GAAG,UAAU,OAAO,QAAQ,EAAE,KAAK,SAAS;AAAA,IAC5D,CAAC,OAAO,eAAe,GAAG;AAAA,EAC5B,CAAC;AACH;AAMO,IAAe,oBAAf,MACwD;AAAA,EAC7D,CAAC,OAAO,eAAe,IAAI;AAAA,EAE3B,WAAqB;AAAA;AAAA,EAMrB,EAAG,OAAO,QAAQ,IAAyC;AACzD,UAAM,EAAE,CAAC,OAAO,mBAAmB,GAAG,KAAK;AAAA,EAC7C;AACF;",
4
+ "mappings": ";AAgBA,OAAO,iBAAiB,QAAQ;AAAA,EAC9B,iBAAiB,EAAE,OAAO,OAAO,IAAI,kBAAkB,EAAE;AAAA,EACzD,qBAAqB,EAAE,OAAO,OAAO,IAAI,sBAAsB,EAAE;AAAA,EACjE,2BAA2B,EAAE,OAAO,OAAO,IAAI,4BAA4B,EAAE;AAC/E,CAAC;AAqBM,IAAM,2BAAkE;AAAA,EAC7E,2BAA2B;AAAA,EAC3B,0BAA0B;AAAA,EAC1B,oBAAoB;AACtB;AAkCO,SAAS,qBAGd,WAAc,SAAmB;AACjC,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B,UAAU,UAAU;AAAA,IACpB,cAAc,UAAU;AAAA,IACxB,UAAU,UAAU,SAAS,KAAK,SAAS;AAAA,IAC3C,CAAC,OAAO,QAAQ,GAAG,UAAU,OAAO,QAAQ,EAAE,KAAK,SAAS;AAAA,IAC5D,CAAC,OAAO,eAAe,GAAG;AAAA,EAC5B,CAAC;AACH;AAMO,IAAe,oBAAf,MACwD;AAAA,EAC7D,CAAC,OAAO,eAAe,IAAI;AAAA,EAE3B,WAAoB;AAAA,EACpB,eAA8B;AAAA;AAAA,EAM9B,EAAG,OAAO,QAAQ,IAAyC;AACzD,UAAM,EAAE,CAAC,OAAO,mBAAmB,GAAG,KAAK;AAAA,EAC7C;AACF;",
5
5
  "names": []
6
6
  }
@@ -23,8 +23,10 @@ __export(utilities_exports, {
23
23
  getValidator: () => getValidator
24
24
  });
25
25
  module.exports = __toCommonJS(utilities_exports);
26
+ var import_errors = require("./errors.cjs");
26
27
  var import_registry = require("./registry.cjs");
27
28
  function getValidator(validation) {
29
+ (0, import_errors.assertSchema)(validation !== void 0, "No validator for undefined validation");
28
30
  if (validation === null)
29
31
  return new (import_registry.registry.get("constant"))(null);
30
32
  if (validation[Symbol.justusValidator]) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/utilities.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AAalB,SAAS,aAAa,YAAmC;AAE9D,MAAI,eAAe;AAAM,WAAO,KAAK,yBAAS,IAAI,UAAU,GAAG,IAAI;AAGnE,MAAW,WAAY,OAAO,eAAe,GAAG;AAC9C,WAAc,WAAY,OAAO,eAAe;AAAA,EAClD;AAGA,UAAQ,OAAO,YAAY;AAAA,IAEzB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,KAAK,yBAAS,IAAI,UAAU,GAAG,UAAU;AAAA,IAGlD,KAAK;AAEH,UAAI,MAAM,QAAQ,UAAU;AAAG,eAAO,KAAK,yBAAS,IAAI,OAAO,GAAG,UAAU;AAE5E,aAAO,KAAK,yBAAS,IAAI,QAAQ,GAAG,UAAoB;AAAA,IAG1D;AACE,YAAM,IAAI,UAAU,4BAA4B,OAAO,UAAU,GAAG;AAAA,EACxE;AACF;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6B;AAC7B,sBAAyB;AASlB,SAAS,aAAa,YAAmC;AAC9D,kCAAa,eAAe,QAAW,uCAAuC;AAG9E,MAAI,eAAe;AAAM,WAAO,KAAK,yBAAS,IAAI,UAAU,GAAG,IAAI;AAGnE,MAAW,WAAY,OAAO,eAAe,GAAG;AAC9C,WAAc,WAAY,OAAO,eAAe;AAAA,EAClD;AAGA,UAAQ,OAAO,YAAY;AAAA,IAEzB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,KAAK,yBAAS,IAAI,UAAU,GAAG,UAAU;AAAA,IAGlD,KAAK;AAEH,UAAI,MAAM,QAAQ,UAAU;AAAG,eAAO,KAAK,yBAAS,IAAI,OAAO,GAAG,UAAU;AAE5E,aAAO,KAAK,yBAAS,IAAI,QAAQ,GAAG,UAAoB;AAAA,IAG1D;AACE,YAAM,IAAI,UAAU,4BAA4B,OAAO,UAAU,GAAG;AAAA,EACxE;AACF;",
5
5
  "names": []
6
6
  }
@@ -1,7 +1,3 @@
1
1
  import type { Validation, Validator } from './types';
2
- /**
3
- * Return the `Validator` for the given `Validation`.
4
- *
5
- * When `validation` is `undefined` it will return a `Validator<any>`,
6
- */
2
+ /** Return the `Validator` for the given `Validation` */
7
3
  export declare function getValidator(validation: Validation): Validator;
@@ -1,6 +1,8 @@
1
1
  // utilities.ts
2
+ import { assertSchema } from "./errors.mjs";
2
3
  import { registry } from "./registry.mjs";
3
4
  function getValidator(validation) {
5
+ assertSchema(validation !== void 0, "No validator for undefined validation");
4
6
  if (validation === null)
5
7
  return new (registry.get("constant"))(null);
6
8
  if (validation[Symbol.justusValidator]) {