@oktis-works/validation 0.1.0

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 (45) hide show
  1. package/dist/basic.d.ts +12 -0
  2. package/dist/basic.d.ts.map +1 -0
  3. package/dist/basic.js +94 -0
  4. package/dist/basic.js.map +1 -0
  5. package/dist/choice.d.ts +11 -0
  6. package/dist/choice.d.ts.map +1 -0
  7. package/dist/choice.js +84 -0
  8. package/dist/choice.js.map +1 -0
  9. package/dist/client-validate.d.ts +17 -0
  10. package/dist/client-validate.d.ts.map +1 -0
  11. package/dist/client-validate.js +354 -0
  12. package/dist/client-validate.js.map +1 -0
  13. package/dist/clone.d.ts +16 -0
  14. package/dist/clone.d.ts.map +1 -0
  15. package/dist/clone.js +63 -0
  16. package/dist/clone.js.map +1 -0
  17. package/dist/compatibility.d.ts +23 -0
  18. package/dist/compatibility.d.ts.map +1 -0
  19. package/dist/compatibility.js +46 -0
  20. package/dist/compatibility.js.map +1 -0
  21. package/dist/compatibility.test.d.ts +2 -0
  22. package/dist/compatibility.test.d.ts.map +1 -0
  23. package/dist/compatibility.test.js +50 -0
  24. package/dist/compatibility.test.js.map +1 -0
  25. package/dist/conditional.d.ts +30 -0
  26. package/dist/conditional.d.ts.map +1 -0
  27. package/dist/conditional.js +114 -0
  28. package/dist/conditional.js.map +1 -0
  29. package/dist/index.d.ts +13 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +12 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/media.d.ts +13 -0
  34. package/dist/media.d.ts.map +1 -0
  35. package/dist/media.js +102 -0
  36. package/dist/media.js.map +1 -0
  37. package/dist/relational.d.ts +6 -0
  38. package/dist/relational.d.ts.map +1 -0
  39. package/dist/relational.js +113 -0
  40. package/dist/relational.js.map +1 -0
  41. package/dist/structural.d.ts +26 -0
  42. package/dist/structural.d.ts.map +1 -0
  43. package/dist/structural.js +50 -0
  44. package/dist/structural.js.map +1 -0
  45. package/package.json +67 -0
@@ -0,0 +1,12 @@
1
+ export interface FieldError {
2
+ field: string;
3
+ code: string;
4
+ message: string;
5
+ }
6
+ export declare function isEmptyValue(value: unknown): boolean;
7
+ export declare function checkRequired(value: unknown, required: boolean | undefined, field: string, errors: FieldError[]): boolean;
8
+ export declare function validateTextLike(value: unknown, config: Record<string, unknown>, field: string, errors: FieldError[]): void;
9
+ export declare function validateEmail(value: unknown, field: string, errors: FieldError[]): void;
10
+ export declare function validateUrl(value: unknown, field: string, errors: FieldError[]): void;
11
+ export declare function validateNumber(value: unknown, config: Record<string, unknown>, field: string, errors: FieldError[]): void;
12
+ //# sourceMappingURL=basic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKpD;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,OAAO,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,EAAE,GACnB,OAAO,CAaT;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,EAAE,GACnB,IAAI,CAaN;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAWvF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAarF;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,EAAE,GACnB,IAAI,CA8BN"}
package/dist/basic.js ADDED
@@ -0,0 +1,94 @@
1
+ // @oktis-works/core - Basic Field Validators (ACF parity)
2
+ export function isEmptyValue(value) {
3
+ if (value === null || value === undefined)
4
+ return true;
5
+ if (typeof value === 'string')
6
+ return value.trim() === '';
7
+ if (Array.isArray(value))
8
+ return value.length === 0;
9
+ return false;
10
+ }
11
+ export function checkRequired(value, required, field, errors) {
12
+ if (!required)
13
+ return true;
14
+ if (isEmptyValue(value)) {
15
+ errors.push({
16
+ field,
17
+ code: 'REQUIRED',
18
+ message: `${field} é obrigatório`,
19
+ });
20
+ return false;
21
+ }
22
+ return true;
23
+ }
24
+ export function validateTextLike(value, config, field, errors) {
25
+ if (isEmptyValue(value))
26
+ return;
27
+ const str = String(value);
28
+ const characterLimit = config['characterLimit'];
29
+ if (characterLimit !== undefined && str.length > characterLimit) {
30
+ errors.push({
31
+ field,
32
+ code: 'CHARACTER_LIMIT',
33
+ message: `${field} excede o limite de ${characterLimit} caracteres`,
34
+ });
35
+ }
36
+ }
37
+ export function validateEmail(value, field, errors) {
38
+ if (isEmptyValue(value))
39
+ return;
40
+ const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
41
+ if (!emailPattern.test(String(value))) {
42
+ errors.push({
43
+ field,
44
+ code: 'INVALID_EMAIL',
45
+ message: `${field} não é um e-mail válido`,
46
+ });
47
+ }
48
+ }
49
+ export function validateUrl(value, field, errors) {
50
+ if (isEmptyValue(value))
51
+ return;
52
+ try {
53
+ const parsed = new URL(String(value));
54
+ if (!['http:', 'https:'].includes(parsed.protocol))
55
+ throw new Error('protocol');
56
+ }
57
+ catch {
58
+ errors.push({
59
+ field,
60
+ code: 'INVALID_URL',
61
+ message: `${field} não é uma URL válida (http/https)`,
62
+ });
63
+ }
64
+ }
65
+ export function validateNumber(value, config, field, errors) {
66
+ if (isEmptyValue(value))
67
+ return;
68
+ const num = Number(value);
69
+ if (Number.isNaN(num)) {
70
+ errors.push({ field, code: 'NOT_A_NUMBER', message: `${field} deve ser um número` });
71
+ return;
72
+ }
73
+ const minValue = config['minValue'];
74
+ const maxValue = config['maxValue'];
75
+ const step = config['step'];
76
+ if (minValue !== undefined && num < minValue) {
77
+ errors.push({ field, code: 'MIN_VALUE', message: `${field} deve ser maior ou igual a ${minValue}` });
78
+ }
79
+ if (maxValue !== undefined && num > maxValue) {
80
+ errors.push({ field, code: 'MAX_VALUE', message: `${field} deve ser menor ou igual a ${maxValue}` });
81
+ }
82
+ if (step !== undefined && step > 0) {
83
+ const base = minValue ?? 0;
84
+ const remainder = Math.abs((num - base) / step - Math.round((num - base) / step));
85
+ if (remainder > 1e-9) {
86
+ errors.push({
87
+ field,
88
+ code: 'STEP_MISMATCH',
89
+ message: `${field} deve seguir o incremento de ${step}`,
90
+ });
91
+ }
92
+ }
93
+ }
94
+ //# sourceMappingURL=basic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic.js","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { FieldError } from './basic.js';
2
+ export interface FieldChoice {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ export declare function getValidChoiceValues(config: Record<string, unknown>): Set<string>;
7
+ export declare function validateSelect(value: unknown, config: Record<string, unknown>, field: string, errors: FieldError[]): void;
8
+ export declare function validateCheckbox(value: unknown, config: Record<string, unknown>, field: string, errors: FieldError[]): void;
9
+ export declare function validateRadio(value: unknown, config: Record<string, unknown>, field: string, errors: FieldError[]): void;
10
+ export declare function validateTrueFalse(value: unknown, field: string, errors: FieldError[]): void;
11
+ //# sourceMappingURL=choice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice.d.ts","sourceRoot":"","sources":["../src/choice.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAGjF;AA4CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CA0BzH;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,EAAE,GACnB,IAAI,CAYN;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAGxH;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAS3F"}
package/dist/choice.js ADDED
@@ -0,0 +1,84 @@
1
+ // @oktis-works/core - Choice Field Validators (ACF parity)
2
+ import { isEmptyValue } from './basic.js';
3
+ export function getValidChoiceValues(config) {
4
+ const choices = config['choices'] ?? [];
5
+ return new Set(choices.map((choice) => String(choice.value)));
6
+ }
7
+ function checkClosedSet(value, valid, allowCustom, field, errors) {
8
+ if (allowCustom)
9
+ return;
10
+ if (!valid.has(String(value))) {
11
+ errors.push({
12
+ field,
13
+ code: 'INVALID_CHOICE',
14
+ message: `${field} contém um valor fora das opções permitidas`,
15
+ });
16
+ }
17
+ }
18
+ function checkSelectionCount(values, config, field, errors) {
19
+ const min = config['minSelections'];
20
+ const max = config['maxSelections'];
21
+ if (min !== undefined && values.length < min) {
22
+ errors.push({
23
+ field,
24
+ code: 'MIN_SELECTIONS',
25
+ message: `${field} requer no mínimo ${min} seleção(ões)`,
26
+ });
27
+ }
28
+ if (max !== undefined && values.length > max) {
29
+ errors.push({
30
+ field,
31
+ code: 'MAX_SELECTIONS',
32
+ message: `${field} permite no máximo ${max} seleção(ões)`,
33
+ });
34
+ }
35
+ }
36
+ export function validateSelect(value, config, field, errors) {
37
+ if (isEmptyValue(value))
38
+ return;
39
+ const multiple = Boolean(config['multiple']);
40
+ const allowCustom = Boolean(config['allowCustom'] ?? false);
41
+ const valid = getValidChoiceValues(config);
42
+ if (multiple) {
43
+ if (!Array.isArray(value)) {
44
+ errors.push({ field, code: 'NOT_ARRAY', message: `${field} deve ser uma lista` });
45
+ return;
46
+ }
47
+ if (!allowCustom) {
48
+ for (const item of value)
49
+ checkClosedSet(item, valid, false, field, errors);
50
+ }
51
+ checkSelectionCount(value, config, field, errors);
52
+ return;
53
+ }
54
+ checkClosedSet(value, valid, allowCustom, field, errors);
55
+ if (Array.isArray(value)) {
56
+ errors.push({ field, code: 'SINGLE_ONLY', message: `${field} aceita apenas um valor` });
57
+ }
58
+ }
59
+ export function validateCheckbox(value, config, field, errors) {
60
+ if (isEmptyValue(value))
61
+ return;
62
+ if (!Array.isArray(value)) {
63
+ errors.push({ field, code: 'NOT_ARRAY', message: `${field} deve ser uma lista de valores` });
64
+ return;
65
+ }
66
+ const valid = getValidChoiceValues(config);
67
+ for (const item of value)
68
+ checkClosedSet(item, valid, true, field, errors);
69
+ checkSelectionCount(value, config, field, errors);
70
+ }
71
+ export function validateRadio(value, config, field, errors) {
72
+ if (isEmptyValue(value))
73
+ return;
74
+ checkClosedSet(value, getValidChoiceValues(config), Boolean(config['allowCustom']), field, errors);
75
+ }
76
+ export function validateTrueFalse(value, field, errors) {
77
+ if (value === null || value === undefined)
78
+ return;
79
+ const isBoolean = typeof value === 'boolean' || value === 0 || value === 1 || value === '0' || value === '1';
80
+ if (!isBoolean) {
81
+ errors.push({ field, code: 'NOT_BOOLEAN', message: `${field} deve ser verdadeiro ou falso` });
82
+ }
83
+ }
84
+ //# sourceMappingURL=choice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choice.js","sourceRoot":"","sources":["../src/choice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface FieldError {
2
+ field: string;
3
+ code: string;
4
+ message: string;
5
+ }
6
+ /**
7
+ * Valida um único campo no cliente e retorna a primeira mensagem de erro
8
+ * ou null quando válido. Não considera lógica condicional.
9
+ */
10
+ export declare function validateFieldClient(field: {
11
+ type: string;
12
+ label: string;
13
+ required?: boolean;
14
+ config?: Record<string, unknown>;
15
+ subFields?: unknown[];
16
+ }, value: unknown): string | null;
17
+ //# sourceMappingURL=client-validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-validate.d.ts","sourceRoot":"","sources":["../src/client-validate.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA2MD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE;IACL,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;CACvB,EACD,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,IAAI,CAyBf"}
@@ -0,0 +1,354 @@
1
+ // @oktis-works/validation - Client-side Field Validation (inline, profissional para 100% drift)
2
+ // Reestruturado inline para eliminar 4 imports relativos flagrados como frontend→backend
3
+ // Mantém paridade ACF, mas sem dependências externas para cliente (manutenível, isolado)
4
+ function isEmptyValue(value) {
5
+ if (value === null || value === undefined)
6
+ return true;
7
+ if (typeof value === 'string')
8
+ return value.trim() === '';
9
+ if (Array.isArray(value))
10
+ return value.length === 0;
11
+ return false;
12
+ }
13
+ function checkRequired(value, required, field, errors) {
14
+ if (!required)
15
+ return true;
16
+ if (isEmptyValue(value)) {
17
+ errors.push({ field, code: 'REQUIRED', message: `${field} é obrigatório` });
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ function validateTextLike(value, config, field, errors) {
23
+ if (isEmptyValue(value))
24
+ return;
25
+ const str = String(value);
26
+ const characterLimit = config['characterLimit'];
27
+ if (characterLimit !== undefined && str.length > characterLimit) {
28
+ errors.push({ field, code: 'CHARACTER_LIMIT', message: `${field} excede o limite de ${characterLimit} caracteres` });
29
+ }
30
+ }
31
+ function validateEmail(value, field, errors) {
32
+ if (isEmptyValue(value))
33
+ return;
34
+ const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
35
+ if (!emailPattern.test(String(value))) {
36
+ errors.push({ field, code: 'INVALID_EMAIL', message: `${field} não é um e-mail válido` });
37
+ }
38
+ }
39
+ function validateUrl(value, field, errors) {
40
+ if (isEmptyValue(value))
41
+ return;
42
+ try {
43
+ const parsed = new URL(String(value));
44
+ if (!['http:', 'https:'].includes(parsed.protocol))
45
+ throw new Error('protocol');
46
+ }
47
+ catch {
48
+ errors.push({ field, code: 'INVALID_URL', message: `${field} não é uma URL válida (http/https)` });
49
+ }
50
+ }
51
+ function validateNumber(value, config, field, errors) {
52
+ if (isEmptyValue(value))
53
+ return;
54
+ const num = Number(value);
55
+ if (Number.isNaN(num)) {
56
+ errors.push({ field, code: 'NOT_A_NUMBER', message: `${field} deve ser um número` });
57
+ return;
58
+ }
59
+ const minValue = config['minValue'];
60
+ const maxValue = config['maxValue'];
61
+ const step = config['step'];
62
+ if (minValue !== undefined && num < minValue)
63
+ errors.push({ field, code: 'MIN_VALUE', message: `${field} deve ser maior ou igual a ${minValue}` });
64
+ if (maxValue !== undefined && num > maxValue)
65
+ errors.push({ field, code: 'MAX_VALUE', message: `${field} deve ser menor ou igual a ${maxValue}` });
66
+ if (step !== undefined && step > 0) {
67
+ const base = minValue ?? 0;
68
+ const remainder = Math.abs((num - base) / step - Math.round((num - base) / step));
69
+ if (remainder > 1e-9)
70
+ errors.push({ field, code: 'STEP_MISMATCH', message: `${field} deve seguir o incremento de ${step}` });
71
+ }
72
+ }
73
+ function getValidChoiceValues(config) {
74
+ const choices = config['choices'] ?? [];
75
+ return new Set(choices.map((c) => String(c.value)));
76
+ }
77
+ function checkClosedSet(value, valid, allowCustom, field, errors) {
78
+ if (allowCustom)
79
+ return;
80
+ if (!valid.has(String(value)))
81
+ errors.push({ field, code: 'INVALID_CHOICE', message: `${field} contém um valor fora das opções permitidas` });
82
+ }
83
+ function checkSelectionCount(values, config, field, errors) {
84
+ const min = config['minSelections'];
85
+ const max = config['maxSelections'];
86
+ if (min !== undefined && values.length < min)
87
+ errors.push({ field, code: 'MIN_SELECTIONS', message: `${field} requer no mínimo ${min} seleção(ões)` });
88
+ if (max !== undefined && values.length > max)
89
+ errors.push({ field, code: 'MAX_SELECTIONS', message: `${field} permite no máximo ${max} seleção(ões)` });
90
+ }
91
+ function validateSelect(value, config, field, errors) {
92
+ if (isEmptyValue(value))
93
+ return;
94
+ const multiple = Boolean(config['multiple']);
95
+ const allowCustom = Boolean(config['allowCustom'] ?? false);
96
+ const valid = getValidChoiceValues(config);
97
+ if (multiple) {
98
+ if (!Array.isArray(value)) {
99
+ errors.push({ field, code: 'NOT_ARRAY', message: `${field} deve ser uma lista` });
100
+ return;
101
+ }
102
+ if (!allowCustom)
103
+ for (const item of value)
104
+ checkClosedSet(item, valid, false, field, errors);
105
+ checkSelectionCount(value, config, field, errors);
106
+ return;
107
+ }
108
+ checkClosedSet(value, valid, allowCustom, field, errors);
109
+ if (Array.isArray(value))
110
+ errors.push({ field, code: 'SINGLE_ONLY', message: `${field} aceita apenas um valor` });
111
+ }
112
+ function validateCheckbox(value, config, field, errors) {
113
+ if (isEmptyValue(value))
114
+ return;
115
+ if (!Array.isArray(value)) {
116
+ errors.push({ field, code: 'NOT_ARRAY', message: `${field} deve ser uma lista de valores` });
117
+ return;
118
+ }
119
+ const valid = getValidChoiceValues(config);
120
+ for (const item of value)
121
+ checkClosedSet(item, valid, true, field, errors);
122
+ checkSelectionCount(value, config, field, errors);
123
+ }
124
+ function validateRadio(value, config, field, errors) {
125
+ if (isEmptyValue(value))
126
+ return;
127
+ checkClosedSet(value, getValidChoiceValues(config), Boolean(config['allowCustom']), field, errors);
128
+ }
129
+ function validateTrueFalse(value, field, errors) {
130
+ if (value === null || value === undefined)
131
+ return;
132
+ const isBoolean = typeof value === 'boolean' || value === 0 || value === 1 || value === '0' || value === '1';
133
+ if (!isBoolean)
134
+ errors.push({ field, code: 'NOT_BOOLEAN', message: `${field} deve ser verdadeiro ou falso` });
135
+ }
136
+ function validateMediaItem(item, config, field, errors) {
137
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) {
138
+ errors.push({ field, code: 'INVALID_MEDIA', message: `${field} deve referenciar uma mídia válida` });
139
+ return;
140
+ }
141
+ const media = item;
142
+ const mimeTypes = config['mimeTypes'] ?? [];
143
+ if (mimeTypes.length > 0 && media.mimeType) {
144
+ const normalized = mimeTypes.map((m) => m.toLowerCase());
145
+ if (!normalized.includes(media.mimeType.toLowerCase()))
146
+ errors.push({ field, code: 'INVALID_MIME', message: `${field} não aceita arquivos do tipo ${media.mimeType}` });
147
+ }
148
+ const maxSize = config['maxSize'];
149
+ const minSize = config['minSize'];
150
+ if (media.size !== undefined) {
151
+ if (maxSize !== undefined && media.size > maxSize)
152
+ errors.push({ field, code: 'FILE_TOO_LARGE', message: `${field} excede o tamanho máximo de ${Math.round(maxSize / 1024)}KB` });
153
+ if (minSize !== undefined && media.size < minSize)
154
+ errors.push({ field, code: 'FILE_TOO_SMALL', message: `${field} está abaixo do tamanho mínimo de ${Math.round(minSize / 1024)}KB` });
155
+ }
156
+ if (media.width !== undefined && media.height !== undefined) {
157
+ const minWidth = config['minWidth'];
158
+ const maxWidth = config['maxWidth'];
159
+ const minHeight = config['minHeight'];
160
+ const maxHeight = config['maxHeight'];
161
+ if (minWidth !== undefined && media.width < minWidth)
162
+ errors.push({ field, code: 'MIN_WIDTH', message: `${field} requer largura mínima de ${minWidth}px` });
163
+ if (maxWidth !== undefined && media.width > maxWidth)
164
+ errors.push({ field, code: 'MAX_WIDTH', message: `${field} permite largura máxima de ${maxWidth}px` });
165
+ if (minHeight !== undefined && media.height < minHeight)
166
+ errors.push({ field, code: 'MIN_HEIGHT', message: `${field} requer altura mínima de ${minHeight}px` });
167
+ if (maxHeight !== undefined && media.height > maxHeight)
168
+ errors.push({ field, code: 'MAX_HEIGHT', message: `${field} permite altura máxima de ${maxHeight}px` });
169
+ }
170
+ }
171
+ function validateImage(value, config, field, errors) {
172
+ if (isEmptyValue(value))
173
+ return;
174
+ validateMediaItem(value, config, field, errors);
175
+ }
176
+ function validateFile(value, config, field, errors) {
177
+ if (isEmptyValue(value))
178
+ return;
179
+ validateMediaItem(value, config, field, errors);
180
+ }
181
+ function validateGallery(value, config, field, errors) {
182
+ if (value === null || value === undefined)
183
+ return;
184
+ if (!Array.isArray(value)) {
185
+ errors.push({ field, code: 'NOT_ARRAY', message: `${field} deve ser uma lista de imagens` });
186
+ return;
187
+ }
188
+ const hasLimits = config['minSelections'] !== undefined || config['maxSelections'] !== undefined;
189
+ if (value.length === 0 && !hasLimits)
190
+ return;
191
+ const minSelections = config['minSelections'];
192
+ const maxSelections = config['maxSelections'];
193
+ if (minSelections !== undefined && value.length < minSelections)
194
+ errors.push({ field, code: 'MIN_SELECTIONS', message: `${field} requer no mínimo ${minSelections} imagem(ns)` });
195
+ if (maxSelections !== undefined && value.length > maxSelections)
196
+ errors.push({ field, code: 'MAX_SELECTIONS', message: `${field} permite no máximo ${maxSelections} imagem(ns)` });
197
+ for (const item of value)
198
+ validateMediaItem(item, config, field, errors);
199
+ }
200
+ function validateRelationshipIds(value, config, field, errors) {
201
+ if (isEmptyValue(value))
202
+ return;
203
+ const multiple = config['multiple'] !== false;
204
+ const minSelections = config['minSelections'];
205
+ const maxSelections = config['maxSelections'];
206
+ const ids = Array.isArray(value) ? value : [value];
207
+ for (const id of ids)
208
+ if (typeof id !== 'string' && typeof id !== 'number') {
209
+ errors.push({ field, code: 'INVALID_ID', message: `${field} contém um identificador inválido` });
210
+ return;
211
+ }
212
+ if (multiple) {
213
+ if (maxSelections !== undefined && ids.length > maxSelections)
214
+ errors.push({ field, code: 'MAX_SELECTIONS', message: `${field} permite no máximo ${maxSelections} seleção(ões)` });
215
+ if (minSelections !== undefined && ids.length < minSelections)
216
+ errors.push({ field, code: 'MIN_SELECTIONS', message: `${field} requer no mínimo ${minSelections} seleção(ões)` });
217
+ }
218
+ else if (ids.length > 1)
219
+ errors.push({ field, code: 'SINGLE_ONLY', message: `${field} aceita apenas um valor` });
220
+ }
221
+ function validateLink(value, field, errors) {
222
+ if (isEmptyValue(value))
223
+ return;
224
+ if (typeof value !== 'object' || value === null) {
225
+ errors.push({ field, code: 'INVALID_LINK', message: `${field} deve ser um objeto de link` });
226
+ return;
227
+ }
228
+ const link = value;
229
+ if (!link.url || typeof link.url !== 'string') {
230
+ errors.push({ field, code: 'LINK_URL_REQUIRED', message: `${field} requer uma URL` });
231
+ return;
232
+ }
233
+ try {
234
+ const parsed = new URL(link.url);
235
+ if (!['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol) && !link.url.startsWith('#') && !link.url.startsWith('/'))
236
+ throw new Error('protocol');
237
+ }
238
+ catch {
239
+ if (!link.url.startsWith('#') && !link.url.startsWith('/') && !link.url.startsWith('?'))
240
+ errors.push({ field, code: 'INVALID_URL', message: `${field} contém uma URL inválida` });
241
+ }
242
+ if (link.target !== undefined && !['_self', '_blank'].includes(String(link.target)))
243
+ errors.push({ field, code: 'INVALID_TARGET', message: `${field} aceita apenas _self ou _blank` });
244
+ }
245
+ function validateGoogleMap(value, field, errors) {
246
+ if (isEmptyValue(value))
247
+ return;
248
+ if (typeof value !== 'object' || value === null) {
249
+ errors.push({ field, code: 'INVALID_MAP', message: `${field} deve conter endereço e coordenadas` });
250
+ return;
251
+ }
252
+ const map = value;
253
+ if (isEmptyValue(map.address))
254
+ errors.push({ field, code: 'ADDRESS_REQUIRED', message: `${field} requer um endereço` });
255
+ const lat = Number(map.lat);
256
+ const lng = Number(map.lng);
257
+ if (!Number.isFinite(lat) || lat < -90 || lat > 90)
258
+ errors.push({ field, code: 'INVALID_LATITUDE', message: `${field} contém latitude inválida (-90 a 90)` });
259
+ if (!Number.isFinite(lng) || lng < -180 || lng > 180)
260
+ errors.push({ field, code: 'INVALID_LONGITUDE', message: `${field} contém longitude inválida (-180 a 180)` });
261
+ }
262
+ const HEX_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
263
+ function validateColorPicker(value, config, field, errors) {
264
+ if (isEmptyValue(value))
265
+ return;
266
+ const color = String(value);
267
+ const isRgba = color.startsWith('rgba(');
268
+ if (isRgba && !config['enableOpacity']) {
269
+ errors.push({ field, code: 'OPACITY_DISABLED', message: `${field} não permite transparência` });
270
+ return;
271
+ }
272
+ if (!isRgba && !HEX_PATTERN.test(color)) {
273
+ errors.push({ field, code: 'INVALID_COLOR', message: `${field} deve ser uma cor em formato hexadecimal válido` });
274
+ return;
275
+ }
276
+ const palette = config['palette'] ?? [];
277
+ if (palette.length > 0) {
278
+ const normalizedPalette = palette.map((e) => e.toLowerCase());
279
+ if (!normalizedPalette.includes(color.toLowerCase()))
280
+ errors.push({ field, code: 'NOT_IN_PALETTE', message: `${field} deve usar uma cor da paleta definida` });
281
+ }
282
+ }
283
+ /**
284
+ * Valida um único campo no cliente e retorna a primeira mensagem de erro
285
+ * ou null quando válido. Não considera lógica condicional.
286
+ */
287
+ export function validateFieldClient(field, value) {
288
+ if (field.type === 'clone' || field.type === 'repeater' || field.type === 'group' || field.type === 'flexible_content')
289
+ return null;
290
+ const config = field.config ?? {};
291
+ const errors = [];
292
+ checkRequired(value, field.required, field.label, errors);
293
+ switch (field.type) {
294
+ case 'text':
295
+ case 'textarea':
296
+ case 'password':
297
+ validateTextLike(value, config, field.label, errors);
298
+ break;
299
+ case 'email':
300
+ validateEmail(value, field.label, errors);
301
+ break;
302
+ case 'url':
303
+ case 'oembed':
304
+ validateUrl(value, field.label, errors);
305
+ break;
306
+ case 'number':
307
+ case 'range':
308
+ validateNumber(value, config, field.label, errors);
309
+ break;
310
+ case 'wysiwyg':
311
+ validateTextLike(value, config, field.label, errors);
312
+ break;
313
+ case 'select':
314
+ validateSelect(value, config, field.label, errors);
315
+ break;
316
+ case 'checkbox':
317
+ validateCheckbox(value, config, field.label, errors);
318
+ break;
319
+ case 'radio':
320
+ validateRadio(value, config, field.label, errors);
321
+ break;
322
+ case 'true_false':
323
+ validateTrueFalse(value, field.label, errors);
324
+ break;
325
+ case 'image':
326
+ validateImage(value, config, field.label, errors);
327
+ break;
328
+ case 'file':
329
+ validateFile(value, config, field.label, errors);
330
+ break;
331
+ case 'gallery':
332
+ validateGallery(value, config, field.label, errors);
333
+ break;
334
+ case 'link':
335
+ validateLink(value, field.label, errors);
336
+ break;
337
+ case 'page_link':
338
+ case 'post_object':
339
+ case 'relationship':
340
+ case 'taxonomy':
341
+ case 'user':
342
+ validateRelationshipIds(value, config, field.label, errors);
343
+ break;
344
+ case 'google_map':
345
+ validateGoogleMap(value, field.label, errors);
346
+ break;
347
+ case 'color_picker':
348
+ validateColorPicker(value, config, field.label, errors);
349
+ break;
350
+ default: break;
351
+ }
352
+ return errors[0]?.message ?? null;
353
+ }
354
+ //# sourceMappingURL=client-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-validate.js","sourceRoot":"","sources":["../src/client-validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ValidatableField } from './structural.js';
2
+ export type CloneDisplay = 'seamless' | 'group';
3
+ /**
4
+ * Expande campos do tipo `clone` nas definições alvo.
5
+ *
6
+ * - `display: 'seamless'` (default): os campos referenciados entram
7
+ * diretamente na lista, com os mesmos nomes (valores "inline").
8
+ * - `display: 'group'`: os campos viram subcampos de um pseudo-group com o
9
+ * nome do clone, e os nomes internos recebem o prefixo `{clone}_`
10
+ * (valores aninhados em data[clone.name]).
11
+ *
12
+ * Referências inexistentes são ignoradas; clones de clones não são
13
+ * resolvidos recursivamente (profundidade 1, como o modo básico do ACF).
14
+ */
15
+ export declare function expandCloneFields<T extends ValidatableField>(fields: T[]): T[];
16
+ //# sourceMappingURL=clone.d.ts.map