@modulify/validator 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/README.md +12 -2
  3. package/dist/assert.cjs +99 -63
  4. package/dist/assert.d.cts +37 -0
  5. package/dist/assert.d.mts +37 -0
  6. package/dist/assert.d.ts +24 -3
  7. package/dist/assert.mjs +94 -64
  8. package/dist/assertions.cjs +283 -178
  9. package/dist/assertions.d.cts +56 -0
  10. package/dist/assertions.d.mts +56 -0
  11. package/dist/assertions.d.ts +43 -45
  12. package/dist/assertions.mjs +274 -201
  13. package/dist/checkers.cjs +23 -0
  14. package/dist/checkers.d.cts +8 -0
  15. package/dist/checkers.d.mts +8 -0
  16. package/dist/checkers.d.ts +1 -1
  17. package/dist/checkers.mjs +16 -0
  18. package/dist/combinators.cjs +305 -304
  19. package/dist/combinators.d.cts +16 -0
  20. package/dist/combinators.d.mts +16 -0
  21. package/dist/combinators.d.ts +15 -16
  22. package/dist/combinators.mjs +305 -314
  23. package/dist/constraints.cjs +23 -0
  24. package/dist/constraints.d.cts +4 -0
  25. package/dist/constraints.d.mts +4 -0
  26. package/dist/constraints.d.ts +2 -2
  27. package/dist/constraints.mjs +21 -0
  28. package/dist/extractors.cjs +6 -0
  29. package/dist/extractors.d.cts +2 -0
  30. package/dist/extractors.d.mts +2 -0
  31. package/dist/extractors.mjs +5 -0
  32. package/dist/index.cjs +140 -219
  33. package/dist/index.d.cts +12 -0
  34. package/dist/index.d.mts +12 -0
  35. package/dist/index.d.ts +9 -9
  36. package/dist/index.mjs +93 -222
  37. package/dist/json-schema.cjs +364 -489
  38. package/dist/json-schema.d.cts +14 -0
  39. package/dist/json-schema.d.mts +14 -0
  40. package/dist/json-schema.d.ts +3 -3
  41. package/dist/json-schema.mjs +365 -492
  42. package/dist/metadata.cjs +98 -7
  43. package/dist/metadata.d.cts +8 -0
  44. package/dist/metadata.d.mts +8 -0
  45. package/dist/metadata.d.ts +2 -2
  46. package/dist/metadata.mjs +93 -7
  47. package/dist/predicates.cjs +98 -41
  48. package/dist/predicates.d.cts +77 -0
  49. package/dist/predicates.d.mts +77 -0
  50. package/dist/predicates.d.ts +25 -4
  51. package/dist/predicates.mjs +92 -66
  52. package/dist/types/index.d.cts +984 -0
  53. package/dist/types/index.d.mts +984 -0
  54. package/dist/types/index.d.ts +984 -0
  55. package/dist/types/json-schema.d.cts +75 -0
  56. package/dist/types/json-schema.d.mts +75 -0
  57. package/dist/types/json-schema.d.ts +75 -0
  58. package/dist/violations.cjs +81 -0
  59. package/dist/violations.d.cts +29 -0
  60. package/dist/violations.d.mts +29 -0
  61. package/dist/violations.d.ts +1 -1
  62. package/dist/violations.mjs +80 -0
  63. package/docs/RELEASING.md +66 -0
  64. package/docs/en/00-index.md +2 -0
  65. package/docs/en/01-shape-api.md +35 -10
  66. package/docs/en/02-metadata-and-introspection.md +2 -1
  67. package/docs/en/03-violations.md +1 -1
  68. package/docs/en/04-json-schema-export.md +5 -0
  69. package/docs/en/05-public-api.md +35 -3
  70. package/docs/en/06-common-recipes.md +2 -1
  71. package/docs/en/07-ai-reference.md +5 -2
  72. package/docs/en/08-violation-code-types.md +28 -2
  73. package/docs/en/09-migration.md +75 -0
  74. package/docs/ru/00-index.md +2 -0
  75. package/docs/ru/01-shape-api.md +35 -10
  76. package/docs/ru/02-metadata-and-introspection.md +2 -1
  77. package/docs/ru/03-violations.md +1 -1
  78. package/docs/ru/04-json-schema-export.md +5 -0
  79. package/docs/ru/05-public-api.md +35 -3
  80. package/docs/ru/06-common-recipes.md +2 -1
  81. package/docs/ru/07-ai-reference.md +5 -2
  82. package/docs/ru/08-violation-code-types.md +28 -2
  83. package/docs/ru/09-migration.md +76 -0
  84. package/docs/ru/README.md +10 -2
  85. package/package.json +63 -37
  86. package/types/index.d.ts +275 -115
  87. package/dist/metadata.cjs.js +0 -130
  88. package/dist/metadata.es.js +0 -131
@@ -1,187 +1,284 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const assert = require("./assert.cjs");
4
- const predicates = require("./predicates.cjs");
5
- const isEqual = (value, exact) => value === exact;
6
- const isGte = (value, min) => value >= min;
7
- const isLte = (value, max) => value <= max;
8
- const inRange = (value, [min, max]) => value >= min && value <= max;
9
- const startsWith$1 = (value, prefix) => value.startsWith(prefix);
10
- const endsWith$1 = (value, suffix) => value.endsWith(suffix);
11
- const matchesPattern = (value, pattern) => new RegExp(pattern.source, pattern.flags).test(value);
12
- const isMultipleOf = (value, step) => {
13
- if (step === 0) {
14
- return false;
15
- }
16
- const quotient = value / step;
17
- const nearestInteger = Math.round(quotient);
18
- const delta = Math.abs(quotient - nearestInteger);
19
- return Number.isFinite(quotient) && delta <= Number.EPSILON * Math.max(1, Math.abs(quotient)) * 16;
2
+ const require_assert = require("./assert.cjs");
3
+ const require_checkers = require("./checkers.cjs");
4
+ const require_extractors = require("./extractors.cjs");
5
+ const require_predicates = require("./predicates.cjs");
6
+ //#region src/assertions.ts
7
+ var buildLengthConstraints = (options) => {
8
+ const { exact = null, max = null, min = null, range = null } = options;
9
+ const constraints = [];
10
+ if (exact !== null) constraints.push([
11
+ require_extractors.length,
12
+ require_checkers.isEqual,
13
+ "length.exact",
14
+ exact
15
+ ]);
16
+ if (max !== null) constraints.push([
17
+ require_extractors.length,
18
+ require_checkers.isLte,
19
+ "length.max",
20
+ max
21
+ ]);
22
+ if (min !== null) constraints.push([
23
+ require_extractors.length,
24
+ require_checkers.isGte,
25
+ "length.min",
26
+ min
27
+ ]);
28
+ if (range !== null) constraints.push([
29
+ require_extractors.length,
30
+ require_checkers.inRange,
31
+ "length.range",
32
+ range
33
+ ]);
34
+ return constraints;
20
35
  };
21
- const length = (value) => value.length;
22
- const size = (value) => value.size;
23
- const isBoolean = assert.assert(predicates.isBoolean, { name: "isBoolean", bail: true, code: "type.boolean" });
24
- const isBigInt = assert.assert(predicates.isBigInt, { name: "isBigInt", bail: true, code: "type.bigint" });
25
- const isBlob = assert.assert(predicates.isBlob, { name: "isBlob", bail: true, code: "type.blob" });
26
- const isDate = assert.assert(predicates.isDate, { name: "isDate", bail: true, code: "type.date" });
27
- const isDefined = assert.assert((value) => value !== void 0, {
28
- name: "isDefined",
29
- bail: true,
30
- code: "value.defined"
31
- });
32
- const isEmail = assert.assert(predicates.isEmail, { name: "isEmail", bail: true, code: "string.email" });
33
- const isFile = assert.assert(predicates.isFile, { name: "isFile", bail: true, code: "type.file" });
34
- const isFunction = assert.assert(predicates.isFunction, { name: "isFunction", bail: true, code: "type.function" });
35
- const isMap = assert.assert(predicates.isMap, { name: "isMap", bail: true, code: "type.map" });
36
- const isNaN = assert.assert(predicates.isNaN, { name: "isNaN", bail: true, code: "number.nan" });
37
- const isNull = assert.assert(predicates.isNull, { name: "isNull", bail: true, code: "type.null" });
38
- const isNumber = assert.assert(predicates.isNumber, { name: "isNumber", bail: true, code: "type.number" });
39
- const isSet = assert.assert(predicates.isSet, { name: "isSet", bail: true, code: "type.set" });
40
- const isString = assert.assert(predicates.isString, { name: "isString", bail: true, code: "type.string" });
41
- const isSymbol = assert.assert(predicates.isSymbol, { name: "isSymbol", bail: true, code: "type.symbol" });
42
- const hasLength = ({
43
- exact = null,
44
- max = null,
45
- min = null,
46
- range = null,
47
- bail = false
48
- } = {}) => {
49
- const constraints = [];
50
- if (exact !== null) constraints.push([length, isEqual, "length.exact", exact]);
51
- if (max !== null) constraints.push([length, isLte, "length.max", max]);
52
- if (min !== null) constraints.push([length, isGte, "length.min", min]);
53
- if (range !== null) constraints.push([length, inRange, "length.range", range]);
54
- return assert.assert(
55
- (value) => predicates.isArray(value) || predicates.isString(value),
56
- {
57
- name: "hasLength",
58
- bail,
59
- code: "length.unsupported-type"
60
- },
61
- constraints
62
- );
36
+ var buildSizeConstraints = (options) => {
37
+ const { exact = null, max = null, min = null, range = null } = options;
38
+ const constraints = [];
39
+ if (exact !== null) constraints.push([
40
+ require_extractors.size,
41
+ require_checkers.isEqual,
42
+ "size.exact",
43
+ exact
44
+ ]);
45
+ if (max !== null) constraints.push([
46
+ require_extractors.size,
47
+ require_checkers.isLte,
48
+ "size.max",
49
+ max
50
+ ]);
51
+ if (min !== null) constraints.push([
52
+ require_extractors.size,
53
+ require_checkers.isGte,
54
+ "size.min",
55
+ min
56
+ ]);
57
+ if (range !== null) constraints.push([
58
+ require_extractors.size,
59
+ require_checkers.inRange,
60
+ "size.range",
61
+ range
62
+ ]);
63
+ return constraints;
63
64
  };
64
- const hasSize = ({
65
- exact = null,
66
- max = null,
67
- min = null,
68
- range = null,
69
- bail = false
70
- } = {}) => {
71
- const constraints = [];
72
- if (exact !== null) constraints.push([size, isEqual, "size.exact", exact]);
73
- if (max !== null) constraints.push([size, isLte, "size.max", max]);
74
- if (min !== null) constraints.push([size, isGte, "size.min", min]);
75
- if (range !== null) constraints.push([size, inRange, "size.range", range]);
76
- return assert.assert(
77
- (value) => predicates.isMap(value) || predicates.isSet(value),
78
- {
79
- name: "hasSize",
80
- bail,
81
- code: "size.unsupported-type"
82
- },
83
- constraints
84
- );
65
+ var buildValueConstraints = (options) => {
66
+ const { exact = null, max = null, min = null, range = null } = options;
67
+ const constraints = [];
68
+ if (exact !== null) constraints.push([
69
+ (value) => value,
70
+ require_checkers.isEqual,
71
+ "number.exact",
72
+ exact
73
+ ]);
74
+ if (max !== null) constraints.push([
75
+ (value) => value,
76
+ require_checkers.isLte,
77
+ "number.max",
78
+ max
79
+ ]);
80
+ if (min !== null) constraints.push([
81
+ (value) => value,
82
+ require_checkers.isGte,
83
+ "number.min",
84
+ min
85
+ ]);
86
+ if (range !== null) constraints.push([
87
+ (value) => value,
88
+ require_checkers.inRange,
89
+ "number.range",
90
+ range
91
+ ]);
92
+ return constraints;
85
93
  };
86
- const hasPattern = (pattern, {
87
- bail = false
88
- } = {}) => assert.assert(
89
- predicates.isString,
90
- {
91
- name: "hasPattern",
92
- bail,
93
- code: "string.unsupported-type"
94
- },
95
- [[
96
- (value) => value,
97
- matchesPattern,
98
- "string.pattern",
99
- pattern
100
- ]]
101
- );
102
- const startsWith = (prefix, {
103
- bail = false
104
- } = {}) => assert.assert(
105
- predicates.isString,
106
- {
107
- name: "startsWith",
108
- bail,
109
- code: "string.unsupported-type"
110
- },
111
- [[
112
- (value) => value,
113
- startsWith$1,
114
- "string.starts-with",
115
- prefix
116
- ]]
117
- );
118
- const endsWith = (suffix, {
119
- bail = false
120
- } = {}) => assert.assert(
121
- predicates.isString,
122
- {
123
- name: "endsWith",
124
- bail,
125
- code: "string.unsupported-type"
126
- },
127
- [[
128
- (value) => value,
129
- endsWith$1,
130
- "string.ends-with",
131
- suffix
132
- ]]
133
- );
134
- const hasValue = ({
135
- exact = null,
136
- max = null,
137
- min = null,
138
- range = null,
139
- bail = false
140
- } = {}) => {
141
- const constraints = [];
142
- if (exact !== null) constraints.push([(value) => value, isEqual, "number.exact", exact]);
143
- if (max !== null) constraints.push([(value) => value, isLte, "number.max", max]);
144
- if (min !== null) constraints.push([(value) => value, isGte, "number.min", min]);
145
- if (range !== null) constraints.push([(value) => value, inRange, "number.range", range]);
146
- return assert.assert(
147
- predicates.isNumber,
148
- {
149
- name: "hasValue",
150
- bail,
151
- code: "number.unsupported-type"
152
- },
153
- constraints
154
- );
94
+ var isBoolean = /* @__PURE__ */ require_assert.assert(require_predicates.isBoolean, {
95
+ name: "isBoolean",
96
+ bail: true,
97
+ code: "type.boolean"
98
+ });
99
+ var isBigInt = /* @__PURE__ */ require_assert.assert(require_predicates.isBigInt, {
100
+ name: "isBigInt",
101
+ bail: true,
102
+ code: "type.bigint"
103
+ });
104
+ var isBlob = /* @__PURE__ */ require_assert.assert(require_predicates.isBlob, {
105
+ name: "isBlob",
106
+ bail: true,
107
+ code: "type.blob"
108
+ });
109
+ var isDate = /* @__PURE__ */ require_assert.assert(require_predicates.isDate, {
110
+ name: "isDate",
111
+ bail: true,
112
+ code: "type.date"
113
+ });
114
+ var isDefined = /* @__PURE__ */ require_assert.assert((value) => value !== void 0, {
115
+ name: "isDefined",
116
+ bail: true,
117
+ code: "value.defined"
118
+ });
119
+ var isEmail = /* @__PURE__ */ require_assert.assert(require_predicates.isEmail, {
120
+ name: "isEmail",
121
+ bail: true,
122
+ code: "string.email"
123
+ });
124
+ var isError = /* @__PURE__ */ require_assert.assert(require_predicates.isError, {
125
+ name: "isError",
126
+ bail: true,
127
+ code: "type.error"
128
+ });
129
+ var isFiniteNumber = /* @__PURE__ */ require_assert.assert(require_predicates.isFiniteNumber, {
130
+ name: "isFiniteNumber",
131
+ bail: true,
132
+ code: "number.finite"
133
+ });
134
+ var isFile = /* @__PURE__ */ require_assert.assert(require_predicates.isFile, {
135
+ name: "isFile",
136
+ bail: true,
137
+ code: "type.file"
138
+ });
139
+ var isFunction = /* @__PURE__ */ require_assert.assert(require_predicates.isFunction, {
140
+ name: "isFunction",
141
+ bail: true,
142
+ code: "type.function"
143
+ });
144
+ var isInteger = /* @__PURE__ */ require_assert.assert(require_predicates.isInteger, {
145
+ name: "isInteger",
146
+ bail: true,
147
+ code: "number.integer"
148
+ });
149
+ var isMap = /* @__PURE__ */ require_assert.assert(require_predicates.isMap, {
150
+ name: "isMap",
151
+ bail: true,
152
+ code: "type.map"
153
+ });
154
+ var isNaN = /* @__PURE__ */ require_assert.assert(require_predicates.isNaN, {
155
+ name: "isNaN",
156
+ bail: true,
157
+ code: "number.nan"
158
+ });
159
+ var isNull = /* @__PURE__ */ require_assert.assert(require_predicates.isNull, {
160
+ name: "isNull",
161
+ bail: true,
162
+ code: "type.null"
163
+ });
164
+ var isNumber = /* @__PURE__ */ require_assert.assert(require_predicates.isNumber, {
165
+ name: "isNumber",
166
+ bail: true,
167
+ code: "type.number"
168
+ });
169
+ var isPromiseLike = /* @__PURE__ */ require_assert.assert(require_predicates.isPromiseLike, {
170
+ name: "isPromiseLike",
171
+ bail: true,
172
+ code: "type.promise-like"
173
+ });
174
+ var isRegExp = /* @__PURE__ */ require_assert.assert(require_predicates.isRegExp, {
175
+ name: "isRegExp",
176
+ bail: true,
177
+ code: "type.regexp"
178
+ });
179
+ var isSafeInteger = /* @__PURE__ */ require_assert.assert(require_predicates.isSafeInteger, {
180
+ name: "isSafeInteger",
181
+ bail: true,
182
+ code: "number.safe-integer"
183
+ });
184
+ var isSet = /* @__PURE__ */ require_assert.assert(require_predicates.isSet, {
185
+ name: "isSet",
186
+ bail: true,
187
+ code: "type.set"
188
+ });
189
+ var isString = /* @__PURE__ */ require_assert.assert(require_predicates.isString, {
190
+ name: "isString",
191
+ bail: true,
192
+ code: "type.string"
193
+ });
194
+ var isSymbol = /* @__PURE__ */ require_assert.assert(require_predicates.isSymbol, {
195
+ name: "isSymbol",
196
+ bail: true,
197
+ code: "type.symbol"
198
+ });
199
+ var isValidDate = /* @__PURE__ */ require_assert.assert(require_predicates.isValidDate, {
200
+ name: "isValidDate",
201
+ bail: true,
202
+ code: "date.valid"
203
+ });
204
+ var hasLength = (options = {}) => {
205
+ const { bail = false } = options;
206
+ const constraints = buildLengthConstraints(options);
207
+ return /* @__PURE__ */ require_assert.createRefinement({
208
+ name: "hasLength",
209
+ bail,
210
+ code: "length.unsupported-type"
211
+ }, constraints);
212
+ };
213
+ var hasSize = (options = {}) => {
214
+ const { bail = false } = options;
215
+ const constraints = buildSizeConstraints(options);
216
+ return /* @__PURE__ */ require_assert.createRefinement({
217
+ name: "hasSize",
218
+ bail,
219
+ code: "size.unsupported-type"
220
+ }, constraints);
221
+ };
222
+ var hasPattern = (pattern, { bail = false } = {}) => /* @__PURE__ */ require_assert.createRefinement({
223
+ name: "hasPattern",
224
+ bail,
225
+ code: "string.unsupported-type"
226
+ }, [[
227
+ (value) => value,
228
+ require_checkers.matchesPattern,
229
+ "string.pattern",
230
+ pattern
231
+ ]]);
232
+ var startsWith = (prefix, { bail = false } = {}) => /* @__PURE__ */ require_assert.createRefinement({
233
+ name: "startsWith",
234
+ bail,
235
+ code: "string.unsupported-type"
236
+ }, [[
237
+ (value) => value,
238
+ require_checkers.startsWith,
239
+ "string.starts-with",
240
+ prefix
241
+ ]]);
242
+ var endsWith = (suffix, { bail = false } = {}) => /* @__PURE__ */ require_assert.createRefinement({
243
+ name: "endsWith",
244
+ bail,
245
+ code: "string.unsupported-type"
246
+ }, [[
247
+ (value) => value,
248
+ require_checkers.endsWith,
249
+ "string.ends-with",
250
+ suffix
251
+ ]]);
252
+ var hasValue = (options = {}) => {
253
+ const { bail = false } = options;
254
+ const constraints = buildValueConstraints(options);
255
+ return /* @__PURE__ */ require_assert.createRefinement({
256
+ name: "hasValue",
257
+ bail,
258
+ code: "number.unsupported-type"
259
+ }, constraints);
155
260
  };
156
- const multipleOf = (step, {
157
- bail = false
158
- } = {}) => assert.assert(
159
- predicates.isNumber,
160
- {
161
- name: "multipleOf",
162
- bail,
163
- code: "number.unsupported-type"
164
- },
165
- [[
166
- (value) => value,
167
- isMultipleOf,
168
- "number.multiple-of",
169
- step
170
- ]]
171
- );
172
- const oneOf = (values, {
173
- equalTo = (a, b) => a === b,
174
- bail = false
175
- } = {}) => {
176
- const haystack = predicates.isArray(values) ? values : Object.values(values);
177
- return assert.assert((value) => haystack.some((item) => equalTo(item, value)), {
178
- name: "oneOf",
179
- bail,
180
- code: "value.one-of",
181
- args: [haystack]
182
- });
261
+ var multipleOf = (step, { bail = false } = {}) => /* @__PURE__ */ require_assert.createRefinement({
262
+ name: "multipleOf",
263
+ bail,
264
+ code: "number.unsupported-type"
265
+ }, [[
266
+ (value) => value,
267
+ require_checkers.isMultipleOf,
268
+ "number.multiple-of",
269
+ step
270
+ ]]);
271
+ var oneOf = (values, { equalTo = (a, b) => a === b, bail = false } = {}) => {
272
+ const haystack = require_predicates.isArray(values) ? values : Object.values(values);
273
+ return /* @__PURE__ */ require_assert.assert((value) => haystack.some((item) => equalTo(item, value)), {
274
+ name: "oneOf",
275
+ bail,
276
+ code: "value.one-of",
277
+ args: [haystack]
278
+ });
183
279
  };
184
- exports.assert = assert.assert;
280
+ //#endregion
281
+ exports.assert = require_assert.assert;
185
282
  exports.endsWith = endsWith;
186
283
  exports.hasLength = hasLength;
187
284
  exports.hasPattern = hasPattern;
@@ -193,15 +290,23 @@ exports.isBoolean = isBoolean;
193
290
  exports.isDate = isDate;
194
291
  exports.isDefined = isDefined;
195
292
  exports.isEmail = isEmail;
293
+ exports.isError = isError;
196
294
  exports.isFile = isFile;
295
+ exports.isFiniteNumber = isFiniteNumber;
197
296
  exports.isFunction = isFunction;
297
+ exports.isInteger = isInteger;
198
298
  exports.isMap = isMap;
199
299
  exports.isNaN = isNaN;
200
300
  exports.isNull = isNull;
201
301
  exports.isNumber = isNumber;
302
+ exports.isPromiseLike = isPromiseLike;
303
+ exports.isRegExp = isRegExp;
304
+ exports.isSafeInteger = isSafeInteger;
202
305
  exports.isSet = isSet;
203
306
  exports.isString = isString;
204
307
  exports.isSymbol = isSymbol;
308
+ exports.isValidDate = isValidDate;
205
309
  exports.multipleOf = multipleOf;
206
310
  exports.oneOf = oneOf;
311
+ exports.refine = require_assert.refine;
207
312
  exports.startsWith = startsWith;
@@ -0,0 +1,56 @@
1
+ import { AssertionConstraint, Guard, Refinement, Extractor, Checker } from './types/index.cjs';
2
+ import { assert, refine } from './assert.cjs';
3
+ export { assert, refine, };
4
+ type Defined = {} | null;
5
+ type EmptyOptions = Record<never, never>;
6
+ type BoundedAssertionOptions = {
7
+ exact?: number | null;
8
+ max?: number | null;
9
+ min?: number | null;
10
+ range?: readonly [number, number] | null;
11
+ bail?: boolean;
12
+ };
13
+ type OptionNumber<O, K extends PropertyKey> = K extends keyof O ? Extract<O[K], number> : never;
14
+ type OptionRange<O, K extends PropertyKey> = K extends keyof O ? Extract<O[K], readonly [number, number] | [number, number]> extends infer R ? R extends readonly [infer Min extends number, infer Max extends number] ? readonly [Min, Max] : never : never : never;
15
+ type IncludeConstraint<Value, C extends AssertionConstraint> = [Value] extends [never] ? [] : [C];
16
+ export declare const isBoolean: Guard<boolean, [], "type.boolean", [], "isBoolean">;
17
+ export declare const isBigInt: Guard<bigint, [], "type.bigint", [], "isBigInt">;
18
+ export declare const isBlob: Guard<Blob, [], "type.blob", [], "isBlob">;
19
+ export declare const isDate: Guard<Date, [], "type.date", [], "isDate">;
20
+ export declare const isDefined: Guard<Defined, [], "value.defined", [], "isDefined">;
21
+ export declare const isEmail: Guard<string, [], "string.email", [], "isEmail">;
22
+ export declare const isError: Guard<Error, [], "type.error", [], "isError">;
23
+ export declare const isFiniteNumber: Guard<number, [], "number.finite", [], "isFiniteNumber">;
24
+ export declare const isFile: Guard<File, [], "type.file", [], "isFile">;
25
+ export declare const isFunction: Guard<(...args: never[]) => unknown, [], "type.function", [], "isFunction">;
26
+ export declare const isInteger: Guard<number, [], "number.integer", [], "isInteger">;
27
+ export declare const isMap: Guard<Map<unknown, unknown>, [], "type.map", [], "isMap">;
28
+ export declare const isNaN: Guard<number, [], "number.nan", [], "isNaN">;
29
+ export declare const isNull: Guard<null, [], "type.null", [], "isNull">;
30
+ export declare const isNumber: Guard<number, [], "type.number", [], "isNumber">;
31
+ export declare const isPromiseLike: Guard<PromiseLike<unknown>, [], "type.promise-like", [], "isPromiseLike">;
32
+ export declare const isRegExp: Guard<RegExp, [], "type.regexp", [], "isRegExp">;
33
+ export declare const isSafeInteger: Guard<number, [], "number.safe-integer", [], "isSafeInteger">;
34
+ export declare const isSet: Guard<Set<unknown>, [], "type.set", [], "isSet">;
35
+ export declare const isString: Guard<string, [], "type.string", [], "isString">;
36
+ export declare const isSymbol: Guard<symbol, [], "type.symbol", [], "isSymbol">;
37
+ export declare const isValidDate: Guard<Date, [], "date.valid", [], "isValidDate">;
38
+ export declare const hasLength: <const O extends BoundedAssertionOptions = EmptyOptions>(options?: O) => Refinement<[...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<string | unknown[], number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "length.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<string | unknown[], number>, Checker<number, [max: OptionNumber<O, "max">]>, "length.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<string | unknown[], number>, Checker<number, [min: OptionNumber<O, "min">]>, "length.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<string | unknown[], number>, Checker<number, [range: OptionRange<O, "range">]>, "length.range", range: OptionRange<O, "range">]>] extends infer T ? T extends [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<string | unknown[], number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "length.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<string | unknown[], number>, Checker<number, [max: OptionNumber<O, "max">]>, "length.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<string | unknown[], number>, Checker<number, [min: OptionNumber<O, "min">]>, "length.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<string | unknown[], number>, Checker<number, [range: OptionRange<O, "range">]>, "length.range", range: OptionRange<O, "range">]>] ? T extends readonly [] ? unknown : (T[number] extends infer T_1 ? T_1 extends T[number] ? T_1 extends unknown ? (value: Parameters<T_1[0]>[0]) => void : never : never : never) extends (value: infer Input) => void ? Input : never : never : never, [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<string | unknown[], number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "length.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<string | unknown[], number>, Checker<number, [max: OptionNumber<O, "max">]>, "length.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<string | unknown[], number>, Checker<number, [min: OptionNumber<O, "min">]>, "length.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<string | unknown[], number>, Checker<number, [range: OptionRange<O, "range">]>, "length.range", range: OptionRange<O, "range">]>], "length.unsupported-type", [], "hasLength">;
39
+ export declare const hasSize: <const O extends BoundedAssertionOptions = EmptyOptions>(options?: O) => Refinement<[...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "size.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [max: OptionNumber<O, "max">]>, "size.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [min: OptionNumber<O, "min">]>, "size.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [range: OptionRange<O, "range">]>, "size.range", range: OptionRange<O, "range">]>] extends infer T ? T extends [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "size.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [max: OptionNumber<O, "max">]>, "size.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [min: OptionNumber<O, "min">]>, "size.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [range: OptionRange<O, "range">]>, "size.range", range: OptionRange<O, "range">]>] ? T extends readonly [] ? unknown : (T[number] extends infer T_1 ? T_1 extends T[number] ? T_1 extends unknown ? (value: Parameters<T_1[0]>[0]) => void : never : never : never) extends (value: infer Input) => void ? Input : never : never : never, [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "size.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [max: OptionNumber<O, "max">]>, "size.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [min: OptionNumber<O, "min">]>, "size.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [range: OptionRange<O, "range">]>, "size.range", range: OptionRange<O, "range">]>], "size.unsupported-type", [], "hasSize">;
40
+ export declare const hasPattern: (pattern: RegExp, { bail, }?: {
41
+ bail?: boolean;
42
+ }) => Refinement<string, readonly [readonly [(value: string) => string, (value: string, pattern: RegExp) => boolean, "string.pattern", RegExp]], "string.unsupported-type", [], "hasPattern">;
43
+ export declare const startsWith: (prefix: string, { bail, }?: {
44
+ bail?: boolean;
45
+ }) => Refinement<string, readonly [readonly [(value: string) => string, (value: string, prefix: string) => boolean, "string.starts-with", string]], "string.unsupported-type", [], "startsWith">;
46
+ export declare const endsWith: (suffix: string, { bail, }?: {
47
+ bail?: boolean;
48
+ }) => Refinement<string, readonly [readonly [(value: string) => string, (value: string, suffix: string) => boolean, "string.ends-with", string]], "string.unsupported-type", [], "endsWith">;
49
+ export declare const hasValue: <const O extends BoundedAssertionOptions = EmptyOptions>(options?: O) => Refinement<[...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<number, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "number.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<number, number>, Checker<number, [max: OptionNumber<O, "max">]>, "number.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<number, number>, Checker<number, [min: OptionNumber<O, "min">]>, "number.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<number, number>, Checker<number, [range: OptionRange<O, "range">]>, "number.range", range: OptionRange<O, "range">]>] extends infer T ? T extends [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<number, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "number.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<number, number>, Checker<number, [max: OptionNumber<O, "max">]>, "number.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<number, number>, Checker<number, [min: OptionNumber<O, "min">]>, "number.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<number, number>, Checker<number, [range: OptionRange<O, "range">]>, "number.range", range: OptionRange<O, "range">]>] ? T extends readonly [] ? unknown : (T[number] extends infer T_1 ? T_1 extends T[number] ? T_1 extends unknown ? (value: Parameters<T_1[0]>[0]) => void : never : never : never) extends (value: infer Input) => void ? Input : never : never : never, [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<number, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "number.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<number, number>, Checker<number, [max: OptionNumber<O, "max">]>, "number.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<number, number>, Checker<number, [min: OptionNumber<O, "min">]>, "number.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<number, number>, Checker<number, [range: OptionRange<O, "range">]>, "number.range", range: OptionRange<O, "range">]>], "number.unsupported-type", [], "hasValue">;
50
+ export declare const multipleOf: <const Step extends number>(step: Step, { bail, }?: {
51
+ bail?: boolean;
52
+ }) => Refinement<number, readonly [readonly [(value: number) => number, (value: number, step: number) => boolean, "number.multiple-of", Step]], "number.unsupported-type", [], "multipleOf">;
53
+ export declare const oneOf: <Actual = unknown>(values: Actual[] | Record<string, Actual>, { equalTo, bail, }?: {
54
+ equalTo?: (a: Actual, b: unknown) => boolean;
55
+ bail?: boolean;
56
+ }) => Guard<Actual, [], "value.one-of", readonly [Actual[]], "oneOf">;
@@ -0,0 +1,56 @@
1
+ import { AssertionConstraint, Guard, Refinement, Extractor, Checker } from './types/index.mjs';
2
+ import { assert, refine } from './assert.mjs';
3
+ export { assert, refine, };
4
+ type Defined = {} | null;
5
+ type EmptyOptions = Record<never, never>;
6
+ type BoundedAssertionOptions = {
7
+ exact?: number | null;
8
+ max?: number | null;
9
+ min?: number | null;
10
+ range?: readonly [number, number] | null;
11
+ bail?: boolean;
12
+ };
13
+ type OptionNumber<O, K extends PropertyKey> = K extends keyof O ? Extract<O[K], number> : never;
14
+ type OptionRange<O, K extends PropertyKey> = K extends keyof O ? Extract<O[K], readonly [number, number] | [number, number]> extends infer R ? R extends readonly [infer Min extends number, infer Max extends number] ? readonly [Min, Max] : never : never : never;
15
+ type IncludeConstraint<Value, C extends AssertionConstraint> = [Value] extends [never] ? [] : [C];
16
+ export declare const isBoolean: Guard<boolean, [], "type.boolean", [], "isBoolean">;
17
+ export declare const isBigInt: Guard<bigint, [], "type.bigint", [], "isBigInt">;
18
+ export declare const isBlob: Guard<Blob, [], "type.blob", [], "isBlob">;
19
+ export declare const isDate: Guard<Date, [], "type.date", [], "isDate">;
20
+ export declare const isDefined: Guard<Defined, [], "value.defined", [], "isDefined">;
21
+ export declare const isEmail: Guard<string, [], "string.email", [], "isEmail">;
22
+ export declare const isError: Guard<Error, [], "type.error", [], "isError">;
23
+ export declare const isFiniteNumber: Guard<number, [], "number.finite", [], "isFiniteNumber">;
24
+ export declare const isFile: Guard<File, [], "type.file", [], "isFile">;
25
+ export declare const isFunction: Guard<(...args: never[]) => unknown, [], "type.function", [], "isFunction">;
26
+ export declare const isInteger: Guard<number, [], "number.integer", [], "isInteger">;
27
+ export declare const isMap: Guard<Map<unknown, unknown>, [], "type.map", [], "isMap">;
28
+ export declare const isNaN: Guard<number, [], "number.nan", [], "isNaN">;
29
+ export declare const isNull: Guard<null, [], "type.null", [], "isNull">;
30
+ export declare const isNumber: Guard<number, [], "type.number", [], "isNumber">;
31
+ export declare const isPromiseLike: Guard<PromiseLike<unknown>, [], "type.promise-like", [], "isPromiseLike">;
32
+ export declare const isRegExp: Guard<RegExp, [], "type.regexp", [], "isRegExp">;
33
+ export declare const isSafeInteger: Guard<number, [], "number.safe-integer", [], "isSafeInteger">;
34
+ export declare const isSet: Guard<Set<unknown>, [], "type.set", [], "isSet">;
35
+ export declare const isString: Guard<string, [], "type.string", [], "isString">;
36
+ export declare const isSymbol: Guard<symbol, [], "type.symbol", [], "isSymbol">;
37
+ export declare const isValidDate: Guard<Date, [], "date.valid", [], "isValidDate">;
38
+ export declare const hasLength: <const O extends BoundedAssertionOptions = EmptyOptions>(options?: O) => Refinement<[...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<string | unknown[], number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "length.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<string | unknown[], number>, Checker<number, [max: OptionNumber<O, "max">]>, "length.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<string | unknown[], number>, Checker<number, [min: OptionNumber<O, "min">]>, "length.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<string | unknown[], number>, Checker<number, [range: OptionRange<O, "range">]>, "length.range", range: OptionRange<O, "range">]>] extends infer T ? T extends [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<string | unknown[], number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "length.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<string | unknown[], number>, Checker<number, [max: OptionNumber<O, "max">]>, "length.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<string | unknown[], number>, Checker<number, [min: OptionNumber<O, "min">]>, "length.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<string | unknown[], number>, Checker<number, [range: OptionRange<O, "range">]>, "length.range", range: OptionRange<O, "range">]>] ? T extends readonly [] ? unknown : (T[number] extends infer T_1 ? T_1 extends T[number] ? T_1 extends unknown ? (value: Parameters<T_1[0]>[0]) => void : never : never : never) extends (value: infer Input) => void ? Input : never : never : never, [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<string | unknown[], number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "length.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<string | unknown[], number>, Checker<number, [max: OptionNumber<O, "max">]>, "length.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<string | unknown[], number>, Checker<number, [min: OptionNumber<O, "min">]>, "length.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<string | unknown[], number>, Checker<number, [range: OptionRange<O, "range">]>, "length.range", range: OptionRange<O, "range">]>], "length.unsupported-type", [], "hasLength">;
39
+ export declare const hasSize: <const O extends BoundedAssertionOptions = EmptyOptions>(options?: O) => Refinement<[...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "size.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [max: OptionNumber<O, "max">]>, "size.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [min: OptionNumber<O, "min">]>, "size.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [range: OptionRange<O, "range">]>, "size.range", range: OptionRange<O, "range">]>] extends infer T ? T extends [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "size.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [max: OptionNumber<O, "max">]>, "size.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [min: OptionNumber<O, "min">]>, "size.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [range: OptionRange<O, "range">]>, "size.range", range: OptionRange<O, "range">]>] ? T extends readonly [] ? unknown : (T[number] extends infer T_1 ? T_1 extends T[number] ? T_1 extends unknown ? (value: Parameters<T_1[0]>[0]) => void : never : never : never) extends (value: infer Input) => void ? Input : never : never : never, [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "size.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [max: OptionNumber<O, "max">]>, "size.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [min: OptionNumber<O, "min">]>, "size.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<Map<unknown, unknown> | Set<unknown>, number>, Checker<number, [range: OptionRange<O, "range">]>, "size.range", range: OptionRange<O, "range">]>], "size.unsupported-type", [], "hasSize">;
40
+ export declare const hasPattern: (pattern: RegExp, { bail, }?: {
41
+ bail?: boolean;
42
+ }) => Refinement<string, readonly [readonly [(value: string) => string, (value: string, pattern: RegExp) => boolean, "string.pattern", RegExp]], "string.unsupported-type", [], "hasPattern">;
43
+ export declare const startsWith: (prefix: string, { bail, }?: {
44
+ bail?: boolean;
45
+ }) => Refinement<string, readonly [readonly [(value: string) => string, (value: string, prefix: string) => boolean, "string.starts-with", string]], "string.unsupported-type", [], "startsWith">;
46
+ export declare const endsWith: (suffix: string, { bail, }?: {
47
+ bail?: boolean;
48
+ }) => Refinement<string, readonly [readonly [(value: string) => string, (value: string, suffix: string) => boolean, "string.ends-with", string]], "string.unsupported-type", [], "endsWith">;
49
+ export declare const hasValue: <const O extends BoundedAssertionOptions = EmptyOptions>(options?: O) => Refinement<[...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<number, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "number.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<number, number>, Checker<number, [max: OptionNumber<O, "max">]>, "number.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<number, number>, Checker<number, [min: OptionNumber<O, "min">]>, "number.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<number, number>, Checker<number, [range: OptionRange<O, "range">]>, "number.range", range: OptionRange<O, "range">]>] extends infer T ? T extends [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<number, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "number.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<number, number>, Checker<number, [max: OptionNumber<O, "max">]>, "number.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<number, number>, Checker<number, [min: OptionNumber<O, "min">]>, "number.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<number, number>, Checker<number, [range: OptionRange<O, "range">]>, "number.range", range: OptionRange<O, "range">]>] ? T extends readonly [] ? unknown : (T[number] extends infer T_1 ? T_1 extends T[number] ? T_1 extends unknown ? (value: Parameters<T_1[0]>[0]) => void : never : never : never) extends (value: infer Input) => void ? Input : never : never : never, [...IncludeConstraint<OptionNumber<O, "exact">, readonly [ Extractor<number, number>, Checker<number, [exact: OptionNumber<O, "exact">]>, "number.exact", exact: OptionNumber<O, "exact">]>, ...IncludeConstraint<OptionNumber<O, "max">, readonly [ Extractor<number, number>, Checker<number, [max: OptionNumber<O, "max">]>, "number.max", max: OptionNumber<O, "max">]>, ...IncludeConstraint<OptionNumber<O, "min">, readonly [ Extractor<number, number>, Checker<number, [min: OptionNumber<O, "min">]>, "number.min", min: OptionNumber<O, "min">]>, ...IncludeConstraint<OptionRange<O, "range">, readonly [ Extractor<number, number>, Checker<number, [range: OptionRange<O, "range">]>, "number.range", range: OptionRange<O, "range">]>], "number.unsupported-type", [], "hasValue">;
50
+ export declare const multipleOf: <const Step extends number>(step: Step, { bail, }?: {
51
+ bail?: boolean;
52
+ }) => Refinement<number, readonly [readonly [(value: number) => number, (value: number, step: number) => boolean, "number.multiple-of", Step]], "number.unsupported-type", [], "multipleOf">;
53
+ export declare const oneOf: <Actual = unknown>(values: Actual[] | Record<string, Actual>, { equalTo, bail, }?: {
54
+ equalTo?: (a: Actual, b: unknown) => boolean;
55
+ bail?: boolean;
56
+ }) => Guard<Actual, [], "value.one-of", readonly [Actual[]], "oneOf">;