@contember/schema-definition 2.1.0-alpha.9 → 2.1.0-beta.2

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 (428) hide show
  1. package/CLAUDE.md +64 -0
  2. package/dist/development/index.cjs +33 -33
  3. package/dist/development/index.cjs.map +1 -1
  4. package/dist/development/index.js +25 -25
  5. package/dist/development/index.js.map +1 -1
  6. package/dist/development/src/acl/builder/EntityPermissionsBuilder.cjs.map +1 -1
  7. package/dist/development/src/acl/builder/EntityPermissionsBuilder.js.map +1 -1
  8. package/dist/development/src/acl/builder/EntitySelector.cjs.map +1 -1
  9. package/dist/development/src/acl/builder/EntitySelector.js.map +1 -1
  10. package/dist/development/src/acl/builder/FieldPermissionsBuilder.cjs.map +1 -1
  11. package/dist/development/src/acl/builder/FieldPermissionsBuilder.js.map +1 -1
  12. package/dist/development/src/acl/builder/FieldSelector.cjs.map +1 -1
  13. package/dist/development/src/acl/builder/FieldSelector.js.map +1 -1
  14. package/dist/development/src/acl/builder/PermissionOverrider.cjs.map +1 -1
  15. package/dist/development/src/acl/builder/PermissionOverrider.js.map +1 -1
  16. package/dist/development/src/acl/builder/PermissionsBuilder.cjs +1 -3
  17. package/dist/development/src/acl/builder/PermissionsBuilder.cjs.map +1 -1
  18. package/dist/development/src/acl/builder/PermissionsBuilder.js +1 -3
  19. package/dist/development/src/acl/builder/PermissionsBuilder.js.map +1 -1
  20. package/dist/development/src/acl/builder/PredicateReference.cjs.map +1 -1
  21. package/dist/development/src/acl/builder/PredicateReference.js.map +1 -1
  22. package/dist/development/src/acl/definition/aclExtensions.cjs +2 -2
  23. package/dist/development/src/acl/definition/aclExtensions.cjs.map +1 -1
  24. package/dist/development/src/acl/definition/aclExtensions.js +2 -2
  25. package/dist/development/src/acl/definition/aclExtensions.js.map +1 -1
  26. package/dist/development/src/acl/definition/customPrimary.cjs +1 -1
  27. package/dist/development/src/acl/definition/customPrimary.cjs.map +1 -1
  28. package/dist/development/src/acl/definition/customPrimary.js +1 -1
  29. package/dist/development/src/acl/definition/customPrimary.js.map +1 -1
  30. package/dist/development/src/acl/definition/index.cjs.map +1 -1
  31. package/dist/development/src/acl/definition/index.js.map +1 -1
  32. package/dist/development/src/acl/definition/internal/AclFactory.cjs +24 -16
  33. package/dist/development/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  34. package/dist/development/src/acl/definition/internal/AclFactory.js +24 -16
  35. package/dist/development/src/acl/definition/internal/AclFactory.js.map +1 -1
  36. package/dist/development/src/acl/definition/internal/EntityPredicateResolver.cjs.map +1 -1
  37. package/dist/development/src/acl/definition/internal/EntityPredicateResolver.js.map +1 -1
  38. package/dist/development/src/acl/definition/internal/createPredicateName.cjs.map +1 -1
  39. package/dist/development/src/acl/definition/internal/createPredicateName.js.map +1 -1
  40. package/dist/development/src/acl/definition/internal/stores.cjs.map +1 -1
  41. package/dist/development/src/acl/definition/internal/stores.js.map +1 -1
  42. package/dist/development/src/acl/definition/permissions.cjs +5 -2
  43. package/dist/development/src/acl/definition/permissions.cjs.map +1 -1
  44. package/dist/development/src/acl/definition/permissions.js +5 -2
  45. package/dist/development/src/acl/definition/permissions.js.map +1 -1
  46. package/dist/development/src/acl/definition/references.cjs.map +1 -1
  47. package/dist/development/src/acl/definition/references.js.map +1 -1
  48. package/dist/development/src/acl/definition/roles.cjs.map +1 -1
  49. package/dist/development/src/acl/definition/roles.js.map +1 -1
  50. package/dist/development/src/acl/definition/variables.cjs.map +1 -1
  51. package/dist/development/src/acl/definition/variables.js.map +1 -1
  52. package/dist/development/src/actions/definition/index.cjs.map +1 -1
  53. package/dist/development/src/actions/definition/index.js.map +1 -1
  54. package/dist/development/src/actions/definition/internal/ActionsFactory.cjs +8 -7
  55. package/dist/development/src/actions/definition/internal/ActionsFactory.cjs.map +1 -1
  56. package/dist/development/src/actions/definition/internal/ActionsFactory.js +8 -7
  57. package/dist/development/src/actions/definition/internal/ActionsFactory.js.map +1 -1
  58. package/dist/development/src/actions/definition/internal/store.cjs.map +1 -1
  59. package/dist/development/src/actions/definition/internal/store.js.map +1 -1
  60. package/dist/development/src/actions/definition/targets.cjs.map +1 -1
  61. package/dist/development/src/actions/definition/targets.js.map +1 -1
  62. package/dist/development/src/actions/definition/triggers.cjs +4 -4
  63. package/dist/development/src/actions/definition/triggers.cjs.map +1 -1
  64. package/dist/development/src/actions/definition/triggers.js +4 -4
  65. package/dist/development/src/actions/definition/triggers.js.map +1 -1
  66. package/dist/development/src/createSchema.cjs.map +1 -1
  67. package/dist/development/src/createSchema.js.map +1 -1
  68. package/dist/development/src/model/builder/ColumnBuilder.cjs +7 -5
  69. package/dist/development/src/model/builder/ColumnBuilder.cjs.map +1 -1
  70. package/dist/development/src/model/builder/ColumnBuilder.js +7 -5
  71. package/dist/development/src/model/builder/ColumnBuilder.js.map +1 -1
  72. package/dist/development/src/model/builder/EntityBuilder.cjs.map +1 -1
  73. package/dist/development/src/model/builder/EntityBuilder.js.map +1 -1
  74. package/dist/development/src/model/builder/FieldBuilder.cjs +4 -4
  75. package/dist/development/src/model/builder/FieldBuilder.cjs.map +1 -1
  76. package/dist/development/src/model/builder/FieldBuilder.js.map +1 -1
  77. package/dist/development/src/model/builder/ManyHasManyBuilder.cjs.map +1 -1
  78. package/dist/development/src/model/builder/ManyHasManyBuilder.js.map +1 -1
  79. package/dist/development/src/model/builder/ManyHasOneBuilder.cjs.map +1 -1
  80. package/dist/development/src/model/builder/ManyHasOneBuilder.js.map +1 -1
  81. package/dist/development/src/model/builder/OneHasManyBuilder.cjs.map +1 -1
  82. package/dist/development/src/model/builder/OneHasManyBuilder.js.map +1 -1
  83. package/dist/development/src/model/builder/OneHasOneBuilder.cjs.map +1 -1
  84. package/dist/development/src/model/builder/OneHasOneBuilder.js.map +1 -1
  85. package/dist/development/src/model/builder/SchemaBuilder.cjs.map +1 -1
  86. package/dist/development/src/model/builder/SchemaBuilder.js.map +1 -1
  87. package/dist/development/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  88. package/dist/development/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  89. package/dist/development/src/model/builder/internal/ColumnProcessor.cjs.map +1 -1
  90. package/dist/development/src/model/builder/internal/ColumnProcessor.js.map +1 -1
  91. package/dist/development/src/model/builder/internal/ManyHasManyProcessor.cjs.map +1 -1
  92. package/dist/development/src/model/builder/internal/ManyHasManyProcessor.js.map +1 -1
  93. package/dist/development/src/model/builder/internal/ManyHasOneProcessor.cjs.map +1 -1
  94. package/dist/development/src/model/builder/internal/ManyHasOneProcessor.js.map +1 -1
  95. package/dist/development/src/model/builder/internal/OneHasManyProcessor.cjs.map +1 -1
  96. package/dist/development/src/model/builder/internal/OneHasManyProcessor.js.map +1 -1
  97. package/dist/development/src/model/builder/internal/OneHasOneProcessor.cjs.map +1 -1
  98. package/dist/development/src/model/builder/internal/OneHasOneProcessor.js.map +1 -1
  99. package/dist/development/src/model/definition/EnumDefinition.cjs.map +1 -1
  100. package/dist/development/src/model/definition/EnumDefinition.js.map +1 -1
  101. package/dist/development/src/model/definition/EventLogDefinition.cjs.map +1 -1
  102. package/dist/development/src/model/definition/EventLogDefinition.js.map +1 -1
  103. package/dist/development/src/model/definition/IndexDefinition.cjs +2 -2
  104. package/dist/development/src/model/definition/IndexDefinition.cjs.map +1 -1
  105. package/dist/development/src/model/definition/IndexDefinition.js +2 -2
  106. package/dist/development/src/model/definition/IndexDefinition.js.map +1 -1
  107. package/dist/development/src/model/definition/OrderByDefinition.cjs +3 -1
  108. package/dist/development/src/model/definition/OrderByDefinition.cjs.map +1 -1
  109. package/dist/development/src/model/definition/OrderByDefinition.js +3 -1
  110. package/dist/development/src/model/definition/OrderByDefinition.js.map +1 -1
  111. package/dist/development/src/model/definition/UniqueDefinition.cjs.map +1 -1
  112. package/dist/development/src/model/definition/UniqueDefinition.js.map +1 -1
  113. package/dist/development/src/model/definition/ViewDefinition.cjs.map +1 -1
  114. package/dist/development/src/model/definition/ViewDefinition.js.map +1 -1
  115. package/dist/development/src/model/definition/extensions.cjs +2 -2
  116. package/dist/development/src/model/definition/extensions.cjs.map +1 -1
  117. package/dist/development/src/model/definition/extensions.js +2 -2
  118. package/dist/development/src/model/definition/extensions.js.map +1 -1
  119. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +12 -1
  120. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  121. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js +12 -1
  122. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  123. package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.cjs.map +1 -1
  124. package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.js.map +1 -1
  125. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs.map +1 -1
  126. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js.map +1 -1
  127. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs.map +1 -1
  128. package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js.map +1 -1
  129. package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs.map +1 -1
  130. package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js.map +1 -1
  131. package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs.map +1 -1
  132. package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.js.map +1 -1
  133. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs.map +1 -1
  134. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.js.map +1 -1
  135. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs.map +1 -1
  136. package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js.map +1 -1
  137. package/dist/development/src/model/definition/index.cjs.map +1 -1
  138. package/dist/development/src/model/definition/index.js.map +1 -1
  139. package/dist/development/src/model/definition/internal/EntityRegistry.cjs.map +1 -1
  140. package/dist/development/src/model/definition/internal/EntityRegistry.js.map +1 -1
  141. package/dist/development/src/model/definition/internal/EnumRegistry.cjs.map +1 -1
  142. package/dist/development/src/model/definition/internal/EnumRegistry.js.map +1 -1
  143. package/dist/development/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  144. package/dist/development/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  145. package/dist/development/src/presets.cjs.map +1 -1
  146. package/dist/development/src/presets.js.map +1 -1
  147. package/dist/development/src/strict.cjs +3 -1
  148. package/dist/development/src/strict.cjs.map +1 -1
  149. package/dist/development/src/strict.js +3 -1
  150. package/dist/development/src/strict.js.map +1 -1
  151. package/dist/development/src/utils/MetadataStore.cjs +16 -4
  152. package/dist/development/src/utils/MetadataStore.cjs.map +1 -1
  153. package/dist/development/src/utils/MetadataStore.js +16 -4
  154. package/dist/development/src/utils/MetadataStore.js.map +1 -1
  155. package/dist/development/src/utils/assertNever.cjs.map +1 -1
  156. package/dist/development/src/utils/assertNever.js.map +1 -1
  157. package/dist/development/src/utils/filterEntityDefinition.cjs.map +1 -1
  158. package/dist/development/src/utils/filterEntityDefinition.js.map +1 -1
  159. package/dist/development/src/utils/tuple.cjs.map +1 -1
  160. package/dist/development/src/utils/tuple.js.map +1 -1
  161. package/dist/development/src/validation/index.cjs +25 -11
  162. package/dist/development/src/validation/index.cjs.map +1 -1
  163. package/dist/development/src/validation/index.js +25 -11
  164. package/dist/development/src/validation/index.js.map +1 -1
  165. package/dist/production/index.cjs +33 -33
  166. package/dist/production/index.cjs.map +1 -1
  167. package/dist/production/index.js +25 -25
  168. package/dist/production/index.js.map +1 -1
  169. package/dist/production/src/acl/builder/EntityPermissionsBuilder.cjs.map +1 -1
  170. package/dist/production/src/acl/builder/EntityPermissionsBuilder.js.map +1 -1
  171. package/dist/production/src/acl/builder/EntitySelector.cjs.map +1 -1
  172. package/dist/production/src/acl/builder/EntitySelector.js.map +1 -1
  173. package/dist/production/src/acl/builder/FieldPermissionsBuilder.cjs.map +1 -1
  174. package/dist/production/src/acl/builder/FieldPermissionsBuilder.js.map +1 -1
  175. package/dist/production/src/acl/builder/FieldSelector.cjs.map +1 -1
  176. package/dist/production/src/acl/builder/FieldSelector.js.map +1 -1
  177. package/dist/production/src/acl/builder/PermissionOverrider.cjs.map +1 -1
  178. package/dist/production/src/acl/builder/PermissionOverrider.js.map +1 -1
  179. package/dist/production/src/acl/builder/PermissionsBuilder.cjs +1 -3
  180. package/dist/production/src/acl/builder/PermissionsBuilder.cjs.map +1 -1
  181. package/dist/production/src/acl/builder/PermissionsBuilder.js +1 -3
  182. package/dist/production/src/acl/builder/PermissionsBuilder.js.map +1 -1
  183. package/dist/production/src/acl/builder/PredicateReference.cjs.map +1 -1
  184. package/dist/production/src/acl/builder/PredicateReference.js.map +1 -1
  185. package/dist/production/src/acl/definition/aclExtensions.cjs +2 -2
  186. package/dist/production/src/acl/definition/aclExtensions.cjs.map +1 -1
  187. package/dist/production/src/acl/definition/aclExtensions.js +2 -2
  188. package/dist/production/src/acl/definition/aclExtensions.js.map +1 -1
  189. package/dist/production/src/acl/definition/customPrimary.cjs +1 -1
  190. package/dist/production/src/acl/definition/customPrimary.cjs.map +1 -1
  191. package/dist/production/src/acl/definition/customPrimary.js +1 -1
  192. package/dist/production/src/acl/definition/customPrimary.js.map +1 -1
  193. package/dist/production/src/acl/definition/index.cjs.map +1 -1
  194. package/dist/production/src/acl/definition/index.js.map +1 -1
  195. package/dist/production/src/acl/definition/internal/AclFactory.cjs +24 -16
  196. package/dist/production/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  197. package/dist/production/src/acl/definition/internal/AclFactory.js +24 -16
  198. package/dist/production/src/acl/definition/internal/AclFactory.js.map +1 -1
  199. package/dist/production/src/acl/definition/internal/EntityPredicateResolver.cjs.map +1 -1
  200. package/dist/production/src/acl/definition/internal/EntityPredicateResolver.js.map +1 -1
  201. package/dist/production/src/acl/definition/internal/createPredicateName.cjs.map +1 -1
  202. package/dist/production/src/acl/definition/internal/createPredicateName.js.map +1 -1
  203. package/dist/production/src/acl/definition/internal/stores.cjs.map +1 -1
  204. package/dist/production/src/acl/definition/internal/stores.js.map +1 -1
  205. package/dist/production/src/acl/definition/permissions.cjs +5 -2
  206. package/dist/production/src/acl/definition/permissions.cjs.map +1 -1
  207. package/dist/production/src/acl/definition/permissions.js +5 -2
  208. package/dist/production/src/acl/definition/permissions.js.map +1 -1
  209. package/dist/production/src/acl/definition/references.cjs.map +1 -1
  210. package/dist/production/src/acl/definition/references.js.map +1 -1
  211. package/dist/production/src/acl/definition/roles.cjs.map +1 -1
  212. package/dist/production/src/acl/definition/roles.js.map +1 -1
  213. package/dist/production/src/acl/definition/variables.cjs.map +1 -1
  214. package/dist/production/src/acl/definition/variables.js.map +1 -1
  215. package/dist/production/src/actions/definition/index.cjs.map +1 -1
  216. package/dist/production/src/actions/definition/index.js.map +1 -1
  217. package/dist/production/src/actions/definition/internal/ActionsFactory.cjs +8 -7
  218. package/dist/production/src/actions/definition/internal/ActionsFactory.cjs.map +1 -1
  219. package/dist/production/src/actions/definition/internal/ActionsFactory.js +8 -7
  220. package/dist/production/src/actions/definition/internal/ActionsFactory.js.map +1 -1
  221. package/dist/production/src/actions/definition/internal/store.cjs.map +1 -1
  222. package/dist/production/src/actions/definition/internal/store.js.map +1 -1
  223. package/dist/production/src/actions/definition/targets.cjs.map +1 -1
  224. package/dist/production/src/actions/definition/targets.js.map +1 -1
  225. package/dist/production/src/actions/definition/triggers.cjs +4 -4
  226. package/dist/production/src/actions/definition/triggers.cjs.map +1 -1
  227. package/dist/production/src/actions/definition/triggers.js +4 -4
  228. package/dist/production/src/actions/definition/triggers.js.map +1 -1
  229. package/dist/production/src/createSchema.cjs.map +1 -1
  230. package/dist/production/src/createSchema.js.map +1 -1
  231. package/dist/production/src/model/builder/ColumnBuilder.cjs +7 -5
  232. package/dist/production/src/model/builder/ColumnBuilder.cjs.map +1 -1
  233. package/dist/production/src/model/builder/ColumnBuilder.js +7 -5
  234. package/dist/production/src/model/builder/ColumnBuilder.js.map +1 -1
  235. package/dist/production/src/model/builder/EntityBuilder.cjs.map +1 -1
  236. package/dist/production/src/model/builder/EntityBuilder.js.map +1 -1
  237. package/dist/production/src/model/builder/FieldBuilder.cjs +4 -4
  238. package/dist/production/src/model/builder/FieldBuilder.cjs.map +1 -1
  239. package/dist/production/src/model/builder/FieldBuilder.js.map +1 -1
  240. package/dist/production/src/model/builder/ManyHasManyBuilder.cjs.map +1 -1
  241. package/dist/production/src/model/builder/ManyHasManyBuilder.js.map +1 -1
  242. package/dist/production/src/model/builder/ManyHasOneBuilder.cjs.map +1 -1
  243. package/dist/production/src/model/builder/ManyHasOneBuilder.js.map +1 -1
  244. package/dist/production/src/model/builder/OneHasManyBuilder.cjs.map +1 -1
  245. package/dist/production/src/model/builder/OneHasManyBuilder.js.map +1 -1
  246. package/dist/production/src/model/builder/OneHasOneBuilder.cjs.map +1 -1
  247. package/dist/production/src/model/builder/OneHasOneBuilder.js.map +1 -1
  248. package/dist/production/src/model/builder/SchemaBuilder.cjs.map +1 -1
  249. package/dist/production/src/model/builder/SchemaBuilder.js.map +1 -1
  250. package/dist/production/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  251. package/dist/production/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  252. package/dist/production/src/model/builder/internal/ColumnProcessor.cjs.map +1 -1
  253. package/dist/production/src/model/builder/internal/ColumnProcessor.js.map +1 -1
  254. package/dist/production/src/model/builder/internal/ManyHasManyProcessor.cjs.map +1 -1
  255. package/dist/production/src/model/builder/internal/ManyHasManyProcessor.js.map +1 -1
  256. package/dist/production/src/model/builder/internal/ManyHasOneProcessor.cjs.map +1 -1
  257. package/dist/production/src/model/builder/internal/ManyHasOneProcessor.js.map +1 -1
  258. package/dist/production/src/model/builder/internal/OneHasManyProcessor.cjs.map +1 -1
  259. package/dist/production/src/model/builder/internal/OneHasManyProcessor.js.map +1 -1
  260. package/dist/production/src/model/builder/internal/OneHasOneProcessor.cjs.map +1 -1
  261. package/dist/production/src/model/builder/internal/OneHasOneProcessor.js.map +1 -1
  262. package/dist/production/src/model/definition/EnumDefinition.cjs.map +1 -1
  263. package/dist/production/src/model/definition/EnumDefinition.js.map +1 -1
  264. package/dist/production/src/model/definition/EventLogDefinition.cjs.map +1 -1
  265. package/dist/production/src/model/definition/EventLogDefinition.js.map +1 -1
  266. package/dist/production/src/model/definition/IndexDefinition.cjs +2 -2
  267. package/dist/production/src/model/definition/IndexDefinition.cjs.map +1 -1
  268. package/dist/production/src/model/definition/IndexDefinition.js +2 -2
  269. package/dist/production/src/model/definition/IndexDefinition.js.map +1 -1
  270. package/dist/production/src/model/definition/OrderByDefinition.cjs +3 -1
  271. package/dist/production/src/model/definition/OrderByDefinition.cjs.map +1 -1
  272. package/dist/production/src/model/definition/OrderByDefinition.js +3 -1
  273. package/dist/production/src/model/definition/OrderByDefinition.js.map +1 -1
  274. package/dist/production/src/model/definition/UniqueDefinition.cjs.map +1 -1
  275. package/dist/production/src/model/definition/UniqueDefinition.js.map +1 -1
  276. package/dist/production/src/model/definition/ViewDefinition.cjs.map +1 -1
  277. package/dist/production/src/model/definition/ViewDefinition.js.map +1 -1
  278. package/dist/production/src/model/definition/extensions.cjs +2 -2
  279. package/dist/production/src/model/definition/extensions.cjs.map +1 -1
  280. package/dist/production/src/model/definition/extensions.js +2 -2
  281. package/dist/production/src/model/definition/extensions.js.map +1 -1
  282. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +12 -1
  283. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  284. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js +12 -1
  285. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  286. package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.cjs.map +1 -1
  287. package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.js.map +1 -1
  288. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs.map +1 -1
  289. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js.map +1 -1
  290. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs.map +1 -1
  291. package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js.map +1 -1
  292. package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs.map +1 -1
  293. package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js.map +1 -1
  294. package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs.map +1 -1
  295. package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.js.map +1 -1
  296. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs.map +1 -1
  297. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.js.map +1 -1
  298. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs.map +1 -1
  299. package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js.map +1 -1
  300. package/dist/production/src/model/definition/index.cjs.map +1 -1
  301. package/dist/production/src/model/definition/index.js.map +1 -1
  302. package/dist/production/src/model/definition/internal/EntityRegistry.cjs.map +1 -1
  303. package/dist/production/src/model/definition/internal/EntityRegistry.js.map +1 -1
  304. package/dist/production/src/model/definition/internal/EnumRegistry.cjs.map +1 -1
  305. package/dist/production/src/model/definition/internal/EnumRegistry.js.map +1 -1
  306. package/dist/production/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  307. package/dist/production/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  308. package/dist/production/src/presets.cjs.map +1 -1
  309. package/dist/production/src/presets.js.map +1 -1
  310. package/dist/production/src/strict.cjs +3 -1
  311. package/dist/production/src/strict.cjs.map +1 -1
  312. package/dist/production/src/strict.js +3 -1
  313. package/dist/production/src/strict.js.map +1 -1
  314. package/dist/production/src/utils/MetadataStore.cjs +16 -4
  315. package/dist/production/src/utils/MetadataStore.cjs.map +1 -1
  316. package/dist/production/src/utils/MetadataStore.js +16 -4
  317. package/dist/production/src/utils/MetadataStore.js.map +1 -1
  318. package/dist/production/src/utils/assertNever.cjs.map +1 -1
  319. package/dist/production/src/utils/assertNever.js.map +1 -1
  320. package/dist/production/src/utils/filterEntityDefinition.cjs.map +1 -1
  321. package/dist/production/src/utils/filterEntityDefinition.js.map +1 -1
  322. package/dist/production/src/utils/tuple.cjs.map +1 -1
  323. package/dist/production/src/utils/tuple.js.map +1 -1
  324. package/dist/production/src/validation/index.cjs +25 -11
  325. package/dist/production/src/validation/index.cjs.map +1 -1
  326. package/dist/production/src/validation/index.js +25 -11
  327. package/dist/production/src/validation/index.js.map +1 -1
  328. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  329. package/dist/types/acl/builder/PermissionOverrider.d.ts.map +1 -1
  330. package/dist/types/acl/builder/PermissionsBuilder.d.ts.map +1 -1
  331. package/dist/types/acl/definition/aclExtensions.d.ts.map +1 -1
  332. package/dist/types/acl/definition/internal/AclFactory.d.ts +1 -1
  333. package/dist/types/acl/definition/internal/AclFactory.d.ts.map +1 -1
  334. package/dist/types/acl/definition/internal/EntityPredicateResolver.d.ts.map +1 -1
  335. package/dist/types/acl/definition/internal/stores.d.ts +4 -3
  336. package/dist/types/acl/definition/internal/stores.d.ts.map +1 -1
  337. package/dist/types/acl/definition/permissions.d.ts +7 -2
  338. package/dist/types/acl/definition/permissions.d.ts.map +1 -1
  339. package/dist/types/acl/definition/variables.d.ts.map +1 -1
  340. package/dist/types/actions/definition/index.d.ts.map +1 -1
  341. package/dist/types/actions/definition/internal/ActionsFactory.d.ts +0 -1
  342. package/dist/types/actions/definition/internal/ActionsFactory.d.ts.map +1 -1
  343. package/dist/types/actions/definition/targets.d.ts.map +1 -1
  344. package/dist/types/actions/definition/triggers.d.ts +1 -0
  345. package/dist/types/actions/definition/triggers.d.ts.map +1 -1
  346. package/dist/types/createSchema.d.ts.map +1 -1
  347. package/dist/types/index.d.ts +3 -3
  348. package/dist/types/index.d.ts.map +1 -1
  349. package/dist/types/model/builder/ColumnBuilder.d.ts.map +1 -1
  350. package/dist/types/model/builder/internal/ColumnProcessor.d.ts.map +1 -1
  351. package/dist/types/model/definition/IndexDefinition.d.ts +2 -0
  352. package/dist/types/model/definition/IndexDefinition.d.ts.map +1 -1
  353. package/dist/types/model/definition/OrderByDefinition.d.ts.map +1 -1
  354. package/dist/types/model/definition/UniqueDefinition.d.ts +1 -0
  355. package/dist/types/model/definition/UniqueDefinition.d.ts.map +1 -1
  356. package/dist/types/model/definition/fieldDefinitions/ColumnDefinition.d.ts.map +1 -1
  357. package/dist/types/model/definition/fieldDefinitions/FieldDefinition.d.ts.map +1 -1
  358. package/dist/types/model/definition/fieldDefinitions/ManyHasManyDefinition.d.ts.map +1 -1
  359. package/dist/types/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.d.ts.map +1 -1
  360. package/dist/types/model/definition/fieldDefinitions/ManyHasOneDefinition.d.ts.map +1 -1
  361. package/dist/types/model/definition/fieldDefinitions/OneHasManyDefinition.d.ts.map +1 -1
  362. package/dist/types/model/definition/fieldDefinitions/OneHasOneDefinition.d.ts.map +1 -1
  363. package/dist/types/model/definition/fieldDefinitions/OneHasOneInverseDefinition.d.ts.map +1 -1
  364. package/dist/types/model/definition/index.d.ts +1 -1
  365. package/dist/types/model/definition/index.d.ts.map +1 -1
  366. package/dist/types/model/definition/internal/SchemaBuilder.d.ts.map +1 -1
  367. package/dist/types/model/definition/types.d.ts +1 -1
  368. package/dist/types/model/definition/types.d.ts.map +1 -1
  369. package/dist/types/model/index.d.ts +1 -1
  370. package/dist/types/model/index.d.ts.map +1 -1
  371. package/dist/types/presets.d.ts.map +1 -1
  372. package/dist/types/strict.d.ts.map +1 -1
  373. package/dist/types/tsconfig.tsbuildinfo +1 -1
  374. package/dist/types/utils/MetadataStore.d.ts +1 -1
  375. package/dist/types/utils/MetadataStore.d.ts.map +1 -1
  376. package/dist/types/utils/decorators.d.ts +1 -1
  377. package/dist/types/utils/decorators.d.ts.map +1 -1
  378. package/dist/types/utils/filterEntityDefinition.d.ts.map +1 -1
  379. package/dist/types/validation/index.d.ts +0 -1
  380. package/dist/types/validation/index.d.ts.map +1 -1
  381. package/package.json +11 -6
  382. package/src/acl/builder/EntityPermissionsBuilder.ts +1 -1
  383. package/src/acl/builder/EntitySelector.ts +2 -2
  384. package/src/acl/builder/PermissionOverrider.ts +10 -8
  385. package/src/acl/builder/PermissionsBuilder.ts +1 -3
  386. package/src/acl/definition/aclExtensions.ts +7 -8
  387. package/src/acl/definition/customPrimary.ts +1 -1
  388. package/src/acl/definition/internal/AclFactory.ts +30 -25
  389. package/src/acl/definition/internal/EntityPredicateResolver.ts +4 -4
  390. package/src/acl/definition/internal/stores.ts +5 -6
  391. package/src/acl/definition/permissions.ts +14 -8
  392. package/src/acl/definition/variables.ts +5 -1
  393. package/src/actions/definition/index.ts +0 -1
  394. package/src/actions/definition/internal/ActionsFactory.ts +7 -9
  395. package/src/actions/definition/targets.ts +0 -1
  396. package/src/actions/definition/triggers.ts +9 -7
  397. package/src/createSchema.ts +1 -1
  398. package/src/index.ts +6 -11
  399. package/src/model/builder/ColumnBuilder.ts +7 -5
  400. package/src/model/builder/internal/ColumnProcessor.ts +0 -1
  401. package/src/model/definition/IndexDefinition.ts +7 -3
  402. package/src/model/definition/OrderByDefinition.ts +7 -5
  403. package/src/model/definition/UniqueDefinition.ts +14 -12
  404. package/src/model/definition/extensions.ts +2 -2
  405. package/src/model/definition/fieldDefinitions/ColumnDefinition.ts +12 -4
  406. package/src/model/definition/fieldDefinitions/FieldDefinition.ts +1 -1
  407. package/src/model/definition/fieldDefinitions/ManyHasManyDefinition.ts +0 -2
  408. package/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.ts +4 -2
  409. package/src/model/definition/fieldDefinitions/ManyHasOneDefinition.ts +1 -1
  410. package/src/model/definition/fieldDefinitions/OneHasManyDefinition.ts +0 -1
  411. package/src/model/definition/fieldDefinitions/OneHasOneDefinition.ts +0 -2
  412. package/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.ts +5 -3
  413. package/src/model/definition/index.ts +2 -2
  414. package/src/model/definition/internal/SchemaBuilder.ts +1 -2
  415. package/src/model/definition/types.ts +1 -1
  416. package/src/model/index.ts +1 -10
  417. package/src/presets.ts +0 -2
  418. package/src/strict.ts +4 -4
  419. package/src/utils/MetadataStore.ts +18 -4
  420. package/src/utils/decorators.ts +1 -1
  421. package/src/utils/filterEntityDefinition.ts +3 -2
  422. package/src/validation/index.ts +30 -21
  423. package/tests/cases/unit/createSchema.test.ts +5 -6
  424. package/tests/cases/unit/extendEntity.test.ts +1 -2
  425. package/tests/cases/unit/orderBy.test.ts +3 -6
  426. package/tests/cases/unit/readAclDefinitions.test.ts +191 -176
  427. package/tests/cases/unit/readActions.test.ts +0 -2
  428. package/vitest.config.ts +0 -3
@@ -17,7 +17,9 @@ class StrictDefinitionValidator {
17
17
  }
18
18
  validateOnCascade(entityName, field, definition) {
19
19
  if (!definition.onDelete && this.options.requireOnDelete) {
20
- this.registerWarning(`${entityName}.${field}: onDelete behaviour is not set. Use one of cascadeOnDelete(), setNullOnDelete() or restrictOnDelete().`);
20
+ this.registerWarning(
21
+ `${entityName}.${field}: onDelete behaviour is not set. Use one of cascadeOnDelete(), setNullOnDelete() or restrictOnDelete().`
22
+ );
21
23
  }
22
24
  }
23
25
  registerWarning(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"strict.js","sources":["../../../../packages/schema-definition/src/strict.ts"],"sourcesContent":["import { Model } from '@contember/schema'\n\nexport type StrictOptions = {\n\trequireOnDelete?: boolean\n\trequireInverseSide?: boolean\n}\n\nexport const allStrict: StrictOptions = {\n\trequireOnDelete: true,\n\trequireInverseSide: true,\n}\n\n\nexport type Warning = { message: string }\n\nexport class StrictDefinitionValidator {\n\tpublic readonly warnings: Warning[] = []\n\n\tconstructor(\n\t\tprivate readonly options: StrictOptions,\n\t) {\n\t}\n\n\tpublic validateInverseSide(entityName: string, field: string, definition: { inversedBy?: string }): void {\n\t\tif (!definition.inversedBy && this.options.requireInverseSide) {\n\t\t\tthis.registerWarning(`${entityName}.${field}: inverse side of the relation is not defined.`)\n\t\t}\n\t}\n\n\n\tpublic validateOnCascade(entityName: string, field: string, definition: { onDelete?: Model.OnDelete}): void {\n\t\tif (!definition.onDelete && this.options.requireOnDelete) {\n\t\t\tthis.registerWarning(`${entityName}.${field}: onDelete behaviour is not set. Use one of cascadeOnDelete(), setNullOnDelete() or restrictOnDelete().`)\n\t\t}\n\t}\n\n\tpublic registerWarning(message: string): void {\n\t\tthis.warnings.push({ message })\n\t}\n}\n"],"names":[],"mappings":";;;AAOO,MAAM,YAA2B;AAAA,EACvC,iBAAiB;AAAA,EACjB,oBAAoB;AACrB;AAKO,MAAM,0BAA0B;AAAA,EAGtC,YACkB,SAChB;AADgB,SAAA,UAAA;AAHlB,kBAAA,MAAgB,YAAsB,EAAC;AAAA,EAAA;AAAA,EAOhC,oBAAoB,YAAoB,OAAe,YAA2C;AACxG,QAAI,CAAC,WAAW,cAAc,KAAK,QAAQ,oBAAoB;AAC9D,WAAK,gBAAgB,GAAG,UAAU,IAAI,KAAK,gDAAgD;AAAA,IAAA;AAAA,EAC5F;AAAA,EAIM,kBAAkB,YAAoB,OAAe,YAAgD;AAC3G,QAAI,CAAC,WAAW,YAAY,KAAK,QAAQ,iBAAiB;AACzD,WAAK,gBAAgB,GAAG,UAAU,IAAI,KAAK,yGAAyG;AAAA,IAAA;AAAA,EACrJ;AAAA,EAGM,gBAAgB,SAAuB;AAC7C,SAAK,SAAS,KAAK,EAAE,QAAA,CAAS;AAAA,EAAA;AAEhC;"}
1
+ {"version":3,"file":"strict.js","sources":["../../../../packages/schema-definition/src/strict.ts"],"sourcesContent":["import { Model } from '@contember/schema'\n\nexport type StrictOptions = {\n\trequireOnDelete?: boolean\n\trequireInverseSide?: boolean\n}\n\nexport const allStrict: StrictOptions = {\n\trequireOnDelete: true,\n\trequireInverseSide: true,\n}\n\nexport type Warning = { message: string }\n\nexport class StrictDefinitionValidator {\n\tpublic readonly warnings: Warning[] = []\n\n\tconstructor(\n\t\tprivate readonly options: StrictOptions,\n\t) {\n\t}\n\n\tpublic validateInverseSide(entityName: string, field: string, definition: { inversedBy?: string }): void {\n\t\tif (!definition.inversedBy && this.options.requireInverseSide) {\n\t\t\tthis.registerWarning(`${entityName}.${field}: inverse side of the relation is not defined.`)\n\t\t}\n\t}\n\n\tpublic validateOnCascade(entityName: string, field: string, definition: { onDelete?: Model.OnDelete }): void {\n\t\tif (!definition.onDelete && this.options.requireOnDelete) {\n\t\t\tthis.registerWarning(\n\t\t\t\t`${entityName}.${field}: onDelete behaviour is not set. Use one of cascadeOnDelete(), setNullOnDelete() or restrictOnDelete().`,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic registerWarning(message: string): void {\n\t\tthis.warnings.push({ message })\n\t}\n}\n"],"names":[],"mappings":";;;AAOO,MAAM,YAA2B;AAAA,EACvC,iBAAiB;AAAA,EACjB,oBAAoB;AACrB;AAIO,MAAM,0BAA0B;AAAA,EAGtC,YACkB,SAChB;AADgB,SAAA,UAAA;AAHlB,kBAAA,MAAgB,YAAsB,EAAC;AAAA,EAKvC;AAAA,EAEO,oBAAoB,YAAoB,OAAe,YAA2C;AACxG,QAAI,CAAC,WAAW,cAAc,KAAK,QAAQ,oBAAoB;AAC9D,WAAK,gBAAgB,GAAG,UAAU,IAAI,KAAK,gDAAgD;AAAA,IAC5F;AAAA,EACD;AAAA,EAEO,kBAAkB,YAAoB,OAAe,YAAiD;AAC5G,QAAI,CAAC,WAAW,YAAY,KAAK,QAAQ,iBAAiB;AACzD,WAAK;AAAA,QACJ,GAAG,UAAU,IAAI,KAAK;AAAA,MAAA;AAAA,IAExB;AAAA,EACD;AAAA,EAEO,gBAAgB,SAAuB;AAC7C,SAAK,SAAS,KAAK,EAAE,QAAA,CAAS;AAAA,EAC/B;AACD;"}
@@ -1,17 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require("reflect-metadata");
4
+ const getTC39ClassMetadata = (target, key) => {
5
+ const metaSymbol = Symbol.metadata ?? Reflect.ownKeys(target).find((k) => typeof k === "symbol" && String(k) === "Symbol(Symbol.metadata)");
6
+ if (!metaSymbol) return void 0;
7
+ return target[metaSymbol]?.[key];
8
+ };
4
9
  const createMetadataStore = (initialValue) => {
5
- const key = Symbol();
10
+ const key = /* @__PURE__ */ Symbol();
6
11
  const get = (target) => {
7
- return Reflect.hasMetadata(key, target) ? Reflect.getMetadata(key, target) : initialValue;
12
+ const tc39 = getTC39ClassMetadata(target, key);
13
+ if (tc39 !== void 0) return tc39;
14
+ return typeof Reflect.hasMetadata === "function" && Reflect.hasMetadata(key, target) ? Reflect.getMetadata(key, target) : initialValue;
8
15
  };
9
16
  return {
10
17
  get,
11
- update: (target, generator) => {
18
+ update: (target, generator, context) => {
12
19
  const current = get(target);
13
20
  const newMetadata = generator(current);
14
- Reflect.defineMetadata(key, newMetadata, target);
21
+ if (typeof Reflect.defineMetadata === "function") {
22
+ Reflect.defineMetadata(key, newMetadata, target);
23
+ }
24
+ if (context) {
25
+ context.metadata[key] = newMetadata;
26
+ }
15
27
  }
16
28
  };
17
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataStore.cjs","sources":["../../../../../packages/schema-definition/src/utils/MetadataStore.ts"],"sourcesContent":["import 'reflect-metadata'\n\nexport interface MetadataStore<V> {\n\tget(target: Object): V\n\tupdate(target: Object, generator: (current: V) => V): void\n}\n\nexport const createMetadataStore = <V>(initialValue: V): MetadataStore<V> => {\n\tconst key = Symbol()\n\tconst get = (target: Object): V => {\n\t\treturn Reflect.hasMetadata(key, target)\n\t\t\t? Reflect.getMetadata(key, target)\n\t\t\t: initialValue\n\t}\n\treturn {\n\t\tget,\n\t\tupdate: (target, generator) => {\n\t\t\tconst current = get(target)\n\t\t\tconst newMetadata = generator(current)\n\t\t\tReflect.defineMetadata(key, newMetadata, target)\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;;AAOa,MAAA,sBAAsB,CAAI,iBAAsC;AAC5E,QAAM,MAAM,OAAO;AACb,QAAA,MAAM,CAAC,WAAsB;AAC3B,WAAA,QAAQ,YAAY,KAAK,MAAM,IACnC,QAAQ,YAAY,KAAK,MAAM,IAC/B;AAAA,EACJ;AACO,SAAA;AAAA,IACN;AAAA,IACA,QAAQ,CAAC,QAAQ,cAAc;AACxB,YAAA,UAAU,IAAI,MAAM;AACpB,YAAA,cAAc,UAAU,OAAO;AAC7B,cAAA,eAAe,KAAK,aAAa,MAAM;AAAA,IAAA;AAAA,EAEjD;AACD;;"}
1
+ {"version":3,"file":"MetadataStore.cjs","sources":["../../../../../packages/schema-definition/src/utils/MetadataStore.ts"],"sourcesContent":["import 'reflect-metadata'\n\nexport interface MetadataStore<V> {\n\tget(target: Object): V\n\tupdate(target: Object, generator: (current: V) => V, context?: ClassDecoratorContext): void\n}\n\nconst getTC39ClassMetadata = (target: Object, key: symbol): unknown => {\n\tconst metaSymbol: symbol | undefined = Symbol.metadata\n\t\t?? Reflect.ownKeys(target).find((k): k is symbol => typeof k === 'symbol' && String(k) === 'Symbol(Symbol.metadata)')\n\tif (!metaSymbol) return undefined\n\treturn (target as any)[metaSymbol]?.[key]\n}\n\nexport const createMetadataStore = <V>(initialValue: V): MetadataStore<V> => {\n\tconst key = Symbol()\n\tconst get = (target: Object): V => {\n\t\tconst tc39 = getTC39ClassMetadata(target, key)\n\t\tif (tc39 !== undefined) return tc39 as V\n\t\treturn typeof Reflect.hasMetadata === 'function' && Reflect.hasMetadata(key, target)\n\t\t\t? Reflect.getMetadata(key, target)\n\t\t\t: initialValue\n\t}\n\treturn {\n\t\tget,\n\t\tupdate: (target, generator, context?) => {\n\t\t\tconst current = get(target)\n\t\t\tconst newMetadata = generator(current)\n\t\t\tif (typeof Reflect.defineMetadata === 'function') {\n\t\t\t\tReflect.defineMetadata(key, newMetadata, target)\n\t\t\t}\n\t\t\tif (context) {\n\t\t\t\tcontext.metadata[key] = newMetadata\n\t\t\t}\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;;AAOA,MAAM,uBAAuB,CAAC,QAAgB,QAAyB;AACtE,QAAM,aAAiC,OAAO,YAC1C,QAAQ,QAAQ,MAAM,EAAE,KAAK,CAAC,MAAmB,OAAO,MAAM,YAAY,OAAO,CAAC,MAAM,yBAAyB;AACrH,MAAI,CAAC,WAAY,QAAO;AACxB,SAAQ,OAAe,UAAU,IAAI,GAAG;AACzC;AAEO,MAAM,sBAAsB,CAAI,iBAAsC;AAC5E,QAAM,MAAM,uBAAA;AACZ,QAAM,MAAM,CAAC,WAAsB;AAClC,UAAM,OAAO,qBAAqB,QAAQ,GAAG;AAC7C,QAAI,SAAS,OAAW,QAAO;AAC/B,WAAO,OAAO,QAAQ,gBAAgB,cAAc,QAAQ,YAAY,KAAK,MAAM,IAChF,QAAQ,YAAY,KAAK,MAAM,IAC/B;AAAA,EACJ;AACA,SAAO;AAAA,IACN;AAAA,IACA,QAAQ,CAAC,QAAQ,WAAW,YAAa;AACxC,YAAM,UAAU,IAAI,MAAM;AAC1B,YAAM,cAAc,UAAU,OAAO;AACrC,UAAI,OAAO,QAAQ,mBAAmB,YAAY;AACjD,gBAAQ,eAAe,KAAK,aAAa,MAAM;AAAA,MAChD;AACA,UAAI,SAAS;AACZ,gBAAQ,SAAS,GAAG,IAAI;AAAA,MACzB;AAAA,IACD;AAAA,EAAA;AAEF;;"}
@@ -1,15 +1,27 @@
1
1
  import "reflect-metadata";
2
+ const getTC39ClassMetadata = (target, key) => {
3
+ const metaSymbol = Symbol.metadata ?? Reflect.ownKeys(target).find((k) => typeof k === "symbol" && String(k) === "Symbol(Symbol.metadata)");
4
+ if (!metaSymbol) return void 0;
5
+ return target[metaSymbol]?.[key];
6
+ };
2
7
  const createMetadataStore = (initialValue) => {
3
- const key = Symbol();
8
+ const key = /* @__PURE__ */ Symbol();
4
9
  const get = (target) => {
5
- return Reflect.hasMetadata(key, target) ? Reflect.getMetadata(key, target) : initialValue;
10
+ const tc39 = getTC39ClassMetadata(target, key);
11
+ if (tc39 !== void 0) return tc39;
12
+ return typeof Reflect.hasMetadata === "function" && Reflect.hasMetadata(key, target) ? Reflect.getMetadata(key, target) : initialValue;
6
13
  };
7
14
  return {
8
15
  get,
9
- update: (target, generator) => {
16
+ update: (target, generator, context) => {
10
17
  const current = get(target);
11
18
  const newMetadata = generator(current);
12
- Reflect.defineMetadata(key, newMetadata, target);
19
+ if (typeof Reflect.defineMetadata === "function") {
20
+ Reflect.defineMetadata(key, newMetadata, target);
21
+ }
22
+ if (context) {
23
+ context.metadata[key] = newMetadata;
24
+ }
13
25
  }
14
26
  };
15
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataStore.js","sources":["../../../../../packages/schema-definition/src/utils/MetadataStore.ts"],"sourcesContent":["import 'reflect-metadata'\n\nexport interface MetadataStore<V> {\n\tget(target: Object): V\n\tupdate(target: Object, generator: (current: V) => V): void\n}\n\nexport const createMetadataStore = <V>(initialValue: V): MetadataStore<V> => {\n\tconst key = Symbol()\n\tconst get = (target: Object): V => {\n\t\treturn Reflect.hasMetadata(key, target)\n\t\t\t? Reflect.getMetadata(key, target)\n\t\t\t: initialValue\n\t}\n\treturn {\n\t\tget,\n\t\tupdate: (target, generator) => {\n\t\t\tconst current = get(target)\n\t\t\tconst newMetadata = generator(current)\n\t\t\tReflect.defineMetadata(key, newMetadata, target)\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";AAOa,MAAA,sBAAsB,CAAI,iBAAsC;AAC5E,QAAM,MAAM,OAAO;AACb,QAAA,MAAM,CAAC,WAAsB;AAC3B,WAAA,QAAQ,YAAY,KAAK,MAAM,IACnC,QAAQ,YAAY,KAAK,MAAM,IAC/B;AAAA,EACJ;AACO,SAAA;AAAA,IACN;AAAA,IACA,QAAQ,CAAC,QAAQ,cAAc;AACxB,YAAA,UAAU,IAAI,MAAM;AACpB,YAAA,cAAc,UAAU,OAAO;AAC7B,cAAA,eAAe,KAAK,aAAa,MAAM;AAAA,IAAA;AAAA,EAEjD;AACD;"}
1
+ {"version":3,"file":"MetadataStore.js","sources":["../../../../../packages/schema-definition/src/utils/MetadataStore.ts"],"sourcesContent":["import 'reflect-metadata'\n\nexport interface MetadataStore<V> {\n\tget(target: Object): V\n\tupdate(target: Object, generator: (current: V) => V, context?: ClassDecoratorContext): void\n}\n\nconst getTC39ClassMetadata = (target: Object, key: symbol): unknown => {\n\tconst metaSymbol: symbol | undefined = Symbol.metadata\n\t\t?? Reflect.ownKeys(target).find((k): k is symbol => typeof k === 'symbol' && String(k) === 'Symbol(Symbol.metadata)')\n\tif (!metaSymbol) return undefined\n\treturn (target as any)[metaSymbol]?.[key]\n}\n\nexport const createMetadataStore = <V>(initialValue: V): MetadataStore<V> => {\n\tconst key = Symbol()\n\tconst get = (target: Object): V => {\n\t\tconst tc39 = getTC39ClassMetadata(target, key)\n\t\tif (tc39 !== undefined) return tc39 as V\n\t\treturn typeof Reflect.hasMetadata === 'function' && Reflect.hasMetadata(key, target)\n\t\t\t? Reflect.getMetadata(key, target)\n\t\t\t: initialValue\n\t}\n\treturn {\n\t\tget,\n\t\tupdate: (target, generator, context?) => {\n\t\t\tconst current = get(target)\n\t\t\tconst newMetadata = generator(current)\n\t\t\tif (typeof Reflect.defineMetadata === 'function') {\n\t\t\t\tReflect.defineMetadata(key, newMetadata, target)\n\t\t\t}\n\t\t\tif (context) {\n\t\t\t\tcontext.metadata[key] = newMetadata\n\t\t\t}\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";AAOA,MAAM,uBAAuB,CAAC,QAAgB,QAAyB;AACtE,QAAM,aAAiC,OAAO,YAC1C,QAAQ,QAAQ,MAAM,EAAE,KAAK,CAAC,MAAmB,OAAO,MAAM,YAAY,OAAO,CAAC,MAAM,yBAAyB;AACrH,MAAI,CAAC,WAAY,QAAO;AACxB,SAAQ,OAAe,UAAU,IAAI,GAAG;AACzC;AAEO,MAAM,sBAAsB,CAAI,iBAAsC;AAC5E,QAAM,MAAM,uBAAA;AACZ,QAAM,MAAM,CAAC,WAAsB;AAClC,UAAM,OAAO,qBAAqB,QAAQ,GAAG;AAC7C,QAAI,SAAS,OAAW,QAAO;AAC/B,WAAO,OAAO,QAAQ,gBAAgB,cAAc,QAAQ,YAAY,KAAK,MAAM,IAChF,QAAQ,YAAY,KAAK,MAAM,IAC/B;AAAA,EACJ;AACA,SAAO;AAAA,IACN;AAAA,IACA,QAAQ,CAAC,QAAQ,WAAW,YAAa;AACxC,YAAM,UAAU,IAAI,MAAM;AAC1B,YAAM,cAAc,UAAU,OAAO;AACrC,UAAI,OAAO,QAAQ,mBAAmB,YAAY;AACjD,gBAAQ,eAAe,KAAK,aAAa,MAAM;AAAA,MAChD;AACA,UAAI,SAAS;AACZ,gBAAQ,SAAS,GAAG,IAAI;AAAA,MACzB;AAAA,IACD;AAAA,EAAA;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"assertNever.cjs","sources":["../../../../../packages/schema-definition/src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":";;AAAO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI,MAAM;AACjB;;"}
1
+ {"version":3,"file":"assertNever.cjs","sources":["../../../../../packages/schema-definition/src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":";;AAAO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI,MAAA;AACX;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"assertNever.js","sources":["../../../../../packages/schema-definition/src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI,MAAM;AACjB;"}
1
+ {"version":3,"file":"assertNever.js","sources":["../../../../../packages/schema-definition/src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,GAAiB;AAC5C,QAAM,IAAI,MAAA;AACX;"}
@@ -1 +1 @@
1
- {"version":3,"file":"filterEntityDefinition.cjs","sources":["../../../../../packages/schema-definition/src/utils/filterEntityDefinition.ts"],"sourcesContent":["import { EntityConstructor } from './decorators'\n\nexport const filterEntityDefinition = (definitions: Record<string, unknown>): [string, EntityConstructor][] => Object.entries(definitions)\n\t.filter((it): it is [string, EntityConstructor] => isEntityConstructor(it[1]))\n\nexport const isEntityConstructor = (it: unknown): it is EntityConstructor => {\n\treturn typeof it === 'function' && 'constructor' in it && 'prototype' in it\n}\n"],"names":[],"mappings":";;AAEO,MAAM,yBAAyB,CAAC,gBAAwE,OAAO,QAAQ,WAAW,EACvI,OAAO,CAAC,OAA0C,oBAAoB,GAAG,CAAC,CAAC,CAAC;AAEjE,MAAA,sBAAsB,CAAC,OAAyC;AAC5E,SAAO,OAAO,OAAO,cAAc,iBAAiB,MAAM,eAAe;AAC1E;;;"}
1
+ {"version":3,"file":"filterEntityDefinition.cjs","sources":["../../../../../packages/schema-definition/src/utils/filterEntityDefinition.ts"],"sourcesContent":["import { EntityConstructor } from './decorators'\n\nexport const filterEntityDefinition = (definitions: Record<string, unknown>): [string, EntityConstructor][] =>\n\tObject.entries(definitions)\n\t\t.filter((it): it is [string, EntityConstructor] => isEntityConstructor(it[1]))\n\nexport const isEntityConstructor = (it: unknown): it is EntityConstructor => {\n\treturn typeof it === 'function' && 'constructor' in it && 'prototype' in it\n}\n"],"names":[],"mappings":";;AAEO,MAAM,yBAAyB,CAAC,gBACtC,OAAO,QAAQ,WAAW,EACxB,OAAO,CAAC,OAA0C,oBAAoB,GAAG,CAAC,CAAC,CAAC;AAExE,MAAM,sBAAsB,CAAC,OAAyC;AAC5E,SAAO,OAAO,OAAO,cAAc,iBAAiB,MAAM,eAAe;AAC1E;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"filterEntityDefinition.js","sources":["../../../../../packages/schema-definition/src/utils/filterEntityDefinition.ts"],"sourcesContent":["import { EntityConstructor } from './decorators'\n\nexport const filterEntityDefinition = (definitions: Record<string, unknown>): [string, EntityConstructor][] => Object.entries(definitions)\n\t.filter((it): it is [string, EntityConstructor] => isEntityConstructor(it[1]))\n\nexport const isEntityConstructor = (it: unknown): it is EntityConstructor => {\n\treturn typeof it === 'function' && 'constructor' in it && 'prototype' in it\n}\n"],"names":[],"mappings":"AAEO,MAAM,yBAAyB,CAAC,gBAAwE,OAAO,QAAQ,WAAW,EACvI,OAAO,CAAC,OAA0C,oBAAoB,GAAG,CAAC,CAAC,CAAC;AAEjE,MAAA,sBAAsB,CAAC,OAAyC;AAC5E,SAAO,OAAO,OAAO,cAAc,iBAAiB,MAAM,eAAe;AAC1E;"}
1
+ {"version":3,"file":"filterEntityDefinition.js","sources":["../../../../../packages/schema-definition/src/utils/filterEntityDefinition.ts"],"sourcesContent":["import { EntityConstructor } from './decorators'\n\nexport const filterEntityDefinition = (definitions: Record<string, unknown>): [string, EntityConstructor][] =>\n\tObject.entries(definitions)\n\t\t.filter((it): it is [string, EntityConstructor] => isEntityConstructor(it[1]))\n\nexport const isEntityConstructor = (it: unknown): it is EntityConstructor => {\n\treturn typeof it === 'function' && 'constructor' in it && 'prototype' in it\n}\n"],"names":[],"mappings":"AAEO,MAAM,yBAAyB,CAAC,gBACtC,OAAO,QAAQ,WAAW,EACxB,OAAO,CAAC,OAA0C,oBAAoB,GAAG,CAAC,CAAC,CAAC;AAExE,MAAM,sBAAsB,CAAC,OAAyC;AAC5E,SAAO,OAAO,OAAO,cAAc,iBAAiB,MAAM,eAAe;AAC1E;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.cjs","sources":["../../../../../packages/schema-definition/src/utils/tuple.ts"],"sourcesContent":["export const tuple = <T extends unknown[]>(...args: T) => args\n"],"names":[],"mappings":";;AAAa,MAAA,QAAQ,IAAyB,SAAY;;"}
1
+ {"version":3,"file":"tuple.cjs","sources":["../../../../../packages/schema-definition/src/utils/tuple.ts"],"sourcesContent":["export const tuple = <T extends unknown[]>(...args: T) => args\n"],"names":[],"mappings":";;AAAO,MAAM,QAAQ,IAAyB,SAAY;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.js","sources":["../../../../../packages/schema-definition/src/utils/tuple.ts"],"sourcesContent":["export const tuple = <T extends unknown[]>(...args: T) => args\n"],"names":[],"mappings":"AAAa,MAAA,QAAQ,IAAyB,SAAY;"}
1
+ {"version":3,"file":"tuple.js","sources":["../../../../../packages/schema-definition/src/utils/tuple.ts"],"sourcesContent":["export const tuple = <T extends unknown[]>(...args: T) => args\n"],"names":[],"mappings":"AAAO,MAAM,QAAQ,IAAyB,SAAY;"}
@@ -27,14 +27,27 @@ const ArgumentFactory = {
27
27
  }),
28
28
  literal: (value) => ({ type: schema.Validation.ArgumentType.literal, value })
29
29
  };
30
- const RuleMetaKey = Symbol("Rule");
31
- function updateMetadata({ key, target, propertyKey }, generator, initialValue) {
32
- const metadata = Reflect.hasMetadata(key, target, propertyKey) ? Reflect.getMetadata(key, target, propertyKey) : initialValue;
33
- const newMetadata = generator(metadata);
34
- Reflect.defineMetadata(key, newMetadata, target, propertyKey);
30
+ const RuleMetaKey = /* @__PURE__ */ Symbol("Rule");
31
+ const isLegacyDecorator = (target) => typeof target === "object" && target !== null || typeof target === "function";
32
+ function addRuleToMetadata(target, propertyKeyOrContext, ...rule) {
33
+ if (isLegacyDecorator(target)) {
34
+ const propertyKey = propertyKeyOrContext;
35
+ const hasExisting = Reflect.hasMetadata(RuleMetaKey, target, propertyKey);
36
+ const existing = hasExisting ? Reflect.getMetadata(RuleMetaKey, target, propertyKey) : [];
37
+ Reflect.defineMetadata(RuleMetaKey, [...rule, ...existing], target, propertyKey);
38
+ } else {
39
+ const context = propertyKeyOrContext;
40
+ const name = String(context.name);
41
+ const allRules = context.metadata[RuleMetaKey] ?? {};
42
+ allRules[name] = [...rule, ...allRules[name] ?? []];
43
+ context.metadata[RuleMetaKey] = allRules;
44
+ }
35
45
  }
36
- function addRuleToMetadata(target, propertyKey, ...rule) {
37
- updateMetadata({ key: RuleMetaKey, target, propertyKey }, (prev) => [...rule, ...prev], []);
46
+ function getTC39Metadata(cls) {
47
+ const metaSymbol = Symbol.metadata ?? Reflect.ownKeys(cls).find((k) => typeof k === "symbol" && String(k) === "Symbol(Symbol.metadata)");
48
+ if (!metaSymbol) return void 0;
49
+ const meta = cls[metaSymbol];
50
+ return meta?.[RuleMetaKey];
38
51
  }
39
52
  function fluent() {
40
53
  return new RuleBranch([], []);
@@ -59,8 +72,8 @@ class RuleBranch {
59
72
  const messageParsed = typeof message === "string" ? { text: message } : message;
60
73
  const newRules = [...this.branchRules, { validator, message: messageParsed }];
61
74
  const branch = new RuleBranch(this.conditions, newRules);
62
- const propertyDecorator = (target, propertykey) => {
63
- addRuleToMetadata(target, propertykey, ...branch.buildRules());
75
+ const propertyDecorator = (target, propertyKeyOrContext) => {
76
+ addRuleToMetadata(target, propertyKeyOrContext, ...branch.buildRules());
64
77
  };
65
78
  return Object.assign(propertyDecorator, branch);
66
79
  });
@@ -157,16 +170,17 @@ const assertNotEmpty = (message) => fluent().assertNotEmpty(message);
157
170
  const assertPattern = (pattern, message) => fluent().assertPattern(pattern, message);
158
171
  const assertMinLength = (min, message) => fluent().assertMinLength(min, message);
159
172
  const assertMaxLength = (min, message) => fluent().assertMaxLength(min, message);
160
- const combine = (...decorators) => (target, propertyKey) => decorators.forEach((it) => it(target, propertyKey));
173
+ const combine = (...decorators) => (target, propertyKeyOrContext) => decorators.forEach((it) => it(target, propertyKeyOrContext));
161
174
  function parseDefinition(definitions) {
162
175
  return filterEntityDefinition.filterEntityDefinition(definitions).map(([name, definition]) => {
163
176
  const target = definition.prototype;
164
177
  const defInstance = new definition();
165
178
  const fields = Object.keys(defInstance);
179
+ const tc39Rules = getTC39Metadata(definition);
166
180
  return tuple.tuple(
167
181
  name,
168
182
  fields.map((field) => {
169
- const fieldRules = Reflect.getMetadata(RuleMetaKey, target, field);
183
+ const fieldRules = tc39Rules?.[field] ?? (typeof Reflect.getMetadata === "function" ? Reflect.getMetadata(RuleMetaKey, target, field) : void 0);
170
184
  if (fieldRules === void 0) {
171
185
  return tuple.tuple(field, []);
172
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../packages/schema-definition/src/validation/index.ts"],"sourcesContent":["import { tuple } from '../utils'\nimport { SchemaDefinition } from '../model'\nimport 'reflect-metadata'\nimport { Validation } from '@contember/schema'\nimport { filterEntityDefinition } from '../utils'\n\ntype MessageOrString = Validation.Message | string\n\nexport type ContextPath = Validation.ContextPath | string | undefined\nexport const parsePath = (path: ContextPath): readonly string[] => {\n\tif (!path) {\n\t\treturn []\n\t}\n\tif (typeof path === 'string') {\n\t\treturn path.split('.')\n\t}\n\treturn path\n}\n\nconst ArgumentFactory = {\n\tvalidator: (validator: Validation.Validator): Validation.ValidatorArgument => ({\n\t\ttype: Validation.ArgumentType.validator,\n\t\tvalidator,\n\t}),\n\tpath: (path?: ContextPath): Validation.PathArgument => ({\n\t\ttype: Validation.ArgumentType.path,\n\t\tpath: parsePath(path),\n\t}),\n\tliteral: <V = any>(value: V): Validation.LiteralArgument<V> => ({ type: Validation.ArgumentType.literal, value }),\n}\n\nconst RuleMetaKey = Symbol('Rule')\n\nfunction updateMetadata<T>(\n\t{ key, target, propertyKey }: { key: symbol; target: any; propertyKey: string | symbol },\n\tgenerator: (previous: T) => T,\n\tinitialValue: T,\n) {\n\tconst metadata = Reflect.hasMetadata(key, target, propertyKey)\n\t\t? Reflect.getMetadata(key, target, propertyKey)\n\t\t: initialValue\n\n\tconst newMetadata = generator(metadata)\n\tReflect.defineMetadata(key, newMetadata, target, propertyKey)\n}\n\nfunction addRuleToMetadata(target: any, propertyKey: string | symbol, ...rule: Validation.ValidationRule[]) {\n\tupdateMetadata<Validation.ValidationRule[]>({ key: RuleMetaKey, target, propertyKey }, prev => [...rule, ...prev], [])\n}\n\nexport function fluent() {\n\treturn new RuleBranch([], [])\n}\n\nexport class RuleBranch {\n\tconstructor(private conditions: Validation.Validator[], private branchRules: Validation.ValidationRule[]) {}\n\n\tpublic buildRules = (): Validation.ValidationRule[] => {\n\t\tif (this.conditions.length === 0) {\n\t\t\treturn this.branchRules\n\t\t}\n\t\treturn this.branchRules.map(rule => ({\n\t\t\tvalidator: rules.conditional(\n\t\t\t\tthis.conditions.length === 1 ? this.conditions[0] : rules.and(...this.conditions),\n\t\t\t\trule.validator,\n\t\t\t),\n\t\t\tmessage: rule.message,\n\t\t}))\n\t}\n\n\tpublic assert = (validator: Validation.Validator, message: MessageOrString): RuleBranch & PropertyDecorator => {\n\t\tconst messageParsed: Validation.Message = typeof message === 'string' ? { text: message } : message\n\t\tconst newRules = [...this.branchRules, { validator, message: messageParsed }]\n\t\tconst branch = new RuleBranch(this.conditions, newRules)\n\t\tconst propertyDecorator: PropertyDecorator = (target: any, propertykey: string | symbol) => {\n\t\t\taddRuleToMetadata(target, propertykey, ...branch.buildRules())\n\t\t}\n\t\treturn Object.assign(propertyDecorator, branch)\n\t}\n\n\tassertPattern = (pattern: RegExp, message: MessageOrString) => this.assert(rules.pattern(pattern), message)\n\tassertEquals = (value: any, message: MessageOrString) => this.assert(rules.equals(value), message)\n\tassertDefined = (message: MessageOrString) => this.assert(rules.defined(), message)\n\tassertNotEmpty = (message: MessageOrString) => this.assert(rules.notEmpty(), message)\n\tassertMinLength = (minLength: number, message: MessageOrString) => this.assert(rules.minLength(minLength), message)\n\tassertMaxLength = (minLength: number, message: MessageOrString) => this.assert(rules.maxLength(minLength), message)\n}\n\nconst andOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'and',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst orOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'or',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst conditionalOperation = (condition: Validation.Validator, rule: Validation.Validator): Validation.Validator => ({\n\toperation: 'conditional',\n\targs: [ArgumentFactory.validator(condition), ArgumentFactory.validator(rule)],\n})\n\nconst patternOperation = (pattern: RegExp): Validation.Validator => ({\n\toperation: 'pattern',\n\targs: [ArgumentFactory.literal([pattern.source, pattern.flags])],\n})\n\nconst lengthRangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'lengthRange',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst rangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'range',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst equalsOperation = (value: any): Validation.Validator => ({\n\toperation: 'equals',\n\targs: [ArgumentFactory.literal(value)],\n})\nconst notOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'not',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst emptyOperation = (): Validation.Validator => ({ operation: 'empty', args: [] })\nconst definedOperation = (): Validation.Validator => ({ operation: 'defined', args: [] })\n\nexport const InContextOperation = 'inContext' as const\nconst onOperation = (path: ContextPath, validator: Validation.Validator): Validation.Validator => ({\n\toperation: InContextOperation,\n\targs: [ArgumentFactory.path(path), ArgumentFactory.validator(validator)],\n})\n\nconst everyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'every',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst anyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'any',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst filterOperation = (filter: Validation.Validator, validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'filter',\n\targs: [ArgumentFactory.validator(filter), ArgumentFactory.validator(validator)],\n})\n\nexport const rules = {\n\tequals: equalsOperation,\n\tin: (...value: any[]) => orOperation(...value.map(it => equalsOperation(it))),\n\tpattern: patternOperation,\n\n\tlengthRange: lengthRangeOperation,\n\tminLength: (min: number) => lengthRangeOperation(min, null),\n\tmaxLength: (max: number) => lengthRangeOperation(null, max),\n\n\trange: rangeOperation,\n\tmin: (min: number) => rangeOperation(min, null),\n\tmax: (max: number) => rangeOperation(null, max),\n\n\tdefined: definedOperation,\n\t['empty']: emptyOperation,\n\tnotEmpty: () => notOperation(emptyOperation()),\n\t['null']: () => equalsOperation(null),\n\tnotNull: () => notOperation(equalsOperation(null)),\n\n\tand: andOperation,\n\tor: orOperation,\n\tnot: notOperation,\n\n\tconditional: conditionalOperation,\n\ton: onOperation,\n\n\tfilter: filterOperation,\n\tany: anyOperation,\n\tevery: everyOperation,\n}\n\nexport function when(...conditions: Validation.Validator[]) {\n\treturn new RuleBranch(conditions, [])\n}\n\nexport const assert = (validator: Validation.Validator, message: MessageOrString) => fluent().assert(validator, message)\n/** alias for assertDefined */\nexport const required = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertDefined = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertNotEmpty = (message: MessageOrString) => fluent().assertNotEmpty(message)\nexport const assertPattern = (pattern: RegExp, message: MessageOrString) => fluent().assertPattern(pattern, message)\nexport const assertMinLength = (min: number, message: MessageOrString) => fluent().assertMinLength(min, message)\nexport const assertMaxLength = (min: number, message: MessageOrString) => fluent().assertMaxLength(min, message)\n\nexport const combine =\n\t(...decorators: PropertyDecorator[]): PropertyDecorator =>\n\t\t(target, propertyKey) =>\n\t\t\tdecorators.forEach(it => it(target, propertyKey))\n\nexport function parseDefinition(\n\tdefinitions: Record<string, any>,\n): Validation.Schema {\n\treturn filterEntityDefinition(definitions)\n\t\t.map(([name, definition]) => {\n\t\t\tconst target = definition.prototype\n\t\t\tconst defInstance = new definition()\n\t\t\tconst fields = Object.keys(defInstance)\n\t\t\treturn tuple(\n\t\t\t\tname,\n\t\t\t\tfields\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tconst fieldRules: Validation.ValidationRule[] | undefined = Reflect.getMetadata(RuleMetaKey, target, field)\n\t\t\t\t\t\tif (fieldRules === undefined) {\n\t\t\t\t\t\t\treturn tuple(field, [])\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn tuple(field, fieldRules)\n\t\t\t\t\t})\n\t\t\t\t\t.reduce<Validation.EntityRules>(\n\t\t\t\t\t\t(ruleSet, [field, rules]) => (rules.length > 0 ? { ...ruleSet, [field]: rules } : ruleSet),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t)\n\t\t})\n\t\t.reduce<Validation.Schema>(\n\t\t\t(acc, [name, defs]) => (Object.keys(defs).length > 0 ? { ...acc, [name]: defs } : acc),\n\t\t\t{},\n\t\t)\n}\n"],"names":["Validation","filterEntityDefinition","tuple","rules"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../packages/schema-definition/src/validation/index.ts"],"sourcesContent":["import { tuple } from '../utils'\nimport { SchemaDefinition } from '../model'\nimport { Validation } from '@contember/schema'\nimport { filterEntityDefinition } from '../utils'\n\ntype MessageOrString = Validation.Message | string\n\nexport type ContextPath = Validation.ContextPath | string | undefined\nexport const parsePath = (path: ContextPath): readonly string[] => {\n\tif (!path) {\n\t\treturn []\n\t}\n\tif (typeof path === 'string') {\n\t\treturn path.split('.')\n\t}\n\treturn path\n}\n\nconst ArgumentFactory = {\n\tvalidator: (validator: Validation.Validator): Validation.ValidatorArgument => ({\n\t\ttype: Validation.ArgumentType.validator,\n\t\tvalidator,\n\t}),\n\tpath: (path?: ContextPath): Validation.PathArgument => ({\n\t\ttype: Validation.ArgumentType.path,\n\t\tpath: parsePath(path),\n\t}),\n\tliteral: <V = any>(value: V): Validation.LiteralArgument<V> => ({ type: Validation.ArgumentType.literal, value }),\n}\n\nconst RuleMetaKey = Symbol('Rule')\n\nconst isLegacyDecorator = (target: any): boolean => typeof target === 'object' && target !== null || typeof target === 'function'\n\nfunction addRuleToMetadata(target: any, propertyKeyOrContext: any, ...rule: Validation.ValidationRule[]) {\n\tif (isLegacyDecorator(target)) {\n\t\t// Legacy TypeScript decorators: target is prototype, propertyKeyOrContext is property name\n\t\tconst propertyKey: string | symbol = propertyKeyOrContext\n\t\tconst hasExisting = Reflect.hasMetadata(RuleMetaKey, target, propertyKey)\n\t\tconst existing: Validation.ValidationRule[] = hasExisting ? Reflect.getMetadata(RuleMetaKey, target, propertyKey) : []\n\t\tReflect.defineMetadata(RuleMetaKey, [...rule, ...existing], target, propertyKey)\n\t} else {\n\t\t// TC39 stage 3 decorators: target is undefined, propertyKeyOrContext is context\n\t\tconst context = propertyKeyOrContext as ClassFieldDecoratorContext\n\t\tconst name = String(context.name)\n\t\tconst allRules = (context.metadata[RuleMetaKey] as Record<string, Validation.ValidationRule[]>) ?? {}\n\t\tallRules[name] = [...rule, ...(allRules[name] ?? [])]\n\t\tcontext.metadata[RuleMetaKey] = allRules\n\t}\n}\n\nfunction getTC39Metadata(cls: Function): Record<string, Validation.ValidationRule[]> | undefined {\n\tconst metaSymbol = Symbol.metadata\n\t\t?? Reflect.ownKeys(cls).find((k): k is symbol => typeof k === 'symbol' && String(k) === 'Symbol(Symbol.metadata)')\n\tif (!metaSymbol) return undefined\n\tconst meta = (cls as any)[metaSymbol]\n\treturn meta?.[RuleMetaKey] as Record<string, Validation.ValidationRule[]> | undefined\n}\n\nexport function fluent() {\n\treturn new RuleBranch([], [])\n}\n\nexport class RuleBranch {\n\tconstructor(private conditions: Validation.Validator[], private branchRules: Validation.ValidationRule[]) {}\n\n\tpublic buildRules = (): Validation.ValidationRule[] => {\n\t\tif (this.conditions.length === 0) {\n\t\t\treturn this.branchRules\n\t\t}\n\t\treturn this.branchRules.map(rule => ({\n\t\t\tvalidator: rules.conditional(\n\t\t\t\tthis.conditions.length === 1 ? this.conditions[0] : rules.and(...this.conditions),\n\t\t\t\trule.validator,\n\t\t\t),\n\t\t\tmessage: rule.message,\n\t\t}))\n\t}\n\n\tpublic assert = (validator: Validation.Validator, message: MessageOrString): RuleBranch & PropertyDecorator => {\n\t\tconst messageParsed: Validation.Message = typeof message === 'string' ? { text: message } : message\n\t\tconst newRules = [...this.branchRules, { validator, message: messageParsed }]\n\t\tconst branch = new RuleBranch(this.conditions, newRules)\n\t\tconst propertyDecorator = (target: any, propertyKeyOrContext: any) => {\n\t\t\taddRuleToMetadata(target, propertyKeyOrContext, ...branch.buildRules())\n\t\t}\n\t\treturn Object.assign(propertyDecorator, branch)\n\t}\n\n\tassertPattern = (pattern: RegExp, message: MessageOrString) => this.assert(rules.pattern(pattern), message)\n\tassertEquals = (value: any, message: MessageOrString) => this.assert(rules.equals(value), message)\n\tassertDefined = (message: MessageOrString) => this.assert(rules.defined(), message)\n\tassertNotEmpty = (message: MessageOrString) => this.assert(rules.notEmpty(), message)\n\tassertMinLength = (minLength: number, message: MessageOrString) => this.assert(rules.minLength(minLength), message)\n\tassertMaxLength = (minLength: number, message: MessageOrString) => this.assert(rules.maxLength(minLength), message)\n}\n\nconst andOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'and',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst orOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'or',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst conditionalOperation = (condition: Validation.Validator, rule: Validation.Validator): Validation.Validator => ({\n\toperation: 'conditional',\n\targs: [ArgumentFactory.validator(condition), ArgumentFactory.validator(rule)],\n})\n\nconst patternOperation = (pattern: RegExp): Validation.Validator => ({\n\toperation: 'pattern',\n\targs: [ArgumentFactory.literal([pattern.source, pattern.flags])],\n})\n\nconst lengthRangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'lengthRange',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst rangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'range',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst equalsOperation = (value: any): Validation.Validator => ({\n\toperation: 'equals',\n\targs: [ArgumentFactory.literal(value)],\n})\nconst notOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'not',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst emptyOperation = (): Validation.Validator => ({ operation: 'empty', args: [] })\nconst definedOperation = (): Validation.Validator => ({ operation: 'defined', args: [] })\n\nexport const InContextOperation = 'inContext' as const\nconst onOperation = (path: ContextPath, validator: Validation.Validator): Validation.Validator => ({\n\toperation: InContextOperation,\n\targs: [ArgumentFactory.path(path), ArgumentFactory.validator(validator)],\n})\n\nconst everyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'every',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst anyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'any',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst filterOperation = (filter: Validation.Validator, validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'filter',\n\targs: [ArgumentFactory.validator(filter), ArgumentFactory.validator(validator)],\n})\n\nexport const rules = {\n\tequals: equalsOperation,\n\tin: (...value: any[]) => orOperation(...value.map(it => equalsOperation(it))),\n\tpattern: patternOperation,\n\n\tlengthRange: lengthRangeOperation,\n\tminLength: (min: number) => lengthRangeOperation(min, null),\n\tmaxLength: (max: number) => lengthRangeOperation(null, max),\n\n\trange: rangeOperation,\n\tmin: (min: number) => rangeOperation(min, null),\n\tmax: (max: number) => rangeOperation(null, max),\n\n\tdefined: definedOperation,\n\t['empty']: emptyOperation,\n\tnotEmpty: () => notOperation(emptyOperation()),\n\t['null']: () => equalsOperation(null),\n\tnotNull: () => notOperation(equalsOperation(null)),\n\n\tand: andOperation,\n\tor: orOperation,\n\tnot: notOperation,\n\n\tconditional: conditionalOperation,\n\ton: onOperation,\n\n\tfilter: filterOperation,\n\tany: anyOperation,\n\tevery: everyOperation,\n}\n\nexport function when(...conditions: Validation.Validator[]) {\n\treturn new RuleBranch(conditions, [])\n}\n\nexport const assert = (validator: Validation.Validator, message: MessageOrString) => fluent().assert(validator, message)\n/** alias for assertDefined */\nexport const required = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertDefined = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertNotEmpty = (message: MessageOrString) => fluent().assertNotEmpty(message)\nexport const assertPattern = (pattern: RegExp, message: MessageOrString) => fluent().assertPattern(pattern, message)\nexport const assertMinLength = (min: number, message: MessageOrString) => fluent().assertMinLength(min, message)\nexport const assertMaxLength = (min: number, message: MessageOrString) => fluent().assertMaxLength(min, message)\n\nexport const combine = (...decorators: PropertyDecorator[]): PropertyDecorator => (target: any, propertyKeyOrContext: any) =>\n\tdecorators.forEach(it => (it as any)(target, propertyKeyOrContext))\n\nexport function parseDefinition(\n\tdefinitions: Record<string, any>,\n): Validation.Schema {\n\treturn filterEntityDefinition(definitions)\n\t\t.map(([name, definition]) => {\n\t\t\tconst target = definition.prototype\n\t\t\tconst defInstance = new definition()\n\t\t\tconst fields = Object.keys(defInstance)\n\t\t\tconst tc39Rules = getTC39Metadata(definition)\n\t\t\treturn tuple(\n\t\t\t\tname,\n\t\t\t\tfields\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tconst fieldRules: Validation.ValidationRule[] | undefined = tc39Rules?.[field]\n\t\t\t\t\t\t\t?? (typeof Reflect.getMetadata === 'function' ? Reflect.getMetadata(RuleMetaKey, target, field) : undefined)\n\t\t\t\t\t\tif (fieldRules === undefined) {\n\t\t\t\t\t\t\treturn tuple(field, [])\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn tuple(field, fieldRules)\n\t\t\t\t\t})\n\t\t\t\t\t.reduce<Validation.EntityRules>(\n\t\t\t\t\t\t(ruleSet, [field, rules]) => (rules.length > 0 ? { ...ruleSet, [field]: rules } : ruleSet),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t)\n\t\t})\n\t\t.reduce<Validation.Schema>(\n\t\t\t(acc, [name, defs]) => (Object.keys(defs).length > 0 ? { ...acc, [name]: defs } : acc),\n\t\t\t{},\n\t\t)\n}\n"],"names":["Validation","filterEntityDefinition","tuple","rules"],"mappings":"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"}
@@ -25,14 +25,27 @@ const ArgumentFactory = {
25
25
  }),
26
26
  literal: (value) => ({ type: Validation.ArgumentType.literal, value })
27
27
  };
28
- const RuleMetaKey = Symbol("Rule");
29
- function updateMetadata({ key, target, propertyKey }, generator, initialValue) {
30
- const metadata = Reflect.hasMetadata(key, target, propertyKey) ? Reflect.getMetadata(key, target, propertyKey) : initialValue;
31
- const newMetadata = generator(metadata);
32
- Reflect.defineMetadata(key, newMetadata, target, propertyKey);
28
+ const RuleMetaKey = /* @__PURE__ */ Symbol("Rule");
29
+ const isLegacyDecorator = (target) => typeof target === "object" && target !== null || typeof target === "function";
30
+ function addRuleToMetadata(target, propertyKeyOrContext, ...rule) {
31
+ if (isLegacyDecorator(target)) {
32
+ const propertyKey = propertyKeyOrContext;
33
+ const hasExisting = Reflect.hasMetadata(RuleMetaKey, target, propertyKey);
34
+ const existing = hasExisting ? Reflect.getMetadata(RuleMetaKey, target, propertyKey) : [];
35
+ Reflect.defineMetadata(RuleMetaKey, [...rule, ...existing], target, propertyKey);
36
+ } else {
37
+ const context = propertyKeyOrContext;
38
+ const name = String(context.name);
39
+ const allRules = context.metadata[RuleMetaKey] ?? {};
40
+ allRules[name] = [...rule, ...allRules[name] ?? []];
41
+ context.metadata[RuleMetaKey] = allRules;
42
+ }
33
43
  }
34
- function addRuleToMetadata(target, propertyKey, ...rule) {
35
- updateMetadata({ key: RuleMetaKey, target, propertyKey }, (prev) => [...rule, ...prev], []);
44
+ function getTC39Metadata(cls) {
45
+ const metaSymbol = Symbol.metadata ?? Reflect.ownKeys(cls).find((k) => typeof k === "symbol" && String(k) === "Symbol(Symbol.metadata)");
46
+ if (!metaSymbol) return void 0;
47
+ const meta = cls[metaSymbol];
48
+ return meta?.[RuleMetaKey];
36
49
  }
37
50
  function fluent() {
38
51
  return new RuleBranch([], []);
@@ -57,8 +70,8 @@ class RuleBranch {
57
70
  const messageParsed = typeof message === "string" ? { text: message } : message;
58
71
  const newRules = [...this.branchRules, { validator, message: messageParsed }];
59
72
  const branch = new RuleBranch(this.conditions, newRules);
60
- const propertyDecorator = (target, propertykey) => {
61
- addRuleToMetadata(target, propertykey, ...branch.buildRules());
73
+ const propertyDecorator = (target, propertyKeyOrContext) => {
74
+ addRuleToMetadata(target, propertyKeyOrContext, ...branch.buildRules());
62
75
  };
63
76
  return Object.assign(propertyDecorator, branch);
64
77
  });
@@ -155,16 +168,17 @@ const assertNotEmpty = (message) => fluent().assertNotEmpty(message);
155
168
  const assertPattern = (pattern, message) => fluent().assertPattern(pattern, message);
156
169
  const assertMinLength = (min, message) => fluent().assertMinLength(min, message);
157
170
  const assertMaxLength = (min, message) => fluent().assertMaxLength(min, message);
158
- const combine = (...decorators) => (target, propertyKey) => decorators.forEach((it) => it(target, propertyKey));
171
+ const combine = (...decorators) => (target, propertyKeyOrContext) => decorators.forEach((it) => it(target, propertyKeyOrContext));
159
172
  function parseDefinition(definitions) {
160
173
  return filterEntityDefinition(definitions).map(([name, definition]) => {
161
174
  const target = definition.prototype;
162
175
  const defInstance = new definition();
163
176
  const fields = Object.keys(defInstance);
177
+ const tc39Rules = getTC39Metadata(definition);
164
178
  return tuple(
165
179
  name,
166
180
  fields.map((field) => {
167
- const fieldRules = Reflect.getMetadata(RuleMetaKey, target, field);
181
+ const fieldRules = tc39Rules?.[field] ?? (typeof Reflect.getMetadata === "function" ? Reflect.getMetadata(RuleMetaKey, target, field) : void 0);
168
182
  if (fieldRules === void 0) {
169
183
  return tuple(field, []);
170
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../packages/schema-definition/src/validation/index.ts"],"sourcesContent":["import { tuple } from '../utils'\nimport { SchemaDefinition } from '../model'\nimport 'reflect-metadata'\nimport { Validation } from '@contember/schema'\nimport { filterEntityDefinition } from '../utils'\n\ntype MessageOrString = Validation.Message | string\n\nexport type ContextPath = Validation.ContextPath | string | undefined\nexport const parsePath = (path: ContextPath): readonly string[] => {\n\tif (!path) {\n\t\treturn []\n\t}\n\tif (typeof path === 'string') {\n\t\treturn path.split('.')\n\t}\n\treturn path\n}\n\nconst ArgumentFactory = {\n\tvalidator: (validator: Validation.Validator): Validation.ValidatorArgument => ({\n\t\ttype: Validation.ArgumentType.validator,\n\t\tvalidator,\n\t}),\n\tpath: (path?: ContextPath): Validation.PathArgument => ({\n\t\ttype: Validation.ArgumentType.path,\n\t\tpath: parsePath(path),\n\t}),\n\tliteral: <V = any>(value: V): Validation.LiteralArgument<V> => ({ type: Validation.ArgumentType.literal, value }),\n}\n\nconst RuleMetaKey = Symbol('Rule')\n\nfunction updateMetadata<T>(\n\t{ key, target, propertyKey }: { key: symbol; target: any; propertyKey: string | symbol },\n\tgenerator: (previous: T) => T,\n\tinitialValue: T,\n) {\n\tconst metadata = Reflect.hasMetadata(key, target, propertyKey)\n\t\t? Reflect.getMetadata(key, target, propertyKey)\n\t\t: initialValue\n\n\tconst newMetadata = generator(metadata)\n\tReflect.defineMetadata(key, newMetadata, target, propertyKey)\n}\n\nfunction addRuleToMetadata(target: any, propertyKey: string | symbol, ...rule: Validation.ValidationRule[]) {\n\tupdateMetadata<Validation.ValidationRule[]>({ key: RuleMetaKey, target, propertyKey }, prev => [...rule, ...prev], [])\n}\n\nexport function fluent() {\n\treturn new RuleBranch([], [])\n}\n\nexport class RuleBranch {\n\tconstructor(private conditions: Validation.Validator[], private branchRules: Validation.ValidationRule[]) {}\n\n\tpublic buildRules = (): Validation.ValidationRule[] => {\n\t\tif (this.conditions.length === 0) {\n\t\t\treturn this.branchRules\n\t\t}\n\t\treturn this.branchRules.map(rule => ({\n\t\t\tvalidator: rules.conditional(\n\t\t\t\tthis.conditions.length === 1 ? this.conditions[0] : rules.and(...this.conditions),\n\t\t\t\trule.validator,\n\t\t\t),\n\t\t\tmessage: rule.message,\n\t\t}))\n\t}\n\n\tpublic assert = (validator: Validation.Validator, message: MessageOrString): RuleBranch & PropertyDecorator => {\n\t\tconst messageParsed: Validation.Message = typeof message === 'string' ? { text: message } : message\n\t\tconst newRules = [...this.branchRules, { validator, message: messageParsed }]\n\t\tconst branch = new RuleBranch(this.conditions, newRules)\n\t\tconst propertyDecorator: PropertyDecorator = (target: any, propertykey: string | symbol) => {\n\t\t\taddRuleToMetadata(target, propertykey, ...branch.buildRules())\n\t\t}\n\t\treturn Object.assign(propertyDecorator, branch)\n\t}\n\n\tassertPattern = (pattern: RegExp, message: MessageOrString) => this.assert(rules.pattern(pattern), message)\n\tassertEquals = (value: any, message: MessageOrString) => this.assert(rules.equals(value), message)\n\tassertDefined = (message: MessageOrString) => this.assert(rules.defined(), message)\n\tassertNotEmpty = (message: MessageOrString) => this.assert(rules.notEmpty(), message)\n\tassertMinLength = (minLength: number, message: MessageOrString) => this.assert(rules.minLength(minLength), message)\n\tassertMaxLength = (minLength: number, message: MessageOrString) => this.assert(rules.maxLength(minLength), message)\n}\n\nconst andOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'and',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst orOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'or',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst conditionalOperation = (condition: Validation.Validator, rule: Validation.Validator): Validation.Validator => ({\n\toperation: 'conditional',\n\targs: [ArgumentFactory.validator(condition), ArgumentFactory.validator(rule)],\n})\n\nconst patternOperation = (pattern: RegExp): Validation.Validator => ({\n\toperation: 'pattern',\n\targs: [ArgumentFactory.literal([pattern.source, pattern.flags])],\n})\n\nconst lengthRangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'lengthRange',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst rangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'range',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst equalsOperation = (value: any): Validation.Validator => ({\n\toperation: 'equals',\n\targs: [ArgumentFactory.literal(value)],\n})\nconst notOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'not',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst emptyOperation = (): Validation.Validator => ({ operation: 'empty', args: [] })\nconst definedOperation = (): Validation.Validator => ({ operation: 'defined', args: [] })\n\nexport const InContextOperation = 'inContext' as const\nconst onOperation = (path: ContextPath, validator: Validation.Validator): Validation.Validator => ({\n\toperation: InContextOperation,\n\targs: [ArgumentFactory.path(path), ArgumentFactory.validator(validator)],\n})\n\nconst everyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'every',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst anyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'any',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst filterOperation = (filter: Validation.Validator, validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'filter',\n\targs: [ArgumentFactory.validator(filter), ArgumentFactory.validator(validator)],\n})\n\nexport const rules = {\n\tequals: equalsOperation,\n\tin: (...value: any[]) => orOperation(...value.map(it => equalsOperation(it))),\n\tpattern: patternOperation,\n\n\tlengthRange: lengthRangeOperation,\n\tminLength: (min: number) => lengthRangeOperation(min, null),\n\tmaxLength: (max: number) => lengthRangeOperation(null, max),\n\n\trange: rangeOperation,\n\tmin: (min: number) => rangeOperation(min, null),\n\tmax: (max: number) => rangeOperation(null, max),\n\n\tdefined: definedOperation,\n\t['empty']: emptyOperation,\n\tnotEmpty: () => notOperation(emptyOperation()),\n\t['null']: () => equalsOperation(null),\n\tnotNull: () => notOperation(equalsOperation(null)),\n\n\tand: andOperation,\n\tor: orOperation,\n\tnot: notOperation,\n\n\tconditional: conditionalOperation,\n\ton: onOperation,\n\n\tfilter: filterOperation,\n\tany: anyOperation,\n\tevery: everyOperation,\n}\n\nexport function when(...conditions: Validation.Validator[]) {\n\treturn new RuleBranch(conditions, [])\n}\n\nexport const assert = (validator: Validation.Validator, message: MessageOrString) => fluent().assert(validator, message)\n/** alias for assertDefined */\nexport const required = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertDefined = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertNotEmpty = (message: MessageOrString) => fluent().assertNotEmpty(message)\nexport const assertPattern = (pattern: RegExp, message: MessageOrString) => fluent().assertPattern(pattern, message)\nexport const assertMinLength = (min: number, message: MessageOrString) => fluent().assertMinLength(min, message)\nexport const assertMaxLength = (min: number, message: MessageOrString) => fluent().assertMaxLength(min, message)\n\nexport const combine =\n\t(...decorators: PropertyDecorator[]): PropertyDecorator =>\n\t\t(target, propertyKey) =>\n\t\t\tdecorators.forEach(it => it(target, propertyKey))\n\nexport function parseDefinition(\n\tdefinitions: Record<string, any>,\n): Validation.Schema {\n\treturn filterEntityDefinition(definitions)\n\t\t.map(([name, definition]) => {\n\t\t\tconst target = definition.prototype\n\t\t\tconst defInstance = new definition()\n\t\t\tconst fields = Object.keys(defInstance)\n\t\t\treturn tuple(\n\t\t\t\tname,\n\t\t\t\tfields\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tconst fieldRules: Validation.ValidationRule[] | undefined = Reflect.getMetadata(RuleMetaKey, target, field)\n\t\t\t\t\t\tif (fieldRules === undefined) {\n\t\t\t\t\t\t\treturn tuple(field, [])\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn tuple(field, fieldRules)\n\t\t\t\t\t})\n\t\t\t\t\t.reduce<Validation.EntityRules>(\n\t\t\t\t\t\t(ruleSet, [field, rules]) => (rules.length > 0 ? { ...ruleSet, [field]: rules } : ruleSet),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t)\n\t\t})\n\t\t.reduce<Validation.Schema>(\n\t\t\t(acc, [name, defs]) => (Object.keys(defs).length > 0 ? { ...acc, [name]: defs } : acc),\n\t\t\t{},\n\t\t)\n}\n"],"names":["rules"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/schema-definition/src/validation/index.ts"],"sourcesContent":["import { tuple } from '../utils'\nimport { SchemaDefinition } from '../model'\nimport { Validation } from '@contember/schema'\nimport { filterEntityDefinition } from '../utils'\n\ntype MessageOrString = Validation.Message | string\n\nexport type ContextPath = Validation.ContextPath | string | undefined\nexport const parsePath = (path: ContextPath): readonly string[] => {\n\tif (!path) {\n\t\treturn []\n\t}\n\tif (typeof path === 'string') {\n\t\treturn path.split('.')\n\t}\n\treturn path\n}\n\nconst ArgumentFactory = {\n\tvalidator: (validator: Validation.Validator): Validation.ValidatorArgument => ({\n\t\ttype: Validation.ArgumentType.validator,\n\t\tvalidator,\n\t}),\n\tpath: (path?: ContextPath): Validation.PathArgument => ({\n\t\ttype: Validation.ArgumentType.path,\n\t\tpath: parsePath(path),\n\t}),\n\tliteral: <V = any>(value: V): Validation.LiteralArgument<V> => ({ type: Validation.ArgumentType.literal, value }),\n}\n\nconst RuleMetaKey = Symbol('Rule')\n\nconst isLegacyDecorator = (target: any): boolean => typeof target === 'object' && target !== null || typeof target === 'function'\n\nfunction addRuleToMetadata(target: any, propertyKeyOrContext: any, ...rule: Validation.ValidationRule[]) {\n\tif (isLegacyDecorator(target)) {\n\t\t// Legacy TypeScript decorators: target is prototype, propertyKeyOrContext is property name\n\t\tconst propertyKey: string | symbol = propertyKeyOrContext\n\t\tconst hasExisting = Reflect.hasMetadata(RuleMetaKey, target, propertyKey)\n\t\tconst existing: Validation.ValidationRule[] = hasExisting ? Reflect.getMetadata(RuleMetaKey, target, propertyKey) : []\n\t\tReflect.defineMetadata(RuleMetaKey, [...rule, ...existing], target, propertyKey)\n\t} else {\n\t\t// TC39 stage 3 decorators: target is undefined, propertyKeyOrContext is context\n\t\tconst context = propertyKeyOrContext as ClassFieldDecoratorContext\n\t\tconst name = String(context.name)\n\t\tconst allRules = (context.metadata[RuleMetaKey] as Record<string, Validation.ValidationRule[]>) ?? {}\n\t\tallRules[name] = [...rule, ...(allRules[name] ?? [])]\n\t\tcontext.metadata[RuleMetaKey] = allRules\n\t}\n}\n\nfunction getTC39Metadata(cls: Function): Record<string, Validation.ValidationRule[]> | undefined {\n\tconst metaSymbol = Symbol.metadata\n\t\t?? Reflect.ownKeys(cls).find((k): k is symbol => typeof k === 'symbol' && String(k) === 'Symbol(Symbol.metadata)')\n\tif (!metaSymbol) return undefined\n\tconst meta = (cls as any)[metaSymbol]\n\treturn meta?.[RuleMetaKey] as Record<string, Validation.ValidationRule[]> | undefined\n}\n\nexport function fluent() {\n\treturn new RuleBranch([], [])\n}\n\nexport class RuleBranch {\n\tconstructor(private conditions: Validation.Validator[], private branchRules: Validation.ValidationRule[]) {}\n\n\tpublic buildRules = (): Validation.ValidationRule[] => {\n\t\tif (this.conditions.length === 0) {\n\t\t\treturn this.branchRules\n\t\t}\n\t\treturn this.branchRules.map(rule => ({\n\t\t\tvalidator: rules.conditional(\n\t\t\t\tthis.conditions.length === 1 ? this.conditions[0] : rules.and(...this.conditions),\n\t\t\t\trule.validator,\n\t\t\t),\n\t\t\tmessage: rule.message,\n\t\t}))\n\t}\n\n\tpublic assert = (validator: Validation.Validator, message: MessageOrString): RuleBranch & PropertyDecorator => {\n\t\tconst messageParsed: Validation.Message = typeof message === 'string' ? { text: message } : message\n\t\tconst newRules = [...this.branchRules, { validator, message: messageParsed }]\n\t\tconst branch = new RuleBranch(this.conditions, newRules)\n\t\tconst propertyDecorator = (target: any, propertyKeyOrContext: any) => {\n\t\t\taddRuleToMetadata(target, propertyKeyOrContext, ...branch.buildRules())\n\t\t}\n\t\treturn Object.assign(propertyDecorator, branch)\n\t}\n\n\tassertPattern = (pattern: RegExp, message: MessageOrString) => this.assert(rules.pattern(pattern), message)\n\tassertEquals = (value: any, message: MessageOrString) => this.assert(rules.equals(value), message)\n\tassertDefined = (message: MessageOrString) => this.assert(rules.defined(), message)\n\tassertNotEmpty = (message: MessageOrString) => this.assert(rules.notEmpty(), message)\n\tassertMinLength = (minLength: number, message: MessageOrString) => this.assert(rules.minLength(minLength), message)\n\tassertMaxLength = (minLength: number, message: MessageOrString) => this.assert(rules.maxLength(minLength), message)\n}\n\nconst andOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'and',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst orOperation = (...conditions: Validation.Validator[]): Validation.Validator => ({\n\toperation: 'or',\n\targs: conditions.map(validator => ArgumentFactory.validator(validator)),\n})\nconst conditionalOperation = (condition: Validation.Validator, rule: Validation.Validator): Validation.Validator => ({\n\toperation: 'conditional',\n\targs: [ArgumentFactory.validator(condition), ArgumentFactory.validator(rule)],\n})\n\nconst patternOperation = (pattern: RegExp): Validation.Validator => ({\n\toperation: 'pattern',\n\targs: [ArgumentFactory.literal([pattern.source, pattern.flags])],\n})\n\nconst lengthRangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'lengthRange',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst rangeOperation = (min: number | null, max: number | null): Validation.Validator => ({\n\toperation: 'range',\n\targs: [ArgumentFactory.literal(min), ArgumentFactory.literal(max)],\n})\n\nconst equalsOperation = (value: any): Validation.Validator => ({\n\toperation: 'equals',\n\targs: [ArgumentFactory.literal(value)],\n})\nconst notOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'not',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst emptyOperation = (): Validation.Validator => ({ operation: 'empty', args: [] })\nconst definedOperation = (): Validation.Validator => ({ operation: 'defined', args: [] })\n\nexport const InContextOperation = 'inContext' as const\nconst onOperation = (path: ContextPath, validator: Validation.Validator): Validation.Validator => ({\n\toperation: InContextOperation,\n\targs: [ArgumentFactory.path(path), ArgumentFactory.validator(validator)],\n})\n\nconst everyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'every',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst anyOperation = (validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'any',\n\targs: [ArgumentFactory.validator(validator)],\n})\n\nconst filterOperation = (filter: Validation.Validator, validator: Validation.Validator): Validation.Validator => ({\n\toperation: 'filter',\n\targs: [ArgumentFactory.validator(filter), ArgumentFactory.validator(validator)],\n})\n\nexport const rules = {\n\tequals: equalsOperation,\n\tin: (...value: any[]) => orOperation(...value.map(it => equalsOperation(it))),\n\tpattern: patternOperation,\n\n\tlengthRange: lengthRangeOperation,\n\tminLength: (min: number) => lengthRangeOperation(min, null),\n\tmaxLength: (max: number) => lengthRangeOperation(null, max),\n\n\trange: rangeOperation,\n\tmin: (min: number) => rangeOperation(min, null),\n\tmax: (max: number) => rangeOperation(null, max),\n\n\tdefined: definedOperation,\n\t['empty']: emptyOperation,\n\tnotEmpty: () => notOperation(emptyOperation()),\n\t['null']: () => equalsOperation(null),\n\tnotNull: () => notOperation(equalsOperation(null)),\n\n\tand: andOperation,\n\tor: orOperation,\n\tnot: notOperation,\n\n\tconditional: conditionalOperation,\n\ton: onOperation,\n\n\tfilter: filterOperation,\n\tany: anyOperation,\n\tevery: everyOperation,\n}\n\nexport function when(...conditions: Validation.Validator[]) {\n\treturn new RuleBranch(conditions, [])\n}\n\nexport const assert = (validator: Validation.Validator, message: MessageOrString) => fluent().assert(validator, message)\n/** alias for assertDefined */\nexport const required = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertDefined = (message: MessageOrString) => fluent().assertDefined(message)\nexport const assertNotEmpty = (message: MessageOrString) => fluent().assertNotEmpty(message)\nexport const assertPattern = (pattern: RegExp, message: MessageOrString) => fluent().assertPattern(pattern, message)\nexport const assertMinLength = (min: number, message: MessageOrString) => fluent().assertMinLength(min, message)\nexport const assertMaxLength = (min: number, message: MessageOrString) => fluent().assertMaxLength(min, message)\n\nexport const combine = (...decorators: PropertyDecorator[]): PropertyDecorator => (target: any, propertyKeyOrContext: any) =>\n\tdecorators.forEach(it => (it as any)(target, propertyKeyOrContext))\n\nexport function parseDefinition(\n\tdefinitions: Record<string, any>,\n): Validation.Schema {\n\treturn filterEntityDefinition(definitions)\n\t\t.map(([name, definition]) => {\n\t\t\tconst target = definition.prototype\n\t\t\tconst defInstance = new definition()\n\t\t\tconst fields = Object.keys(defInstance)\n\t\t\tconst tc39Rules = getTC39Metadata(definition)\n\t\t\treturn tuple(\n\t\t\t\tname,\n\t\t\t\tfields\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tconst fieldRules: Validation.ValidationRule[] | undefined = tc39Rules?.[field]\n\t\t\t\t\t\t\t?? (typeof Reflect.getMetadata === 'function' ? Reflect.getMetadata(RuleMetaKey, target, field) : undefined)\n\t\t\t\t\t\tif (fieldRules === undefined) {\n\t\t\t\t\t\t\treturn tuple(field, [])\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn tuple(field, fieldRules)\n\t\t\t\t\t})\n\t\t\t\t\t.reduce<Validation.EntityRules>(\n\t\t\t\t\t\t(ruleSet, [field, rules]) => (rules.length > 0 ? { ...ruleSet, [field]: rules } : ruleSet),\n\t\t\t\t\t\t{},\n\t\t\t\t\t),\n\t\t\t)\n\t\t})\n\t\t.reduce<Validation.Schema>(\n\t\t\t(acc, [name, defs]) => (Object.keys(defs).length > 0 ? { ...acc, [name]: defs } : acc),\n\t\t\t{},\n\t\t)\n}\n"],"names":["rules"],"mappings":"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"}