@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,566 +0,0 @@
1
- // src/exceptions.ts
2
- var SchemaErrorCode = {
3
- // Generic
4
- UNKNOWN: "SCHEMA_UNKNOWN_ERROR",
5
- // Not Found
6
- OBJECT_NOT_FOUND: "SCHEMA_OBJECT_NOT_FOUND",
7
- ATTRIBUTE_NOT_FOUND: "SCHEMA_ATTRIBUTE_NOT_FOUND",
8
- RECORD_NOT_FOUND: "SCHEMA_RECORD_NOT_FOUND",
9
- ROLE_NOT_FOUND: "SCHEMA_ROLE_NOT_FOUND",
10
- MEMORY_NOT_FOUND: "SCHEMA_MEMORY_NOT_FOUND",
11
- SCHEMA_PLAN_NOT_FOUND: "SCHEMA_PLAN_NOT_FOUND",
12
- // Validation
13
- VALIDATION_FAILED: "SCHEMA_VALIDATION_FAILED",
14
- INVALID_ATTRIBUTE_NAME: "SCHEMA_INVALID_ATTRIBUTE_NAME",
15
- INVALID_OBJECT_NAME: "SCHEMA_INVALID_OBJECT_NAME",
16
- // Protected Resources
17
- PROTECTED_OBJECT: "SCHEMA_PROTECTED_OBJECT",
18
- PROTECTED_ATTRIBUTE: "SCHEMA_PROTECTED_ATTRIBUTE",
19
- PROTECTED_VIEW: "SCHEMA_PROTECTED_VIEW",
20
- PROTECTED_ROLE: "SCHEMA_PROTECTED_ROLE",
21
- // Permissions
22
- //
23
- // `FORBIDDEN` means "you lack permission", and only that (#2681).
24
- FORBIDDEN: "SCHEMA_FORBIDDEN",
25
- ACCESS_DENIED: "SCHEMA_ACCESS_DENIED",
26
- // Refusals that are NOT permission denials (#2681)
27
- //
28
- // `FORBIDDEN`'s message is redacted to a neutral sentence (#2675), which is
29
- // honest only while the code means one thing. It did not: a workspace
30
- // invariant (the last owner), a state gate (a disarmed reflex), an
31
- // immutability refusal (system forms) and a missing actor context each told
32
- // a caller who holds every permission that they lack one, sending them to an
33
- // administrator with nothing to grant. So a refusal a permission grant would
34
- // NOT lift takes one of the codes below — plus `SYSTEM_ENTITY_IMMUTABLE`,
35
- // which already existed — and keeps the explanatory message that names its
36
- // remedy. Every one answers 403, exactly as it did while miscoded: the
37
- // ruling changed the semantics, not a single HTTP status.
38
- //
39
- // A fifth site was seen and deliberately left alone: `ApiKeyService`'s
40
- // missing-actor refusal answers 400 `VALIDATION_FAILED`, and moving it here
41
- // would change a public HTTP status — which the ruling forbids. It stays at
42
- // its 400 pending a ruling of its own.
43
- /**
44
- * A workspace RULE refuses the write — the last owner cannot be removed.
45
- *
46
- * Not `INVARIANT_VIOLATION`, despite the name: that one is an internal
47
- * "should never happen" assertion, a bug signal nobody outside the codebase
48
- * can act on. This is the opposite — a rule the caller can act on, reached
49
- * by a request that was entirely well-formed, whose message tells them how.
50
- */
51
- WORKSPACE_INVARIANT: "SCHEMA_WORKSPACE_INVARIANT",
52
- /** The resource's own state refuses the operation — a disarmed reflex run. */
53
- STATE_GATE: "SCHEMA_STATE_GATE",
54
- /** The operation needs an actor and the request carried none. */
55
- ACTOR_CONTEXT_REQUIRED: "SCHEMA_ACTOR_CONTEXT_REQUIRED",
56
- // Connectors
57
- CONNECTOR_AUTH_FAILED: "SCHEMA_CONNECTOR_AUTH_FAILED",
58
- CONNECTOR_INVALID_STATE: "SCHEMA_CONNECTOR_INVALID_STATE",
59
- /**
60
- * The provider issued tokens and the flow failed AFTER that — resolving the
61
- * connected address. Distinct from CONNECTOR_AUTH_FAILED because the user is
62
- * left holding a real grant: consent happened, and it may still be live on the
63
- * provider side even though no connection row exists here.
64
- */
65
- CONNECTOR_GRANT_ORPHANED: "SCHEMA_CONNECTOR_GRANT_ORPHANED",
66
- // Sync
67
- SYNC_FAILED: "SCHEMA_SYNC_FAILED",
68
- SYNC_CONFLICT: "SCHEMA_SYNC_CONFLICT",
69
- SYNC_CASCADE: "SCHEMA_SYNC_CASCADE",
70
- ORPHAN_SYSTEM_ATTRIBUTE: "SCHEMA_ORPHAN_SYSTEM_ATTRIBUTE",
71
- // System Entity Immutability
72
- SYSTEM_ENTITY_IMMUTABLE: "SCHEMA_SYSTEM_ENTITY_IMMUTABLE",
73
- // L2 — migration system simplification (2026-05-17)
74
- DESTRUCTIVE_NOT_ALLOWED: "SCHEMA_DESTRUCTIVE_NOT_ALLOWED",
75
- MIGRATION_TIMEOUT: "SCHEMA_MIGRATION_TIMEOUT",
76
- CHANGE_TYPE_NOT_SUPPORTED: "SCHEMA_CHANGE_TYPE_NOT_SUPPORTED",
77
- // Duplicates
78
- DUPLICATE: "SCHEMA_DUPLICATE",
79
- DUPLICATE_OBJECT: "SCHEMA_DUPLICATE_OBJECT",
80
- DUPLICATE_ATTRIBUTE: "SCHEMA_DUPLICATE_ATTRIBUTE",
81
- // Concurrency
82
- CONFLICT: "SCHEMA_CONFLICT",
83
- // Storage
84
- STORAGE_UPLOAD_FAILED: "SCHEMA_STORAGE_UPLOAD_FAILED",
85
- STORAGE_DOWNLOAD_FAILED: "SCHEMA_STORAGE_DOWNLOAD_FAILED",
86
- STORAGE_DELETE_FAILED: "SCHEMA_STORAGE_DELETE_FAILED",
87
- STORAGE_URL_FAILED: "SCHEMA_STORAGE_URL_FAILED",
88
- // Repository Operations
89
- REPOSITORY_CREATE_FAILED: "SCHEMA_REPOSITORY_CREATE_FAILED",
90
- REPOSITORY_UPDATE_FAILED: "SCHEMA_REPOSITORY_UPDATE_FAILED",
91
- REPOSITORY_DELETE_FAILED: "SCHEMA_REPOSITORY_DELETE_FAILED",
92
- REPOSITORY_QUERY_FAILED: "SCHEMA_REPOSITORY_QUERY_FAILED",
93
- // Not Implemented
94
- NOT_IMPLEMENTED: "SCHEMA_NOT_IMPLEMENTED",
95
- // Timeout
96
- TIMEOUT: "SCHEMA_TIMEOUT",
97
- // Schema Integrity
98
- RECORD_REFERENCED: "SCHEMA_RECORD_REFERENCED",
99
- ATTRIBUTE_IN_USE: "SCHEMA_ATTRIBUTE_IN_USE",
100
- OBJECT_REFERENCED: "SCHEMA_OBJECT_REFERENCED",
101
- // --------------------------------------------------------------------------
102
- // Platform-wide codes (runtime). This enum is the single registry of every
103
- // error type across the stack; domain error classes live in their module but
104
- // draw their `code` from here. Never throw a raw `Error` — pick a code below.
105
- // --------------------------------------------------------------------------
106
- // Configuration / wiring — a required runtime dependency is not configured
107
- CONFIGURATION_REQUIRED: "CONFIGURATION_REQUIRED",
108
- SEARCH_ADAPTER_REQUIRED: "SEARCH_ADAPTER_REQUIRED",
109
- // Background jobs — one or more cron schedules could not be armed at boot
110
- CRON_REGISTRATION_FAILED: "CRON_REGISTRATION_FAILED",
111
- // Search backend — a search read call failed at the transport level
112
- // (non-API transport error: JSON.parse on a non-JSON body, network failure)
113
- SEARCH_BACKEND_FAILED: "SEARCH_BACKEND_FAILED",
114
- // Invariants — internal "should never happen" assertions (programmer error)
115
- INVARIANT_VIOLATION: "INVARIANT_VIOLATION",
116
- // Tenant / context
117
- TENANT_CONTEXT_MISSING: "TENANT_CONTEXT_MISSING",
118
- FEATURE_FLAGS_CONTEXT: "FEATURE_FLAGS_CONTEXT",
119
- // Realtime delivery — stable codes shared by runtime and transport adapters
120
- REALTIME_RATE_LIMITED: "REALTIME_RATE_LIMITED",
121
- REALTIME_DELIVERY_FAILED: "REALTIME_DELIVERY_FAILED",
122
- REALTIME_SUBSCRIPTION_FAILED: "REALTIME_SUBSCRIPTION_FAILED",
123
- // Agents
124
- AGENT_UNKNOWN: "AGENT_UNKNOWN",
125
- AGENT_DEPTH_EXCEEDED: "AGENT_DEPTH_EXCEEDED",
126
- AGENT_COST_LIMIT_EXCEEDED: "AGENT_COST_LIMIT_EXCEEDED",
127
- AGENT_TREE_COST_LIMIT_EXCEEDED: "AGENT_TREE_COST_LIMIT_EXCEEDED",
128
- AGENT_SESSION_NOT_FOUND: "AGENT_SESSION_NOT_FOUND",
129
- AGENT_DEFINITION_NOT_FOUND: "AGENT_DEFINITION_NOT_FOUND",
130
- AGENT_RUN_CONFIG: "AGENT_RUN_CONFIG",
131
- AGENT_STREAMING: "AGENT_STREAMING",
132
- AGENT_MISSING_ACTOR: "AGENT_MISSING_ACTOR",
133
- AGENT_INVALID_STATE: "AGENT_INVALID_STATE",
134
- AGENT_COMPACTION_IMPOSSIBLE: "AGENT_COMPACTION_IMPOSSIBLE",
135
- AGENT_COMPACTION_TIMEOUT: "AGENT_COMPACTION_TIMEOUT",
136
- AGENT_LEASE_HELD: "AGENT_LEASE_HELD",
137
- AGENT_WORK_MODE_REQUIRED: "AGENT_WORK_MODE_REQUIRED",
138
- AGENT_MESSAGE_NOT_FOUND: "AGENT_MESSAGE_NOT_FOUND",
139
- AGENT_MESSAGE_NOT_EDITABLE: "AGENT_MESSAGE_NOT_EDITABLE",
140
- // Remote devices
141
- DEVICE_NOT_FOUND: "DEVICE_NOT_FOUND",
142
- DEVICE_OFFLINE: "DEVICE_OFFLINE",
143
- // AI / LLM
144
- AI_UNKNOWN: "AI_UNKNOWN",
145
- AI_USAGE_LIMIT_EXCEEDED: "AI_USAGE_LIMIT_EXCEEDED",
146
- AI_INVALID_USAGE: "AI_INVALID_USAGE",
147
- AI_INVALID_MODEL: "AI_INVALID_MODEL",
148
- AI_INVALID_MODEL_INPUT: "AI_INVALID_MODEL_INPUT",
149
- AI_REPOSITORY_ERROR: "AI_REPOSITORY_ERROR",
150
- AI_GENERATION_FAILED: "AI_GENERATION_FAILED",
151
- // Documents — attach/detach and file operations
152
- DOCUMENT_MIME_NOT_ACCEPTED: "DOCUMENT_MIME_NOT_ACCEPTED",
153
- DOCUMENT_MULTIPLE_NOT_ALLOWED: "DOCUMENT_MULTIPLE_NOT_ALLOWED",
154
- DOCUMENT_NOT_FOUND_FOR_OPERATION: "DOCUMENT_NOT_FOUND_FOR_OPERATION",
155
- DOCUMENT_STORAGE_FAILED: "DOCUMENT_STORAGE_FAILED",
156
- DOCUMENT_SIZE_EXCEEDED: "DOCUMENT_SIZE_EXCEEDED",
157
- DOCUMENT_OCR_FAILED: "DOCUMENT_OCR_FAILED",
158
- DOCUMENT_BLOB_EMPTY: "DOCUMENT_BLOB_EMPTY",
159
- DOCUMENT_FILE_TOO_LARGE: "DOCUMENT_FILE_TOO_LARGE",
160
- DOCUMENT_FILE_NOT_FOUND: "DOCUMENT_FILE_NOT_FOUND",
161
- DOCUMENT_FILE_ALREADY_PACKED: "DOCUMENT_FILE_ALREADY_PACKED",
162
- // Documents — agent placement guards (record/drive targeting from tools)
163
- DOCUMENT_RECORD_NOT_FOUND: "DOCUMENT_RECORD_NOT_FOUND",
164
- DOCUMENT_RECORD_OBJECT_MISMATCH: "DOCUMENT_RECORD_OBJECT_MISMATCH",
165
- DOCUMENT_FOLDER_SERVICE_UNAVAILABLE: "DOCUMENT_FOLDER_SERVICE_UNAVAILABLE",
166
- DOCUMENT_FOLDER_PATH_NOT_FOUND: "DOCUMENT_FOLDER_PATH_NOT_FOUND",
167
- // Email image proxy — token/fetch failures surfaced through the proxy route
168
- // Email provider sync — transport failures from Gmail / Microsoft Graph
169
- EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED",
170
- EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED",
171
- // Calendar provider sync — transport failures from Google Calendar / Microsoft Graph
172
- CALENDAR_PROVIDER_API_FAILED: "CALENDAR_PROVIDER_API_FAILED",
173
- // Reflexes — agent-authored deterministic automations
174
- REFLEX_INVALID_TRANSITION: "REFLEX_INVALID_TRANSITION",
175
- REFLEX_INVALID_TOKEN: "REFLEX_INVALID_TOKEN",
176
- REFLEX_CAPABILITY_DENIED: "REFLEX_CAPABILITY_DENIED",
177
- REFLEX_GATEWAY_UNAVAILABLE: "REFLEX_GATEWAY_UNAVAILABLE",
178
- REFLEX_BUNDLE_FAILED: "REFLEX_BUNDLE_FAILED",
179
- REFLEX_EGRESS_DENIED: "REFLEX_EGRESS_DENIED",
180
- REFLEX_PROTOCOL_VIOLATION: "REFLEX_PROTOCOL_VIOLATION",
181
- REFLEX_RUN_FAILED: "REFLEX_RUN_FAILED",
182
- REFLEX_RUN_TIMEOUT: "REFLEX_RUN_TIMEOUT",
183
- REFLEX_DEPENDENCY_DRIFT: "REFLEX_DEPENDENCY_DRIFT",
184
- REFLEX_NOT_READY: "REFLEX_NOT_READY",
185
- REFLEX_INVARIANT_VIOLATION: "REFLEX_INVARIANT_VIOLATION"
186
- };
187
- var SchemaError = class extends Error {
188
- constructor(message, code = SchemaErrorCode.UNKNOWN, details) {
189
- super(message);
190
- this.name = "SchemaError";
191
- this.code = code;
192
- this.details = details;
193
- Object.setPrototypeOf(this, new.target.prototype);
194
- }
195
- toJSON() {
196
- return {
197
- name: this.name,
198
- code: this.code,
199
- message: this.message,
200
- details: this.details
201
- };
202
- }
203
- };
204
- var NotFoundError = class extends SchemaError {
205
- constructor(resourceType, resourceId, code = SchemaErrorCode.RECORD_NOT_FOUND, message = `${resourceType} with id "${resourceId}" not found`) {
206
- super(message, code, {
207
- resourceType,
208
- resourceId
209
- });
210
- /** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
211
- this._tag = "NotFoundError";
212
- this.name = "NotFoundError";
213
- this.resourceType = resourceType;
214
- this.resourceId = resourceId;
215
- }
216
- };
217
- var ObjectNotFoundError = class extends NotFoundError {
218
- constructor(objectId) {
219
- super("Object", objectId, SchemaErrorCode.OBJECT_NOT_FOUND);
220
- this.name = "ObjectNotFoundError";
221
- }
222
- };
223
- var AttributeNotFoundError = class extends NotFoundError {
224
- constructor(attributeId) {
225
- super("Attribute", attributeId, SchemaErrorCode.ATTRIBUTE_NOT_FOUND);
226
- this.name = "AttributeNotFoundError";
227
- }
228
- };
229
- var RecordNotFoundError = class extends NotFoundError {
230
- constructor(recordId) {
231
- super("Record", recordId, SchemaErrorCode.RECORD_NOT_FOUND);
232
- this.name = "RecordNotFoundError";
233
- }
234
- };
235
- var SchemaPlanNotFoundError = class extends NotFoundError {
236
- constructor(planId) {
237
- super("Schema plan", planId, SchemaErrorCode.SCHEMA_PLAN_NOT_FOUND);
238
- this.name = "SchemaPlanNotFoundError";
239
- }
240
- };
241
- var ValidationError = class _ValidationError extends SchemaError {
242
- constructor(message, errors) {
243
- super(message, SchemaErrorCode.VALIDATION_FAILED, { errors });
244
- /** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
245
- this._tag = "ValidationError";
246
- this.name = "ValidationError";
247
- this.errors = errors;
248
- }
249
- /**
250
- * Create a validation error from Zod-style errors
251
- */
252
- static fromZodErrors(errors) {
253
- const details = errors.map((err) => ({
254
- path: err.path.map(String),
255
- message: err.message
256
- }));
257
- const message = `Validation failed: ${details.map((d) => `${d.path.join(".")}: ${d.message}`).join(", ")}`;
258
- return new _ValidationError(message, details);
259
- }
260
- };
261
- var ProtectedResourceError = class extends SchemaError {
262
- constructor(resourceType, resourceName, operation) {
263
- const code = resourceType === "object" ? SchemaErrorCode.PROTECTED_OBJECT : resourceType === "view" ? SchemaErrorCode.PROTECTED_VIEW : SchemaErrorCode.PROTECTED_ATTRIBUTE;
264
- super(`Cannot ${operation} system ${resourceType} "${resourceName}"`, code, {
265
- resourceType,
266
- resourceName,
267
- operation
268
- });
269
- this.name = "ProtectedResourceError";
270
- this.resourceType = resourceType;
271
- this.resourceName = resourceName;
272
- this.operation = operation;
273
- }
274
- };
275
- var SyncError = class extends SchemaError {
276
- constructor(objectName, message, cause) {
277
- super(`Failed to sync object "${objectName}": ${message}`, SchemaErrorCode.SYNC_FAILED, {
278
- objectName,
279
- cause: cause?.message
280
- });
281
- this.name = "SyncError";
282
- this.objectName = objectName;
283
- this.cause = cause;
284
- }
285
- };
286
- var SystemEntityImmutableError = class extends SchemaError {
287
- constructor(entityType, entityName) {
288
- super(
289
- `Cannot mutate system ${entityType} "${entityName}". System entities are declared in code and immutable at runtime.`,
290
- SchemaErrorCode.SYSTEM_ENTITY_IMMUTABLE,
291
- { entityType, entityName }
292
- );
293
- this.name = "SystemEntityImmutableError";
294
- this.entityType = entityType;
295
- this.entityName = entityName;
296
- }
297
- };
298
- var SyncConflictError = class extends SchemaError {
299
- constructor(params) {
300
- const target = params.attributeName ? `"${params.objectName}.${params.attributeName}"` : `"${params.objectName}"`;
301
- super(
302
- `Cannot promote runtime entity ${target}: ${params.reason}. Resolve via: (1) relax the code constraint, (2) migrate runtime values manually, or (3) rename the code declaration.`,
303
- SchemaErrorCode.SYNC_CONFLICT,
304
- {
305
- objectName: params.objectName,
306
- attributeName: params.attributeName,
307
- reason: params.reason
308
- }
309
- );
310
- this.name = "SyncConflictError";
311
- this.objectName = params.objectName;
312
- this.attributeName = params.attributeName;
313
- this.reason = params.reason;
314
- }
315
- };
316
- var SyncCascadeError = class extends SchemaError {
317
- constructor(objectName, conflictingAttributes) {
318
- super(
319
- `Cannot demote object "${objectName}": attributes ${conflictingAttributes.join(", ")} are still declared in code. Remove them from code first, or restore the object.`,
320
- SchemaErrorCode.SYNC_CASCADE,
321
- { objectName, conflictingAttributes }
322
- );
323
- this.name = "SyncCascadeError";
324
- this.objectName = objectName;
325
- this.conflictingAttributes = conflictingAttributes;
326
- }
327
- };
328
- var OrphanSystemAttributeError = class extends SchemaError {
329
- constructor(objectName, attributeName) {
330
- super(
331
- `Attribute "${objectName}.${attributeName}" is system:true but its object parent is system:false. This is an invariant violation.`,
332
- SchemaErrorCode.ORPHAN_SYSTEM_ATTRIBUTE,
333
- { objectName, attributeName }
334
- );
335
- this.name = "OrphanSystemAttributeError";
336
- this.objectName = objectName;
337
- this.attributeName = attributeName;
338
- }
339
- };
340
- var DestructiveSyncNotAllowedError = class extends SchemaError {
341
- constructor(operations) {
342
- const summary = operations.map((op) => {
343
- const named = op;
344
- return named.name ? `- ${op.type} "${named.name}"` : `- ${op.type}`;
345
- }).join("\n");
346
- super(
347
- `Destructive schema operations detected (data will be lost):
348
- ${summary}
349
-
350
- These are applied only under an explicit opt-in; without it boot demotes the object to runtime and keeps its rows. To let Standards apply them automatically, set the environment variable:
351
- STANDARDS_ALLOW_DESTRUCTIVE_SYNC=1
352
-
353
- Otherwise, revert your code changes or back up the data first.`,
354
- SchemaErrorCode.DESTRUCTIVE_NOT_ALLOWED,
355
- { operations }
356
- );
357
- this.name = "DestructiveSyncNotAllowedError";
358
- this.operations = operations;
359
- }
360
- };
361
- var MigrationTimeoutError = class extends SchemaError {
362
- constructor(objectName, migrated, total, maxDurationMs) {
363
- super(
364
- `Migration for "${objectName}" exceeded the maximum duration (${maxDurationMs}ms). Migrated ${migrated}/${total} records before timeout. Increase STANDARDS_MIGRATION_MAX_DURATION_MS or split the migration into smaller batches.`,
365
- SchemaErrorCode.MIGRATION_TIMEOUT,
366
- { objectName, migrated, total, maxDurationMs }
367
- );
368
- this.name = "MigrationTimeoutError";
369
- this.objectName = objectName;
370
- this.migrated = migrated;
371
- this.total = total;
372
- this.maxDurationMs = maxDurationMs;
373
- }
374
- };
375
- var ChangeTypeNotSupportedError = class extends SchemaError {
376
- constructor(objectName, attributeName) {
377
- super(
378
- `Cannot change type of attribute "${objectName}.${attributeName}" via runtime API. Declare a migration in your schema code:
379
- object("${objectName}").migration(N, (m) =>
380
- m.changeType("${attributeName}", from, to, { transform: (v) => ... })
381
- )`,
382
- SchemaErrorCode.CHANGE_TYPE_NOT_SUPPORTED,
383
- { objectName, attributeName }
384
- );
385
- this.name = "ChangeTypeNotSupportedError";
386
- this.objectName = objectName;
387
- this.attributeName = attributeName;
388
- }
389
- };
390
- var DuplicateError = class extends SchemaError {
391
- constructor(resourceType, resourceName, message) {
392
- const code = resourceType === "object" ? SchemaErrorCode.DUPLICATE_OBJECT : resourceType === "attribute" ? SchemaErrorCode.DUPLICATE_ATTRIBUTE : SchemaErrorCode.DUPLICATE;
393
- const autoMessage = `${resourceType.charAt(0).toUpperCase()}${resourceType.slice(1)} "${resourceName}" already exists`;
394
- super(message ?? autoMessage, code, { resourceType, resourceName });
395
- this.name = "DuplicateError";
396
- this.resourceType = resourceType;
397
- this.resourceName = resourceName;
398
- }
399
- };
400
- function isSchemaError(error) {
401
- return error instanceof SchemaError;
402
- }
403
- function isNotFoundError(error) {
404
- return error instanceof NotFoundError;
405
- }
406
- function isValidationError(error) {
407
- return error instanceof ValidationError;
408
- }
409
- function isProtectedResourceError(error) {
410
- return error instanceof ProtectedResourceError;
411
- }
412
- var ForbiddenError = class extends SchemaError {
413
- constructor(objectName, action, userId) {
414
- super(`No ${action} permission on object "${objectName}"`, SchemaErrorCode.FORBIDDEN, {
415
- objectName,
416
- action,
417
- userId
418
- });
419
- this.name = "ForbiddenError";
420
- this.objectName = objectName;
421
- this.action = action;
422
- this.userId = userId;
423
- }
424
- };
425
- var ProtectedRoleError = class extends SchemaError {
426
- constructor(roleName, operation) {
427
- super(`Cannot ${operation} system role "${roleName}"`, SchemaErrorCode.PROTECTED_ROLE, {
428
- roleName,
429
- operation
430
- });
431
- this.name = "ProtectedRoleError";
432
- this.roleName = roleName;
433
- this.operation = operation;
434
- }
435
- };
436
- var RoleNotFoundError = class extends NotFoundError {
437
- constructor(roleId) {
438
- super("Role", roleId, SchemaErrorCode.ROLE_NOT_FOUND);
439
- this.name = "RoleNotFoundError";
440
- }
441
- };
442
- var ConcurrentModificationError = class extends SchemaError {
443
- constructor(recordId) {
444
- super(
445
- `Record ${recordId} was modified by another request. Please refresh and try again.`,
446
- SchemaErrorCode.CONFLICT,
447
- { recordId }
448
- );
449
- }
450
- };
451
- var StorageError = class extends SchemaError {
452
- constructor(operation, message, path, cause) {
453
- const code = operation === "upload" ? SchemaErrorCode.STORAGE_UPLOAD_FAILED : operation === "download" ? SchemaErrorCode.STORAGE_DOWNLOAD_FAILED : operation === "delete" ? SchemaErrorCode.STORAGE_DELETE_FAILED : SchemaErrorCode.STORAGE_URL_FAILED;
454
- super(`Storage ${operation} failed: ${message}`, code, {
455
- operation,
456
- path,
457
- cause
458
- });
459
- this.name = "StorageError";
460
- this.operation = operation;
461
- this.path = path;
462
- this.cause = cause;
463
- }
464
- };
465
- var AccessDeniedError = class extends SchemaError {
466
- constructor(resource, reason) {
467
- super(reason ?? `Access denied to resource: ${resource}`, SchemaErrorCode.ACCESS_DENIED, {
468
- resource,
469
- reason
470
- });
471
- this.name = "AccessDeniedError";
472
- this.resource = resource;
473
- this.reason = reason;
474
- }
475
- };
476
- var RepositoryError = class extends SchemaError {
477
- constructor(operation, entity, message, cause) {
478
- const code = operation === "create" ? SchemaErrorCode.REPOSITORY_CREATE_FAILED : operation === "update" ? SchemaErrorCode.REPOSITORY_UPDATE_FAILED : operation === "delete" ? SchemaErrorCode.REPOSITORY_DELETE_FAILED : SchemaErrorCode.REPOSITORY_QUERY_FAILED;
479
- super(`Failed to ${operation} ${entity}: ${message}${cause ? ` (${cause})` : ""}`, code, {
480
- operation,
481
- entity,
482
- cause
483
- });
484
- this.name = "RepositoryError";
485
- this.operation = operation;
486
- this.entity = entity;
487
- this.cause = cause;
488
- }
489
- };
490
- var SearchBackendError = class extends SchemaError {
491
- constructor(scope, cause) {
492
- super(`Search backend unavailable for ${scope}`, SchemaErrorCode.SEARCH_BACKEND_FAILED, {
493
- scope,
494
- cause
495
- });
496
- this.name = "SearchBackendError";
497
- this.scope = scope;
498
- this.cause = cause;
499
- }
500
- };
501
- var NotImplementedError = class extends SchemaError {
502
- constructor(feature, milestone) {
503
- const message = milestone ? `${feature}: not implemented (${milestone})` : `${feature}: not implemented`;
504
- super(message, SchemaErrorCode.NOT_IMPLEMENTED, {
505
- feature,
506
- milestone
507
- });
508
- this.name = "NotImplementedError";
509
- this.feature = feature;
510
- this.milestone = milestone;
511
- }
512
- };
513
- var MemoryNotFoundError = class extends NotFoundError {
514
- constructor(memoryId) {
515
- super("Memory", memoryId, SchemaErrorCode.MEMORY_NOT_FOUND);
516
- this.name = "MemoryNotFoundError";
517
- }
518
- };
519
- var RecordReferencedError = class extends SchemaError {
520
- constructor(recordId, references) {
521
- const total = references.reduce((sum, r) => sum + r.count, 0);
522
- super(
523
- `Cannot delete record: referenced by ${total} record${total > 1 ? "s" : ""}`,
524
- SchemaErrorCode.RECORD_REFERENCED,
525
- { recordId, references }
526
- );
527
- this.name = "RecordReferencedError";
528
- this.recordId = recordId;
529
- this.references = references;
530
- }
531
- };
532
- var AttributeInUseError = class extends SchemaError {
533
- constructor(attributeName, usage) {
534
- super(
535
- `Cannot delete attribute "${attributeName}": used in ${usage}`,
536
- SchemaErrorCode.ATTRIBUTE_IN_USE,
537
- { attributeName, usage }
538
- );
539
- this.name = "AttributeInUseError";
540
- this.attributeName = attributeName;
541
- this.usage = usage;
542
- }
543
- };
544
- var ObjectReferencedError = class extends SchemaError {
545
- constructor(objectName, referencingObjects) {
546
- super(
547
- `Cannot delete object "${objectName}": target of relations in ${referencingObjects.join(", ")}`,
548
- SchemaErrorCode.OBJECT_REFERENCED,
549
- { objectName, referencingObjects }
550
- );
551
- this.name = "ObjectReferencedError";
552
- this.objectName = objectName;
553
- this.referencingObjects = referencingObjects;
554
- }
555
- };
556
- function isRecordReferencedError(error) {
557
- return error instanceof RecordReferencedError;
558
- }
559
- function isAttributeInUseError(error) {
560
- return error instanceof AttributeInUseError;
561
- }
562
- function isObjectReferencedError(error) {
563
- return error instanceof ObjectReferencedError;
564
- }
565
-
566
- export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, SchemaPlanNotFoundError, SearchBackendError, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordReferencedError, isSchemaError, isValidationError };
@@ -1,31 +0,0 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
- import { z } from 'zod';
3
-
4
- function createSelectValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
5
- const validValues = attr.options.map((opt) => opt.value);
6
- if (validValues.length === 0) return z.never();
7
- const validLabels = attr.options.map((opt) => opt.label);
8
- return z.enum(validValues, {
9
- message: messages.invalidOption(attr, validLabels)
10
- });
11
- }
12
- function createMultiselectValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
13
- const validValues = attr.options.map((opt) => opt.value);
14
- if (validValues.length === 0) return z.never();
15
- const validLabels = attr.options.map((opt) => opt.label);
16
- return z.array(
17
- z.enum(validValues, {
18
- message: messages.invalidOption(attr, validLabels)
19
- })
20
- );
21
- }
22
- function createStatusValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
23
- const validValues = attr.options.map((opt) => opt.value);
24
- if (validValues.length === 0) return z.never();
25
- const validLabels = attr.options.map((opt) => opt.label);
26
- return z.enum(validValues, {
27
- message: messages.invalidOption(attr, validLabels)
28
- });
29
- }
30
-
31
- export { createMultiselectValidator, createSelectValidator, createStatusValidator };
@@ -1,89 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
- var zod = require('zod');
5
-
6
- // src/lib/text-format.ts
7
- var TEXT_FORMAT_PATTERNS = {
8
- email: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
9
- url: "^https?:\\/\\/[\\w\\-]+(\\.[\\w\\-]+)+[/#?]?.*$",
10
- slug: "^[a-z0-9]+(?:-[a-z0-9]+)*$"
11
- };
12
- function resolveTextPattern(attr) {
13
- if (attr.pattern) return attr.pattern;
14
- return attr.format ? TEXT_FORMAT_PATTERNS[attr.format] : void 0;
15
- }
16
-
17
- // src/lib/lru-cache.ts
18
- var LRUCache = class {
19
- constructor(capacity) {
20
- if (!Number.isInteger(capacity) || capacity <= 0) {
21
- throw new Error("LRU cache capacity must be greater than 0");
22
- }
23
- this.capacity = capacity;
24
- this.cache = /* @__PURE__ */ new Map();
25
- }
26
- get(key) {
27
- if (!this.cache.has(key)) {
28
- return void 0;
29
- }
30
- const value = this.cache.get(key);
31
- this.cache.delete(key);
32
- this.cache.set(key, value);
33
- return value;
34
- }
35
- set(key, value) {
36
- if (this.cache.has(key)) {
37
- this.cache.delete(key);
38
- } else if (this.cache.size >= this.capacity) {
39
- const first = this.cache.keys().next();
40
- if (!first.done) {
41
- this.cache.delete(first.value);
42
- }
43
- }
44
- this.cache.set(key, value);
45
- }
46
- has(key) {
47
- return this.cache.has(key);
48
- }
49
- clear() {
50
- this.cache.clear();
51
- }
52
- get size() {
53
- return this.cache.size;
54
- }
55
- };
56
-
57
- // src/validation/core/regex-cache.ts
58
- function createRegexCache(capacity = 100) {
59
- return new LRUCache(capacity);
60
- }
61
- function getCachedRegex(cache, pattern) {
62
- let cached = cache.get(pattern);
63
- if (!cached) {
64
- cached = new RegExp(pattern);
65
- cache.set(pattern, cached);
66
- }
67
- return cached;
68
- }
69
-
70
- // src/validation/primitives/text.ts
71
- var textRegexCache = createRegexCache();
72
- function createTextValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
73
- let schema = zod.z.string();
74
- if (attr.minLength !== void 0) {
75
- schema = schema.min(attr.minLength, messages.minLength(attr, attr.minLength));
76
- }
77
- if (attr.maxLength !== void 0) {
78
- schema = schema.max(attr.maxLength, messages.maxLength(attr, attr.maxLength));
79
- }
80
- const pattern = resolveTextPattern(attr);
81
- if (pattern) {
82
- schema = schema.regex(getCachedRegex(textRegexCache, pattern), messages.invalidPattern(attr));
83
- }
84
- return schema;
85
- }
86
-
87
- exports.TEXT_FORMAT_PATTERNS = TEXT_FORMAT_PATTERNS;
88
- exports.createTextValidator = createTextValidator;
89
- exports.resolveTextPattern = resolveTextPattern;