@stndrds/schema 1.0.0-alpha.263 → 1.0.0-alpha.265
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-_6tvjbyl.d.ts → attributes-_b3Db8vT.d.ts} +1 -23
- package/dist/{attributes-Cmkc7UgJ.d.mts → attributes-lBLiOIY3.d.mts} +1 -23
- package/dist/chunk-NGGU6BSN.mjs +216 -0
- package/dist/chunk-NI3HCSYH.js +229 -0
- package/dist/{chunk-54WDPQ6R.mjs → chunk-QIWADKYA.mjs} +12 -216
- package/dist/{chunk-TS3PJOMZ.js → chunk-ZBQEMIAV.js} +11 -227
- package/dist/exceptions.d.mts +458 -0
- package/dist/exceptions.d.ts +458 -0
- package/dist/exceptions.js +154 -0
- package/dist/exceptions.mjs +1 -0
- package/dist/{helpers-BTC6TsKH.d.ts → helpers-eyrnPJEF.d.ts} +4 -39
- package/dist/{helpers-BO10yqih.d.mts → helpers-uKLet0kF.d.mts} +4 -39
- package/dist/index.d.mts +150 -476
- package/dist/index.d.ts +150 -476
- package/dist/index.js +238 -139
- package/dist/index.mjs +131 -35
- package/dist/migrations-BXd2ZGfM.d.mts +39 -0
- package/dist/migrations-DcuJZ8qO.d.ts +39 -0
- package/dist/{types-CVswgCx9.d.mts → types-DNz3ITS-.d.mts} +1 -1
- package/dist/{types-B_UZK_6m.d.ts → types-DqLi1tx1.d.ts} +1 -1
- package/dist/validation/all.d.mts +4 -3
- package/dist/validation/all.d.ts +4 -3
- package/dist/validation/all.js +10 -9
- package/dist/validation/all.mjs +4 -3
- package/dist/validation/complex/currency.d.mts +2 -2
- package/dist/validation/complex/currency.d.ts +2 -2
- package/dist/validation/complex/location.d.mts +2 -2
- package/dist/validation/complex/location.d.ts +2 -2
- package/dist/validation/complex/phone.d.mts +2 -2
- package/dist/validation/complex/phone.d.ts +2 -2
- package/dist/validation/complex/relation.d.mts +2 -2
- package/dist/validation/complex/relation.d.ts +2 -2
- package/dist/validation/complex/richtext.d.mts +2 -2
- package/dist/validation/complex/richtext.d.ts +2 -2
- package/dist/validation/complex/select.d.mts +2 -2
- package/dist/validation/complex/select.d.ts +2 -2
- package/dist/validation/complex/user.d.mts +2 -2
- package/dist/validation/complex/user.d.ts +2 -2
- package/dist/validation/computed/formula.d.mts +2 -2
- package/dist/validation/computed/formula.d.ts +2 -2
- package/dist/validation/computed/rollup.d.mts +2 -2
- package/dist/validation/computed/rollup.d.ts +2 -2
- package/dist/validation/config/index.d.mts +1 -1
- package/dist/validation/config/index.d.ts +1 -1
- package/dist/validation/core/index.d.mts +3 -3
- package/dist/validation/core/index.d.ts +3 -3
- package/dist/validation/object/index.d.mts +5 -4
- package/dist/validation/object/index.d.ts +5 -4
- package/dist/validation/object/index.js +16 -15
- package/dist/validation/object/index.mjs +4 -3
- package/dist/validation/primitives/checkbox.d.mts +2 -2
- package/dist/validation/primitives/checkbox.d.ts +2 -2
- package/dist/validation/primitives/date.d.mts +2 -2
- package/dist/validation/primitives/date.d.ts +2 -2
- package/dist/validation/primitives/number.d.mts +2 -2
- package/dist/validation/primitives/number.d.ts +2 -2
- package/dist/validation/primitives/text.d.mts +2 -2
- package/dist/validation/primitives/text.d.ts +2 -2
- package/package.json +7 -2
|
@@ -1,105 +1,3 @@
|
|
|
1
|
-
import { createDateValidator } from './chunk-Q44QKLN4.mjs';
|
|
2
|
-
import { createNumberValidator } from './chunk-UANQJ2GH.mjs';
|
|
3
|
-
import { createTextValidator } from './chunk-U36ZIBEM.mjs';
|
|
4
|
-
import { createMultiselectValidator, createSelectValidator, createStatusValidator } from './chunk-ZDQ5AP26.mjs';
|
|
5
|
-
import { createUserValidator } from './chunk-LV3FEUKU.mjs';
|
|
6
|
-
import { createFormulaValidator } from './chunk-UXAHLSWC.mjs';
|
|
7
|
-
import { createRollupValidator } from './chunk-NS63SPNN.mjs';
|
|
8
|
-
import { createCheckboxValidator } from './chunk-OSSGN43B.mjs';
|
|
9
|
-
import { createCurrencyValidator } from './chunk-AYVHMVKQ.mjs';
|
|
10
|
-
import { createLocationValidator } from './chunk-YUFTHPOE.mjs';
|
|
11
|
-
import { createPhoneValidator } from './chunk-JUKLL5RJ.mjs';
|
|
12
|
-
import { createRelationValidator } from './chunk-GO6LQADH.mjs';
|
|
13
|
-
import { createRichtextValidator } from './chunk-QVLQPW3O.mjs';
|
|
14
|
-
import { DEFAULT_VALIDATION_MESSAGES, formatZodErrors } from './chunk-HRQEZUAA.mjs';
|
|
15
|
-
import { z } from 'zod';
|
|
16
|
-
|
|
17
|
-
function isEmptyValue(value) {
|
|
18
|
-
if (value === null || value === void 0) return true;
|
|
19
|
-
if (typeof value === "string" && value.trim() === "") return true;
|
|
20
|
-
if (value instanceof Date) return false;
|
|
21
|
-
if (typeof value === "object" && !Array.isArray(value)) {
|
|
22
|
-
return Object.values(value).every(
|
|
23
|
-
(v) => v === null || v === void 0 || typeof v === "string" && v.trim() === ""
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
function withEmptyToNull(validator) {
|
|
29
|
-
return z.preprocess((val) => isEmptyValue(val) ? null : val, validator.nullish());
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// src/validation/object/attribute-factory.ts
|
|
33
|
-
function createAttributeValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
|
|
34
|
-
switch (attr.type) {
|
|
35
|
-
case "text":
|
|
36
|
-
return createTextValidator(attr, messages);
|
|
37
|
-
case "richtext":
|
|
38
|
-
return createRichtextValidator(attr, messages);
|
|
39
|
-
case "number":
|
|
40
|
-
return createNumberValidator(attr, messages);
|
|
41
|
-
case "checkbox":
|
|
42
|
-
return createCheckboxValidator(attr, messages);
|
|
43
|
-
case "date":
|
|
44
|
-
return createDateValidator(attr, messages);
|
|
45
|
-
case "phone":
|
|
46
|
-
return createPhoneValidator(attr, messages);
|
|
47
|
-
case "currency":
|
|
48
|
-
return createCurrencyValidator(attr, messages);
|
|
49
|
-
case "status":
|
|
50
|
-
return createStatusValidator(attr, messages);
|
|
51
|
-
case "location":
|
|
52
|
-
return createLocationValidator(attr, messages);
|
|
53
|
-
case "select":
|
|
54
|
-
return createSelectValidator(attr, messages);
|
|
55
|
-
case "multiselect":
|
|
56
|
-
return createMultiselectValidator(attr, messages);
|
|
57
|
-
case "user":
|
|
58
|
-
return createUserValidator(attr, messages);
|
|
59
|
-
case "relation":
|
|
60
|
-
return createRelationValidator(attr, messages);
|
|
61
|
-
case "formula":
|
|
62
|
-
return createFormulaValidator(attr, messages);
|
|
63
|
-
case "rollup":
|
|
64
|
-
return createRollupValidator(attr, messages);
|
|
65
|
-
default:
|
|
66
|
-
return z.unknown();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function createFormAttributeValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
|
|
70
|
-
const validator = createAttributeValidator(attr, messages);
|
|
71
|
-
if (!attr.required) {
|
|
72
|
-
return withEmptyToNull(validator);
|
|
73
|
-
}
|
|
74
|
-
return validator;
|
|
75
|
-
}
|
|
76
|
-
var objectValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
77
|
-
var draftValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
78
|
-
function createObjectValidator(objectDef) {
|
|
79
|
-
const cached = objectValidatorCache.get(objectDef);
|
|
80
|
-
if (cached) return cached;
|
|
81
|
-
const shape = {};
|
|
82
|
-
for (const attr of objectDef.attributes) {
|
|
83
|
-
const validator = createAttributeValidator(attr);
|
|
84
|
-
shape[attr.name] = attr.required ? validator : withEmptyToNull(validator);
|
|
85
|
-
}
|
|
86
|
-
const schema = z.object(shape).passthrough();
|
|
87
|
-
objectValidatorCache.set(objectDef, schema);
|
|
88
|
-
return schema;
|
|
89
|
-
}
|
|
90
|
-
function createDraftValidator(objectDef) {
|
|
91
|
-
const cached = draftValidatorCache.get(objectDef);
|
|
92
|
-
if (cached) return cached;
|
|
93
|
-
const shape = {};
|
|
94
|
-
for (const attr of objectDef.attributes) {
|
|
95
|
-
const validator = createAttributeValidator(attr);
|
|
96
|
-
shape[attr.name] = withEmptyToNull(validator);
|
|
97
|
-
}
|
|
98
|
-
const schema = z.object(shape).passthrough();
|
|
99
|
-
draftValidatorCache.set(objectDef, schema);
|
|
100
|
-
return schema;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
1
|
// src/exceptions.ts
|
|
104
2
|
var SchemaErrorCode = {
|
|
105
3
|
// Generic
|
|
@@ -222,7 +120,17 @@ var SchemaErrorCode = {
|
|
|
222
120
|
EMAIL_IMAGE_PROXY_UPSTREAM_FAILED: "EMAIL_IMAGE_PROXY_UPSTREAM_FAILED",
|
|
223
121
|
// Email provider sync — transport failures from Gmail / Microsoft Graph
|
|
224
122
|
EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED",
|
|
225
|
-
EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED"
|
|
123
|
+
EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED",
|
|
124
|
+
// Reflexes — agent-authored deterministic automations
|
|
125
|
+
REFLEX_INVALID_TRANSITION: "REFLEX_INVALID_TRANSITION",
|
|
126
|
+
REFLEX_INVALID_TOKEN: "REFLEX_INVALID_TOKEN",
|
|
127
|
+
REFLEX_CAPABILITY_DENIED: "REFLEX_CAPABILITY_DENIED",
|
|
128
|
+
REFLEX_GATEWAY_UNAVAILABLE: "REFLEX_GATEWAY_UNAVAILABLE",
|
|
129
|
+
REFLEX_BUNDLE_FAILED: "REFLEX_BUNDLE_FAILED",
|
|
130
|
+
REFLEX_EGRESS_DENIED: "REFLEX_EGRESS_DENIED",
|
|
131
|
+
REFLEX_PROTOCOL_VIOLATION: "REFLEX_PROTOCOL_VIOLATION",
|
|
132
|
+
REFLEX_RUN_FAILED: "REFLEX_RUN_FAILED",
|
|
133
|
+
REFLEX_RUN_TIMEOUT: "REFLEX_RUN_TIMEOUT"
|
|
226
134
|
};
|
|
227
135
|
var SchemaError = class extends Error {
|
|
228
136
|
constructor(message, code = SchemaErrorCode.UNKNOWN, details) {
|
|
@@ -598,116 +506,4 @@ function isObjectReferencedError(error) {
|
|
|
598
506
|
return error instanceof ObjectReferencedError;
|
|
599
507
|
}
|
|
600
508
|
|
|
601
|
-
|
|
602
|
-
function validateAttribute(attr, value) {
|
|
603
|
-
const validator = createAttributeValidator(attr);
|
|
604
|
-
if (!attr.required && (value === void 0 || value === null)) {
|
|
605
|
-
return { success: true, data: { [attr.name]: value } };
|
|
606
|
-
}
|
|
607
|
-
const result = validator.safeParse(value);
|
|
608
|
-
if (result.success) {
|
|
609
|
-
return {
|
|
610
|
-
success: true,
|
|
611
|
-
data: { [attr.name]: result.data }
|
|
612
|
-
};
|
|
613
|
-
}
|
|
614
|
-
return {
|
|
615
|
-
success: false,
|
|
616
|
-
errors: formatZodErrors(result.error).map((err) => ({
|
|
617
|
-
path: [attr.name, ...err.path],
|
|
618
|
-
message: err.message
|
|
619
|
-
}))
|
|
620
|
-
};
|
|
621
|
-
}
|
|
622
|
-
function validateObject(objectDef, data) {
|
|
623
|
-
const validator = createObjectValidator(objectDef);
|
|
624
|
-
const result = validator.safeParse(data);
|
|
625
|
-
if (result.success) {
|
|
626
|
-
return {
|
|
627
|
-
success: true,
|
|
628
|
-
data: result.data
|
|
629
|
-
};
|
|
630
|
-
}
|
|
631
|
-
return {
|
|
632
|
-
success: false,
|
|
633
|
-
errors: formatZodErrors(result.error)
|
|
634
|
-
};
|
|
635
|
-
}
|
|
636
|
-
function validateObjectOrThrow(objectDef, data) {
|
|
637
|
-
const result = validateObject(objectDef, data);
|
|
638
|
-
if (!result.success) {
|
|
639
|
-
const errors = result.errors ?? [];
|
|
640
|
-
const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
|
|
641
|
-
throw new ValidationError(
|
|
642
|
-
`Validation failed for ${objectDef.label}:
|
|
643
|
-
${detail}`,
|
|
644
|
-
errors.map((err) => ({ path: err.path, message: err.message }))
|
|
645
|
-
);
|
|
646
|
-
}
|
|
647
|
-
return result.data;
|
|
648
|
-
}
|
|
649
|
-
function validateDraft(objectDef, data) {
|
|
650
|
-
const validator = createDraftValidator(objectDef);
|
|
651
|
-
const result = validator.safeParse(data);
|
|
652
|
-
if (result.success) {
|
|
653
|
-
return {
|
|
654
|
-
success: true,
|
|
655
|
-
data: result.data
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
return {
|
|
659
|
-
success: false,
|
|
660
|
-
errors: formatZodErrors(result.error)
|
|
661
|
-
};
|
|
662
|
-
}
|
|
663
|
-
function validateDraftOrThrow(objectDef, data) {
|
|
664
|
-
const result = validateDraft(objectDef, data);
|
|
665
|
-
if (!result.success) {
|
|
666
|
-
const errors = result.errors ?? [];
|
|
667
|
-
const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
|
|
668
|
-
throw new ValidationError(
|
|
669
|
-
`Draft validation failed for ${objectDef.label}:
|
|
670
|
-
${detail}`,
|
|
671
|
-
errors.map((err) => ({ path: err.path, message: err.message }))
|
|
672
|
-
);
|
|
673
|
-
}
|
|
674
|
-
return result.data;
|
|
675
|
-
}
|
|
676
|
-
function rejectUnknownAttributesOrThrow(objectDef, data) {
|
|
677
|
-
const knownNames = new Set(objectDef.attributes.map((a) => a.name));
|
|
678
|
-
const unknownKeys = Object.keys(data).filter((key) => !knownNames.has(key));
|
|
679
|
-
if (unknownKeys.length > 0) {
|
|
680
|
-
throw new ValidationError(
|
|
681
|
-
`Unknown attribute${unknownKeys.length > 1 ? "s" : ""} for ${objectDef.label}: ${unknownKeys.join(", ")}`,
|
|
682
|
-
unknownKeys.map((key) => ({ path: [key], message: "Unknown attribute" }))
|
|
683
|
-
);
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
function isValuePresent(value) {
|
|
687
|
-
if (value === void 0 || value === null) {
|
|
688
|
-
return false;
|
|
689
|
-
}
|
|
690
|
-
if (typeof value === "string" && value.trim() === "") {
|
|
691
|
-
return false;
|
|
692
|
-
}
|
|
693
|
-
return true;
|
|
694
|
-
}
|
|
695
|
-
function getMissingRequiredAttributes(objectDef, data) {
|
|
696
|
-
const missing = [];
|
|
697
|
-
for (const attr of objectDef.attributes) {
|
|
698
|
-
if (attr.required && !isValuePresent(data[attr.name])) {
|
|
699
|
-
missing.push(attr);
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
return missing;
|
|
703
|
-
}
|
|
704
|
-
function isRecordComplete(objectDef, data) {
|
|
705
|
-
const missing = getMissingRequiredAttributes(objectDef, data);
|
|
706
|
-
if (missing.length > 0) {
|
|
707
|
-
return false;
|
|
708
|
-
}
|
|
709
|
-
const validation = validateObject(objectDef, data);
|
|
710
|
-
return validation.success;
|
|
711
|
-
}
|
|
712
|
-
|
|
713
|
-
export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, SearchBackendError, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, createAttributeValidator, createDraftValidator, createFormAttributeValidator, createObjectValidator, getMissingRequiredAttributes, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordComplete, isRecordReferencedError, isSchemaError, isValidationError, rejectUnknownAttributesOrThrow, validateAttribute, validateDraft, validateDraftOrThrow, validateObject, validateObjectOrThrow };
|
|
509
|
+
export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, SearchBackendError, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError };
|
|
@@ -1,107 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var chunkSI34M4IC_js = require('./chunk-SI34M4IC.js');
|
|
4
|
-
var chunkYIP5FJ5H_js = require('./chunk-YIP5FJ5H.js');
|
|
5
|
-
var chunkQAF3HNKQ_js = require('./chunk-QAF3HNKQ.js');
|
|
6
|
-
var chunkQWKLQRBX_js = require('./chunk-QWKLQRBX.js');
|
|
7
|
-
var chunkKNGWHQLR_js = require('./chunk-KNGWHQLR.js');
|
|
8
|
-
var chunkHTSTPTNZ_js = require('./chunk-HTSTPTNZ.js');
|
|
9
|
-
var chunkV2UA2D4E_js = require('./chunk-V2UA2D4E.js');
|
|
10
|
-
var chunk5WATIVCA_js = require('./chunk-5WATIVCA.js');
|
|
11
|
-
var chunkACKMC6FL_js = require('./chunk-ACKMC6FL.js');
|
|
12
|
-
var chunkE6JUYGJX_js = require('./chunk-E6JUYGJX.js');
|
|
13
|
-
var chunkEBGRZUIH_js = require('./chunk-EBGRZUIH.js');
|
|
14
|
-
var chunkEEH4XQ7W_js = require('./chunk-EEH4XQ7W.js');
|
|
15
|
-
var chunkEW5XR2X3_js = require('./chunk-EW5XR2X3.js');
|
|
16
|
-
var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
|
|
17
|
-
var zod = require('zod');
|
|
18
|
-
|
|
19
|
-
function isEmptyValue(value) {
|
|
20
|
-
if (value === null || value === void 0) return true;
|
|
21
|
-
if (typeof value === "string" && value.trim() === "") return true;
|
|
22
|
-
if (value instanceof Date) return false;
|
|
23
|
-
if (typeof value === "object" && !Array.isArray(value)) {
|
|
24
|
-
return Object.values(value).every(
|
|
25
|
-
(v) => v === null || v === void 0 || typeof v === "string" && v.trim() === ""
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
function withEmptyToNull(validator) {
|
|
31
|
-
return zod.z.preprocess((val) => isEmptyValue(val) ? null : val, validator.nullish());
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// src/validation/object/attribute-factory.ts
|
|
35
|
-
function createAttributeValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
36
|
-
switch (attr.type) {
|
|
37
|
-
case "text":
|
|
38
|
-
return chunkQAF3HNKQ_js.createTextValidator(attr, messages);
|
|
39
|
-
case "richtext":
|
|
40
|
-
return chunkEW5XR2X3_js.createRichtextValidator(attr, messages);
|
|
41
|
-
case "number":
|
|
42
|
-
return chunkYIP5FJ5H_js.createNumberValidator(attr, messages);
|
|
43
|
-
case "checkbox":
|
|
44
|
-
return chunk5WATIVCA_js.createCheckboxValidator(attr, messages);
|
|
45
|
-
case "date":
|
|
46
|
-
return chunkSI34M4IC_js.createDateValidator(attr, messages);
|
|
47
|
-
case "phone":
|
|
48
|
-
return chunkEBGRZUIH_js.createPhoneValidator(attr, messages);
|
|
49
|
-
case "currency":
|
|
50
|
-
return chunkACKMC6FL_js.createCurrencyValidator(attr, messages);
|
|
51
|
-
case "status":
|
|
52
|
-
return chunkQWKLQRBX_js.createStatusValidator(attr, messages);
|
|
53
|
-
case "location":
|
|
54
|
-
return chunkE6JUYGJX_js.createLocationValidator(attr, messages);
|
|
55
|
-
case "select":
|
|
56
|
-
return chunkQWKLQRBX_js.createSelectValidator(attr, messages);
|
|
57
|
-
case "multiselect":
|
|
58
|
-
return chunkQWKLQRBX_js.createMultiselectValidator(attr, messages);
|
|
59
|
-
case "user":
|
|
60
|
-
return chunkKNGWHQLR_js.createUserValidator(attr, messages);
|
|
61
|
-
case "relation":
|
|
62
|
-
return chunkEEH4XQ7W_js.createRelationValidator(attr, messages);
|
|
63
|
-
case "formula":
|
|
64
|
-
return chunkHTSTPTNZ_js.createFormulaValidator(attr, messages);
|
|
65
|
-
case "rollup":
|
|
66
|
-
return chunkV2UA2D4E_js.createRollupValidator(attr, messages);
|
|
67
|
-
default:
|
|
68
|
-
return zod.z.unknown();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function createFormAttributeValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
|
|
72
|
-
const validator = createAttributeValidator(attr, messages);
|
|
73
|
-
if (!attr.required) {
|
|
74
|
-
return withEmptyToNull(validator);
|
|
75
|
-
}
|
|
76
|
-
return validator;
|
|
77
|
-
}
|
|
78
|
-
var objectValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
79
|
-
var draftValidatorCache = /* @__PURE__ */ new WeakMap();
|
|
80
|
-
function createObjectValidator(objectDef) {
|
|
81
|
-
const cached = objectValidatorCache.get(objectDef);
|
|
82
|
-
if (cached) return cached;
|
|
83
|
-
const shape = {};
|
|
84
|
-
for (const attr of objectDef.attributes) {
|
|
85
|
-
const validator = createAttributeValidator(attr);
|
|
86
|
-
shape[attr.name] = attr.required ? validator : withEmptyToNull(validator);
|
|
87
|
-
}
|
|
88
|
-
const schema = zod.z.object(shape).passthrough();
|
|
89
|
-
objectValidatorCache.set(objectDef, schema);
|
|
90
|
-
return schema;
|
|
91
|
-
}
|
|
92
|
-
function createDraftValidator(objectDef) {
|
|
93
|
-
const cached = draftValidatorCache.get(objectDef);
|
|
94
|
-
if (cached) return cached;
|
|
95
|
-
const shape = {};
|
|
96
|
-
for (const attr of objectDef.attributes) {
|
|
97
|
-
const validator = createAttributeValidator(attr);
|
|
98
|
-
shape[attr.name] = withEmptyToNull(validator);
|
|
99
|
-
}
|
|
100
|
-
const schema = zod.z.object(shape).passthrough();
|
|
101
|
-
draftValidatorCache.set(objectDef, schema);
|
|
102
|
-
return schema;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
3
|
// src/exceptions.ts
|
|
106
4
|
var SchemaErrorCode = {
|
|
107
5
|
// Generic
|
|
@@ -224,7 +122,17 @@ var SchemaErrorCode = {
|
|
|
224
122
|
EMAIL_IMAGE_PROXY_UPSTREAM_FAILED: "EMAIL_IMAGE_PROXY_UPSTREAM_FAILED",
|
|
225
123
|
// Email provider sync — transport failures from Gmail / Microsoft Graph
|
|
226
124
|
EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED",
|
|
227
|
-
EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED"
|
|
125
|
+
EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED",
|
|
126
|
+
// Reflexes — agent-authored deterministic automations
|
|
127
|
+
REFLEX_INVALID_TRANSITION: "REFLEX_INVALID_TRANSITION",
|
|
128
|
+
REFLEX_INVALID_TOKEN: "REFLEX_INVALID_TOKEN",
|
|
129
|
+
REFLEX_CAPABILITY_DENIED: "REFLEX_CAPABILITY_DENIED",
|
|
130
|
+
REFLEX_GATEWAY_UNAVAILABLE: "REFLEX_GATEWAY_UNAVAILABLE",
|
|
131
|
+
REFLEX_BUNDLE_FAILED: "REFLEX_BUNDLE_FAILED",
|
|
132
|
+
REFLEX_EGRESS_DENIED: "REFLEX_EGRESS_DENIED",
|
|
133
|
+
REFLEX_PROTOCOL_VIOLATION: "REFLEX_PROTOCOL_VIOLATION",
|
|
134
|
+
REFLEX_RUN_FAILED: "REFLEX_RUN_FAILED",
|
|
135
|
+
REFLEX_RUN_TIMEOUT: "REFLEX_RUN_TIMEOUT"
|
|
228
136
|
};
|
|
229
137
|
var SchemaError = class extends Error {
|
|
230
138
|
constructor(message, code = SchemaErrorCode.UNKNOWN, details) {
|
|
@@ -600,118 +508,6 @@ function isObjectReferencedError(error) {
|
|
|
600
508
|
return error instanceof ObjectReferencedError;
|
|
601
509
|
}
|
|
602
510
|
|
|
603
|
-
// src/validation/object/helpers.ts
|
|
604
|
-
function validateAttribute(attr, value) {
|
|
605
|
-
const validator = createAttributeValidator(attr);
|
|
606
|
-
if (!attr.required && (value === void 0 || value === null)) {
|
|
607
|
-
return { success: true, data: { [attr.name]: value } };
|
|
608
|
-
}
|
|
609
|
-
const result = validator.safeParse(value);
|
|
610
|
-
if (result.success) {
|
|
611
|
-
return {
|
|
612
|
-
success: true,
|
|
613
|
-
data: { [attr.name]: result.data }
|
|
614
|
-
};
|
|
615
|
-
}
|
|
616
|
-
return {
|
|
617
|
-
success: false,
|
|
618
|
-
errors: chunkYKWSHBT5_js.formatZodErrors(result.error).map((err) => ({
|
|
619
|
-
path: [attr.name, ...err.path],
|
|
620
|
-
message: err.message
|
|
621
|
-
}))
|
|
622
|
-
};
|
|
623
|
-
}
|
|
624
|
-
function validateObject(objectDef, data) {
|
|
625
|
-
const validator = createObjectValidator(objectDef);
|
|
626
|
-
const result = validator.safeParse(data);
|
|
627
|
-
if (result.success) {
|
|
628
|
-
return {
|
|
629
|
-
success: true,
|
|
630
|
-
data: result.data
|
|
631
|
-
};
|
|
632
|
-
}
|
|
633
|
-
return {
|
|
634
|
-
success: false,
|
|
635
|
-
errors: chunkYKWSHBT5_js.formatZodErrors(result.error)
|
|
636
|
-
};
|
|
637
|
-
}
|
|
638
|
-
function validateObjectOrThrow(objectDef, data) {
|
|
639
|
-
const result = validateObject(objectDef, data);
|
|
640
|
-
if (!result.success) {
|
|
641
|
-
const errors = result.errors ?? [];
|
|
642
|
-
const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
|
|
643
|
-
throw new ValidationError(
|
|
644
|
-
`Validation failed for ${objectDef.label}:
|
|
645
|
-
${detail}`,
|
|
646
|
-
errors.map((err) => ({ path: err.path, message: err.message }))
|
|
647
|
-
);
|
|
648
|
-
}
|
|
649
|
-
return result.data;
|
|
650
|
-
}
|
|
651
|
-
function validateDraft(objectDef, data) {
|
|
652
|
-
const validator = createDraftValidator(objectDef);
|
|
653
|
-
const result = validator.safeParse(data);
|
|
654
|
-
if (result.success) {
|
|
655
|
-
return {
|
|
656
|
-
success: true,
|
|
657
|
-
data: result.data
|
|
658
|
-
};
|
|
659
|
-
}
|
|
660
|
-
return {
|
|
661
|
-
success: false,
|
|
662
|
-
errors: chunkYKWSHBT5_js.formatZodErrors(result.error)
|
|
663
|
-
};
|
|
664
|
-
}
|
|
665
|
-
function validateDraftOrThrow(objectDef, data) {
|
|
666
|
-
const result = validateDraft(objectDef, data);
|
|
667
|
-
if (!result.success) {
|
|
668
|
-
const errors = result.errors ?? [];
|
|
669
|
-
const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
|
|
670
|
-
throw new ValidationError(
|
|
671
|
-
`Draft validation failed for ${objectDef.label}:
|
|
672
|
-
${detail}`,
|
|
673
|
-
errors.map((err) => ({ path: err.path, message: err.message }))
|
|
674
|
-
);
|
|
675
|
-
}
|
|
676
|
-
return result.data;
|
|
677
|
-
}
|
|
678
|
-
function rejectUnknownAttributesOrThrow(objectDef, data) {
|
|
679
|
-
const knownNames = new Set(objectDef.attributes.map((a) => a.name));
|
|
680
|
-
const unknownKeys = Object.keys(data).filter((key) => !knownNames.has(key));
|
|
681
|
-
if (unknownKeys.length > 0) {
|
|
682
|
-
throw new ValidationError(
|
|
683
|
-
`Unknown attribute${unknownKeys.length > 1 ? "s" : ""} for ${objectDef.label}: ${unknownKeys.join(", ")}`,
|
|
684
|
-
unknownKeys.map((key) => ({ path: [key], message: "Unknown attribute" }))
|
|
685
|
-
);
|
|
686
|
-
}
|
|
687
|
-
}
|
|
688
|
-
function isValuePresent(value) {
|
|
689
|
-
if (value === void 0 || value === null) {
|
|
690
|
-
return false;
|
|
691
|
-
}
|
|
692
|
-
if (typeof value === "string" && value.trim() === "") {
|
|
693
|
-
return false;
|
|
694
|
-
}
|
|
695
|
-
return true;
|
|
696
|
-
}
|
|
697
|
-
function getMissingRequiredAttributes(objectDef, data) {
|
|
698
|
-
const missing = [];
|
|
699
|
-
for (const attr of objectDef.attributes) {
|
|
700
|
-
if (attr.required && !isValuePresent(data[attr.name])) {
|
|
701
|
-
missing.push(attr);
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
return missing;
|
|
705
|
-
}
|
|
706
|
-
function isRecordComplete(objectDef, data) {
|
|
707
|
-
const missing = getMissingRequiredAttributes(objectDef, data);
|
|
708
|
-
if (missing.length > 0) {
|
|
709
|
-
return false;
|
|
710
|
-
}
|
|
711
|
-
const validation = validateObject(objectDef, data);
|
|
712
|
-
return validation.success;
|
|
713
|
-
}
|
|
714
|
-
|
|
715
511
|
exports.AccessDeniedError = AccessDeniedError;
|
|
716
512
|
exports.AttributeInUseError = AttributeInUseError;
|
|
717
513
|
exports.AttributeNotFoundError = AttributeNotFoundError;
|
|
@@ -742,22 +538,10 @@ exports.SyncConflictError = SyncConflictError;
|
|
|
742
538
|
exports.SyncError = SyncError;
|
|
743
539
|
exports.SystemEntityImmutableError = SystemEntityImmutableError;
|
|
744
540
|
exports.ValidationError = ValidationError;
|
|
745
|
-
exports.createAttributeValidator = createAttributeValidator;
|
|
746
|
-
exports.createDraftValidator = createDraftValidator;
|
|
747
|
-
exports.createFormAttributeValidator = createFormAttributeValidator;
|
|
748
|
-
exports.createObjectValidator = createObjectValidator;
|
|
749
|
-
exports.getMissingRequiredAttributes = getMissingRequiredAttributes;
|
|
750
541
|
exports.isAttributeInUseError = isAttributeInUseError;
|
|
751
542
|
exports.isNotFoundError = isNotFoundError;
|
|
752
543
|
exports.isObjectReferencedError = isObjectReferencedError;
|
|
753
544
|
exports.isProtectedResourceError = isProtectedResourceError;
|
|
754
|
-
exports.isRecordComplete = isRecordComplete;
|
|
755
545
|
exports.isRecordReferencedError = isRecordReferencedError;
|
|
756
546
|
exports.isSchemaError = isSchemaError;
|
|
757
547
|
exports.isValidationError = isValidationError;
|
|
758
|
-
exports.rejectUnknownAttributesOrThrow = rejectUnknownAttributesOrThrow;
|
|
759
|
-
exports.validateAttribute = validateAttribute;
|
|
760
|
-
exports.validateDraft = validateDraft;
|
|
761
|
-
exports.validateDraftOrThrow = validateDraftOrThrow;
|
|
762
|
-
exports.validateObject = validateObject;
|
|
763
|
-
exports.validateObjectOrThrow = validateObjectOrThrow;
|