exisjs 0.9.1 → 0.9.2

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 (58) hide show
  1. package/dist/config/config.d.ts.map +1 -1
  2. package/dist/config/config.js +2 -1
  3. package/dist/config/config.js.map +1 -1
  4. package/dist/config/types.d.ts +5 -0
  5. package/dist/config/types.d.ts.map +1 -1
  6. package/dist/docs/content/config.mdx +3 -1
  7. package/dist/docs/content/validation.mdx +33 -11
  8. package/dist/docs/reference/config.mdx +1 -0
  9. package/dist/docs/reference/sanitize.mdx +129 -134
  10. package/dist/docs/reference/validator.mdx +8 -3
  11. package/dist/router/route-scanner.d.ts +12 -4
  12. package/dist/router/route-scanner.d.ts.map +1 -1
  13. package/dist/router/route-scanner.js +46 -31
  14. package/dist/router/route-scanner.js.map +1 -1
  15. package/dist/sanitize/index.d.ts +29 -3
  16. package/dist/sanitize/index.d.ts.map +1 -1
  17. package/dist/sanitize/index.js +91 -32
  18. package/dist/sanitize/index.js.map +1 -1
  19. package/dist/server/adapters/bun-adapter.d.ts +1 -1
  20. package/dist/server/adapters/bun-adapter.d.ts.map +1 -1
  21. package/dist/server/adapters/bun-adapter.js.map +1 -1
  22. package/dist/server/bootstrapper.d.ts.map +1 -1
  23. package/dist/server/bootstrapper.js +1 -1
  24. package/dist/server/bootstrapper.js.map +1 -1
  25. package/dist/validator/builder.d.ts +12 -1
  26. package/dist/validator/builder.d.ts.map +1 -1
  27. package/dist/validator/builder.js +63 -24
  28. package/dist/validator/builder.js.map +1 -1
  29. package/dist/validator/compile.d.ts +7 -2
  30. package/dist/validator/compile.d.ts.map +1 -1
  31. package/dist/validator/compile.js +85 -54
  32. package/dist/validator/compile.js.map +1 -1
  33. package/dist/validator/engine.d.ts +58 -7
  34. package/dist/validator/engine.d.ts.map +1 -1
  35. package/dist/validator/engine.js +432 -525
  36. package/dist/validator/engine.js.map +1 -1
  37. package/dist/validator/error.d.ts.map +1 -1
  38. package/dist/validator/error.js +7 -0
  39. package/dist/validator/error.js.map +1 -1
  40. package/dist/validator/rules.d.ts +66 -7
  41. package/dist/validator/rules.d.ts.map +1 -1
  42. package/dist/validator/rules.js +435 -109
  43. package/dist/validator/rules.js.map +1 -1
  44. package/dist/validator/tex-types.d.ts +15 -0
  45. package/dist/validator/tex-types.d.ts.map +1 -1
  46. package/dist/validator/tex-types.js +127 -64
  47. package/dist/validator/tex-types.js.map +1 -1
  48. package/dist/validator/text.d.ts +2 -0
  49. package/dist/validator/text.d.ts.map +1 -1
  50. package/dist/validator/text.js +31 -13
  51. package/dist/validator/text.js.map +1 -1
  52. package/dist/validator/types.d.ts +15 -0
  53. package/dist/validator/types.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/dist/sanitize/sanitize.d.ts +0 -33
  56. package/dist/sanitize/sanitize.d.ts.map +0 -1
  57. package/dist/sanitize/sanitize.js +0 -104
  58. package/dist/sanitize/sanitize.js.map +0 -1
@@ -1,8 +1,22 @@
1
1
  import { type ResolveSchema } from './tex-types';
2
+ import { ValidatorError } from './error';
3
+ import type { ValidationErrorDescriptor } from './types';
4
+ /** Result of `safeParse()`: the data, or the errors instead of a throw. */
5
+ export type SafeParseResult<T> = {
6
+ success: true;
7
+ data: T;
8
+ errors?: undefined;
9
+ error?: undefined;
10
+ } | {
11
+ success: false;
12
+ data?: undefined;
13
+ errors: ValidationErrorDescriptor[];
14
+ error: ValidatorError;
15
+ };
2
16
  /**
3
17
  * The rule string for one field of an object schema. Shared by `tex.object`,
4
- * `tex.array` and `extend` so a nested schema keeps its `optional()` /
5
- * `nullable()` modifiers on every path.
18
+ * `tex.array`, `tex.record`, `tex.union` and `extend` so a nested schema
19
+ * keeps its `optional()` / `nullable()` modifiers on every path.
6
20
  */
7
21
  export declare function fieldRule(key: string, value: unknown): string;
8
22
  export declare class TexEngine<T = any> {
@@ -10,29 +24,49 @@ export declare class TexEngine<T = any> {
10
24
  private rawSchema;
11
25
  private validator;
12
26
  private strict;
27
+ private _queryValidator?;
13
28
  readonly _type: T;
14
29
  _isOptional: boolean;
15
30
  _isNullable: boolean;
16
- private _plan?;
31
+ private _objectRules;
32
+ /** @internal Read by the rule compiler when this schema is nested */
33
+ _objectCheck?: (v: any) => any;
17
34
  constructor(schema: Record<string, string>, rawSchema: Record<string, any>, strict?: boolean, isOptional?: boolean);
18
35
  private _fieldValidators?;
19
36
  /**
20
37
  * The compiled validator stops at the first problem, which keeps valid
21
- * requests fast. Once a parse has failed, every other top-level field is
22
- * checked on its own so the response lists all failing fields (capped).
38
+ * requests fast. Once a parse has failed, every field is checked on its
39
+ * own, descending into nested objects, array items and record values, so
40
+ * the response lists every failing value (capped).
23
41
  */
24
42
  private collectErrors;
25
- /** Turns a validator exception into a structured error entry */
26
- private describeError;
43
+ /** @internal Checks each field on its own; used after a failed parse */
44
+ _collectFields(data: Record<string, any>, query?: boolean): ValidationErrorDescriptor[];
27
45
  getCompiledSchema(): Record<string, string>;
28
46
  /** A copy with another shape that keeps strictness and modifiers */
29
47
  private derive;
48
+ /** A copy with the same shape, keeping refine() rules */
49
+ private copy;
30
50
  /** The field may be left out. */
31
51
  optional(): TexEngine<T | undefined> & {
32
52
  readonly __isOptional: true;
33
53
  };
34
54
  /** The field may be `null`. */
35
55
  nullable(): TexEngine<T | null>;
56
+ /**
57
+ * A check across fields, run once every field is valid. `path` names the
58
+ * field the error is reported on (default: the object itself).
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * tex.object({ password: tex.string(), confirm: tex.string() })
63
+ * .refine((d) => d.password === d.confirm, { message: 'Passwords must match', path: 'confirm' })
64
+ * ```
65
+ */
66
+ refine(fn: (data: T) => boolean, message?: string | ((data: T) => string) | {
67
+ message?: string | ((data: T) => string);
68
+ path?: string;
69
+ }): TexEngine<T>;
36
70
  /** The field may be left out or be `null`. */
37
71
  nullish(): TexEngine<T | null | undefined> & {
38
72
  readonly __isOptional: true;
@@ -43,8 +77,17 @@ export declare class TexEngine<T = any> {
43
77
  transform<Out>(fn: (val: T) => Out): TexTransformedEngine<T, Out>;
44
78
  pick<K extends keyof T>(keys: K[]): TexEngine<Pick<T, K>>;
45
79
  omit<K extends keyof T>(keys: K[]): TexEngine<Omit<T, K>>;
80
+ /**
81
+ * Validates `data` and returns a new object with the declared fields only.
82
+ * The input is never modified. Throws `ValidatorError` listing every
83
+ * failing field.
84
+ */
46
85
  parse(data: any): T;
86
+ /** Like `parse()`, but returns `{ success, data }` or `{ success, errors }`. */
87
+ safeParse(data: any): SafeParseResult<T>;
88
+ /** Runs `parse()`, then every `refineAsync()` rule, nested ones included. */
47
89
  parseAsync(data: any): Promise<T>;
90
+ safeParseAsync(data: any): Promise<SafeParseResult<T>>;
48
91
  toMongoSchema(): Record<string, any>;
49
92
  toOpenApi(): Record<string, any>;
50
93
  }
@@ -54,7 +97,9 @@ export declare class TexTransformedEngine<In, Out> {
54
97
  readonly _type: Out;
55
98
  constructor(inner: TexEngine<In>, transformFn: (val: In) => Out);
56
99
  parse(data: any): Out;
100
+ safeParse(data: any): SafeParseResult<Out>;
57
101
  parseAsync(data: any): Promise<Out>;
102
+ safeParseAsync(data: any): Promise<SafeParseResult<Out>>;
58
103
  toOpenApi(): Record<string, any>;
59
104
  }
60
105
  export declare class TexDiscriminatedUnionEngine<Discriminator extends string, Variants extends (TexEngine<any> | Record<string, any>)[]> {
@@ -62,9 +107,15 @@ export declare class TexDiscriminatedUnionEngine<Discriminator extends string, V
62
107
  readonly variants: Variants;
63
108
  readonly _type: Variants[number]['_type'];
64
109
  private engines;
110
+ private tags;
65
111
  constructor(discriminator: Discriminator, variants: Variants);
112
+ /** The variant whose discriminator matches `data`, if any */
113
+ variantFor(data: any): TexEngine<any> | undefined;
114
+ private noMatch;
66
115
  parse(data: any): Variants[number]['_type'];
116
+ safeParse(data: any): SafeParseResult<Variants[number]['_type']>;
67
117
  parseAsync(data: any): Promise<Variants[number]['_type']>;
118
+ safeParseAsync(data: any): Promise<SafeParseResult<Variants[number]['_type']>>;
68
119
  toOpenApi(): Record<string, any>;
69
120
  }
70
121
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/validator/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/validator/engine.ts"],"names":[],"mappings":"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"}