@stndrds/schema 1.0.0-alpha.293 → 1.0.0-alpha.295

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 (127) hide show
  1. package/LICENSE +111 -0
  2. package/README.md +7 -0
  3. package/dist/capabilities.js +2 -77
  4. package/dist/capabilities.mjs +2 -70
  5. package/dist/chunk-23KPS33D.js +2 -0
  6. package/dist/chunk-257HAQVV.mjs +6 -0
  7. package/dist/chunk-47KVYDKG.js +2 -0
  8. package/dist/chunk-4OTKOCGB.mjs +2 -0
  9. package/dist/chunk-4VCADZK4.mjs +2 -0
  10. package/dist/chunk-7SDHYJX4.mjs +2 -0
  11. package/dist/chunk-DPD6ZWL2.js +2 -0
  12. package/dist/chunk-EREGHAGI.js +2 -0
  13. package/dist/chunk-GKXTXH4Y.mjs +2 -0
  14. package/dist/chunk-GXSNLYRR.js +2 -0
  15. package/dist/chunk-HTY3NECU.mjs +2 -0
  16. package/dist/chunk-JFSQ24XR.js +2 -0
  17. package/dist/chunk-JOJ4LF2I.js +2 -0
  18. package/dist/chunk-JOS2XMXY.js +2 -0
  19. package/dist/chunk-JVLH3DVZ.js +2 -0
  20. package/dist/chunk-KG2ADZG6.mjs +2 -0
  21. package/dist/chunk-KLR22JMC.js +2 -0
  22. package/dist/chunk-KSPJP74K.mjs +2 -0
  23. package/dist/chunk-KYPEBOPW.mjs +2 -0
  24. package/dist/chunk-LB4TNMZU.mjs +2 -0
  25. package/dist/chunk-LSCBR4VS.js +2 -0
  26. package/dist/chunk-LWSOKXPF.js +2 -0
  27. package/dist/chunk-O34B5KOW.mjs +2 -0
  28. package/dist/chunk-OCAMDRO3.mjs +4 -0
  29. package/dist/chunk-PFO7NWQW.mjs +2 -0
  30. package/dist/chunk-Q7TQCRSD.mjs +2 -0
  31. package/dist/chunk-SLYRQ72J.js +2 -0
  32. package/dist/chunk-TKABCIEO.js +12 -0
  33. package/dist/chunk-TP63U7PL.js +4 -0
  34. package/dist/chunk-UXISKZ5Y.js +2 -0
  35. package/dist/chunk-VKFLXFPP.mjs +2 -0
  36. package/dist/chunk-WMQRTFOP.mjs +2 -0
  37. package/dist/chunk-XHEBV2HE.js +2 -0
  38. package/dist/chunk-XMQV2WFY.mjs +2 -0
  39. package/dist/chunk-XPF6CGAW.js +6 -0
  40. package/dist/chunk-XRDP2Y4J.mjs +2 -0
  41. package/dist/chunk-XUAP7KWK.js +2 -0
  42. package/dist/chunk-XXTKNIBK.js +2 -0
  43. package/dist/chunk-YBDR5ZMH.mjs +12 -0
  44. package/dist/chunk-YIXNAWH6.mjs +2 -0
  45. package/dist/exceptions.d.mts +9 -0
  46. package/dist/exceptions.d.ts +9 -0
  47. package/dist/exceptions.js +1 -158
  48. package/dist/exceptions.mjs +1 -1
  49. package/dist/index.d.mts +423 -116
  50. package/dist/index.d.ts +423 -116
  51. package/dist/index.js +30 -10513
  52. package/dist/index.mjs +30 -9626
  53. package/dist/utils.js +1 -31
  54. package/dist/utils.mjs +1 -2
  55. package/dist/validation/all.js +1 -131
  56. package/dist/validation/all.mjs +1 -18
  57. package/dist/validation/complex/currency.js +1 -11
  58. package/dist/validation/complex/currency.mjs +1 -2
  59. package/dist/validation/complex/location.js +1 -11
  60. package/dist/validation/complex/location.mjs +1 -2
  61. package/dist/validation/complex/phone.js +1 -11
  62. package/dist/validation/complex/phone.mjs +1 -2
  63. package/dist/validation/complex/relation.js +1 -19
  64. package/dist/validation/complex/relation.mjs +1 -2
  65. package/dist/validation/complex/richtext.js +1 -11
  66. package/dist/validation/complex/richtext.mjs +1 -2
  67. package/dist/validation/complex/select.js +1 -19
  68. package/dist/validation/complex/select.mjs +1 -2
  69. package/dist/validation/complex/user.js +1 -11
  70. package/dist/validation/complex/user.mjs +1 -2
  71. package/dist/validation/computed/formula.js +1 -11
  72. package/dist/validation/computed/formula.mjs +1 -2
  73. package/dist/validation/computed/rollup.js +1 -11
  74. package/dist/validation/computed/rollup.mjs +1 -2
  75. package/dist/validation/config/index.js +1 -52
  76. package/dist/validation/config/index.mjs +1 -7
  77. package/dist/validation/core/index.js +1 -14
  78. package/dist/validation/core/index.mjs +1 -1
  79. package/dist/validation/object/index.js +1 -69
  80. package/dist/validation/object/index.mjs +1 -16
  81. package/dist/validation/primitives/checkbox.js +1 -11
  82. package/dist/validation/primitives/checkbox.mjs +1 -2
  83. package/dist/validation/primitives/date.js +1 -11
  84. package/dist/validation/primitives/date.mjs +1 -2
  85. package/dist/validation/primitives/number.js +1 -11
  86. package/dist/validation/primitives/number.mjs +1 -2
  87. package/dist/validation/primitives/text.js +1 -11
  88. package/dist/validation/primitives/text.mjs +1 -2
  89. package/package.json +7 -5
  90. package/dist/chunk-5N7OSHVX.js +0 -657
  91. package/dist/chunk-5WATIVCA.js +0 -10
  92. package/dist/chunk-ACKMC6FL.js +0 -17
  93. package/dist/chunk-APRL56F4.mjs +0 -226
  94. package/dist/chunk-AYVHMVKQ.mjs +0 -15
  95. package/dist/chunk-C32UUQ6D.js +0 -241
  96. package/dist/chunk-E6JUYGJX.js +0 -22
  97. package/dist/chunk-EEH4XQ7W.js +0 -61
  98. package/dist/chunk-EW5XR2X3.js +0 -12
  99. package/dist/chunk-GO6LQADH.mjs +0 -57
  100. package/dist/chunk-GRUSTQK3.mjs +0 -641
  101. package/dist/chunk-HRQEZUAA.mjs +0 -29
  102. package/dist/chunk-HTSTPTNZ.js +0 -10
  103. package/dist/chunk-KNGWHQLR.js +0 -16
  104. package/dist/chunk-LV3FEUKU.mjs +0 -14
  105. package/dist/chunk-NS63SPNN.mjs +0 -8
  106. package/dist/chunk-O73ROMWQ.mjs +0 -85
  107. package/dist/chunk-OASIPLEB.js +0 -1504
  108. package/dist/chunk-OSSGN43B.mjs +0 -8
  109. package/dist/chunk-P4VCAPJT.js +0 -81
  110. package/dist/chunk-Q44QKLN4.mjs +0 -43
  111. package/dist/chunk-Q4SZAMJT.js +0 -72
  112. package/dist/chunk-QVLQPW3O.mjs +0 -10
  113. package/dist/chunk-QWKLQRBX.js +0 -35
  114. package/dist/chunk-R5LAJCBU.mjs +0 -67
  115. package/dist/chunk-SI34M4IC.js +0 -45
  116. package/dist/chunk-UANQJ2GH.mjs +0 -25
  117. package/dist/chunk-ULM2BA5A.mjs +0 -1432
  118. package/dist/chunk-UXAHLSWC.mjs +0 -8
  119. package/dist/chunk-V2UA2D4E.js +0 -10
  120. package/dist/chunk-VGGGLTYJ.mjs +0 -74
  121. package/dist/chunk-Y3UPKP2B.js +0 -605
  122. package/dist/chunk-YIP5FJ5H.js +0 -27
  123. package/dist/chunk-YKWSHBT5.js +0 -32
  124. package/dist/chunk-YUFTHPOE.mjs +0 -20
  125. package/dist/chunk-Z5OPSBMQ.mjs +0 -566
  126. package/dist/chunk-ZDQ5AP26.mjs +0 -31
  127. package/dist/chunk-ZPFOKBIN.js +0 -89
@@ -1,8 +0,0 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
- import { z } from 'zod';
3
-
4
- function createCheckboxValidator(_attr, _messages = DEFAULT_VALIDATION_MESSAGES) {
5
- return z.boolean();
6
- }
7
-
8
- export { createCheckboxValidator };
@@ -1,81 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkY3UPKP2B_js = require('./chunk-Y3UPKP2B.js');
4
-
5
- // src/utils/canonical-json.ts
6
- function canonicalStringify(value) {
7
- const seen = /* @__PURE__ */ new Set();
8
- function encode(v) {
9
- if (v === null) return "null";
10
- switch (typeof v) {
11
- case "string":
12
- case "number":
13
- case "boolean":
14
- return JSON.stringify(v);
15
- case "undefined":
16
- return void 0;
17
- case "object":
18
- break;
19
- default:
20
- throw new chunkY3UPKP2B_js.ValidationError(`Cannot canonicalize value of type ${typeof v}`, []);
21
- }
22
- const obj = v;
23
- if (seen.has(obj)) throw new chunkY3UPKP2B_js.ValidationError("Cannot canonicalize circular structure", []);
24
- seen.add(obj);
25
- try {
26
- if (Array.isArray(obj)) return `[${obj.map((e) => encode(e) ?? "null").join(",")}]`;
27
- const entries = Object.entries(obj).map(([k, val]) => [k, encode(val)]).filter((pair) => pair[1] !== void 0).sort(([a], [b]) => a < b ? -1 : 1);
28
- return `{${entries.map(([k, val]) => `${JSON.stringify(k)}:${val}`).join(",")}}`;
29
- } finally {
30
- seen.delete(obj);
31
- }
32
- }
33
- return encode(value) ?? "null";
34
- }
35
-
36
- // src/utils.ts
37
- function asTenantId(id) {
38
- return id;
39
- }
40
- function asUserId(id) {
41
- return id;
42
- }
43
- function generateId() {
44
- if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
45
- return crypto.randomUUID();
46
- }
47
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
48
- const r = Math.random() * 16 | 0;
49
- const v = c === "x" ? r : r & 3 | 8;
50
- return v.toString(16);
51
- });
52
- }
53
- function indexBy(items, keyFn) {
54
- return new Map(items.map((item) => [keyFn(item), item]));
55
- }
56
- function deepEqual(a, b) {
57
- if (a === b) return true;
58
- if (a == null || b == null) return false;
59
- if (typeof a !== typeof b) return false;
60
- if (Array.isArray(a)) {
61
- if (!Array.isArray(b)) return false;
62
- if (a.length !== b.length) return false;
63
- return a.every((item, index) => deepEqual(item, b[index]));
64
- }
65
- if (typeof a === "object" && typeof b === "object") {
66
- const aObj = a;
67
- const bObj = b;
68
- const aKeys = Object.keys(aObj);
69
- const bKeys = Object.keys(bObj);
70
- if (aKeys.length !== bKeys.length) return false;
71
- return aKeys.every((key) => key in bObj && deepEqual(aObj[key], bObj[key]));
72
- }
73
- return false;
74
- }
75
-
76
- exports.asTenantId = asTenantId;
77
- exports.asUserId = asUserId;
78
- exports.canonicalStringify = canonicalStringify;
79
- exports.deepEqual = deepEqual;
80
- exports.generateId = generateId;
81
- exports.indexBy = indexBy;
@@ -1,43 +0,0 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
- import { z } from 'zod';
3
-
4
- function resolveBound(bound) {
5
- if (!bound) return null;
6
- const raw = bound === "today" ? (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) : bound;
7
- const parsed = new Date(raw);
8
- return Number.isNaN(parsed.getTime()) ? null : parsed;
9
- }
10
- function createDateValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
11
- const message = messages.invalidDate(attr);
12
- const min = resolveBound(attr.minDate);
13
- const max = resolveBound(attr.maxDate);
14
- const bound = z.any().superRefine((raw, ctx) => {
15
- const coerced = new Date(raw);
16
- if (Number.isNaN(coerced.getTime())) {
17
- ctx.addIssue({ code: "custom", message });
18
- return;
19
- }
20
- if (min && coerced < min) {
21
- ctx.addIssue({ code: "custom", message });
22
- }
23
- if (max && coerced > max) {
24
- ctx.addIssue({ code: "custom", message });
25
- }
26
- });
27
- if (!attr.endDate) return bound;
28
- const range = z.object({ start: bound, end: bound.nullable() }).superRefine((value, ctx) => {
29
- if (value.end === null) return;
30
- const start = new Date(value.start);
31
- const end = new Date(value.end);
32
- const bothValid = !(Number.isNaN(start.getTime()) || Number.isNaN(end.getTime()));
33
- if (bothValid && end < start) {
34
- ctx.addIssue({ code: "custom", message, path: ["end"] });
35
- }
36
- });
37
- return z.preprocess(
38
- (value) => typeof value === "string" ? { start: value, end: null } : value,
39
- range
40
- );
41
- }
42
-
43
- export { createDateValidator };
@@ -1,72 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
- var constants = require('@stndrds/constants');
5
- var zod = require('zod');
6
- var libphonenumberJs = require('libphonenumber-js');
7
-
8
- function digitsOnly(input) {
9
- return input.replace(/\D/g, "");
10
- }
11
- function normalizeCountrylessPhoneNumber(phoneNumber) {
12
- return digitsOnly(phoneNumber);
13
- }
14
- function getIso2(iso3) {
15
- const country = constants.getCountryByIso3(iso3);
16
- return country?.iso2;
17
- }
18
- function normalizePhoneNumber(phoneNumber, countryIso3) {
19
- if (!phoneNumber) return "";
20
- const iso2 = getIso2(countryIso3);
21
- if (!iso2) {
22
- return digitsOnly(phoneNumber);
23
- }
24
- const parsed = libphonenumberJs.parsePhoneNumberFromString(phoneNumber, iso2);
25
- if (parsed) {
26
- return parsed.nationalNumber;
27
- }
28
- const country = constants.getCountryByIso3(countryIso3);
29
- const digits = digitsOnly(phoneNumber);
30
- if (country) {
31
- const callingCode = country.phoneCode.replace("+", "");
32
- const withoutCC = digits.startsWith(callingCode) ? digits.slice(callingCode.length) : digits;
33
- return constants.stripTrunkPrefix(withoutCC, country.phoneTrunkPrefix ?? "");
34
- }
35
- return digits;
36
- }
37
- function formatPhoneForDisplay(phone) {
38
- if (!phone.phoneNumber) return "";
39
- const iso2 = getIso2(phone.countryCode);
40
- const country = constants.getCountryByIso3(phone.countryCode);
41
- const dial = country?.phoneCode ?? "";
42
- if (!iso2) {
43
- return `${dial} ${phone.phoneNumber}`.trim();
44
- }
45
- const e164 = `${dial}${digitsOnly(phone.phoneNumber)}`;
46
- const parsed = libphonenumberJs.parsePhoneNumberFromString(e164);
47
- if (parsed) {
48
- return parsed.formatInternational();
49
- }
50
- return `${dial} ${phone.phoneNumber}`.trim();
51
- }
52
-
53
- // src/validation/complex/phone.ts
54
- function createPhoneValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
55
- return zod.z.object(
56
- {
57
- countryCode: zod.z.string().length(3),
58
- phoneNumber: zod.z.string().min(1)
59
- },
60
- { message: messages.invalidPhone(attr) }
61
- ).refine((val) => constants.isValidIso3(val.countryCode), {
62
- message: "Invalid country code"
63
- }).transform((val) => ({
64
- countryCode: val.countryCode,
65
- phoneNumber: normalizePhoneNumber(val.phoneNumber, val.countryCode)
66
- }));
67
- }
68
-
69
- exports.createPhoneValidator = createPhoneValidator;
70
- exports.formatPhoneForDisplay = formatPhoneForDisplay;
71
- exports.normalizeCountrylessPhoneNumber = normalizeCountrylessPhoneNumber;
72
- exports.normalizePhoneNumber = normalizePhoneNumber;
@@ -1,10 +0,0 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
- import { z } from 'zod';
3
-
4
- function createRichtextValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
5
- return z.string({
6
- message: messages.invalidRichtext(attr)
7
- });
8
- }
9
-
10
- export { createRichtextValidator };
@@ -1,35 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
- var zod = require('zod');
5
-
6
- function createSelectValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
7
- const validValues = attr.options.map((opt) => opt.value);
8
- if (validValues.length === 0) return zod.z.never();
9
- const validLabels = attr.options.map((opt) => opt.label);
10
- return zod.z.enum(validValues, {
11
- message: messages.invalidOption(attr, validLabels)
12
- });
13
- }
14
- function createMultiselectValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
15
- const validValues = attr.options.map((opt) => opt.value);
16
- if (validValues.length === 0) return zod.z.never();
17
- const validLabels = attr.options.map((opt) => opt.label);
18
- return zod.z.array(
19
- zod.z.enum(validValues, {
20
- message: messages.invalidOption(attr, validLabels)
21
- })
22
- );
23
- }
24
- function createStatusValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
25
- const validValues = attr.options.map((opt) => opt.value);
26
- if (validValues.length === 0) return zod.z.never();
27
- const validLabels = attr.options.map((opt) => opt.label);
28
- return zod.z.enum(validValues, {
29
- message: messages.invalidOption(attr, validLabels)
30
- });
31
- }
32
-
33
- exports.createMultiselectValidator = createMultiselectValidator;
34
- exports.createSelectValidator = createSelectValidator;
35
- exports.createStatusValidator = createStatusValidator;
@@ -1,67 +0,0 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
- import { getCountryByIso3, stripTrunkPrefix, isValidIso3 } from '@stndrds/constants';
3
- import { z } from 'zod';
4
- import { parsePhoneNumberFromString } from 'libphonenumber-js';
5
-
6
- function digitsOnly(input) {
7
- return input.replace(/\D/g, "");
8
- }
9
- function normalizeCountrylessPhoneNumber(phoneNumber) {
10
- return digitsOnly(phoneNumber);
11
- }
12
- function getIso2(iso3) {
13
- const country = getCountryByIso3(iso3);
14
- return country?.iso2;
15
- }
16
- function normalizePhoneNumber(phoneNumber, countryIso3) {
17
- if (!phoneNumber) return "";
18
- const iso2 = getIso2(countryIso3);
19
- if (!iso2) {
20
- return digitsOnly(phoneNumber);
21
- }
22
- const parsed = parsePhoneNumberFromString(phoneNumber, iso2);
23
- if (parsed) {
24
- return parsed.nationalNumber;
25
- }
26
- const country = getCountryByIso3(countryIso3);
27
- const digits = digitsOnly(phoneNumber);
28
- if (country) {
29
- const callingCode = country.phoneCode.replace("+", "");
30
- const withoutCC = digits.startsWith(callingCode) ? digits.slice(callingCode.length) : digits;
31
- return stripTrunkPrefix(withoutCC, country.phoneTrunkPrefix ?? "");
32
- }
33
- return digits;
34
- }
35
- function formatPhoneForDisplay(phone) {
36
- if (!phone.phoneNumber) return "";
37
- const iso2 = getIso2(phone.countryCode);
38
- const country = getCountryByIso3(phone.countryCode);
39
- const dial = country?.phoneCode ?? "";
40
- if (!iso2) {
41
- return `${dial} ${phone.phoneNumber}`.trim();
42
- }
43
- const e164 = `${dial}${digitsOnly(phone.phoneNumber)}`;
44
- const parsed = parsePhoneNumberFromString(e164);
45
- if (parsed) {
46
- return parsed.formatInternational();
47
- }
48
- return `${dial} ${phone.phoneNumber}`.trim();
49
- }
50
-
51
- // src/validation/complex/phone.ts
52
- function createPhoneValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
53
- return z.object(
54
- {
55
- countryCode: z.string().length(3),
56
- phoneNumber: z.string().min(1)
57
- },
58
- { message: messages.invalidPhone(attr) }
59
- ).refine((val) => isValidIso3(val.countryCode), {
60
- message: "Invalid country code"
61
- }).transform((val) => ({
62
- countryCode: val.countryCode,
63
- phoneNumber: normalizePhoneNumber(val.phoneNumber, val.countryCode)
64
- }));
65
- }
66
-
67
- export { createPhoneValidator, formatPhoneForDisplay, normalizeCountrylessPhoneNumber, normalizePhoneNumber };
@@ -1,45 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
- var zod = require('zod');
5
-
6
- function resolveBound(bound) {
7
- if (!bound) return null;
8
- const raw = bound === "today" ? (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) : bound;
9
- const parsed = new Date(raw);
10
- return Number.isNaN(parsed.getTime()) ? null : parsed;
11
- }
12
- function createDateValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
13
- const message = messages.invalidDate(attr);
14
- const min = resolveBound(attr.minDate);
15
- const max = resolveBound(attr.maxDate);
16
- const bound = zod.z.any().superRefine((raw, ctx) => {
17
- const coerced = new Date(raw);
18
- if (Number.isNaN(coerced.getTime())) {
19
- ctx.addIssue({ code: "custom", message });
20
- return;
21
- }
22
- if (min && coerced < min) {
23
- ctx.addIssue({ code: "custom", message });
24
- }
25
- if (max && coerced > max) {
26
- ctx.addIssue({ code: "custom", message });
27
- }
28
- });
29
- if (!attr.endDate) return bound;
30
- const range = zod.z.object({ start: bound, end: bound.nullable() }).superRefine((value, ctx) => {
31
- if (value.end === null) return;
32
- const start = new Date(value.start);
33
- const end = new Date(value.end);
34
- const bothValid = !(Number.isNaN(start.getTime()) || Number.isNaN(end.getTime()));
35
- if (bothValid && end < start) {
36
- ctx.addIssue({ code: "custom", message, path: ["end"] });
37
- }
38
- });
39
- return zod.z.preprocess(
40
- (value) => typeof value === "string" ? { start: value, end: null } : value,
41
- range
42
- );
43
- }
44
-
45
- exports.createDateValidator = createDateValidator;
@@ -1,25 +0,0 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
- import { z } from 'zod';
3
-
4
- function createNumberValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
5
- let schema = z.number();
6
- if (attr.min !== void 0) {
7
- schema = schema.min(attr.min, messages.minValue(attr, attr.min));
8
- }
9
- if (attr.max !== void 0) {
10
- schema = schema.max(attr.max, messages.maxValue(attr, attr.max));
11
- }
12
- if (attr.renderAs === "rating") {
13
- schema = schema.min(attr.min ?? 0);
14
- schema = schema.max(attr.max ?? 5);
15
- }
16
- if (attr.unit === "percentage") {
17
- schema = schema.min(attr.min ?? 0).max(attr.max ?? 100);
18
- }
19
- if (attr.unit === "integer") {
20
- schema = schema.int(messages.mustBeInteger(attr));
21
- }
22
- return schema;
23
- }
24
-
25
- export { createNumberValidator };