@seedprotocol/sdk 0.7.3-next.613.g79a8dfd → 0.7.3

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 (239) hide show
  1. package/dist/{db-CQt-gcAl.js → BasePathResolver-Cm4apKRb.js} +2041 -127
  2. package/dist/BasePathResolver-Cm4apKRb.js.map +1 -0
  3. package/dist/{ClientManager-DDA9956Y.js → ClientManager-i3nJASkg.js} +664 -277
  4. package/dist/ClientManager-i3nJASkg.js.map +1 -0
  5. package/dist/{Item-D4FigtYS.js → Item-DBFchXpC.js} +495 -219
  6. package/dist/Item-DBFchXpC.js.map +1 -0
  7. package/dist/{ModelProperty-BDt6AU2h.js → ModelProperty-BS49g01Y.js} +167 -47
  8. package/dist/ModelProperty-BS49g01Y.js.map +1 -0
  9. package/dist/{Schema-B8xqLWkL.js → Schema-CpMNEnUO.js} +53 -42
  10. package/dist/Schema-CpMNEnUO.js.map +1 -0
  11. package/dist/{SchemaValidationService-BPxkfDLU.js → SchemaValidationService-DieV4KL-.js} +13 -14
  12. package/dist/{SchemaValidationService-BPxkfDLU.js.map → SchemaValidationService-DieV4KL-.js.map} +1 -1
  13. package/dist/{backfillMetadataPropertyIds-DuTPcv8t.js → backfillMetadataPropertyIds-DSoOoTnX.js} +14 -7
  14. package/dist/{backfillMetadataPropertyIds-DuTPcv8t.js.map → backfillMetadataPropertyIds-DSoOoTnX.js.map} +1 -1
  15. package/dist/{configurePlatform-YcOiDQBZ.js → configurePlatform-D0lQGAMQ.js} +8 -7
  16. package/dist/{configurePlatform-YcOiDQBZ.js.map → configurePlatform-D0lQGAMQ.js.map} +1 -1
  17. package/dist/detachRowsBeforeDelete-S0q-DJPT.js +50 -0
  18. package/dist/detachRowsBeforeDelete-S0q-DJPT.js.map +1 -0
  19. package/dist/{eas-CpOD74Ke.js → eas-6pjU-OuX.js} +9 -8
  20. package/dist/eas-6pjU-OuX.js.map +1 -0
  21. package/dist/{getItem-B_OoFkd7.js → getItem-CxBNZ-WL.js} +13 -11
  22. package/dist/{getItem-B_OoFkd7.js.map → getItem-CxBNZ-WL.js.map} +1 -1
  23. package/dist/{getPublishPayload-Xl3sRkR-.js → getPublishPayload-CTCvRUoU.js} +50 -18
  24. package/dist/getPublishPayload-CTCvRUoU.js.map +1 -0
  25. package/dist/getPublishUploads-SFHCbf_y.js +648 -0
  26. package/dist/getPublishUploads-SFHCbf_y.js.map +1 -0
  27. package/dist/{index-Xl1_4Lmb.js → index-8O3Uow-Y.js} +125 -57
  28. package/dist/index-8O3Uow-Y.js.map +1 -0
  29. package/dist/{index-CSOQFAOn.js → index-AVFTVp1m.js} +2 -2
  30. package/dist/index-AVFTVp1m.js.map +1 -0
  31. package/dist/index-Cvt5UBz4.js +30 -0
  32. package/dist/index-Cvt5UBz4.js.map +1 -0
  33. package/dist/{index.browser-CjTe0vt1.js → index.browser-DBhxRoe8.js} +554 -165
  34. package/dist/index.browser-DBhxRoe8.js.map +1 -0
  35. package/dist/{index.node-Cfa7npS6.js → index.node-CJhlcNHM.js} +25 -13
  36. package/dist/index.node-CJhlcNHM.js.map +1 -0
  37. package/dist/main.js +30 -47
  38. package/dist/main.js.map +1 -1
  39. package/dist/mimeTypes-DHAHC4eZ.js +204 -0
  40. package/dist/mimeTypes-DHAHC4eZ.js.map +1 -0
  41. package/dist/node.js +19 -21
  42. package/dist/node.js.map +1 -1
  43. package/dist/platform.browser.js +13 -11
  44. package/dist/platform.browser.js.map +1 -1
  45. package/dist/platform.node.js +18 -5
  46. package/dist/platform.node.js.map +1 -1
  47. package/dist/{property-BrXkY1Rg.js → property-DwPD283A.js} +14 -12
  48. package/dist/property-DwPD283A.js.map +1 -0
  49. package/dist/{publishDraftGraph-X0Wr9txE.js → publishDraftGraph-BOn3_Occ.js} +6 -9
  50. package/dist/{publishDraftGraph-X0Wr9txE.js.map → publishDraftGraph-BOn3_Occ.js.map} +1 -1
  51. package/dist/{resetAmbiguousLegacyItemData-Ci6PM_vC.js → resetAmbiguousLegacyItemData-BkYmBeJc.js} +14 -3
  52. package/dist/{resetAmbiguousLegacyItemData-Ci6PM_vC.js.map → resetAmbiguousLegacyItemData-BkYmBeJc.js.map} +1 -1
  53. package/dist/{resolveModelForSyncedSeed-DFVdnYq8.js → resolveModelForSyncedSeed-BL24nLa7.js} +2 -2
  54. package/dist/{resolveModelForSyncedSeed-DFVdnYq8.js.map → resolveModelForSyncedSeed-BL24nLa7.js.map} +1 -1
  55. package/dist/src/Item/Item.d.ts +21 -3
  56. package/dist/src/Item/Item.d.ts.map +1 -1
  57. package/dist/src/Item/service/actors/runPublish.d.ts +11 -2
  58. package/dist/src/Item/service/actors/runPublish.d.ts.map +1 -1
  59. package/dist/src/Item/service/itemMachineSingle.d.ts +12 -2
  60. package/dist/src/Item/service/itemMachineSingle.d.ts.map +1 -1
  61. package/dist/src/ItemProperty/ItemProperty.d.ts +5 -3
  62. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
  63. package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts.map +1 -1
  64. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
  65. package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
  66. package/dist/src/Model/Model.d.ts +10 -4
  67. package/dist/src/Model/Model.d.ts.map +1 -1
  68. package/dist/src/Model/index.d.ts +2 -2
  69. package/dist/src/ModelProperty/ModelProperty.d.ts +10 -2
  70. package/dist/src/ModelProperty/ModelProperty.d.ts.map +1 -1
  71. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts +3 -0
  72. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts.map +1 -1
  73. package/dist/src/Schema/Schema.d.ts +2 -2
  74. package/dist/src/Schema/Schema.d.ts.map +1 -1
  75. package/dist/src/Schema/index.d.ts +0 -1
  76. package/dist/src/Schema/index.d.ts.map +1 -1
  77. package/dist/src/browser/helpers/FileManager.d.ts +4 -1
  78. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  79. package/dist/src/browser/helpers/tolerantWebAccess.d.ts +79 -4
  80. package/dist/src/browser/helpers/tolerantWebAccess.d.ts.map +1 -1
  81. package/dist/src/browser/workers/FileDownloader.d.ts +19 -4
  82. package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
  83. package/dist/src/browser/workers/filesDownload.d.ts.map +1 -1
  84. package/dist/src/client/ClientManager.d.ts +30 -11
  85. package/dist/src/client/ClientManager.d.ts.map +1 -1
  86. package/dist/src/client/actors/platformClassesInit.d.ts +6 -0
  87. package/dist/src/client/actors/platformClassesInit.d.ts.map +1 -1
  88. package/dist/src/client/actors/processSchemaFiles.d.ts.map +1 -1
  89. package/dist/src/client/actors/saveConfig.d.ts +13 -6
  90. package/dist/src/client/actors/saveConfig.d.ts.map +1 -1
  91. package/dist/src/client/clientManagerMachine.d.ts.map +1 -1
  92. package/dist/src/db/migrateLegacyItemStorageRows.d.ts +57 -0
  93. package/dist/src/db/migrateLegacyItemStorageRows.d.ts.map +1 -0
  94. package/dist/src/db/read/getCompositeChildPaths.d.ts +13 -0
  95. package/dist/src/db/read/getCompositeChildPaths.d.ts.map +1 -0
  96. package/dist/src/db/read/getItems.d.ts.map +1 -1
  97. package/dist/src/db/read/getPublishPayload.d.ts +1 -1
  98. package/dist/src/db/read/getPublishPayload.d.ts.map +1 -1
  99. package/dist/src/db/read/getPublishUploads.d.ts +32 -3
  100. package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
  101. package/dist/src/db/read/summarizePublishWork.d.ts.map +1 -1
  102. package/dist/src/db/write/claimUnpublishedDrafts.d.ts +2 -0
  103. package/dist/src/db/write/claimUnpublishedDrafts.d.ts.map +1 -1
  104. package/dist/src/db/write/convertVerbatimItemStorageRow.d.ts +44 -0
  105. package/dist/src/db/write/convertVerbatimItemStorageRow.d.ts.map +1 -0
  106. package/dist/src/db/write/createNewItem.d.ts.map +1 -1
  107. package/dist/src/eventBus.d.ts +5 -0
  108. package/dist/src/eventBus.d.ts.map +1 -1
  109. package/dist/src/events/files/download.d.ts.map +1 -1
  110. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +3 -3
  111. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  112. package/dist/src/helpers/FileManager/IFileManager.d.ts +25 -1
  113. package/dist/src/helpers/FileManager/IFileManager.d.ts.map +1 -1
  114. package/dist/src/helpers/arweaveContentTags.d.ts +33 -0
  115. package/dist/src/helpers/arweaveContentTags.d.ts.map +1 -0
  116. package/dist/src/helpers/cachedPropertyRefresh.d.ts +12 -0
  117. package/dist/src/helpers/cachedPropertyRefresh.d.ts.map +1 -0
  118. package/dist/src/helpers/compositeUpload.d.ts +28 -0
  119. package/dist/src/helpers/compositeUpload.d.ts.map +1 -0
  120. package/dist/src/helpers/db.d.ts +3 -0
  121. package/dist/src/helpers/db.d.ts.map +1 -1
  122. package/dist/src/helpers/easSdk.d.ts +16 -0
  123. package/dist/src/helpers/easSdk.d.ts.map +1 -0
  124. package/dist/src/helpers/entity/detachRowsBeforeDelete.d.ts +16 -0
  125. package/dist/src/helpers/entity/detachRowsBeforeDelete.d.ts.map +1 -0
  126. package/dist/src/helpers/entity/entityDestroy.d.ts +2 -0
  127. package/dist/src/helpers/entity/entityDestroy.d.ts.map +1 -1
  128. package/dist/src/helpers/itemStorageFile.d.ts +57 -0
  129. package/dist/src/helpers/itemStorageFile.d.ts.map +1 -0
  130. package/dist/src/helpers/mapWithConcurrency.d.ts +7 -0
  131. package/dist/src/helpers/mapWithConcurrency.d.ts.map +1 -0
  132. package/dist/src/helpers/mimeTypes.d.ts +43 -0
  133. package/dist/src/helpers/mimeTypes.d.ts.map +1 -0
  134. package/dist/src/helpers/ownership.d.ts +28 -4
  135. package/dist/src/helpers/ownership.d.ts.map +1 -1
  136. package/dist/src/helpers/property/index.d.ts +37 -51
  137. package/dist/src/helpers/property/index.d.ts.map +1 -1
  138. package/dist/src/helpers/publishConfig.d.ts +27 -8
  139. package/dist/src/helpers/publishConfig.d.ts.map +1 -1
  140. package/dist/src/helpers/storageDir.d.ts +16 -0
  141. package/dist/src/helpers/storageDir.d.ts.map +1 -0
  142. package/dist/src/helpers/tabCoordinator.d.ts +5 -1
  143. package/dist/src/helpers/tabCoordinator.d.ts.map +1 -1
  144. package/dist/src/helpers/tabEvents.d.ts +23 -2
  145. package/dist/src/helpers/tabEvents.d.ts.map +1 -1
  146. package/dist/src/helpers/updateSchema.d.ts +5 -0
  147. package/dist/src/helpers/updateSchema.d.ts.map +1 -1
  148. package/dist/src/helpers/waitForEntityIdle.d.ts +5 -0
  149. package/dist/src/helpers/waitForEntityIdle.d.ts.map +1 -1
  150. package/dist/src/imports/json.d.ts +9 -0
  151. package/dist/src/imports/json.d.ts.map +1 -1
  152. package/dist/src/index.d.ts +11 -7
  153. package/dist/src/index.d.ts.map +1 -1
  154. package/dist/src/interfaces/IItem.d.ts +7 -1
  155. package/dist/src/interfaces/IItem.d.ts.map +1 -1
  156. package/dist/src/node/db/Db.d.ts.map +1 -1
  157. package/dist/src/node/helpers/PathResolver.d.ts.map +1 -1
  158. package/dist/src/node/index.d.ts +8 -1
  159. package/dist/src/node/index.d.ts.map +1 -1
  160. package/dist/src/platform/index.browser.d.ts +2 -0
  161. package/dist/src/platform/index.browser.d.ts.map +1 -1
  162. package/dist/src/platform/index.node.d.ts +2 -0
  163. package/dist/src/platform/index.node.d.ts.map +1 -1
  164. package/dist/src/types/fileManager.d.ts +3 -14
  165. package/dist/src/types/fileManager.d.ts.map +1 -1
  166. package/dist/src/types/index.d.ts +12 -1
  167. package/dist/src/types/index.d.ts.map +1 -1
  168. package/dist/src/types/machines.d.ts +2 -0
  169. package/dist/src/types/machines.d.ts.map +1 -1
  170. package/dist/src/types/property.d.ts +8 -0
  171. package/dist/src/types/property.d.ts.map +1 -1
  172. package/dist/src/types/publish.d.ts +14 -0
  173. package/dist/src/types/publish.d.ts.map +1 -1
  174. package/dist/{syncDbWithEas-BU-jZ5bJ.js → syncDbWithEas-Bv2Fe38J.js} +17 -17
  175. package/dist/{syncDbWithEas-BU-jZ5bJ.js.map → syncDbWithEas-Bv2Fe38J.js.map} +1 -1
  176. package/dist/tabEvents-9s2WCYw-.js +335 -0
  177. package/dist/tabEvents-9s2WCYw-.js.map +1 -0
  178. package/dist/tolerantWebAccess-iUu80pAP.js +551 -0
  179. package/dist/tolerantWebAccess-iUu80pAP.js.map +1 -0
  180. package/dist/{updateSeedRevokedAt-iLpzae1i.js → updateSeedRevokedAt-zBfi931j.js} +3 -3
  181. package/dist/{updateSeedRevokedAt-iLpzae1i.js.map → updateSeedRevokedAt-zBfi931j.js.map} +1 -1
  182. package/package.json +11 -12
  183. package/src/node/easLodashRegister.js +4 -0
  184. package/dist/BasePathResolver-BdxCSIzn.js +0 -679
  185. package/dist/BasePathResolver-BdxCSIzn.js.map +0 -1
  186. package/dist/ClientManager-DDA9956Y.js.map +0 -1
  187. package/dist/Item-D4FigtYS.js.map +0 -1
  188. package/dist/ModelProperty-BDt6AU2h.js.map +0 -1
  189. package/dist/Schema-B8xqLWkL.js.map +0 -1
  190. package/dist/cjs/ModelProperty-B-cZm1yU.js +0 -1977
  191. package/dist/cjs/ModelProperty-B-cZm1yU.js.map +0 -1
  192. package/dist/cjs/Schema-STP972Xw.js +0 -5256
  193. package/dist/cjs/Schema-STP972Xw.js.map +0 -1
  194. package/dist/cjs/SchemaValidationService-CKNW1bKg.js +0 -778
  195. package/dist/cjs/SchemaValidationService-CKNW1bKg.js.map +0 -1
  196. package/dist/cjs/backfillMetadataPropertyIds-CP3y1skt.js +0 -89
  197. package/dist/cjs/backfillMetadataPropertyIds-CP3y1skt.js.map +0 -1
  198. package/dist/cjs/eas-CAnUC4wd.js +0 -138
  199. package/dist/cjs/eas-CAnUC4wd.js.map +0 -1
  200. package/dist/cjs/getItem-CWgb3e9G.js +0 -58
  201. package/dist/cjs/getItem-CWgb3e9G.js.map +0 -1
  202. package/dist/cjs/getPublishPayload-BsZWiJ03.js +0 -1603
  203. package/dist/cjs/getPublishPayload-BsZWiJ03.js.map +0 -1
  204. package/dist/cjs/getPublishUploads-BQr8aMVP.js +0 -495
  205. package/dist/cjs/getPublishUploads-BQr8aMVP.js.map +0 -1
  206. package/dist/cjs/index-nA5PxBSs.js +0 -70
  207. package/dist/cjs/index-nA5PxBSs.js.map +0 -1
  208. package/dist/cjs/index-usKaANAq.js +0 -22171
  209. package/dist/cjs/index-usKaANAq.js.map +0 -1
  210. package/dist/cjs/index.browser-BSf8HpnU.js +0 -22
  211. package/dist/cjs/index.browser-BSf8HpnU.js.map +0 -1
  212. package/dist/cjs/property-xMwPhQ5N.js +0 -327
  213. package/dist/cjs/property-xMwPhQ5N.js.map +0 -1
  214. package/dist/cjs/publishDraftGraph-BRWlR1KO.js +0 -403
  215. package/dist/cjs/publishDraftGraph-BRWlR1KO.js.map +0 -1
  216. package/dist/cjs/resetAmbiguousLegacyItemData-8nfkj9rz.js +0 -116
  217. package/dist/cjs/resetAmbiguousLegacyItemData-8nfkj9rz.js.map +0 -1
  218. package/dist/cjs/resolveModelForSyncedSeed-kYRuDWYw.js +0 -49
  219. package/dist/cjs/resolveModelForSyncedSeed-kYRuDWYw.js.map +0 -1
  220. package/dist/cjs/syncDbWithEas-DqRhV8o2.js +0 -886
  221. package/dist/cjs/syncDbWithEas-DqRhV8o2.js.map +0 -1
  222. package/dist/db-CQt-gcAl.js.map +0 -1
  223. package/dist/eas-CpOD74Ke.js.map +0 -1
  224. package/dist/getPublishPayload-Xl3sRkR-.js.map +0 -1
  225. package/dist/getPublishUploads-DHP01KgU.js +0 -484
  226. package/dist/getPublishUploads-DHP01KgU.js.map +0 -1
  227. package/dist/index-BGt4_oPO.js +0 -31
  228. package/dist/index-BGt4_oPO.js.map +0 -1
  229. package/dist/index-CSOQFAOn.js.map +0 -1
  230. package/dist/index-Xl1_4Lmb.js.map +0 -1
  231. package/dist/index.browser-CjTe0vt1.js.map +0 -1
  232. package/dist/index.node-Cfa7npS6.js.map +0 -1
  233. package/dist/main.cjs +0 -84
  234. package/dist/main.cjs.map +0 -1
  235. package/dist/property-BrXkY1Rg.js.map +0 -1
  236. package/dist/tabEvents-BZJMY5uK.js +0 -1344
  237. package/dist/tabEvents-BZJMY5uK.js.map +0 -1
  238. package/dist/tolerantWebAccess-BZ2RA_mb.js +0 -160
  239. package/dist/tolerantWebAccess-BZ2RA_mb.js.map +0 -1
@@ -1,778 +0,0 @@
1
- 'use strict';
2
-
3
- var value = require('@sinclair/typebox/value');
4
- require('reflect-metadata');
5
- var main_cjs = require('./index-usKaANAq.js');
6
- require('pluralize');
7
- require('drizzle-orm');
8
- var typebox = require('@sinclair/typebox');
9
- var debug = require('debug');
10
- require('immer');
11
- require('xstate');
12
- require('drizzle-orm/sqlite-core');
13
- require('@seedprotocol/arweave');
14
- require('@seedprotocol/eas');
15
- require('drizzle-orm/casing');
16
- require('lodash-es');
17
- require('nanoid');
18
- require('nanoid-dictionary');
19
- require('@seedprotocol/query');
20
- require('rxjs');
21
- require('@noble/hashes/sha3');
22
- require('@noble/hashes/utils');
23
- require('fs/promises');
24
- require('fs');
25
- require('path');
26
- require('url');
27
- require('node:url');
28
- require('@libsql/client');
29
- require('drizzle-orm/libsql');
30
- require('drizzle-orm/libsql/migrator');
31
- require('js-yaml');
32
- require('child_process');
33
- require('@seedprotocol/arweave/node');
34
- require('@seedprotocol/eas/node');
35
-
36
- const logger = debug('seedSdk:schema:validation');
37
- /**
38
- * Service for validating schemas, models, and properties using TypeBox
39
- */
40
- class SchemaValidationService {
41
- /**
42
- * Enhance TypeBox error message with expected values for union/literal types
43
- */
44
- enhanceErrorMessage(error, schema, fieldPath) {
45
- const originalMessage = error.message || 'Validation failed';
46
- // Handle Union type errors (like TPropertyDataType)
47
- if (error.type === 'Union' || originalMessage.includes('union')) {
48
- const expectedValues = this.extractExpectedValues(schema, fieldPath);
49
- if (expectedValues.length > 0) {
50
- return `Expected one of: ${expectedValues.join(', ')}. Received: ${JSON.stringify(error.value)}`;
51
- }
52
- }
53
- // Handle Literal type errors
54
- if (error.type === 'Literal') {
55
- const expectedValue = this.extractLiteralValue(schema, fieldPath);
56
- if (expectedValue !== undefined) {
57
- return `Expected: ${JSON.stringify(expectedValue)}. Received: ${JSON.stringify(error.value)}`;
58
- }
59
- }
60
- // Return enhanced message with value info if available
61
- if (error.value !== undefined) {
62
- return `${originalMessage}. Received: ${JSON.stringify(error.value)}`;
63
- }
64
- return originalMessage;
65
- }
66
- /**
67
- * Extract expected values from a schema for a given field path
68
- */
69
- extractExpectedValues(schema, fieldPath) {
70
- try {
71
- // Handle TProperty schema - check if this is the dataType field
72
- if (fieldPath === '/dataType' || fieldPath.endsWith('/dataType')) {
73
- // Return all ModelPropertyDataTypes enum values
74
- return Object.values(main_cjs.ModelPropertyDataTypes);
75
- }
76
- // Handle TStorageType
77
- if (fieldPath === '/storageType' || fieldPath.endsWith('/storageType')) {
78
- return ['ItemStorage', 'PropertyStorage'];
79
- }
80
- // If we have a schema, try to extract from it
81
- if (!schema) {
82
- return [];
83
- }
84
- // Try to extract from TypeBox Union type using the schema directly
85
- const schemaObj = schema;
86
- const kind = schemaObj[Symbol.for('TypeBox.Kind')];
87
- if (kind === 'Union') {
88
- const union = schemaObj;
89
- const anyOf = union.anyOf || [];
90
- const values = [];
91
- for (const item of anyOf) {
92
- const itemKind = item?.[Symbol.for('TypeBox.Kind')];
93
- if (itemKind === 'Literal') {
94
- const literal = item;
95
- if (literal.const !== undefined) {
96
- values.push(String(literal.const));
97
- }
98
- }
99
- }
100
- if (values.length > 0) {
101
- return values;
102
- }
103
- }
104
- // Fallback: try to extract from JSON schema format
105
- if (typeof schema === 'object' && 'anyOf' in schema) {
106
- const union = schema;
107
- if (Array.isArray(union.anyOf)) {
108
- return union.anyOf
109
- .map((item) => {
110
- if (item.const !== undefined)
111
- return String(item.const);
112
- if (item.enum && Array.isArray(item.enum))
113
- return item.enum.map(String);
114
- return null;
115
- })
116
- .filter((val) => val !== null)
117
- .flat()
118
- .map(String);
119
- }
120
- }
121
- }
122
- catch (error) {
123
- logger('Error extracting expected values:', error);
124
- }
125
- return [];
126
- }
127
- /**
128
- * Extract literal value from a schema
129
- */
130
- extractLiteralValue(schema, fieldPath) {
131
- try {
132
- if (schema && typeof schema === 'object') {
133
- const schemaObj = schema;
134
- if (schemaObj[Symbol.for('TypeBox.Kind')] === 'Literal') {
135
- return schemaObj.const;
136
- }
137
- if (schemaObj.const !== undefined) {
138
- return schemaObj.const;
139
- }
140
- }
141
- }
142
- catch (error) {
143
- logger('Error extracting literal value:', error);
144
- }
145
- return undefined;
146
- }
147
- /**
148
- * Get the schema for a specific field path
149
- */
150
- getSchemaForField(schema, fieldPath) {
151
- try {
152
- if (!schema || typeof schema !== 'object')
153
- return null;
154
- // Remove leading slash
155
- const path = fieldPath.replace(/^\//, '');
156
- if (!path)
157
- return schema;
158
- const schemaObj = schema;
159
- const kind = schemaObj[Symbol.for('TypeBox.Kind')];
160
- // For TProperty (Object type), check properties
161
- if (kind === 'Object') {
162
- const properties = schemaObj.properties;
163
- if (properties && properties[path]) {
164
- return properties[path];
165
- }
166
- }
167
- // Special handling for known fields - return the actual schema
168
- if (path === 'dataType') {
169
- return main_cjs.TPropertyDataType;
170
- }
171
- // Fallback: check if schema has the property
172
- if (path in schemaObj) {
173
- return schemaObj[path];
174
- }
175
- }
176
- catch (error) {
177
- logger('Error getting schema for field:', error);
178
- }
179
- return null;
180
- }
181
- /**
182
- * Validate a property structure against TProperty schema
183
- */
184
- validatePropertyStructure(property) {
185
- try {
186
- // Normalize dataType and refValueType for case-insensitive schema support (e.g. "relation" -> "Relation")
187
- const normalized = { ...property };
188
- if (typeof normalized.dataType === 'string') {
189
- normalized.dataType = main_cjs.normalizeDataType(normalized.dataType);
190
- }
191
- if (typeof normalized.refValueType === 'string') {
192
- normalized.refValueType = main_cjs.normalizeDataType(normalized.refValueType);
193
- }
194
- const isValid = value.Value.Check(main_cjs.TProperty, normalized);
195
- const errors = [];
196
- if (!isValid) {
197
- const typeBoxErrors = [...value.Value.Errors(main_cjs.TProperty, normalized)];
198
- errors.push(...typeBoxErrors.map(err => {
199
- const fieldPath = err.path || 'unknown';
200
- const fieldSchema = this.getSchemaForField(main_cjs.TProperty, fieldPath);
201
- const enhancedMessage = this.enhanceErrorMessage(err, fieldSchema || main_cjs.TProperty, fieldPath);
202
- return {
203
- field: fieldPath,
204
- message: enhancedMessage,
205
- code: String(err.type || 'validation_error'),
206
- severity: 'error',
207
- };
208
- }));
209
- }
210
- // Non-List types: refValueType is only valid for Relation+Image (related entity type). Reject otherwise.
211
- const nonListTypes = [
212
- main_cjs.ModelPropertyDataTypes.Text,
213
- main_cjs.ModelPropertyDataTypes.Number,
214
- main_cjs.ModelPropertyDataTypes.Boolean,
215
- main_cjs.ModelPropertyDataTypes.Date,
216
- main_cjs.ModelPropertyDataTypes.Json,
217
- main_cjs.ModelPropertyDataTypes.Image,
218
- main_cjs.ModelPropertyDataTypes.File,
219
- main_cjs.ModelPropertyDataTypes.Html,
220
- main_cjs.ModelPropertyDataTypes.Relation,
221
- ];
222
- if (nonListTypes.includes(normalized.dataType)) {
223
- const hasRefValueType = normalized.refValueType != null && String(normalized.refValueType).trim() !== '';
224
- if (hasRefValueType) {
225
- // Relation may keep refValueType only for Image (relation to Image entity)
226
- if (normalized.dataType === main_cjs.ModelPropertyDataTypes.Relation && normalized.refValueType === main_cjs.ModelPropertyDataTypes.Image) {
227
- // Allowed: Relation to Image
228
- }
229
- else {
230
- errors.push({
231
- field: 'refValueType',
232
- message: `refValueType is only valid for List properties. Use dataType 'List' with refValueType '${normalized.refValueType}' for lists of ${normalized.refValueType}.`,
233
- code: 'invalid_ref_value_type',
234
- severity: 'error',
235
- });
236
- }
237
- }
238
- }
239
- // List: refValueType is required
240
- if (normalized.dataType === main_cjs.ModelPropertyDataTypes.List) {
241
- const hasRefValueType = normalized.refValueType != null && String(normalized.refValueType).trim() !== '';
242
- if (!hasRefValueType) {
243
- errors.push({
244
- field: 'refValueType',
245
- message: `List properties require refValueType (e.g. 'Text', 'Number', 'Relation') to specify the element type.`,
246
- code: 'missing_ref_value_type',
247
- severity: 'error',
248
- });
249
- }
250
- // List of relations: ref is required
251
- if (hasRefValueType && normalized.refValueType === main_cjs.ModelPropertyDataTypes.Relation) {
252
- const hasRef = normalized.ref && normalized.ref.trim() !== '';
253
- const hasRefModelName = normalized.refModelName && normalized.refModelName.trim() !== '';
254
- const hasRefModelId = normalized.refModelId !== undefined && normalized.refModelId !== null;
255
- if (!hasRef && !hasRefModelName && !hasRefModelId) {
256
- errors.push({
257
- field: 'ref',
258
- message: `List properties with refValueType 'Relation' require either a "ref", "refModelName", or "refModelId" field to be defined`,
259
- code: 'missing_ref',
260
- severity: 'error',
261
- });
262
- }
263
- }
264
- }
265
- // Relation (single): ref is required
266
- if (normalized.dataType === main_cjs.ModelPropertyDataTypes.Relation) {
267
- const hasRef = normalized.ref && normalized.ref.trim() !== '';
268
- const hasRefModelName = normalized.refModelName && normalized.refModelName.trim() !== '';
269
- const hasRefModelId = normalized.refModelId !== undefined && normalized.refModelId !== null;
270
- if (!hasRef && !hasRefModelName && !hasRefModelId) {
271
- errors.push({
272
- field: 'ref',
273
- message: `Property with dataType "Relation" requires either a "ref", "refModelName", or "refModelId" field to be defined`,
274
- code: 'missing_ref',
275
- severity: 'error',
276
- });
277
- }
278
- if ((hasRef || hasRefModelName) && !hasRefModelId) {
279
- logger(`Property "${normalized.name}" has ref/refModelName but no refModelId - will be resolved asynchronously`);
280
- }
281
- }
282
- return {
283
- isValid: errors.length === 0,
284
- errors,
285
- };
286
- }
287
- catch (error) {
288
- logger('Error validating property structure:', error);
289
- return {
290
- isValid: false,
291
- errors: [{
292
- field: 'property',
293
- message: error instanceof Error ? error.message : 'Unknown validation error',
294
- code: 'validation_exception',
295
- severity: 'error',
296
- }],
297
- };
298
- }
299
- }
300
- /**
301
- * Validate a property value against its validation rules
302
- * @param value - The value to validate
303
- * @param dataType - The property's data type
304
- * @param validationRules - Optional validation rules (enum, pattern, minLength, maxLength)
305
- * @param refValueType - For List properties: the element type (Text, Number, etc.). When set, each array element is validated against this type + validationRules.
306
- */
307
- validatePropertyValue(value$1, dataType, validationRules, refValueType) {
308
- dataType = main_cjs.normalizeDataType(dataType);
309
- const errors = [];
310
- const warnings = [];
311
- try {
312
- // Array values are only allowed for List properties
313
- if (dataType !== main_cjs.ModelPropertyDataTypes.List && Array.isArray(value$1)) {
314
- errors.push({
315
- field: 'value',
316
- message: 'Array values are only allowed for List properties. Use dataType "List" with refValueType to store multiple values.',
317
- code: 'array_not_allowed',
318
- severity: 'error',
319
- });
320
- }
321
- // File/Image: accept File objects from OS picker, and Blobs for Image (saveImage persists both).
322
- // The TypeBox schema only allows string|null.
323
- const isFileObject = typeof File !== 'undefined' && value$1 instanceof File;
324
- const isBlobObject = typeof Blob !== 'undefined' && value$1 instanceof Blob;
325
- if ((dataType === main_cjs.ModelPropertyDataTypes.File && isFileObject) ||
326
- (dataType === main_cjs.ModelPropertyDataTypes.Image && isBlobObject)) {
327
- if (validationRules) {
328
- const customErrors = this.validateCustomRules(value$1, validationRules);
329
- errors.push(...customErrors);
330
- }
331
- return {
332
- isValid: errors.length === 0,
333
- errors,
334
- warnings: warnings.length > 0 ? warnings : undefined,
335
- };
336
- }
337
- // List with refValueType: validate each element against element schema + validation rules
338
- if (dataType === main_cjs.ModelPropertyDataTypes.List && refValueType && Array.isArray(value$1)) {
339
- const elementDataType = main_cjs.normalizeDataType(String(refValueType));
340
- // Apply default maxLength for Text elements in List. Html elements hold arbitrary-length content.
341
- const elementEffectiveRules = validationRules ? { ...validationRules } : {};
342
- if (elementDataType === main_cjs.ModelPropertyDataTypes.Text && elementEffectiveRules.maxLength === undefined) {
343
- elementEffectiveRules.maxLength = main_cjs.DEFAULT_TEXT_MAX_LENGTH;
344
- }
345
- for (let i = 0; i < value$1.length; i++) {
346
- const elementResult = this.validatePropertyValue(value$1[i], elementDataType, elementEffectiveRules);
347
- if (!elementResult.isValid && elementResult.errors.length > 0) {
348
- for (const err of elementResult.errors) {
349
- errors.push({
350
- field: `value[${i}]`,
351
- message: `Element at index ${i}: ${err.message}`,
352
- code: validationRules?.enum && Array.isArray(validationRules.enum) && validationRules.enum.length > 0 ? 'enum_violation' : err.code,
353
- severity: err.severity,
354
- });
355
- }
356
- }
357
- }
358
- if (validationRules) {
359
- const customErrors = this.validateCustomRules(value$1, validationRules);
360
- errors.push(...customErrors);
361
- }
362
- return {
363
- isValid: errors.length === 0,
364
- errors,
365
- warnings: warnings.length > 0 ? warnings : undefined,
366
- };
367
- }
368
- // List without refValueType or non-array: validate as scalar/array
369
- if (dataType === main_cjs.ModelPropertyDataTypes.List && !Array.isArray(value$1) && value$1 != null) {
370
- errors.push({
371
- field: 'value',
372
- message: 'List properties require an array value.',
373
- code: 'array_required',
374
- severity: 'error',
375
- });
376
- return { isValid: false, errors };
377
- }
378
- // Build base TypeBox schema from dataType
379
- let schema = this.getBaseSchemaForDataType(dataType);
380
- // Apply default maxLength for Text when not explicitly set. Html holds arbitrary-length content (e.g. article body) and must not default to 255.
381
- const effectiveRules = validationRules ? { ...validationRules } : {};
382
- if (dataType === main_cjs.ModelPropertyDataTypes.Text && effectiveRules.maxLength === undefined) {
383
- effectiveRules.maxLength = main_cjs.DEFAULT_TEXT_MAX_LENGTH;
384
- }
385
- // Apply validation rules
386
- const hasEnumRules = !!(validationRules?.enum && Array.isArray(validationRules.enum) && validationRules.enum.length > 0);
387
- if (Object.keys(effectiveRules).length > 0) {
388
- schema = this.applyValidationRules(schema, dataType, effectiveRules);
389
- }
390
- // Validate using TypeBox
391
- const isValid = value.Value.Check(schema, value$1);
392
- if (!isValid) {
393
- const typeBoxErrors = [...value.Value.Errors(schema, value$1)];
394
- const effectiveMaxLength = effectiveRules.maxLength;
395
- const isDefaultTextLimit = dataType === main_cjs.ModelPropertyDataTypes.Text &&
396
- effectiveMaxLength === main_cjs.DEFAULT_TEXT_MAX_LENGTH &&
397
- validationRules?.maxLength === undefined;
398
- errors.push(...typeBoxErrors.map(err => {
399
- const fieldPath = err.path || 'value';
400
- const originalMessage = (err.message || '').toLowerCase();
401
- // TypeBox maxLength errors have message like "Expected string length less or equal to X"
402
- const isMaxLengthError = originalMessage.includes('length') && (originalMessage.includes('less') || originalMessage.includes('equal') || originalMessage.includes('max'));
403
- let enhancedMessage;
404
- if (isMaxLengthError && effectiveMaxLength !== undefined) {
405
- const typeLabel = dataType === main_cjs.ModelPropertyDataTypes.Html ? 'Html' : 'Text';
406
- if (isDefaultTextLimit) {
407
- enhancedMessage = `Text properties have a default limit of 255 characters. For longer content, use a File property instead, which can hold arbitrary amounts of text or data.`;
408
- }
409
- else {
410
- enhancedMessage = `${typeLabel} must be ${effectiveMaxLength} characters or less. For longer content, use a File property instead, which can hold arbitrary amounts of text or data.`;
411
- }
412
- }
413
- else {
414
- enhancedMessage = this.enhanceErrorMessage(err, schema, fieldPath);
415
- }
416
- // Use max_length_exceeded when failure is due to maxLength; enum_violation when enum rules; else generic
417
- const code = isMaxLengthError
418
- ? 'max_length_exceeded'
419
- : hasEnumRules
420
- ? 'enum_violation'
421
- : String(err.type || 'value_validation_error');
422
- return {
423
- field: fieldPath,
424
- message: enhancedMessage,
425
- code,
426
- severity: 'error',
427
- };
428
- }));
429
- }
430
- // Additional custom validations
431
- if (validationRules) {
432
- const customErrors = this.validateCustomRules(value$1, validationRules);
433
- errors.push(...customErrors);
434
- }
435
- return {
436
- isValid: errors.length === 0,
437
- errors,
438
- warnings: warnings.length > 0 ? warnings : undefined,
439
- };
440
- }
441
- catch (error) {
442
- logger('Error validating property value:', error);
443
- return {
444
- isValid: false,
445
- errors: [{
446
- field: 'value',
447
- message: error instanceof Error ? error.message : 'Unknown validation error',
448
- code: 'validation_exception',
449
- severity: 'error',
450
- }],
451
- };
452
- }
453
- }
454
- /**
455
- * Validate a specific property within a schema
456
- */
457
- validateProperty(schema, modelName, propertyName, propertyData) {
458
- const errors = [];
459
- // Check if model exists
460
- if (!schema.models || !schema.models[modelName]) {
461
- errors.push({
462
- field: 'model',
463
- message: `Model "${modelName}" not found in schema`,
464
- code: 'model_not_found',
465
- severity: 'error',
466
- });
467
- return { isValid: false, errors };
468
- }
469
- const model = schema.models[modelName];
470
- // Check if property exists in model
471
- // If the property name has changed (renamed), check if the original name exists
472
- let propertyDefinition = model.properties?.[propertyName];
473
- if (!propertyDefinition && propertyData?._originalValues?.name) {
474
- const originalName = propertyData._originalValues.name;
475
- // If the current name differs from the original, check if original exists
476
- if (originalName !== propertyName && model.properties?.[originalName]) {
477
- propertyDefinition = model.properties[originalName];
478
- // Property is being renamed, which is allowed - continue validation
479
- }
480
- }
481
- if (!propertyDefinition) {
482
- errors.push({
483
- field: 'property',
484
- message: `Property "${propertyName}" not found in model "${modelName}"`,
485
- code: 'property_not_found',
486
- severity: 'error',
487
- });
488
- return { isValid: false, errors };
489
- }
490
- // If propertyData is provided, validate its structure
491
- if (propertyData) {
492
- const structureResult = this.validatePropertyStructure(propertyData);
493
- errors.push(...structureResult.errors);
494
- }
495
- // Schema context definitions come in two shapes: schema-file ({ type, model }) and runtime
496
- // ({ dataType, ref/refModelName }, e.g. models added from Model instances). Accept both, as the
497
- // List check below already does; requiring `type` rejected every edit to a runtime-shaped property.
498
- const definitionType = propertyDefinition.type ?? propertyDefinition.dataType;
499
- const definitionRefModel = propertyDefinition.model ?? propertyDefinition.ref ?? propertyDefinition.refModelName;
500
- // Validate property definition structure
501
- if (!definitionType) {
502
- errors.push({
503
- field: 'property.type',
504
- message: 'Property type is required',
505
- code: 'missing_type',
506
- severity: 'error',
507
- });
508
- }
509
- // Validate Relation: requires model
510
- if (main_cjs.isDataType(definitionType, main_cjs.ModelPropertyDataTypes.Relation)) {
511
- if (!definitionRefModel || definitionRefModel.trim() === '') {
512
- errors.push({
513
- field: 'property.model',
514
- message: `Property with type "Relation" requires a "model" field to be defined`,
515
- code: 'missing_ref',
516
- severity: 'error',
517
- });
518
- }
519
- else if (!schema.models[definitionRefModel]) {
520
- errors.push({
521
- field: 'property.model',
522
- message: `Referenced model "${definitionRefModel}" not found in schema`,
523
- code: 'invalid_reference',
524
- severity: 'error',
525
- });
526
- }
527
- }
528
- // Validate List: requires refValueType; ref (model) required only when refValueType === 'Relation' (case-insensitive)
529
- if (main_cjs.isDataType(propertyDefinition.type, main_cjs.ModelPropertyDataTypes.List) || main_cjs.isDataType(propertyDefinition.dataType, main_cjs.ModelPropertyDataTypes.List)) {
530
- const rawRefValueType = propertyDefinition.refValueType ?? propertyDefinition.items?.type ?? propertyDefinition.refvaluetype;
531
- const refValueType = rawRefValueType ? main_cjs.normalizeDataType(String(rawRefValueType)) : undefined;
532
- if (!refValueType || String(refValueType).trim() === '') {
533
- errors.push({
534
- field: 'property.refValueType',
535
- message: 'List properties require "refValueType" (e.g. refValueType: "Text" or refValueType: "Relation" with ref: "Tag")',
536
- code: 'missing_ref_value_type',
537
- severity: 'error',
538
- });
539
- }
540
- else if (refValueType === 'Relation' || refValueType === 'RelationProperty') {
541
- const model = propertyDefinition.ref ?? propertyDefinition.model ?? propertyDefinition.items?.model;
542
- if (!model || String(model).trim() === '') {
543
- errors.push({
544
- field: 'property.ref',
545
- message: 'List of relations requires "ref" to specify the related model',
546
- code: 'missing_ref',
547
- severity: 'error',
548
- });
549
- }
550
- else if (schema.models && !schema.models[model]) {
551
- errors.push({
552
- field: 'property.ref',
553
- message: `Referenced model "${model}" not found in schema`,
554
- code: 'invalid_reference',
555
- severity: 'error',
556
- });
557
- }
558
- }
559
- }
560
- return {
561
- isValid: errors.length === 0,
562
- errors,
563
- };
564
- }
565
- /**
566
- * Validate model structure (basic structure checks)
567
- */
568
- validateModelStructure(model) {
569
- const errors = [];
570
- // Validate model name
571
- if (!model.modelName || model.modelName.trim() === '') {
572
- errors.push({
573
- field: 'modelName',
574
- message: 'Model name is required',
575
- code: 'missing_model_name',
576
- severity: 'error',
577
- });
578
- }
579
- // Validate schema name
580
- if (!model.schemaName || model.schemaName.trim() === '') {
581
- errors.push({
582
- field: 'schemaName',
583
- message: 'Schema name is required',
584
- code: 'missing_schema_name',
585
- severity: 'error',
586
- });
587
- }
588
- // Validate properties is an object
589
- if (model.properties && typeof model.properties !== 'object') {
590
- errors.push({
591
- field: 'properties',
592
- message: 'Properties must be an object',
593
- code: 'invalid_properties',
594
- severity: 'error',
595
- });
596
- }
597
- return {
598
- isValid: errors.length === 0,
599
- errors,
600
- };
601
- }
602
- /**
603
- * Validate a model against a schema WITHOUT requiring it to be in the schema's context
604
- * This allows validation before registration, preventing update loops
605
- */
606
- validateModelAgainstSchema(schema, modelName, modelData) {
607
- // Create a temporary schema context that includes this model for validation purposes
608
- // This allows validateProperty to work without actually adding the model to the real schema
609
- const tempSchemaContext = {
610
- ...schema,
611
- models: {
612
- ...schema.models,
613
- [modelName]: {
614
- properties: modelData.properties || {},
615
- },
616
- },
617
- };
618
- // Use validateModel which now works because the model is in the temp context
619
- return this.validateModel(tempSchemaContext, modelName, modelData);
620
- }
621
- /**
622
- * Validate a model within a schema (requires model to already be in schema context)
623
- */
624
- validateModel(schema, modelName, modelData) {
625
- const errors = [];
626
- if (!schema.models || !schema.models[modelName]) {
627
- errors.push({
628
- field: 'model',
629
- message: `Model "${modelName}" not found in schema`,
630
- code: 'model_not_found',
631
- severity: 'error',
632
- });
633
- return { isValid: false, errors };
634
- }
635
- const model = schema.models[modelName];
636
- // Validate all properties in the model
637
- if (model.properties) {
638
- for (const [propertyName, propertyDef] of Object.entries(model.properties)) {
639
- const propertyResult = this.validateProperty(schema, modelName, propertyName);
640
- if (!propertyResult.isValid) {
641
- errors.push(...propertyResult.errors.map(err => ({
642
- ...err,
643
- field: `${modelName}.${propertyName}.${err.field}`,
644
- })));
645
- }
646
- }
647
- }
648
- return {
649
- isValid: errors.length === 0,
650
- errors,
651
- };
652
- }
653
- /**
654
- * Validate entire schema
655
- */
656
- validateSchema(schema) {
657
- const errors = [];
658
- // Validate schema name
659
- if (!schema.schemaName || schema.schemaName.trim() === '') {
660
- errors.push({
661
- field: 'schemaName',
662
- message: 'Schema name is required',
663
- code: 'missing_schema_name',
664
- severity: 'error',
665
- });
666
- }
667
- // Validate metadata
668
- if (!schema.metadata) {
669
- errors.push({
670
- field: 'metadata',
671
- message: 'Schema metadata is required',
672
- code: 'missing_metadata',
673
- severity: 'error',
674
- });
675
- }
676
- else {
677
- if (!schema.metadata.name || schema.metadata.name.trim() === '') {
678
- errors.push({
679
- field: 'metadata.name',
680
- message: 'Schema metadata name is required',
681
- code: 'missing_metadata_name',
682
- severity: 'error',
683
- });
684
- }
685
- }
686
- // Validate models if they exist
687
- if (schema.models && Object.keys(schema.models).length > 0) {
688
- // Validate each model
689
- for (const modelName of Object.keys(schema.models)) {
690
- const modelResult = this.validateModel(schema, modelName);
691
- if (!modelResult.isValid) {
692
- errors.push(...modelResult.errors);
693
- }
694
- }
695
- }
696
- return {
697
- isValid: errors.length === 0,
698
- errors,
699
- };
700
- }
701
- /**
702
- * Get base TypeBox schema for a data type
703
- */
704
- getBaseSchemaForDataType(dataType) {
705
- switch (dataType) {
706
- case main_cjs.ModelPropertyDataTypes.Text:
707
- case main_cjs.ModelPropertyDataTypes.Html:
708
- return typebox.Type.String();
709
- case main_cjs.ModelPropertyDataTypes.Number:
710
- return typebox.Type.Number();
711
- case main_cjs.ModelPropertyDataTypes.Boolean:
712
- return typebox.Type.Boolean();
713
- case main_cjs.ModelPropertyDataTypes.Date:
714
- return typebox.Type.String({ format: 'date-time' });
715
- case main_cjs.ModelPropertyDataTypes.Json:
716
- return typebox.Type.Any();
717
- case main_cjs.ModelPropertyDataTypes.List:
718
- return typebox.Type.Array(typebox.Type.Any());
719
- case main_cjs.ModelPropertyDataTypes.Relation:
720
- case main_cjs.ModelPropertyDataTypes.Image:
721
- case main_cjs.ModelPropertyDataTypes.File:
722
- return typebox.Type.Union([typebox.Type.String(), typebox.Type.Null()]);
723
- default:
724
- return typebox.Type.Any();
725
- }
726
- }
727
- /**
728
- * Apply validation rules to a TypeBox schema
729
- */
730
- applyValidationRules(schema, dataType, rules) {
731
- let result = schema;
732
- // Apply pattern (regex) for strings
733
- if (rules.pattern && (dataType === main_cjs.ModelPropertyDataTypes.Text || dataType === main_cjs.ModelPropertyDataTypes.Html)) {
734
- try {
735
- const regex = new RegExp(rules.pattern);
736
- result = typebox.Type.RegExp(regex);
737
- }
738
- catch (error) {
739
- logger('Invalid regex pattern:', rules.pattern, error);
740
- }
741
- }
742
- // Apply minLength/maxLength for strings
743
- if (dataType === main_cjs.ModelPropertyDataTypes.Text || dataType === main_cjs.ModelPropertyDataTypes.Html) {
744
- typebox.Type.String();
745
- if (rules.minLength !== undefined) {
746
- result = typebox.Type.String({ minLength: rules.minLength });
747
- }
748
- if (rules.maxLength !== undefined) {
749
- if (rules.minLength !== undefined) {
750
- result = typebox.Type.String({ minLength: rules.minLength, maxLength: rules.maxLength });
751
- }
752
- else {
753
- result = typebox.Type.String({ maxLength: rules.maxLength });
754
- }
755
- }
756
- }
757
- // Apply enum
758
- if (rules.enum && Array.isArray(rules.enum) && rules.enum.length > 0) {
759
- result = typebox.Type.Union(rules.enum.map(val => typebox.Type.Literal(val)));
760
- }
761
- return result;
762
- }
763
- /**
764
- * Validate custom validation rules
765
- */
766
- validateCustomRules(value, rules) {
767
- const errors = [];
768
- // Custom validator reference (would need to be implemented based on your needs)
769
- if (rules.custom) {
770
- // TODO: Implement custom validator lookup and execution
771
- logger('Custom validator not yet implemented:', rules.custom);
772
- }
773
- return errors;
774
- }
775
- }
776
-
777
- exports.SchemaValidationService = SchemaValidationService;
778
- //# sourceMappingURL=SchemaValidationService-CKNW1bKg.js.map