@stndrds/schema 1.0.0-alpha.192 → 1.0.0-alpha.194

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 (125) hide show
  1. package/dist/attributes-DP08iPCh.d.mts +889 -0
  2. package/dist/attributes-Ddhps_AU.d.ts +889 -0
  3. package/dist/{chunk-MAKSIK3P.js → chunk-5WATIVCA.js} +2 -2
  4. package/dist/{chunk-4KRLCWJM.mjs → chunk-6I2R22CX.mjs} +1 -1
  5. package/dist/{chunk-DC7YYE3U.js → chunk-ACKMC6FL.js} +2 -2
  6. package/dist/{chunk-TEQNVO7W.mjs → chunk-AYVHMVKQ.mjs} +1 -1
  7. package/dist/{chunk-P2BE2A2G.js → chunk-BV3IUMMW.js} +4 -7
  8. package/dist/{chunk-CCB4OY2O.js → chunk-E6JUYGJX.js} +2 -2
  9. package/dist/{chunk-7A3Y6O32.js → chunk-EBGRZUIH.js} +2 -2
  10. package/dist/{chunk-QWZHR2OO.js → chunk-EW5XR2X3.js} +2 -2
  11. package/dist/{chunk-UQVW4KPP.mjs → chunk-HRQEZUAA.mjs} +0 -1
  12. package/dist/{chunk-OAQWRMTP.js → chunk-HTSTPTNZ.js} +2 -2
  13. package/dist/{chunk-U4JC7P6D.mjs → chunk-HXDDJLHD.mjs} +37 -52
  14. package/dist/{chunk-Z75P63VF.mjs → chunk-JUKLL5RJ.mjs} +1 -1
  15. package/dist/{chunk-YQROI4IE.js → chunk-M5QIBMIH.js} +37 -52
  16. package/dist/{chunk-FQ2ZYOVS.js → chunk-MZOEL7FN.js} +47 -41
  17. package/dist/{chunk-KWVCGQ7N.mjs → chunk-NOMHDOVE.mjs} +2 -5
  18. package/dist/{chunk-OLJLCVNY.mjs → chunk-NS63SPNN.mjs} +1 -1
  19. package/dist/{chunk-J5HRK3WD.js → chunk-O44XVGHE.js} +2 -2
  20. package/dist/{chunk-TMYBEXBT.mjs → chunk-OSSGN43B.mjs} +1 -1
  21. package/dist/{chunk-LTHSU4NF.mjs → chunk-PMKCDRRO.mjs} +26 -21
  22. package/dist/{chunk-4TC27SMF.mjs → chunk-QEZUDVTN.mjs} +1 -1
  23. package/dist/{chunk-BLXQGQLK.mjs → chunk-QVLQPW3O.mjs} +1 -1
  24. package/dist/{chunk-EZHMVZQ4.js → chunk-QWKLQRBX.js} +4 -4
  25. package/dist/{chunk-ROAZLZA2.js → chunk-ROLWVTU3.js} +2 -2
  26. package/dist/{chunk-3JINFUN3.js → chunk-SGSGREPG.js} +2 -6
  27. package/dist/{chunk-VXOTYFEW.js → chunk-T6L2MUG2.js} +2 -2
  28. package/dist/{chunk-KNYZH2WD.mjs → chunk-UANQJ2GH.mjs} +8 -1
  29. package/dist/{chunk-IRTRJH37.mjs → chunk-UXAHLSWC.mjs} +1 -1
  30. package/dist/{chunk-ACQ3TUFK.js → chunk-V2UA2D4E.js} +2 -2
  31. package/dist/{chunk-R4CJHCC4.mjs → chunk-XZ5RG2OG.mjs} +1 -4
  32. package/dist/{chunk-TKN73433.js → chunk-YIP5FJ5H.js} +9 -2
  33. package/dist/{chunk-T225DB55.js → chunk-YKWSHBT5.js} +0 -1
  34. package/dist/{chunk-TBYXYSGA.mjs → chunk-YUFTHPOE.mjs} +1 -1
  35. package/dist/{chunk-ITTQ4FGR.mjs → chunk-ZDMOXF3U.mjs} +1 -1
  36. package/dist/{chunk-SMOHDR6M.mjs → chunk-ZDQ5AP26.mjs} +1 -1
  37. package/dist/{helpers-Y9rNQ6sz.d.ts → helpers-Bph8AoY7.d.mts} +15 -3
  38. package/dist/{helpers-HrKmSkLi.d.mts → helpers-D9klos6x.d.ts} +15 -3
  39. package/dist/index.d.mts +1121 -235
  40. package/dist/index.d.ts +1121 -235
  41. package/dist/index.js +2369 -854
  42. package/dist/index.mjs +2264 -774
  43. package/dist/{types-Bdlhgrf7.d.ts → types-D38kriFw.d.mts} +1 -2
  44. package/dist/{types-C5DittlR.d.mts → types-iKvYBe6v.d.ts} +1 -2
  45. package/dist/validation/all.d.mts +3 -3
  46. package/dist/validation/all.d.ts +3 -3
  47. package/dist/validation/all.js +30 -27
  48. package/dist/validation/all.mjs +17 -18
  49. package/dist/validation/complex/currency.d.mts +2 -2
  50. package/dist/validation/complex/currency.d.ts +2 -2
  51. package/dist/validation/complex/currency.js +3 -3
  52. package/dist/validation/complex/currency.mjs +2 -2
  53. package/dist/validation/complex/file.d.mts +2 -2
  54. package/dist/validation/complex/file.d.ts +2 -2
  55. package/dist/validation/complex/file.js +3 -3
  56. package/dist/validation/complex/file.mjs +2 -2
  57. package/dist/validation/complex/location.d.mts +2 -2
  58. package/dist/validation/complex/location.d.ts +2 -2
  59. package/dist/validation/complex/location.js +3 -3
  60. package/dist/validation/complex/location.mjs +2 -2
  61. package/dist/validation/complex/phone.d.mts +2 -2
  62. package/dist/validation/complex/phone.d.ts +2 -2
  63. package/dist/validation/complex/phone.js +3 -3
  64. package/dist/validation/complex/phone.mjs +2 -2
  65. package/dist/validation/complex/relation.d.mts +2 -2
  66. package/dist/validation/complex/relation.d.ts +2 -2
  67. package/dist/validation/complex/relation.js +5 -5
  68. package/dist/validation/complex/relation.mjs +2 -2
  69. package/dist/validation/complex/richtext.d.mts +2 -2
  70. package/dist/validation/complex/richtext.d.ts +2 -2
  71. package/dist/validation/complex/richtext.js +3 -3
  72. package/dist/validation/complex/richtext.mjs +2 -2
  73. package/dist/validation/complex/select.d.mts +2 -2
  74. package/dist/validation/complex/select.d.ts +2 -2
  75. package/dist/validation/complex/select.js +5 -5
  76. package/dist/validation/complex/select.mjs +2 -2
  77. package/dist/validation/complex/user.d.mts +2 -2
  78. package/dist/validation/complex/user.d.ts +2 -2
  79. package/dist/validation/complex/user.js +3 -3
  80. package/dist/validation/complex/user.mjs +2 -2
  81. package/dist/validation/computed/formula.d.mts +2 -2
  82. package/dist/validation/computed/formula.d.ts +2 -2
  83. package/dist/validation/computed/formula.js +3 -3
  84. package/dist/validation/computed/formula.mjs +2 -2
  85. package/dist/validation/computed/rollup.d.mts +2 -2
  86. package/dist/validation/computed/rollup.d.ts +2 -2
  87. package/dist/validation/computed/rollup.js +3 -3
  88. package/dist/validation/computed/rollup.mjs +2 -2
  89. package/dist/validation/config/index.d.mts +1 -1
  90. package/dist/validation/config/index.d.ts +1 -1
  91. package/dist/validation/config/index.js +4 -4
  92. package/dist/validation/config/index.mjs +1 -1
  93. package/dist/validation/core/index.d.mts +3 -3
  94. package/dist/validation/core/index.d.ts +3 -3
  95. package/dist/validation/core/index.js +3 -3
  96. package/dist/validation/core/index.mjs +1 -1
  97. package/dist/validation/object/index.d.mts +3 -3
  98. package/dist/validation/object/index.d.ts +3 -3
  99. package/dist/validation/object/index.js +32 -29
  100. package/dist/validation/object/index.mjs +16 -17
  101. package/dist/validation/primitives/checkbox.d.mts +2 -2
  102. package/dist/validation/primitives/checkbox.d.ts +2 -2
  103. package/dist/validation/primitives/checkbox.js +3 -3
  104. package/dist/validation/primitives/checkbox.mjs +2 -2
  105. package/dist/validation/primitives/date.d.mts +2 -2
  106. package/dist/validation/primitives/date.d.ts +2 -2
  107. package/dist/validation/primitives/date.js +3 -3
  108. package/dist/validation/primitives/date.mjs +2 -2
  109. package/dist/validation/primitives/number.d.mts +2 -2
  110. package/dist/validation/primitives/number.d.ts +2 -2
  111. package/dist/validation/primitives/number.js +3 -3
  112. package/dist/validation/primitives/number.mjs +2 -2
  113. package/dist/validation/primitives/text.d.mts +3 -8
  114. package/dist/validation/primitives/text.d.ts +3 -8
  115. package/dist/validation/primitives/text.js +3 -7
  116. package/dist/validation/primitives/text.mjs +2 -2
  117. package/package.json +2 -13
  118. package/dist/chunk-D7WFIGXW.js +0 -14
  119. package/dist/chunk-RUYUFXNW.mjs +0 -12
  120. package/dist/filters-DVBn5tov.d.ts +0 -1630
  121. package/dist/filters-HDG4kLoo.d.mts +0 -1630
  122. package/dist/validation/primitives/rating.d.mts +0 -12
  123. package/dist/validation/primitives/rating.d.ts +0 -12
  124. package/dist/validation/primitives/rating.js +0 -11
  125. package/dist/validation/primitives/rating.mjs +0 -2
@@ -1,21 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkMAKSIK3P_js = require('./chunk-MAKSIK3P.js');
4
- var chunkJ5HRK3WD_js = require('./chunk-J5HRK3WD.js');
5
- var chunkTKN73433_js = require('./chunk-TKN73433.js');
6
- var chunkD7WFIGXW_js = require('./chunk-D7WFIGXW.js');
7
- var chunk3JINFUN3_js = require('./chunk-3JINFUN3.js');
8
- var chunkQWZHR2OO_js = require('./chunk-QWZHR2OO.js');
9
- var chunkEZHMVZQ4_js = require('./chunk-EZHMVZQ4.js');
10
- var chunkVXOTYFEW_js = require('./chunk-VXOTYFEW.js');
11
- var chunkOAQWRMTP_js = require('./chunk-OAQWRMTP.js');
12
- var chunkACQ3TUFK_js = require('./chunk-ACQ3TUFK.js');
13
- var chunkDC7YYE3U_js = require('./chunk-DC7YYE3U.js');
14
- var chunkROAZLZA2_js = require('./chunk-ROAZLZA2.js');
15
- var chunkCCB4OY2O_js = require('./chunk-CCB4OY2O.js');
16
- var chunk7A3Y6O32_js = require('./chunk-7A3Y6O32.js');
17
- var chunkP2BE2A2G_js = require('./chunk-P2BE2A2G.js');
18
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunk5WATIVCA_js = require('./chunk-5WATIVCA.js');
4
+ var chunkO44XVGHE_js = require('./chunk-O44XVGHE.js');
5
+ var chunkYIP5FJ5H_js = require('./chunk-YIP5FJ5H.js');
6
+ var chunkSGSGREPG_js = require('./chunk-SGSGREPG.js');
7
+ var chunkEW5XR2X3_js = require('./chunk-EW5XR2X3.js');
8
+ var chunkQWKLQRBX_js = require('./chunk-QWKLQRBX.js');
9
+ var chunkT6L2MUG2_js = require('./chunk-T6L2MUG2.js');
10
+ var chunkHTSTPTNZ_js = require('./chunk-HTSTPTNZ.js');
11
+ var chunkV2UA2D4E_js = require('./chunk-V2UA2D4E.js');
12
+ var chunkACKMC6FL_js = require('./chunk-ACKMC6FL.js');
13
+ var chunkROLWVTU3_js = require('./chunk-ROLWVTU3.js');
14
+ var chunkE6JUYGJX_js = require('./chunk-E6JUYGJX.js');
15
+ var chunkEBGRZUIH_js = require('./chunk-EBGRZUIH.js');
16
+ var chunkBV3IUMMW_js = require('./chunk-BV3IUMMW.js');
17
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
19
18
  var zod = require('zod');
20
19
 
21
20
  function isEmptyValue(value) {
@@ -34,49 +33,45 @@ function withEmptyToNull(validator) {
34
33
  }
35
34
 
36
35
  // src/validation/object/attribute-factory.ts
37
- function createAttributeValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
36
+ function createAttributeValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
38
37
  switch (attr.type) {
39
38
  case "text":
40
- return chunk3JINFUN3_js.createTextValidator(attr, messages);
41
- case "textarea":
42
- return chunk3JINFUN3_js.createTextAreaValidator(attr, messages);
39
+ return chunkSGSGREPG_js.createTextValidator(attr, messages);
43
40
  case "richtext":
44
- return chunkQWZHR2OO_js.createRichtextValidator(attr, messages);
41
+ return chunkEW5XR2X3_js.createRichtextValidator(attr, messages);
45
42
  case "number":
46
- return chunkTKN73433_js.createNumberValidator(attr, messages);
43
+ return chunkYIP5FJ5H_js.createNumberValidator(attr, messages);
47
44
  case "checkbox":
48
- return chunkMAKSIK3P_js.createCheckboxValidator(attr, messages);
45
+ return chunk5WATIVCA_js.createCheckboxValidator(attr, messages);
49
46
  case "date":
50
- return chunkJ5HRK3WD_js.createDateValidator(attr, messages);
47
+ return chunkO44XVGHE_js.createDateValidator(attr, messages);
51
48
  case "phone":
52
- return chunk7A3Y6O32_js.createPhoneValidator(attr, messages);
49
+ return chunkEBGRZUIH_js.createPhoneValidator(attr, messages);
53
50
  case "currency":
54
- return chunkDC7YYE3U_js.createCurrencyValidator(attr, messages);
51
+ return chunkACKMC6FL_js.createCurrencyValidator(attr, messages);
55
52
  case "status":
56
- return chunkEZHMVZQ4_js.createStatusValidator(attr, messages);
53
+ return chunkQWKLQRBX_js.createStatusValidator(attr, messages);
57
54
  case "location":
58
- return chunkCCB4OY2O_js.createLocationValidator(attr, messages);
55
+ return chunkE6JUYGJX_js.createLocationValidator(attr, messages);
59
56
  case "select":
60
- return chunkEZHMVZQ4_js.createSelectValidator(attr, messages);
57
+ return chunkQWKLQRBX_js.createSelectValidator(attr, messages);
61
58
  case "multiselect":
62
- return chunkEZHMVZQ4_js.createMultiselectValidator(attr, messages);
59
+ return chunkQWKLQRBX_js.createMultiselectValidator(attr, messages);
63
60
  case "file":
64
- return chunkROAZLZA2_js.createFileValidator(attr, messages);
61
+ return chunkROLWVTU3_js.createFileValidator(attr, messages);
65
62
  case "user":
66
- return chunkVXOTYFEW_js.createUserValidator(attr, messages);
63
+ return chunkT6L2MUG2_js.createUserValidator(attr, messages);
67
64
  case "relation":
68
- return chunkP2BE2A2G_js.createRelationValidator(attr, messages);
69
- case "rating":
70
- return chunkD7WFIGXW_js.createRatingValidator(attr, messages);
65
+ return chunkBV3IUMMW_js.createRelationValidator(attr, messages);
71
66
  case "formula":
72
- return chunkOAQWRMTP_js.createFormulaValidator(attr, messages);
67
+ return chunkHTSTPTNZ_js.createFormulaValidator(attr, messages);
73
68
  case "rollup":
74
- return chunkACQ3TUFK_js.createRollupValidator(attr, messages);
69
+ return chunkV2UA2D4E_js.createRollupValidator(attr, messages);
75
70
  default:
76
71
  return zod.z.unknown();
77
72
  }
78
73
  }
79
- function createFormAttributeValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
74
+ function createFormAttributeValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
80
75
  const validator = createAttributeValidator(attr, messages);
81
76
  if (!attr.required) {
82
77
  return withEmptyToNull(validator);
@@ -548,7 +543,7 @@ function validateAttribute(attr, value) {
548
543
  }
549
544
  return {
550
545
  success: false,
551
- errors: chunkT225DB55_js.formatZodErrors(result.error).map((err) => ({
546
+ errors: chunkYKWSHBT5_js.formatZodErrors(result.error).map((err) => ({
552
547
  path: [attr.name, ...err.path],
553
548
  message: err.message
554
549
  }))
@@ -565,7 +560,7 @@ function validateObject(objectDef, data) {
565
560
  }
566
561
  return {
567
562
  success: false,
568
- errors: chunkT225DB55_js.formatZodErrors(result.error)
563
+ errors: chunkYKWSHBT5_js.formatZodErrors(result.error)
569
564
  };
570
565
  }
571
566
  function validateObjectOrThrow(objectDef, data) {
@@ -592,7 +587,7 @@ function validateDraft(objectDef, data) {
592
587
  }
593
588
  return {
594
589
  success: false,
595
- errors: chunkT225DB55_js.formatZodErrors(result.error)
590
+ errors: chunkYKWSHBT5_js.formatZodErrors(result.error)
596
591
  };
597
592
  }
598
593
  function validateDraftOrThrow(objectDef, data) {
@@ -608,6 +603,16 @@ ${detail}`,
608
603
  }
609
604
  return result.data;
610
605
  }
606
+ function rejectUnknownAttributesOrThrow(objectDef, data) {
607
+ const knownNames = new Set(objectDef.attributes.map((a) => a.name));
608
+ const unknownKeys = Object.keys(data).filter((key) => !knownNames.has(key));
609
+ if (unknownKeys.length > 0) {
610
+ throw new ValidationError(
611
+ `Unknown attribute${unknownKeys.length > 1 ? "s" : ""} for ${objectDef.label}: ${unknownKeys.join(", ")}`,
612
+ unknownKeys.map((key) => ({ path: [key], message: "Unknown attribute" }))
613
+ );
614
+ }
615
+ }
611
616
  function isValuePresent(value) {
612
617
  if (value === void 0 || value === null) {
613
618
  return false;
@@ -681,6 +686,7 @@ exports.isRecordComplete = isRecordComplete;
681
686
  exports.isRecordReferencedError = isRecordReferencedError;
682
687
  exports.isSchemaError = isSchemaError;
683
688
  exports.isValidationError = isValidationError;
689
+ exports.rejectUnknownAttributesOrThrow = rejectUnknownAttributesOrThrow;
684
690
  exports.validateAttribute = validateAttribute;
685
691
  exports.validateDraft = validateDraft;
686
692
  exports.validateDraftOrThrow = validateDraftOrThrow;
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  // src/lib/lru-cache.ts
@@ -71,8 +71,5 @@ function createTextValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
71
71
  }
72
72
  return schema;
73
73
  }
74
- function createTextAreaValidator(_attr, _messages = DEFAULT_VALIDATION_MESSAGES) {
75
- return z.string();
76
- }
77
74
 
78
- export { createTextAreaValidator, createTextValidator };
75
+ export { createTextValidator };
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createRollupValidator(_attr, _messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
4
  var zod = require('zod');
5
5
 
6
- function createDateValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
6
+ function createDateValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
7
7
  return zod.z.coerce.date({ message: messages.invalidDate(attr) });
8
8
  }
9
9
 
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createCheckboxValidator(_attr, _messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,19 +1,18 @@
1
- import { createCheckboxValidator } from './chunk-TMYBEXBT.mjs';
2
- import { createDateValidator } from './chunk-4KRLCWJM.mjs';
3
- import { createNumberValidator } from './chunk-KNYZH2WD.mjs';
4
- import { createRatingValidator } from './chunk-RUYUFXNW.mjs';
5
- import { createTextAreaValidator, createTextValidator } from './chunk-KWVCGQ7N.mjs';
6
- import { createRichtextValidator } from './chunk-BLXQGQLK.mjs';
7
- import { createMultiselectValidator, createSelectValidator, createStatusValidator } from './chunk-SMOHDR6M.mjs';
8
- import { createUserValidator } from './chunk-ITTQ4FGR.mjs';
9
- import { createFormulaValidator } from './chunk-IRTRJH37.mjs';
10
- import { createRollupValidator } from './chunk-OLJLCVNY.mjs';
11
- import { createCurrencyValidator } from './chunk-TEQNVO7W.mjs';
12
- import { createFileValidator } from './chunk-4TC27SMF.mjs';
13
- import { createLocationValidator } from './chunk-TBYXYSGA.mjs';
14
- import { createPhoneValidator } from './chunk-Z75P63VF.mjs';
15
- import { createRelationValidator } from './chunk-R4CJHCC4.mjs';
16
- import { DEFAULT_VALIDATION_MESSAGES, formatZodErrors } from './chunk-UQVW4KPP.mjs';
1
+ import { createCheckboxValidator } from './chunk-OSSGN43B.mjs';
2
+ import { createDateValidator } from './chunk-6I2R22CX.mjs';
3
+ import { createNumberValidator } from './chunk-UANQJ2GH.mjs';
4
+ import { createTextValidator } from './chunk-NOMHDOVE.mjs';
5
+ import { createRichtextValidator } from './chunk-QVLQPW3O.mjs';
6
+ import { createMultiselectValidator, createSelectValidator, createStatusValidator } from './chunk-ZDQ5AP26.mjs';
7
+ import { createUserValidator } from './chunk-ZDMOXF3U.mjs';
8
+ import { createFormulaValidator } from './chunk-UXAHLSWC.mjs';
9
+ import { createRollupValidator } from './chunk-NS63SPNN.mjs';
10
+ import { createCurrencyValidator } from './chunk-AYVHMVKQ.mjs';
11
+ import { createFileValidator } from './chunk-QEZUDVTN.mjs';
12
+ import { createLocationValidator } from './chunk-YUFTHPOE.mjs';
13
+ import { createPhoneValidator } from './chunk-JUKLL5RJ.mjs';
14
+ import { createRelationValidator } from './chunk-XZ5RG2OG.mjs';
15
+ import { DEFAULT_VALIDATION_MESSAGES, formatZodErrors } from './chunk-HRQEZUAA.mjs';
17
16
  import { z } from 'zod';
18
17
 
19
18
  function isEmptyValue(value) {
@@ -36,8 +35,6 @@ function createAttributeValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES)
36
35
  switch (attr.type) {
37
36
  case "text":
38
37
  return createTextValidator(attr, messages);
39
- case "textarea":
40
- return createTextAreaValidator(attr, messages);
41
38
  case "richtext":
42
39
  return createRichtextValidator(attr, messages);
43
40
  case "number":
@@ -64,8 +61,6 @@ function createAttributeValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES)
64
61
  return createUserValidator(attr, messages);
65
62
  case "relation":
66
63
  return createRelationValidator(attr, messages);
67
- case "rating":
68
- return createRatingValidator(attr, messages);
69
64
  case "formula":
70
65
  return createFormulaValidator(attr, messages);
71
66
  case "rollup":
@@ -606,6 +601,16 @@ ${detail}`,
606
601
  }
607
602
  return result.data;
608
603
  }
604
+ function rejectUnknownAttributesOrThrow(objectDef, data) {
605
+ const knownNames = new Set(objectDef.attributes.map((a) => a.name));
606
+ const unknownKeys = Object.keys(data).filter((key) => !knownNames.has(key));
607
+ if (unknownKeys.length > 0) {
608
+ throw new ValidationError(
609
+ `Unknown attribute${unknownKeys.length > 1 ? "s" : ""} for ${objectDef.label}: ${unknownKeys.join(", ")}`,
610
+ unknownKeys.map((key) => ({ path: [key], message: "Unknown attribute" }))
611
+ );
612
+ }
613
+ }
609
614
  function isValuePresent(value) {
610
615
  if (value === void 0 || value === null) {
611
616
  return false;
@@ -636,4 +641,4 @@ function computeRecordStatus(objectDef, data) {
636
641
  return isRecordComplete(objectDef, data) ? "complete" : "draft";
637
642
  }
638
643
 
639
- export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, computeRecordStatus, createAttributeValidator, createDraftValidator, createFormAttributeValidator, createObjectValidator, getMissingRequiredAttributes, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordComplete, isRecordReferencedError, isSchemaError, isValidationError, validateAttribute, validateDraft, validateDraftOrThrow, validateObject, validateObjectOrThrow };
644
+ export { AccessDeniedError, AttributeInUseError, AttributeNotFoundError, ChangeTypeNotSupportedError, ConcurrentModificationError, DestructiveSyncNotAllowedError, DuplicateError, ForbiddenError, MemoryNotFoundError, MigrationTimeoutError, NotFoundError, NotImplementedError, ObjectNotFoundError, ObjectReferencedError, OrphanSystemAttributeError, ProtectedResourceError, ProtectedRoleError, RecordNotFoundError, RecordReferencedError, RepositoryError, RoleNotFoundError, SchemaError, SchemaErrorCode, StorageError, SyncCascadeError, SyncConflictError, SyncError, SystemEntityImmutableError, ValidationError, computeRecordStatus, createAttributeValidator, createDraftValidator, createFormAttributeValidator, createObjectValidator, getMissingRequiredAttributes, isAttributeInUseError, isNotFoundError, isObjectReferencedError, isProtectedResourceError, isRecordComplete, isRecordReferencedError, isSchemaError, isValidationError, rejectUnknownAttributesOrThrow, validateAttribute, validateDraft, validateDraftOrThrow, validateObject, validateObjectOrThrow };
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createFileValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createRichtextValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
4
  var zod = require('zod');
5
5
 
6
- function createSelectValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
6
+ function createSelectValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
7
7
  const validValues = attr.options.map((opt) => opt.value);
8
8
  if (validValues.length === 0) return zod.z.never();
9
9
  const validLabels = attr.options.map((opt) => opt.label);
@@ -11,7 +11,7 @@ function createSelectValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDAT
11
11
  message: messages.invalidOption(attr, validLabels)
12
12
  });
13
13
  }
14
- function createMultiselectValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
14
+ function createMultiselectValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
15
15
  const validValues = attr.options.map((opt) => opt.value);
16
16
  if (validValues.length === 0) return zod.z.never();
17
17
  const validLabels = attr.options.map((opt) => opt.label);
@@ -21,7 +21,7 @@ function createMultiselectValidator(attr, messages = chunkT225DB55_js.DEFAULT_VA
21
21
  })
22
22
  );
23
23
  }
24
- function createStatusValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
24
+ function createStatusValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
25
25
  const validValues = attr.options.map((opt) => opt.value);
26
26
  if (validValues.length === 0) return zod.z.never();
27
27
  const validLabels = attr.options.map((opt) => opt.label);
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
4
  var zod = require('zod');
5
5
 
6
- function createFileValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
6
+ function createFileValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
7
7
  const uuidSchema = zod.z.uuid({
8
8
  message: messages.invalidId(attr)
9
9
  });
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
4
  var zod = require('zod');
5
5
 
6
6
  // src/lib/lru-cache.ts
@@ -57,7 +57,7 @@ function getCachedRegex(cache, pattern) {
57
57
 
58
58
  // src/validation/primitives/text.ts
59
59
  var textRegexCache = createRegexCache();
60
- function createTextValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
60
+ function createTextValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
61
61
  let schema = zod.z.string();
62
62
  if (attr.minLength !== void 0) {
63
63
  schema = schema.min(attr.minLength, messages.minLength(attr, attr.minLength));
@@ -73,9 +73,5 @@ function createTextValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATIO
73
73
  }
74
74
  return schema;
75
75
  }
76
- function createTextAreaValidator(_attr, _messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
77
- return zod.z.string();
78
- }
79
76
 
80
- exports.createTextAreaValidator = createTextAreaValidator;
81
77
  exports.createTextValidator = createTextValidator;
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
4
  var zod = require('zod');
5
5
 
6
- function createUserValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
6
+ function createUserValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
7
7
  const uuidSchema = zod.z.uuid({
8
8
  message: messages.invalidId(attr)
9
9
  });
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createNumberValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -9,6 +9,13 @@ function createNumberValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
9
9
  if (attr.max !== void 0) {
10
10
  schema = schema.max(attr.max, messages.maxValue(attr, attr.max));
11
11
  }
12
+ if (attr.renderAs === "rating") {
13
+ schema = schema.min(attr.min ?? 0);
14
+ schema = schema.max(attr.max ?? 5);
15
+ }
16
+ if (attr.unit === "percentage") {
17
+ schema = schema.min(attr.min ?? 0).max(attr.max ?? 100);
18
+ }
12
19
  if (attr.unit === "integer") {
13
20
  schema = schema.int(messages.mustBeInteger(attr));
14
21
  }
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createFormulaValidator(_attr, _messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
4
  var zod = require('zod');
5
5
 
6
- function createRollupValidator(_attr, _messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
6
+ function createRollupValidator(_attr, _messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
7
7
  return zod.z.unknown();
8
8
  }
9
9
 
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function extractRelationId(item) {
@@ -34,9 +34,6 @@ function createMultiRelationValidator(attr, messages = DEFAULT_VALIDATION_MESSAG
34
34
  // Allow additional properties
35
35
  ]);
36
36
  let arraySchema = z.array(itemSchema);
37
- if (attr.minItems !== void 0) {
38
- arraySchema = arraySchema.min(attr.minItems, messages.minItems(attr, attr.minItems));
39
- }
40
37
  if (attr.maxItems !== void 0) {
41
38
  arraySchema = arraySchema.max(attr.maxItems, messages.maxItems(attr, attr.maxItems));
42
39
  }
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkT225DB55_js = require('./chunk-T225DB55.js');
3
+ var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
4
4
  var zod = require('zod');
5
5
 
6
- function createNumberValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDATION_MESSAGES) {
6
+ function createNumberValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES) {
7
7
  let schema = zod.z.number();
8
8
  if (attr.min !== void 0) {
9
9
  schema = schema.min(attr.min, messages.minValue(attr, attr.min));
@@ -11,6 +11,13 @@ function createNumberValidator(attr, messages = chunkT225DB55_js.DEFAULT_VALIDAT
11
11
  if (attr.max !== void 0) {
12
12
  schema = schema.max(attr.max, messages.maxValue(attr, attr.max));
13
13
  }
14
+ if (attr.renderAs === "rating") {
15
+ schema = schema.min(attr.min ?? 0);
16
+ schema = schema.max(attr.max ?? 5);
17
+ }
18
+ if (attr.unit === "percentage") {
19
+ schema = schema.min(attr.min ?? 0).max(attr.max ?? 100);
20
+ }
14
21
  if (attr.unit === "integer") {
15
22
  schema = schema.int(messages.mustBeInteger(attr));
16
23
  }
@@ -13,7 +13,6 @@ var DEFAULT_VALIDATION_MESSAGES = {
13
13
  invalidDate: (attr) => `${attr.label} must be a valid date`,
14
14
  invalidOption: (attr, options) => `${attr.label} must be one of: ${options.join(", ")}`,
15
15
  invalidId: (attr) => `${attr.label} must be a valid ID`,
16
- minItems: (attr, min) => `${attr.label} must have at least ${min} item${min > 1 ? "s" : ""}`,
17
16
  maxItems: (attr, max) => `${attr.label} must have at most ${max} item${max > 1 ? "s" : ""}`,
18
17
  invalidRichtext: (attr) => `${attr.label} must be valid rich text content`,
19
18
  invalidPhone: (attr) => `${attr.label} must be a valid phone number`,
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createLocationValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createUserValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,4 +1,4 @@
1
- import { DEFAULT_VALIDATION_MESSAGES } from './chunk-UQVW4KPP.mjs';
1
+ import { DEFAULT_VALIDATION_MESSAGES } from './chunk-HRQEZUAA.mjs';
2
2
  import { z } from 'zod';
3
3
 
4
4
  function createSelectValidator(attr, messages = DEFAULT_VALIDATION_MESSAGES) {
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { A as Attribute, O as ObjectDefinition, j as CompletionStatus } from './filters-DVBn5tov.js';
3
- import { V as ValidationMessages, a as ValidationResult } from './types-Bdlhgrf7.js';
2
+ import { A as Attribute, O as ObjectDefinition, h as CompletionStatus } from './attributes-DP08iPCh.mjs';
3
+ import { V as ValidationMessages, a as ValidationResult } from './types-D38kriFw.mjs';
4
4
 
5
5
  /**
6
6
  * Create a Zod schema for any attribute type.
@@ -51,6 +51,18 @@ declare function validateDraft(objectDef: ObjectDefinition, data: Record<string,
51
51
  * Throws `ValidationError` so HTTP adapters map it to 400.
52
52
  */
53
53
  declare function validateDraftOrThrow(objectDef: ObjectDefinition, data: Record<string, unknown>): Record<string, unknown>;
54
+ /**
55
+ * Throw a `ValidationError` when `data` contains keys that do not correspond
56
+ * to any attribute declared on `objectDef`.
57
+ *
58
+ * Call this on **client-supplied input** before Zod validation so the error
59
+ * message clearly names every offending key. Do NOT call on merged data that
60
+ * includes existing record values — older records may legitimately carry stale
61
+ * keys that predate this guard (see issue #658).
62
+ *
63
+ * Maps to HTTP 400 via `SchemaExceptionFilter` (code SCHEMA_VALIDATION_FAILED).
64
+ */
65
+ declare function rejectUnknownAttributesOrThrow(objectDef: ObjectDefinition, data: Record<string, unknown>): void;
54
66
  /**
55
67
  * Get the list of required attributes that are missing values.
56
68
  */
@@ -64,4 +76,4 @@ declare function isRecordComplete(objectDef: ObjectDefinition, data: Record<stri
64
76
  */
65
77
  declare function computeRecordStatus(objectDef: ObjectDefinition, data: Record<string, unknown>): CompletionStatus;
66
78
 
67
- export { createFormAttributeValidator as a, validateDraftOrThrow as b, computeRecordStatus as c, validateObject as d, validateObjectOrThrow as e, createAttributeValidator as f, getMissingRequiredAttributes as g, validateAttribute as h, isRecordComplete as i, validateDraft as v };
79
+ export { createFormAttributeValidator as a, validateDraftOrThrow as b, computeRecordStatus as c, validateObject as d, validateObjectOrThrow as e, createAttributeValidator as f, getMissingRequiredAttributes as g, validateAttribute as h, isRecordComplete as i, rejectUnknownAttributesOrThrow as r, validateDraft as v };
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { A as Attribute, O as ObjectDefinition, j as CompletionStatus } from './filters-HDG4kLoo.mjs';
3
- import { V as ValidationMessages, a as ValidationResult } from './types-C5DittlR.mjs';
2
+ import { A as Attribute, O as ObjectDefinition, h as CompletionStatus } from './attributes-Ddhps_AU.js';
3
+ import { V as ValidationMessages, a as ValidationResult } from './types-iKvYBe6v.js';
4
4
 
5
5
  /**
6
6
  * Create a Zod schema for any attribute type.
@@ -51,6 +51,18 @@ declare function validateDraft(objectDef: ObjectDefinition, data: Record<string,
51
51
  * Throws `ValidationError` so HTTP adapters map it to 400.
52
52
  */
53
53
  declare function validateDraftOrThrow(objectDef: ObjectDefinition, data: Record<string, unknown>): Record<string, unknown>;
54
+ /**
55
+ * Throw a `ValidationError` when `data` contains keys that do not correspond
56
+ * to any attribute declared on `objectDef`.
57
+ *
58
+ * Call this on **client-supplied input** before Zod validation so the error
59
+ * message clearly names every offending key. Do NOT call on merged data that
60
+ * includes existing record values — older records may legitimately carry stale
61
+ * keys that predate this guard (see issue #658).
62
+ *
63
+ * Maps to HTTP 400 via `SchemaExceptionFilter` (code SCHEMA_VALIDATION_FAILED).
64
+ */
65
+ declare function rejectUnknownAttributesOrThrow(objectDef: ObjectDefinition, data: Record<string, unknown>): void;
54
66
  /**
55
67
  * Get the list of required attributes that are missing values.
56
68
  */
@@ -64,4 +76,4 @@ declare function isRecordComplete(objectDef: ObjectDefinition, data: Record<stri
64
76
  */
65
77
  declare function computeRecordStatus(objectDef: ObjectDefinition, data: Record<string, unknown>): CompletionStatus;
66
78
 
67
- export { createFormAttributeValidator as a, validateDraftOrThrow as b, computeRecordStatus as c, validateObject as d, validateObjectOrThrow as e, createAttributeValidator as f, getMissingRequiredAttributes as g, validateAttribute as h, isRecordComplete as i, validateDraft as v };
79
+ export { createFormAttributeValidator as a, validateDraftOrThrow as b, computeRecordStatus as c, validateObject as d, validateObjectOrThrow as e, createAttributeValidator as f, getMissingRequiredAttributes as g, validateAttribute as h, isRecordComplete as i, rejectUnknownAttributesOrThrow as r, validateDraft as v };