@stndrds/schema 1.0.0-alpha.100 → 1.0.0-alpha.103
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/dist/{attributes-CH89Z_J-.d.mts → attributes-D7yQuTJK.d.mts} +1 -11
- package/dist/{attributes-dw-jLtYS.d.ts → attributes-DcbQC-4b.d.ts} +1 -11
- package/dist/chunk-3JINFUN3.js +81 -0
- package/dist/{chunk-BZTLI773.mjs → chunk-4KRLCWJM.mjs} +1 -1
- package/dist/{chunk-ERG77ADK.mjs → chunk-4TC27SMF.mjs} +1 -1
- package/dist/{chunk-OO2LJ6GP.js → chunk-56QI6UTK.js} +4 -4
- package/dist/{chunk-P4NGPF5L.mjs → chunk-5XL3JP73.mjs} +3 -19
- package/dist/{chunk-ZJNX6UXB.mjs → chunk-7HFZ7MVR.mjs} +1 -1
- package/dist/{chunk-6IFD5732.js → chunk-ACQ3TUFK.js} +2 -2
- package/dist/{chunk-PGHTIMRD.mjs → chunk-AGOMDWP5.mjs} +28 -19
- package/dist/{chunk-FKPYFM6G.mjs → chunk-AYCSVKI2.mjs} +1 -1
- package/dist/{chunk-ALV6GETG.mjs → chunk-BLXQGQLK.mjs} +1 -1
- package/dist/{chunk-STKN6A5M.js → chunk-D7WFIGXW.js} +2 -2
- package/dist/{chunk-E6XO2STS.js → chunk-FRCDMQER.js} +0 -14
- package/dist/{chunk-QPDXDX7A.js → chunk-GCRHSPZN.js} +2 -2
- package/dist/{chunk-TV4G2KMD.mjs → chunk-IRTRJH37.mjs} +1 -1
- package/dist/{chunk-3RFFA4EV.mjs → chunk-ITTQ4FGR.mjs} +1 -1
- package/dist/{chunk-FKETRWAF.js → chunk-J5HRK3WD.js} +2 -2
- package/dist/{chunk-CE25ADK5.js → chunk-J7TJ2DK2.js} +51 -42
- package/dist/{chunk-6MXQAQBB.mjs → chunk-KNYZH2WD.mjs} +1 -1
- package/dist/chunk-KWVCGQ7N.mjs +78 -0
- package/dist/chunk-MAKSIK3P.js +10 -0
- package/dist/{chunk-H3VBSMVW.js → chunk-N7T66JVY.js} +2 -21
- package/dist/{chunk-UPEQEX2D.js → chunk-OAQWRMTP.js} +2 -2
- package/dist/{chunk-VC4E3OSZ.mjs → chunk-OLJLCVNY.mjs} +1 -1
- package/dist/{chunk-ANP6HGMJ.js → chunk-P2BE2A2G.js} +4 -4
- package/dist/{chunk-HJNLL34O.js → chunk-QWZHR2OO.js} +2 -2
- package/dist/{chunk-XAORXFAX.mjs → chunk-QY6QFRRV.mjs} +1 -12
- package/dist/{chunk-XPFWKISJ.mjs → chunk-R4CJHCC4.mjs} +1 -1
- package/dist/{chunk-5CBTJS7J.js → chunk-RJ4LOX7P.js} +2 -2
- package/dist/{chunk-C7KW4NAD.js → chunk-ROAZLZA2.js} +2 -2
- package/dist/{chunk-4IVCBFJA.mjs → chunk-RUYUFXNW.mjs} +1 -1
- package/dist/{chunk-PZT3CIHD.mjs → chunk-SS2NR6DH.mjs} +2 -18
- package/dist/{chunk-5SQEKHPW.js → chunk-T225DB55.js} +7 -52
- package/dist/{chunk-ATA4XHB4.js → chunk-TKN73433.js} +2 -2
- package/dist/{chunk-2LUHLHLE.mjs → chunk-TMYBEXBT.mjs} +1 -1
- package/dist/{chunk-JEDANRCG.mjs → chunk-UQVW4KPP.mjs} +7 -51
- package/dist/{chunk-IMEPIVTR.js → chunk-V6DE3MXC.js} +1 -38
- package/dist/{chunk-KC2FFNL4.js → chunk-VXOTYFEW.js} +2 -2
- package/dist/{chunk-RDGBQM3N.mjs → chunk-WV4V64D5.mjs} +1 -1
- package/dist/helpers-DD6JzYfI.d.mts +860 -0
- package/dist/helpers-kMS5R7KX.d.ts +860 -0
- package/dist/index.d.mts +718 -2804
- package/dist/index.d.ts +718 -2804
- package/dist/index.js +2055 -3922
- package/dist/index.mjs +2467 -3985
- package/dist/{types-Ms3HtAmo.d.mts → types-BAPgWlpX.d.mts} +1 -1
- package/dist/{types-D-0QbsA9.d.ts → types-mZPUEZl0.d.ts} +1 -1
- package/dist/utils.d.mts +1 -55
- package/dist/utils.d.ts +1 -55
- package/dist/utils.js +6 -18
- package/dist/utils.mjs +1 -1
- package/dist/validation/all.d.mts +5 -20
- package/dist/validation/all.d.ts +5 -20
- package/dist/validation/all.js +27 -236
- package/dist/validation/all.mjs +19 -20
- package/dist/validation/complex/currency.d.mts +2 -2
- package/dist/validation/complex/currency.d.ts +2 -2
- package/dist/validation/complex/currency.js +3 -4
- package/dist/validation/complex/currency.mjs +2 -3
- package/dist/validation/complex/file.d.mts +2 -2
- package/dist/validation/complex/file.d.ts +2 -2
- package/dist/validation/complex/file.js +3 -4
- package/dist/validation/complex/file.mjs +2 -3
- package/dist/validation/complex/location.d.mts +2 -2
- package/dist/validation/complex/location.d.ts +2 -2
- package/dist/validation/complex/location.js +3 -4
- package/dist/validation/complex/location.mjs +2 -3
- package/dist/validation/complex/phone.d.mts +2 -2
- package/dist/validation/complex/phone.d.ts +2 -2
- package/dist/validation/complex/phone.js +3 -4
- package/dist/validation/complex/phone.mjs +2 -3
- package/dist/validation/complex/relation.d.mts +2 -2
- package/dist/validation/complex/relation.d.ts +2 -2
- package/dist/validation/complex/relation.js +5 -6
- package/dist/validation/complex/relation.mjs +2 -3
- package/dist/validation/complex/richtext.d.mts +2 -2
- package/dist/validation/complex/richtext.d.ts +2 -2
- package/dist/validation/complex/richtext.js +3 -4
- package/dist/validation/complex/richtext.mjs +2 -3
- package/dist/validation/complex/select.d.mts +2 -2
- package/dist/validation/complex/select.d.ts +2 -2
- package/dist/validation/complex/select.js +5 -6
- package/dist/validation/complex/select.mjs +2 -3
- package/dist/validation/complex/user.d.mts +2 -2
- package/dist/validation/complex/user.d.ts +2 -2
- package/dist/validation/complex/user.js +3 -4
- package/dist/validation/complex/user.mjs +2 -3
- package/dist/validation/computed/formula.d.mts +2 -2
- package/dist/validation/computed/formula.d.ts +2 -2
- package/dist/validation/computed/formula.js +3 -4
- package/dist/validation/computed/formula.mjs +2 -3
- package/dist/validation/computed/rollup.d.mts +2 -2
- package/dist/validation/computed/rollup.d.ts +2 -2
- package/dist/validation/computed/rollup.js +3 -4
- package/dist/validation/computed/rollup.mjs +2 -3
- package/dist/validation/config/index.d.mts +2 -403
- package/dist/validation/config/index.d.ts +2 -403
- package/dist/validation/config/index.js +4 -89
- package/dist/validation/config/index.mjs +1 -2
- package/dist/validation/core/index.d.mts +4 -53
- package/dist/validation/core/index.d.ts +4 -53
- package/dist/validation/core/index.js +3 -12
- package/dist/validation/core/index.mjs +1 -2
- package/dist/validation/object/index.d.mts +29 -4
- package/dist/validation/object/index.d.ts +29 -4
- package/dist/validation/object/index.js +29 -30
- package/dist/validation/object/index.mjs +17 -18
- package/dist/validation/primitives/checkbox.d.mts +2 -2
- package/dist/validation/primitives/checkbox.d.ts +2 -2
- package/dist/validation/primitives/checkbox.js +3 -4
- package/dist/validation/primitives/checkbox.mjs +2 -3
- package/dist/validation/primitives/date.d.mts +2 -2
- package/dist/validation/primitives/date.d.ts +2 -2
- package/dist/validation/primitives/date.js +3 -4
- package/dist/validation/primitives/date.mjs +2 -3
- package/dist/validation/primitives/number.d.mts +2 -2
- package/dist/validation/primitives/number.d.ts +2 -2
- package/dist/validation/primitives/number.js +3 -4
- package/dist/validation/primitives/number.mjs +2 -3
- package/dist/validation/primitives/rating.d.mts +2 -2
- package/dist/validation/primitives/rating.d.ts +2 -2
- package/dist/validation/primitives/rating.js +3 -4
- package/dist/validation/primitives/rating.mjs +2 -3
- package/dist/validation/primitives/text.d.mts +2 -2
- package/dist/validation/primitives/text.d.ts +2 -2
- package/dist/validation/primitives/text.js +4 -5
- package/dist/validation/primitives/text.mjs +2 -3
- package/package.json +2 -3
- package/dist/chunk-4DMDOSFN.js +0 -10
- package/dist/chunk-7FSIBNRH.mjs +0 -25
- package/dist/chunk-BEN6TE7Y.js +0 -11
- package/dist/chunk-RDXQ4CYT.mjs +0 -9
- package/dist/chunk-ZWMMEQI7.js +0 -28
- package/dist/index-CftmKoRP.d.mts +0 -2053
- package/dist/index-Dh_XiNFt.d.ts +0 -2053
- package/dist/validation/validators.d.mts +0 -23
- package/dist/validation/validators.d.ts +0 -23
- package/dist/validation/validators.js +0 -265
- package/dist/validation/validators.mjs +0 -20
- /package/dist/{chunk-R6JFUC32.js → chunk-PGERPYDR.js} +0 -0
- /package/dist/{chunk-EKG35CSO.mjs → chunk-SP3PNHYF.mjs} +0 -0
|
@@ -159,11 +159,6 @@ interface FeatureFlagsConfig {
|
|
|
159
159
|
* are NOT supported to avoid duplicating backend behavior.
|
|
160
160
|
*/
|
|
161
161
|
type PropertyType = "text" | "textarea" | "number" | "checkbox" | "date" | "phone" | "currency" | "status" | "select" | "multiselect" | "rating" | "location";
|
|
162
|
-
/**
|
|
163
|
-
* Forbidden property types that would require complex backend duplication
|
|
164
|
-
*/
|
|
165
|
-
declare const FORBIDDEN_PROPERTY_TYPES: readonly ["formula", "rollup", "relation", "file", "user", "document", "richtext"];
|
|
166
|
-
type ForbiddenPropertyType = (typeof FORBIDDEN_PROPERTY_TYPES)[number];
|
|
167
162
|
/**
|
|
168
163
|
* Union of attribute types allowed as qualified relation properties.
|
|
169
164
|
*
|
|
@@ -660,11 +655,6 @@ interface DocumentAttribute extends BaseAttribute<string | string[]> {
|
|
|
660
655
|
attributes?: Attribute[];
|
|
661
656
|
}
|
|
662
657
|
type Attribute = TextAttribute | TextAreaAttribute | RichtextAttribute | NumberAttribute | CheckboxAttribute | DateAttribute | PhoneAttribute | CurrencyAttribute | StatusAttribute | LocationAttribute | SelectAttribute | MultiselectAttribute | FileAttribute | UserAttribute | RelationAttribute | RatingAttribute | FormulaAttribute | RollupAttribute | DocumentAttribute;
|
|
663
|
-
/**
|
|
664
|
-
* Attribute types that are not sortable by default.
|
|
665
|
-
* These types have complex/binary values without a meaningful natural order.
|
|
666
|
-
*/
|
|
667
|
-
declare const NON_SORTABLE_TYPES: ReadonlySet<AttributeType>;
|
|
668
658
|
/**
|
|
669
659
|
* Check if an attribute supports sorting based on its type.
|
|
670
660
|
*/
|
|
@@ -672,4 +662,4 @@ declare function isAttributeSortable(attr: {
|
|
|
672
662
|
type: AttributeType;
|
|
673
663
|
}): boolean;
|
|
674
664
|
|
|
675
|
-
export {
|
|
665
|
+
export { hasOptions as $, type Attribute as A, type BilateralConfig as B, type CurrencyAttribute as C, type DateAttribute as D, type AttributeGroup as E, type FileAttribute as F, type BaseAttribute as G, type DateFormat as H, type DateValue as I, type FeatureFlagsConfig as J, type FlagOverride as K, type LocationAttribute as L, type MultiRelationAttribute as M, type NumberAttribute as N, type Option as O, type PhoneAttribute as P, type NumberUnit as Q, type RelationAttribute as R, type SingleRelationAttribute as S, type TextAreaAttribute as T, type UserAttribute as U, type OptionPropertyAttribute as V, type PropertyAttribute as W, type PropertySchema as X, type PropertyType as Y, RELATION_TARGET_ANY as Z, type StatusGroup as _, type RichtextAttribute as a, inferInverseCardinality as a0, isAttributeSortable as a1, isBilateralRelation as a2, isUniversalRelation as a3, type MultiselectAttribute as b, type SelectAttribute as c, type StatusAttribute as d, type FormulaAttribute as e, type RollupAttribute as f, type CheckboxAttribute as g, type RatingAttribute as h, type TextAttribute as i, type AttributeType as j, type LocationGranularity as k, type Location as l, type Phone as m, type Currency as n, type DocumentAttribute as o, type FeatureGate as p, type FormulaReturnType as q, type RelationTarget as r, type RichtextFeature as s, type RollupFunction as t, type FlagValueType as u, type FeatureFlagDefinition as v, type FlagLevel as w, type FeatureFlagsRepository as x, type StaticFlagDefault as y, type ResolvedFlag as z };
|
|
@@ -159,11 +159,6 @@ interface FeatureFlagsConfig {
|
|
|
159
159
|
* are NOT supported to avoid duplicating backend behavior.
|
|
160
160
|
*/
|
|
161
161
|
type PropertyType = "text" | "textarea" | "number" | "checkbox" | "date" | "phone" | "currency" | "status" | "select" | "multiselect" | "rating" | "location";
|
|
162
|
-
/**
|
|
163
|
-
* Forbidden property types that would require complex backend duplication
|
|
164
|
-
*/
|
|
165
|
-
declare const FORBIDDEN_PROPERTY_TYPES: readonly ["formula", "rollup", "relation", "file", "user", "document", "richtext"];
|
|
166
|
-
type ForbiddenPropertyType = (typeof FORBIDDEN_PROPERTY_TYPES)[number];
|
|
167
162
|
/**
|
|
168
163
|
* Union of attribute types allowed as qualified relation properties.
|
|
169
164
|
*
|
|
@@ -660,11 +655,6 @@ interface DocumentAttribute extends BaseAttribute<string | string[]> {
|
|
|
660
655
|
attributes?: Attribute[];
|
|
661
656
|
}
|
|
662
657
|
type Attribute = TextAttribute | TextAreaAttribute | RichtextAttribute | NumberAttribute | CheckboxAttribute | DateAttribute | PhoneAttribute | CurrencyAttribute | StatusAttribute | LocationAttribute | SelectAttribute | MultiselectAttribute | FileAttribute | UserAttribute | RelationAttribute | RatingAttribute | FormulaAttribute | RollupAttribute | DocumentAttribute;
|
|
663
|
-
/**
|
|
664
|
-
* Attribute types that are not sortable by default.
|
|
665
|
-
* These types have complex/binary values without a meaningful natural order.
|
|
666
|
-
*/
|
|
667
|
-
declare const NON_SORTABLE_TYPES: ReadonlySet<AttributeType>;
|
|
668
658
|
/**
|
|
669
659
|
* Check if an attribute supports sorting based on its type.
|
|
670
660
|
*/
|
|
@@ -672,4 +662,4 @@ declare function isAttributeSortable(attr: {
|
|
|
672
662
|
type: AttributeType;
|
|
673
663
|
}): boolean;
|
|
674
664
|
|
|
675
|
-
export {
|
|
665
|
+
export { hasOptions as $, type Attribute as A, type BilateralConfig as B, type CurrencyAttribute as C, type DateAttribute as D, type AttributeGroup as E, type FileAttribute as F, type BaseAttribute as G, type DateFormat as H, type DateValue as I, type FeatureFlagsConfig as J, type FlagOverride as K, type LocationAttribute as L, type MultiRelationAttribute as M, type NumberAttribute as N, type Option as O, type PhoneAttribute as P, type NumberUnit as Q, type RelationAttribute as R, type SingleRelationAttribute as S, type TextAreaAttribute as T, type UserAttribute as U, type OptionPropertyAttribute as V, type PropertyAttribute as W, type PropertySchema as X, type PropertyType as Y, RELATION_TARGET_ANY as Z, type StatusGroup as _, type RichtextAttribute as a, inferInverseCardinality as a0, isAttributeSortable as a1, isBilateralRelation as a2, isUniversalRelation as a3, type MultiselectAttribute as b, type SelectAttribute as c, type StatusAttribute as d, type FormulaAttribute as e, type RollupAttribute as f, type CheckboxAttribute as g, type RatingAttribute as h, type TextAttribute as i, type AttributeType as j, type LocationGranularity as k, type Location as l, type Phone as m, type Currency as n, type DocumentAttribute as o, type FeatureGate as p, type FormulaReturnType as q, type RelationTarget as r, type RichtextFeature as s, type RollupFunction as t, type FlagValueType as u, type FeatureFlagDefinition as v, type FlagLevel as w, type FeatureFlagsRepository as x, type StaticFlagDefault as y, type ResolvedFlag as z };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkT225DB55_js = require('./chunk-T225DB55.js');
|
|
4
|
+
var zod = require('zod');
|
|
5
|
+
|
|
6
|
+
// src/lib/lru-cache.ts
|
|
7
|
+
var LRUCache = class {
|
|
8
|
+
constructor(capacity) {
|
|
9
|
+
if (capacity <= 0) {
|
|
10
|
+
throw new Error("LRU cache capacity must be greater than 0");
|
|
11
|
+
}
|
|
12
|
+
this.capacity = capacity;
|
|
13
|
+
this.cache = /* @__PURE__ */ new Map();
|
|
14
|
+
}
|
|
15
|
+
get(key) {
|
|
16
|
+
const value = this.cache.get(key);
|
|
17
|
+
if (value !== void 0) {
|
|
18
|
+
this.cache.delete(key);
|
|
19
|
+
this.cache.set(key, value);
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
set(key, value) {
|
|
24
|
+
if (this.cache.has(key)) {
|
|
25
|
+
this.cache.delete(key);
|
|
26
|
+
} else if (this.cache.size >= this.capacity) {
|
|
27
|
+
const firstKey = this.cache.keys().next().value;
|
|
28
|
+
if (firstKey !== void 0) {
|
|
29
|
+
this.cache.delete(firstKey);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
this.cache.set(key, value);
|
|
33
|
+
}
|
|
34
|
+
has(key) {
|
|
35
|
+
return this.cache.has(key);
|
|
36
|
+
}
|
|
37
|
+
clear() {
|
|
38
|
+
this.cache.clear();
|
|
39
|
+
}
|
|
40
|
+
get size() {
|
|
41
|
+
return this.cache.size;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// src/validation/core/regex-cache.ts
|
|
46
|
+
function createRegexCache(capacity = 100) {
|
|
47
|
+
return new LRUCache(capacity);
|
|
48
|
+
}
|
|
49
|
+
function getCachedRegex(cache, pattern) {
|
|
50
|
+
let cached = cache.get(pattern);
|
|
51
|
+
if (!cached) {
|
|
52
|
+
cached = new RegExp(pattern);
|
|
53
|
+
cache.set(pattern, cached);
|
|
54
|
+
}
|
|
55
|
+
return cached;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// src/validation/primitives/text.ts
|
|
59
|
+
var textRegexCache = createRegexCache();
|
|
60
|
+
function createTextValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
61
|
+
let schema = zod.z.string();
|
|
62
|
+
if (attr.minLength !== void 0) {
|
|
63
|
+
schema = schema.min(attr.minLength, messages.minLength(attr, attr.minLength));
|
|
64
|
+
}
|
|
65
|
+
if (attr.maxLength !== void 0) {
|
|
66
|
+
schema = schema.max(attr.maxLength, messages.maxLength(attr, attr.maxLength));
|
|
67
|
+
}
|
|
68
|
+
if (attr.pattern) {
|
|
69
|
+
schema = schema.regex(
|
|
70
|
+
getCachedRegex(textRegexCache, attr.pattern),
|
|
71
|
+
messages.invalidPattern(attr)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
return schema;
|
|
75
|
+
}
|
|
76
|
+
function createTextAreaValidator(_attr, _messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
77
|
+
return zod.z.string();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
exports.createTextAreaValidator = createTextAreaValidator;
|
|
81
|
+
exports.createTextValidator = createTextValidator;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkT225DB55_js = require('./chunk-T225DB55.js');
|
|
4
4
|
var zod = require('zod');
|
|
5
5
|
|
|
6
|
-
function createSelectValidator(attr, messages =
|
|
6
|
+
function createSelectValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
7
7
|
const validValues = attr.options.map((opt) => opt.value);
|
|
8
8
|
const validLabels = attr.options.map((opt) => opt.label);
|
|
9
9
|
return zod.z.enum(validValues, {
|
|
10
10
|
message: messages.invalidOption(attr, validLabels)
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
|
-
function createMultiselectValidator(attr, messages =
|
|
13
|
+
function createMultiselectValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
14
14
|
const validValues = attr.options.map((opt) => opt.value);
|
|
15
15
|
const validLabels = attr.options.map((opt) => opt.label);
|
|
16
16
|
return zod.z.array(
|
|
@@ -19,7 +19,7 @@ function createMultiselectValidator(attr, messages = chunk5SQEKHPW_js.DEFAULT_VA
|
|
|
19
19
|
})
|
|
20
20
|
);
|
|
21
21
|
}
|
|
22
|
-
function createStatusValidator(attr, messages =
|
|
22
|
+
function createStatusValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
23
23
|
const validValues = attr.options.map((opt) => opt.value);
|
|
24
24
|
const validLabels = attr.options.map((opt) => opt.label);
|
|
25
25
|
return zod.z.enum(validValues, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DEFAULT_VALIDATION_MESSAGES } from './chunk-
|
|
2
|
-
import { getCountryByIso3,
|
|
1
|
+
import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
|
|
2
|
+
import { getCountryByIso3, isValidIso3, stripTrunkPrefix } from '@stndrds/constants';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { parsePhoneNumberFromString } from 'libphonenumber-js';
|
|
5
5
|
|
|
@@ -61,22 +61,6 @@ function formatPhoneForDisplay(phone) {
|
|
|
61
61
|
}
|
|
62
62
|
return `${dial} ${phone.phoneNumber}`.trim();
|
|
63
63
|
}
|
|
64
|
-
function parseRawPhoneInput(rawInput, countryIso3) {
|
|
65
|
-
if (!rawInput || rawInput.trim() === "") {
|
|
66
|
-
return { success: false, error: "Phone number is empty" };
|
|
67
|
-
}
|
|
68
|
-
const normalized = normalizePhoneNumber(rawInput, countryIso3);
|
|
69
|
-
if (!normalized) {
|
|
70
|
-
return { success: false, error: "Could not extract digits from input" };
|
|
71
|
-
}
|
|
72
|
-
if (!validatePhoneNumber(normalized, countryIso3)) {
|
|
73
|
-
return { success: false, error: "Invalid phone number for country" };
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
success: true,
|
|
77
|
-
phone: { countryCode: countryIso3, phoneNumber: normalized }
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
64
|
|
|
81
65
|
// src/validation/complex/phone.ts
|
|
82
66
|
function createPhoneValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
|
|
@@ -96,4 +80,4 @@ function createPhoneValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
|
|
|
96
80
|
});
|
|
97
81
|
}
|
|
98
82
|
|
|
99
|
-
export { createPhoneValidator, formatPhoneForDisplay
|
|
83
|
+
export { createPhoneValidator, formatPhoneForDisplay };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkT225DB55_js = require('./chunk-T225DB55.js');
|
|
4
4
|
var zod = require('zod');
|
|
5
5
|
|
|
6
|
-
function createRollupValidator(_attr, _messages =
|
|
6
|
+
function createRollupValidator(_attr, _messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
7
7
|
return zod.z.unknown();
|
|
8
8
|
}
|
|
9
9
|
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { DEFAULT_VALIDATION_MESSAGES } from './chunk-
|
|
17
|
-
import { formatZodErrors } from './chunk-RDXQ4CYT.mjs';
|
|
1
|
+
import { createDateValidator } from './chunk-4KRLCWJM.mjs';
|
|
2
|
+
import { createNumberValidator } from './chunk-KNYZH2WD.mjs';
|
|
3
|
+
import { createRatingValidator } from './chunk-RUYUFXNW.mjs';
|
|
4
|
+
import { createTextAreaValidator, createTextValidator } from './chunk-KWVCGQ7N.mjs';
|
|
5
|
+
import { createRichtextValidator } from './chunk-BLXQGQLK.mjs';
|
|
6
|
+
import { createMultiselectValidator, createSelectValidator, createStatusValidator } from './chunk-7HFZ7MVR.mjs';
|
|
7
|
+
import { createUserValidator } from './chunk-ITTQ4FGR.mjs';
|
|
8
|
+
import { createFormulaValidator } from './chunk-IRTRJH37.mjs';
|
|
9
|
+
import { createRollupValidator } from './chunk-OLJLCVNY.mjs';
|
|
10
|
+
import { createCheckboxValidator } from './chunk-TMYBEXBT.mjs';
|
|
11
|
+
import { createCurrencyValidator } from './chunk-AYCSVKI2.mjs';
|
|
12
|
+
import { createFileValidator } from './chunk-4TC27SMF.mjs';
|
|
13
|
+
import { createLocationValidator } from './chunk-WV4V64D5.mjs';
|
|
14
|
+
import { createPhoneValidator } from './chunk-5XL3JP73.mjs';
|
|
15
|
+
import { createRelationValidator } from './chunk-R4CJHCC4.mjs';
|
|
16
|
+
import { DEFAULT_VALIDATION_MESSAGES, formatZodErrors } from './chunk-UQVW4KPP.mjs';
|
|
18
17
|
import { z } from 'zod';
|
|
19
18
|
|
|
20
19
|
function isEmptyValue(value) {
|
|
@@ -82,21 +81,31 @@ function createFormAttributeValidator(attr, messages = DEFAULT_VALIDATION_MESSAG
|
|
|
82
81
|
}
|
|
83
82
|
return validator;
|
|
84
83
|
}
|
|
84
|
+
var objectValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
85
|
+
var draftValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
85
86
|
function createObjectValidator(objectDef) {
|
|
87
|
+
const cached = objectValidatorCache.get(objectDef);
|
|
88
|
+
if (cached) return cached;
|
|
86
89
|
const shape = {};
|
|
87
90
|
for (const attr of objectDef.attributes) {
|
|
88
91
|
const validator = createAttributeValidator(attr);
|
|
89
92
|
shape[attr.name] = attr.required ? validator : withEmptyToNull(validator);
|
|
90
93
|
}
|
|
91
|
-
|
|
94
|
+
const schema = z.object(shape).passthrough();
|
|
95
|
+
objectValidatorCache.set(objectDef, schema);
|
|
96
|
+
return schema;
|
|
92
97
|
}
|
|
93
98
|
function createDraftValidator(objectDef) {
|
|
99
|
+
const cached = draftValidatorCache.get(objectDef);
|
|
100
|
+
if (cached) return cached;
|
|
94
101
|
const shape = {};
|
|
95
102
|
for (const attr of objectDef.attributes) {
|
|
96
103
|
const validator = createAttributeValidator(attr);
|
|
97
104
|
shape[attr.name] = withEmptyToNull(validator);
|
|
98
105
|
}
|
|
99
|
-
|
|
106
|
+
const schema = z.object(shape).passthrough();
|
|
107
|
+
draftValidatorCache.set(objectDef, schema);
|
|
108
|
+
return schema;
|
|
100
109
|
}
|
|
101
110
|
|
|
102
111
|
// src/validation/object/helpers.ts
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkT225DB55_js = require('./chunk-T225DB55.js');
|
|
4
4
|
var zod = require('zod');
|
|
5
5
|
|
|
6
|
-
function createRatingValidator(attr, messages =
|
|
6
|
+
function createRatingValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
7
7
|
let schema = zod.z.number().min(0);
|
|
8
8
|
if (attr.max !== void 0) {
|
|
9
9
|
schema = schema.max(attr.max, messages.maxValue(attr, attr.max));
|
|
@@ -17,17 +17,6 @@ function generateId() {
|
|
|
17
17
|
return v.toString(16);
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
function generatePrefixedId(prefix) {
|
|
21
|
-
return `${prefix}_${generateId()}`;
|
|
22
|
-
}
|
|
23
|
-
function slugify(input) {
|
|
24
|
-
return input.normalize("NFD").replace(/\p{M}/gu, "").toLowerCase().replace(/[^a-z0-9\s_-]/g, "").trim().replace(/\s+/g, "-").replace(/-+/g, "-");
|
|
25
|
-
}
|
|
26
|
-
function generateTemplateName(label) {
|
|
27
|
-
const slug = slugify(label) || "template";
|
|
28
|
-
const suffix = generateId().slice(0, 8);
|
|
29
|
-
return `${slug}-${suffix}`;
|
|
30
|
-
}
|
|
31
20
|
function indexBy(items, keyFn) {
|
|
32
21
|
return new Map(items.map((item) => [keyFn(item), item]));
|
|
33
22
|
}
|
|
@@ -55,7 +44,4 @@ exports.asTenantId = asTenantId;
|
|
|
55
44
|
exports.asUserId = asUserId;
|
|
56
45
|
exports.deepEqual = deepEqual;
|
|
57
46
|
exports.generateId = generateId;
|
|
58
|
-
exports.generatePrefixedId = generatePrefixedId;
|
|
59
|
-
exports.generateTemplateName = generateTemplateName;
|
|
60
47
|
exports.indexBy = indexBy;
|
|
61
|
-
exports.slugify = slugify;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkT225DB55_js = require('./chunk-T225DB55.js');
|
|
4
4
|
var zod = require('zod');
|
|
5
5
|
|
|
6
|
-
function createCurrencyValidator(attr, messages =
|
|
6
|
+
function createCurrencyValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
7
7
|
return zod.z.object(
|
|
8
8
|
{
|
|
9
9
|
code: zod.z.string().length(3),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkT225DB55_js = require('./chunk-T225DB55.js');
|
|
4
4
|
var zod = require('zod');
|
|
5
5
|
|
|
6
|
-
function createDateValidator(attr, messages =
|
|
6
|
+
function createDateValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
7
7
|
return zod.z.coerce.date({ message: messages.invalidDate(attr) });
|
|
8
8
|
}
|
|
9
9
|
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var chunkBEN6TE7Y_js = require('./chunk-BEN6TE7Y.js');
|
|
3
|
+
var chunkJ5HRK3WD_js = require('./chunk-J5HRK3WD.js');
|
|
4
|
+
var chunkTKN73433_js = require('./chunk-TKN73433.js');
|
|
5
|
+
var chunkD7WFIGXW_js = require('./chunk-D7WFIGXW.js');
|
|
6
|
+
var chunk3JINFUN3_js = require('./chunk-3JINFUN3.js');
|
|
7
|
+
var chunkQWZHR2OO_js = require('./chunk-QWZHR2OO.js');
|
|
8
|
+
var chunk56QI6UTK_js = require('./chunk-56QI6UTK.js');
|
|
9
|
+
var chunkVXOTYFEW_js = require('./chunk-VXOTYFEW.js');
|
|
10
|
+
var chunkOAQWRMTP_js = require('./chunk-OAQWRMTP.js');
|
|
11
|
+
var chunkACQ3TUFK_js = require('./chunk-ACQ3TUFK.js');
|
|
12
|
+
var chunkMAKSIK3P_js = require('./chunk-MAKSIK3P.js');
|
|
13
|
+
var chunkGCRHSPZN_js = require('./chunk-GCRHSPZN.js');
|
|
14
|
+
var chunkROAZLZA2_js = require('./chunk-ROAZLZA2.js');
|
|
15
|
+
var chunkRJ4LOX7P_js = require('./chunk-RJ4LOX7P.js');
|
|
16
|
+
var chunkN7T66JVY_js = require('./chunk-N7T66JVY.js');
|
|
17
|
+
var chunkP2BE2A2G_js = require('./chunk-P2BE2A2G.js');
|
|
18
|
+
var chunkT225DB55_js = require('./chunk-T225DB55.js');
|
|
20
19
|
var zod = require('zod');
|
|
21
20
|
|
|
22
21
|
function isEmptyValue(value) {
|
|
@@ -35,70 +34,80 @@ function withEmptyToNull(validator) {
|
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
// src/validation/object/attribute-factory.ts
|
|
38
|
-
function createAttributeValidator(attr, messages =
|
|
37
|
+
function createAttributeValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
39
38
|
switch (attr.type) {
|
|
40
39
|
case "text":
|
|
41
|
-
return
|
|
40
|
+
return chunk3JINFUN3_js.createTextValidator(attr, messages);
|
|
42
41
|
case "textarea":
|
|
43
|
-
return
|
|
42
|
+
return chunk3JINFUN3_js.createTextAreaValidator(attr, messages);
|
|
44
43
|
case "richtext":
|
|
45
|
-
return
|
|
44
|
+
return chunkQWZHR2OO_js.createRichtextValidator(attr, messages);
|
|
46
45
|
case "number":
|
|
47
|
-
return
|
|
46
|
+
return chunkTKN73433_js.createNumberValidator(attr, messages);
|
|
48
47
|
case "checkbox":
|
|
49
|
-
return
|
|
48
|
+
return chunkMAKSIK3P_js.createCheckboxValidator(attr, messages);
|
|
50
49
|
case "date":
|
|
51
|
-
return
|
|
50
|
+
return chunkJ5HRK3WD_js.createDateValidator(attr, messages);
|
|
52
51
|
case "phone":
|
|
53
|
-
return
|
|
52
|
+
return chunkN7T66JVY_js.createPhoneValidator(attr, messages);
|
|
54
53
|
case "currency":
|
|
55
|
-
return
|
|
54
|
+
return chunkGCRHSPZN_js.createCurrencyValidator(attr, messages);
|
|
56
55
|
case "status":
|
|
57
|
-
return
|
|
56
|
+
return chunk56QI6UTK_js.createStatusValidator(attr, messages);
|
|
58
57
|
case "location":
|
|
59
|
-
return
|
|
58
|
+
return chunkRJ4LOX7P_js.createLocationValidator(attr, messages);
|
|
60
59
|
case "select":
|
|
61
|
-
return
|
|
60
|
+
return chunk56QI6UTK_js.createSelectValidator(attr, messages);
|
|
62
61
|
case "multiselect":
|
|
63
|
-
return
|
|
62
|
+
return chunk56QI6UTK_js.createMultiselectValidator(attr, messages);
|
|
64
63
|
case "file":
|
|
65
|
-
return
|
|
64
|
+
return chunkROAZLZA2_js.createFileValidator(attr, messages);
|
|
66
65
|
case "user":
|
|
67
|
-
return
|
|
66
|
+
return chunkVXOTYFEW_js.createUserValidator(attr, messages);
|
|
68
67
|
case "relation":
|
|
69
|
-
return
|
|
68
|
+
return chunkP2BE2A2G_js.createRelationValidator(attr, messages);
|
|
70
69
|
case "rating":
|
|
71
|
-
return
|
|
70
|
+
return chunkD7WFIGXW_js.createRatingValidator(attr, messages);
|
|
72
71
|
case "formula":
|
|
73
|
-
return
|
|
72
|
+
return chunkOAQWRMTP_js.createFormulaValidator(attr, messages);
|
|
74
73
|
case "rollup":
|
|
75
|
-
return
|
|
74
|
+
return chunkACQ3TUFK_js.createRollupValidator(attr, messages);
|
|
76
75
|
default:
|
|
77
76
|
return zod.z.unknown();
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
|
-
function createFormAttributeValidator(attr, messages =
|
|
79
|
+
function createFormAttributeValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
81
80
|
const validator = createAttributeValidator(attr, messages);
|
|
82
81
|
if (!attr.required) {
|
|
83
82
|
return withEmptyToNull(validator);
|
|
84
83
|
}
|
|
85
84
|
return validator;
|
|
86
85
|
}
|
|
86
|
+
var objectValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
87
|
+
var draftValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
87
88
|
function createObjectValidator(objectDef) {
|
|
89
|
+
const cached = objectValidatorCache.get(objectDef);
|
|
90
|
+
if (cached) return cached;
|
|
88
91
|
const shape = {};
|
|
89
92
|
for (const attr of objectDef.attributes) {
|
|
90
93
|
const validator = createAttributeValidator(attr);
|
|
91
94
|
shape[attr.name] = attr.required ? validator : withEmptyToNull(validator);
|
|
92
95
|
}
|
|
93
|
-
|
|
96
|
+
const schema = zod.z.object(shape).passthrough();
|
|
97
|
+
objectValidatorCache.set(objectDef, schema);
|
|
98
|
+
return schema;
|
|
94
99
|
}
|
|
95
100
|
function createDraftValidator(objectDef) {
|
|
101
|
+
const cached = draftValidatorCache.get(objectDef);
|
|
102
|
+
if (cached) return cached;
|
|
96
103
|
const shape = {};
|
|
97
104
|
for (const attr of objectDef.attributes) {
|
|
98
105
|
const validator = createAttributeValidator(attr);
|
|
99
106
|
shape[attr.name] = withEmptyToNull(validator);
|
|
100
107
|
}
|
|
101
|
-
|
|
108
|
+
const schema = zod.z.object(shape).passthrough();
|
|
109
|
+
draftValidatorCache.set(objectDef, schema);
|
|
110
|
+
return schema;
|
|
102
111
|
}
|
|
103
112
|
|
|
104
113
|
// src/validation/object/helpers.ts
|
|
@@ -116,7 +125,7 @@ function validateAttribute(attr, value) {
|
|
|
116
125
|
}
|
|
117
126
|
return {
|
|
118
127
|
success: false,
|
|
119
|
-
errors:
|
|
128
|
+
errors: chunkT225DB55_js.formatZodErrors(result.error).map((err) => ({
|
|
120
129
|
path: [attr.name, ...err.path],
|
|
121
130
|
message: err.message
|
|
122
131
|
}))
|
|
@@ -133,7 +142,7 @@ function validateObject(objectDef, data) {
|
|
|
133
142
|
}
|
|
134
143
|
return {
|
|
135
144
|
success: false,
|
|
136
|
-
errors:
|
|
145
|
+
errors: chunkT225DB55_js.formatZodErrors(result.error)
|
|
137
146
|
};
|
|
138
147
|
}
|
|
139
148
|
function validateObjectOrThrow(objectDef, data) {
|
|
@@ -156,7 +165,7 @@ function validateDraft(objectDef, data) {
|
|
|
156
165
|
}
|
|
157
166
|
return {
|
|
158
167
|
success: false,
|
|
159
|
-
errors:
|
|
168
|
+
errors: chunkT225DB55_js.formatZodErrors(result.error)
|
|
160
169
|
};
|
|
161
170
|
}
|
|
162
171
|
function validateDraftOrThrow(objectDef, data) {
|