@modulify/validator 0.3.0 → 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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.1
4
+
3
5
  ## 0.3.0
4
6
 
5
7
  ### ⚠ BREAKING CHANGE* **types:** Public type names were simplified
package/dist/assert.cjs CHANGED
@@ -1,8 +1,102 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_assert = require("./assert-BDOtHdLx.cjs");
3
- exports.assert = require_assert.assert;
4
- exports.checkRefinementAssertion = require_assert.checkRefinementAssertion;
5
- exports.createRefinement = require_assert.createRefinement;
6
- exports.isRefinementAssertion = require_assert.isRefinementAssertion;
7
- exports.refine = require_assert.refine;
8
- exports.runRefinementAssertion = require_assert.runRefinementAssertion;
2
+ const require_metadata = require("./metadata.cjs");
3
+ //#region src/assert.ts
4
+ var assertionStageSymbol = Symbol("modulify.validator.assertion.stage");
5
+ var runRefinementSymbol = Symbol("modulify.validator.assertion.runRefinement");
6
+ var checkRefinementSymbol = Symbol("modulify.validator.assertion.checkRefinement");
7
+ var createAssertion = (stage, predicate, meta, constraints = []) => {
8
+ const assertionCode = meta.code ?? meta.name;
9
+ const assertionArgs = meta.args ?? [];
10
+ const violationSubject = {
11
+ kind: "assertion",
12
+ name: meta.name,
13
+ code: assertionCode,
14
+ args: assertionArgs
15
+ };
16
+ const runConstraints = (value) => {
17
+ for (const [extract, check, code, ...args] of constraints) if (!check(extract(value), ...args)) return {
18
+ value,
19
+ violates: {
20
+ kind: "assertion",
21
+ name: meta.name,
22
+ code,
23
+ args
24
+ }
25
+ };
26
+ return null;
27
+ };
28
+ const checkConstraints = (value) => !constraints.length || constraints.every(([extract, check, , ...args]) => check(extract(value), ...args));
29
+ const assertion = ((value) => {
30
+ if (!predicate(value)) return {
31
+ value,
32
+ violates: violationSubject
33
+ };
34
+ return runConstraints(value);
35
+ });
36
+ Object.defineProperties(assertion, {
37
+ name: {
38
+ configurable: true,
39
+ value: meta.name
40
+ },
41
+ bail: {
42
+ enumerable: true,
43
+ value: meta.bail
44
+ },
45
+ constraints: {
46
+ enumerable: true,
47
+ value: constraints
48
+ },
49
+ check: {
50
+ enumerable: true,
51
+ value: (value) => predicate(value) && checkConstraints(value)
52
+ },
53
+ [assertionStageSymbol]: {
54
+ enumerable: false,
55
+ value: stage
56
+ },
57
+ [runRefinementSymbol]: {
58
+ enumerable: false,
59
+ value: (value) => runConstraints(value)
60
+ },
61
+ [checkRefinementSymbol]: {
62
+ enumerable: false,
63
+ value: (value) => checkConstraints(value)
64
+ }
65
+ });
66
+ return /* @__PURE__ */ require_metadata.attachConstraintDescriptor(assertion, () => ({
67
+ kind: "assertion",
68
+ name: meta.name,
69
+ bail: meta.bail,
70
+ code: assertionCode,
71
+ args: assertionArgs,
72
+ constraints: constraints.map(([, , code, ...args]) => ({
73
+ code,
74
+ args
75
+ }))
76
+ }));
77
+ };
78
+ var assert = (predicate, meta, constraints = []) => {
79
+ return createAssertion("guard", predicate, meta, constraints);
80
+ };
81
+ var isRefinementAssertion = (constraint) => {
82
+ return typeof constraint === "function" && constraint[assertionStageSymbol] === "refinement";
83
+ };
84
+ var runRefinementAssertion = (constraint, value) => {
85
+ const runRefinement = constraint[runRefinementSymbol];
86
+ return runRefinement ? runRefinement(value) : constraint(value);
87
+ };
88
+ var checkRefinementAssertion = (constraint, value) => {
89
+ const checkRefinement = constraint[checkRefinementSymbol];
90
+ return checkRefinement ? checkRefinement(value) : constraint.check(value);
91
+ };
92
+ var createRefinement = (meta, constraints = []) => {
93
+ return createAssertion("refinement", ((value) => true), meta, constraints);
94
+ };
95
+ var refine = createRefinement;
96
+ //#endregion
97
+ exports.assert = assert;
98
+ exports.checkRefinementAssertion = checkRefinementAssertion;
99
+ exports.createRefinement = createRefinement;
100
+ exports.isRefinementAssertion = isRefinementAssertion;
101
+ exports.refine = refine;
102
+ exports.runRefinementAssertion = runRefinementAssertion;
package/dist/assert.mjs CHANGED
@@ -1,2 +1,96 @@
1
- import { a as refine, i as isRefinementAssertion, n as checkRefinementAssertion, o as runRefinementAssertion, r as createRefinement, t as assert } from "./assert-CzMg5aO7.mjs";
1
+ import { attachConstraintDescriptor } from "./metadata.mjs";
2
+ //#region src/assert.ts
3
+ var assertionStageSymbol = Symbol("modulify.validator.assertion.stage");
4
+ var runRefinementSymbol = Symbol("modulify.validator.assertion.runRefinement");
5
+ var checkRefinementSymbol = Symbol("modulify.validator.assertion.checkRefinement");
6
+ var createAssertion = (stage, predicate, meta, constraints = []) => {
7
+ const assertionCode = meta.code ?? meta.name;
8
+ const assertionArgs = meta.args ?? [];
9
+ const violationSubject = {
10
+ kind: "assertion",
11
+ name: meta.name,
12
+ code: assertionCode,
13
+ args: assertionArgs
14
+ };
15
+ const runConstraints = (value) => {
16
+ for (const [extract, check, code, ...args] of constraints) if (!check(extract(value), ...args)) return {
17
+ value,
18
+ violates: {
19
+ kind: "assertion",
20
+ name: meta.name,
21
+ code,
22
+ args
23
+ }
24
+ };
25
+ return null;
26
+ };
27
+ const checkConstraints = (value) => !constraints.length || constraints.every(([extract, check, , ...args]) => check(extract(value), ...args));
28
+ const assertion = ((value) => {
29
+ if (!predicate(value)) return {
30
+ value,
31
+ violates: violationSubject
32
+ };
33
+ return runConstraints(value);
34
+ });
35
+ Object.defineProperties(assertion, {
36
+ name: {
37
+ configurable: true,
38
+ value: meta.name
39
+ },
40
+ bail: {
41
+ enumerable: true,
42
+ value: meta.bail
43
+ },
44
+ constraints: {
45
+ enumerable: true,
46
+ value: constraints
47
+ },
48
+ check: {
49
+ enumerable: true,
50
+ value: (value) => predicate(value) && checkConstraints(value)
51
+ },
52
+ [assertionStageSymbol]: {
53
+ enumerable: false,
54
+ value: stage
55
+ },
56
+ [runRefinementSymbol]: {
57
+ enumerable: false,
58
+ value: (value) => runConstraints(value)
59
+ },
60
+ [checkRefinementSymbol]: {
61
+ enumerable: false,
62
+ value: (value) => checkConstraints(value)
63
+ }
64
+ });
65
+ return /* @__PURE__ */ attachConstraintDescriptor(assertion, () => ({
66
+ kind: "assertion",
67
+ name: meta.name,
68
+ bail: meta.bail,
69
+ code: assertionCode,
70
+ args: assertionArgs,
71
+ constraints: constraints.map(([, , code, ...args]) => ({
72
+ code,
73
+ args
74
+ }))
75
+ }));
76
+ };
77
+ var assert = (predicate, meta, constraints = []) => {
78
+ return createAssertion("guard", predicate, meta, constraints);
79
+ };
80
+ var isRefinementAssertion = (constraint) => {
81
+ return typeof constraint === "function" && constraint[assertionStageSymbol] === "refinement";
82
+ };
83
+ var runRefinementAssertion = (constraint, value) => {
84
+ const runRefinement = constraint[runRefinementSymbol];
85
+ return runRefinement ? runRefinement(value) : constraint(value);
86
+ };
87
+ var checkRefinementAssertion = (constraint, value) => {
88
+ const checkRefinement = constraint[checkRefinementSymbol];
89
+ return checkRefinement ? checkRefinement(value) : constraint.check(value);
90
+ };
91
+ var createRefinement = (meta, constraints = []) => {
92
+ return createAssertion("refinement", ((value) => true), meta, constraints);
93
+ };
94
+ var refine = createRefinement;
95
+ //#endregion
2
96
  export { assert, checkRefinementAssertion, createRefinement, isRefinementAssertion, refine, runRefinementAssertion };
@@ -1,35 +1,312 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_assert = require("./assert-BDOtHdLx.cjs");
3
- const require_assertions = require("./assertions-nfOKqcjs.cjs");
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;
35
+ };
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;
64
+ };
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;
93
+ };
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);
260
+ };
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
+ });
279
+ };
280
+ //#endregion
4
281
  exports.assert = require_assert.assert;
5
- exports.endsWith = require_assertions.endsWith;
6
- exports.hasLength = require_assertions.hasLength;
7
- exports.hasPattern = require_assertions.hasPattern;
8
- exports.hasSize = require_assertions.hasSize;
9
- exports.hasValue = require_assertions.hasValue;
10
- exports.isBigInt = require_assertions.isBigInt;
11
- exports.isBlob = require_assertions.isBlob;
12
- exports.isBoolean = require_assertions.isBoolean;
13
- exports.isDate = require_assertions.isDate;
14
- exports.isDefined = require_assertions.isDefined;
15
- exports.isEmail = require_assertions.isEmail;
16
- exports.isError = require_assertions.isError;
17
- exports.isFile = require_assertions.isFile;
18
- exports.isFiniteNumber = require_assertions.isFiniteNumber;
19
- exports.isFunction = require_assertions.isFunction;
20
- exports.isInteger = require_assertions.isInteger;
21
- exports.isMap = require_assertions.isMap;
22
- exports.isNaN = require_assertions.isNaN;
23
- exports.isNull = require_assertions.isNull;
24
- exports.isNumber = require_assertions.isNumber;
25
- exports.isPromiseLike = require_assertions.isPromiseLike;
26
- exports.isRegExp = require_assertions.isRegExp;
27
- exports.isSafeInteger = require_assertions.isSafeInteger;
28
- exports.isSet = require_assertions.isSet;
29
- exports.isString = require_assertions.isString;
30
- exports.isSymbol = require_assertions.isSymbol;
31
- exports.isValidDate = require_assertions.isValidDate;
32
- exports.multipleOf = require_assertions.multipleOf;
33
- exports.oneOf = require_assertions.oneOf;
282
+ exports.endsWith = endsWith;
283
+ exports.hasLength = hasLength;
284
+ exports.hasPattern = hasPattern;
285
+ exports.hasSize = hasSize;
286
+ exports.hasValue = hasValue;
287
+ exports.isBigInt = isBigInt;
288
+ exports.isBlob = isBlob;
289
+ exports.isBoolean = isBoolean;
290
+ exports.isDate = isDate;
291
+ exports.isDefined = isDefined;
292
+ exports.isEmail = isEmail;
293
+ exports.isError = isError;
294
+ exports.isFile = isFile;
295
+ exports.isFiniteNumber = isFiniteNumber;
296
+ exports.isFunction = isFunction;
297
+ exports.isInteger = isInteger;
298
+ exports.isMap = isMap;
299
+ exports.isNaN = isNaN;
300
+ exports.isNull = isNull;
301
+ exports.isNumber = isNumber;
302
+ exports.isPromiseLike = isPromiseLike;
303
+ exports.isRegExp = isRegExp;
304
+ exports.isSafeInteger = isSafeInteger;
305
+ exports.isSet = isSet;
306
+ exports.isString = isString;
307
+ exports.isSymbol = isSymbol;
308
+ exports.isValidDate = isValidDate;
309
+ exports.multipleOf = multipleOf;
310
+ exports.oneOf = oneOf;
34
311
  exports.refine = require_assert.refine;
35
- exports.startsWith = require_assertions.startsWith;
312
+ exports.startsWith = startsWith;