@contember/schema-utils 2.1.0-alpha.37 → 2.1.0-alpha.39

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 (399) hide show
  1. package/dist/development/index.cjs +110 -0
  2. package/dist/development/index.cjs.map +1 -0
  3. package/dist/development/index.js +94 -0
  4. package/dist/development/index.js.map +1 -0
  5. package/dist/development/src/acl/AllowAllPermissionFactory.cjs +42 -0
  6. package/dist/development/src/acl/AllowAllPermissionFactory.cjs.map +1 -0
  7. package/dist/development/src/acl/AllowAllPermissionFactory.js +42 -0
  8. package/dist/development/src/acl/AllowAllPermissionFactory.js.map +1 -0
  9. package/dist/development/src/acl/PredicateDefinitionProcessor.cjs +69 -0
  10. package/dist/development/src/acl/PredicateDefinitionProcessor.cjs.map +1 -0
  11. package/dist/development/src/acl/PredicateDefinitionProcessor.js +69 -0
  12. package/dist/development/src/acl/PredicateDefinitionProcessor.js.map +1 -0
  13. package/dist/development/src/acl/schemaUtils.cjs +11 -0
  14. package/dist/development/src/acl/schemaUtils.cjs.map +1 -0
  15. package/dist/development/src/acl/schemaUtils.js +11 -0
  16. package/dist/development/src/acl/schemaUtils.js.map +1 -0
  17. package/dist/development/src/dataUtils.cjs +59 -0
  18. package/dist/development/src/dataUtils.cjs.map +1 -0
  19. package/dist/development/src/dataUtils.js +59 -0
  20. package/dist/development/src/dataUtils.js.map +1 -0
  21. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs +118 -0
  22. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -0
  23. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js +118 -0
  24. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -0
  25. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs +218 -0
  26. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -0
  27. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js +218 -0
  28. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +1 -0
  29. package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs +68 -0
  30. package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs.map +1 -0
  31. package/dist/development/src/definition-generator/DefinitionNamingConventions.js +68 -0
  32. package/dist/development/src/definition-generator/DefinitionNamingConventions.js.map +1 -0
  33. package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs +17 -0
  34. package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -0
  35. package/dist/development/src/definition-generator/TsDefinitionGenerator.js +17 -0
  36. package/dist/development/src/definition-generator/TsDefinitionGenerator.js.map +1 -0
  37. package/dist/development/src/lax/LaxSchemaConverter.cjs +202 -0
  38. package/dist/development/src/lax/LaxSchemaConverter.cjs.map +1 -0
  39. package/dist/development/src/lax/LaxSchemaConverter.js +202 -0
  40. package/dist/development/src/lax/LaxSchemaConverter.js.map +1 -0
  41. package/dist/development/src/lax/schema.cjs +70 -0
  42. package/dist/development/src/lax/schema.cjs.map +1 -0
  43. package/dist/development/src/lax/schema.js +53 -0
  44. package/dist/development/src/lax/schema.js.map +1 -0
  45. package/dist/development/src/model/NamingConventions.cjs +28 -0
  46. package/dist/development/src/model/NamingConventions.cjs.map +1 -0
  47. package/dist/development/src/model/NamingConventions.js +28 -0
  48. package/dist/development/src/model/NamingConventions.js.map +1 -0
  49. package/dist/development/src/model/modelUtils.cjs +229 -0
  50. package/dist/development/src/model/modelUtils.cjs.map +1 -0
  51. package/dist/development/src/model/modelUtils.js +229 -0
  52. package/dist/development/src/model/modelUtils.js.map +1 -0
  53. package/dist/development/src/model/resolveDefaultColumnType.cjs +30 -0
  54. package/dist/development/src/model/resolveDefaultColumnType.cjs.map +1 -0
  55. package/dist/development/src/model/resolveDefaultColumnType.js +30 -0
  56. package/dist/development/src/model/resolveDefaultColumnType.js.map +1 -0
  57. package/dist/development/src/schemaChecksum.cjs +9 -0
  58. package/dist/development/src/schemaChecksum.cjs.map +1 -0
  59. package/dist/development/src/schemaChecksum.js +9 -0
  60. package/dist/development/src/schemaChecksum.js.map +1 -0
  61. package/dist/development/src/schemaFilter.cjs +24 -0
  62. package/dist/development/src/schemaFilter.cjs.map +1 -0
  63. package/dist/development/src/schemaFilter.js +24 -0
  64. package/dist/development/src/schemaFilter.js.map +1 -0
  65. package/dist/development/src/schemaNormalizer.cjs +72 -0
  66. package/dist/development/src/schemaNormalizer.cjs.map +1 -0
  67. package/dist/development/src/schemaNormalizer.js +72 -0
  68. package/dist/development/src/schemaNormalizer.js.map +1 -0
  69. package/dist/development/src/type-schema/acl.cjs +149 -0
  70. package/dist/development/src/type-schema/acl.cjs.map +1 -0
  71. package/dist/development/src/type-schema/acl.js +132 -0
  72. package/dist/development/src/type-schema/acl.js.map +1 -0
  73. package/dist/development/src/type-schema/actions.cjs +88 -0
  74. package/dist/development/src/type-schema/actions.cjs.map +1 -0
  75. package/dist/development/src/type-schema/actions.js +71 -0
  76. package/dist/development/src/type-schema/actions.js.map +1 -0
  77. package/dist/development/src/type-schema/condition.cjs +92 -0
  78. package/dist/development/src/type-schema/condition.cjs.map +1 -0
  79. package/dist/development/src/type-schema/condition.js +75 -0
  80. package/dist/development/src/type-schema/condition.js.map +1 -0
  81. package/dist/development/src/type-schema/model.cjs +222 -0
  82. package/dist/development/src/type-schema/model.cjs.map +1 -0
  83. package/dist/development/src/type-schema/model.js +206 -0
  84. package/dist/development/src/type-schema/model.js.map +1 -0
  85. package/dist/development/src/type-schema/settings.cjs +34 -0
  86. package/dist/development/src/type-schema/settings.cjs.map +1 -0
  87. package/dist/development/src/type-schema/settings.js +17 -0
  88. package/dist/development/src/type-schema/settings.js.map +1 -0
  89. package/dist/development/src/type-schema/validation.cjs +115 -0
  90. package/dist/development/src/type-schema/validation.cjs.map +1 -0
  91. package/dist/development/src/type-schema/validation.js +98 -0
  92. package/dist/development/src/type-schema/validation.js.map +1 -0
  93. package/dist/development/src/type-schema/where.cjs +46 -0
  94. package/dist/development/src/type-schema/where.cjs.map +1 -0
  95. package/dist/development/src/type-schema/where.js +29 -0
  96. package/dist/development/src/type-schema/where.js.map +1 -0
  97. package/dist/development/src/utils/assertNever.cjs +7 -0
  98. package/dist/development/src/utils/assertNever.cjs.map +1 -0
  99. package/dist/development/src/utils/assertNever.js +7 -0
  100. package/dist/development/src/utils/assertNever.js.map +1 -0
  101. package/dist/development/src/utils/deepCompare.cjs +134 -0
  102. package/dist/development/src/utils/deepCompare.cjs.map +1 -0
  103. package/dist/development/src/utils/deepCompare.js +134 -0
  104. package/dist/development/src/utils/deepCompare.js.map +1 -0
  105. package/dist/development/src/utils/isIt.cjs +7 -0
  106. package/dist/development/src/utils/isIt.cjs.map +1 -0
  107. package/dist/development/src/utils/isIt.js +7 -0
  108. package/dist/development/src/utils/isIt.js.map +1 -0
  109. package/dist/development/src/utils/printJsValue.cjs +42 -0
  110. package/dist/development/src/utils/printJsValue.cjs.map +1 -0
  111. package/dist/development/src/utils/printJsValue.js +42 -0
  112. package/dist/development/src/utils/printJsValue.js.map +1 -0
  113. package/dist/development/src/validation/AclValidator.cjs +168 -0
  114. package/dist/development/src/validation/AclValidator.cjs.map +1 -0
  115. package/dist/development/src/validation/AclValidator.js +168 -0
  116. package/dist/development/src/validation/AclValidator.js.map +1 -0
  117. package/dist/development/src/validation/ActionsValidator.cjs +127 -0
  118. package/dist/development/src/validation/ActionsValidator.cjs.map +1 -0
  119. package/dist/development/src/validation/ActionsValidator.js +110 -0
  120. package/dist/development/src/validation/ActionsValidator.js.map +1 -0
  121. package/dist/development/src/validation/MembershipResolver.cjs +129 -0
  122. package/dist/development/src/validation/MembershipResolver.cjs.map +1 -0
  123. package/dist/development/src/validation/MembershipResolver.js +129 -0
  124. package/dist/development/src/validation/MembershipResolver.js.map +1 -0
  125. package/dist/development/src/validation/ModelValidator.cjs +325 -0
  126. package/dist/development/src/validation/ModelValidator.cjs.map +1 -0
  127. package/dist/development/src/validation/ModelValidator.js +325 -0
  128. package/dist/development/src/validation/ModelValidator.js.map +1 -0
  129. package/dist/development/src/validation/SchemaValidator.cjs +29 -0
  130. package/dist/development/src/validation/SchemaValidator.cjs.map +1 -0
  131. package/dist/development/src/validation/SchemaValidator.js +29 -0
  132. package/dist/development/src/validation/SchemaValidator.js.map +1 -0
  133. package/dist/development/src/validation/ValidationValidator.cjs +121 -0
  134. package/dist/development/src/validation/ValidationValidator.cjs.map +1 -0
  135. package/dist/development/src/validation/ValidationValidator.js +121 -0
  136. package/dist/development/src/validation/ValidationValidator.js.map +1 -0
  137. package/dist/development/src/validation/errors.cjs +16 -0
  138. package/dist/development/src/validation/errors.cjs.map +1 -0
  139. package/dist/development/src/validation/errors.js +16 -0
  140. package/dist/development/src/validation/errors.js.map +1 -0
  141. package/dist/production/index.cjs +110 -0
  142. package/dist/production/index.cjs.map +1 -0
  143. package/dist/production/index.js +94 -0
  144. package/dist/production/index.js.map +1 -0
  145. package/dist/production/src/acl/AllowAllPermissionFactory.cjs +42 -0
  146. package/dist/production/src/acl/AllowAllPermissionFactory.cjs.map +1 -0
  147. package/dist/production/src/acl/AllowAllPermissionFactory.js +42 -0
  148. package/dist/production/src/acl/AllowAllPermissionFactory.js.map +1 -0
  149. package/dist/production/src/acl/PredicateDefinitionProcessor.cjs +69 -0
  150. package/dist/production/src/acl/PredicateDefinitionProcessor.cjs.map +1 -0
  151. package/dist/production/src/acl/PredicateDefinitionProcessor.js +69 -0
  152. package/dist/production/src/acl/PredicateDefinitionProcessor.js.map +1 -0
  153. package/dist/production/src/acl/schemaUtils.cjs +11 -0
  154. package/dist/production/src/acl/schemaUtils.cjs.map +1 -0
  155. package/dist/production/src/acl/schemaUtils.js +11 -0
  156. package/dist/production/src/acl/schemaUtils.js.map +1 -0
  157. package/dist/production/src/dataUtils.cjs +59 -0
  158. package/dist/production/src/dataUtils.cjs.map +1 -0
  159. package/dist/production/src/dataUtils.js +59 -0
  160. package/dist/production/src/dataUtils.js.map +1 -0
  161. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs +118 -0
  162. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -0
  163. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js +118 -0
  164. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -0
  165. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs +218 -0
  166. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -0
  167. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js +218 -0
  168. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +1 -0
  169. package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs +68 -0
  170. package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs.map +1 -0
  171. package/dist/production/src/definition-generator/DefinitionNamingConventions.js +68 -0
  172. package/dist/production/src/definition-generator/DefinitionNamingConventions.js.map +1 -0
  173. package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs +17 -0
  174. package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -0
  175. package/dist/production/src/definition-generator/TsDefinitionGenerator.js +17 -0
  176. package/dist/production/src/definition-generator/TsDefinitionGenerator.js.map +1 -0
  177. package/dist/production/src/lax/LaxSchemaConverter.cjs +202 -0
  178. package/dist/production/src/lax/LaxSchemaConverter.cjs.map +1 -0
  179. package/dist/production/src/lax/LaxSchemaConverter.js +202 -0
  180. package/dist/production/src/lax/LaxSchemaConverter.js.map +1 -0
  181. package/dist/production/src/lax/schema.cjs +70 -0
  182. package/dist/production/src/lax/schema.cjs.map +1 -0
  183. package/dist/production/src/lax/schema.js +53 -0
  184. package/dist/production/src/lax/schema.js.map +1 -0
  185. package/dist/production/src/model/NamingConventions.cjs +28 -0
  186. package/dist/production/src/model/NamingConventions.cjs.map +1 -0
  187. package/dist/production/src/model/NamingConventions.js +28 -0
  188. package/dist/production/src/model/NamingConventions.js.map +1 -0
  189. package/dist/production/src/model/modelUtils.cjs +229 -0
  190. package/dist/production/src/model/modelUtils.cjs.map +1 -0
  191. package/dist/production/src/model/modelUtils.js +229 -0
  192. package/dist/production/src/model/modelUtils.js.map +1 -0
  193. package/dist/production/src/model/resolveDefaultColumnType.cjs +30 -0
  194. package/dist/production/src/model/resolveDefaultColumnType.cjs.map +1 -0
  195. package/dist/production/src/model/resolveDefaultColumnType.js +30 -0
  196. package/dist/production/src/model/resolveDefaultColumnType.js.map +1 -0
  197. package/dist/production/src/schemaChecksum.cjs +9 -0
  198. package/dist/production/src/schemaChecksum.cjs.map +1 -0
  199. package/dist/production/src/schemaChecksum.js +9 -0
  200. package/dist/production/src/schemaChecksum.js.map +1 -0
  201. package/dist/production/src/schemaFilter.cjs +24 -0
  202. package/dist/production/src/schemaFilter.cjs.map +1 -0
  203. package/dist/production/src/schemaFilter.js +24 -0
  204. package/dist/production/src/schemaFilter.js.map +1 -0
  205. package/dist/production/src/schemaNormalizer.cjs +72 -0
  206. package/dist/production/src/schemaNormalizer.cjs.map +1 -0
  207. package/dist/production/src/schemaNormalizer.js +72 -0
  208. package/dist/production/src/schemaNormalizer.js.map +1 -0
  209. package/dist/production/src/type-schema/acl.cjs +149 -0
  210. package/dist/production/src/type-schema/acl.cjs.map +1 -0
  211. package/dist/production/src/type-schema/acl.js +132 -0
  212. package/dist/production/src/type-schema/acl.js.map +1 -0
  213. package/dist/production/src/type-schema/actions.cjs +88 -0
  214. package/dist/production/src/type-schema/actions.cjs.map +1 -0
  215. package/dist/production/src/type-schema/actions.js +71 -0
  216. package/dist/production/src/type-schema/actions.js.map +1 -0
  217. package/dist/production/src/type-schema/condition.cjs +92 -0
  218. package/dist/production/src/type-schema/condition.cjs.map +1 -0
  219. package/dist/production/src/type-schema/condition.js +75 -0
  220. package/dist/production/src/type-schema/condition.js.map +1 -0
  221. package/dist/production/src/type-schema/model.cjs +222 -0
  222. package/dist/production/src/type-schema/model.cjs.map +1 -0
  223. package/dist/production/src/type-schema/model.js +206 -0
  224. package/dist/production/src/type-schema/model.js.map +1 -0
  225. package/dist/production/src/type-schema/settings.cjs +34 -0
  226. package/dist/production/src/type-schema/settings.cjs.map +1 -0
  227. package/dist/production/src/type-schema/settings.js +17 -0
  228. package/dist/production/src/type-schema/settings.js.map +1 -0
  229. package/dist/production/src/type-schema/validation.cjs +115 -0
  230. package/dist/production/src/type-schema/validation.cjs.map +1 -0
  231. package/dist/production/src/type-schema/validation.js +98 -0
  232. package/dist/production/src/type-schema/validation.js.map +1 -0
  233. package/dist/production/src/type-schema/where.cjs +46 -0
  234. package/dist/production/src/type-schema/where.cjs.map +1 -0
  235. package/dist/production/src/type-schema/where.js +29 -0
  236. package/dist/production/src/type-schema/where.js.map +1 -0
  237. package/dist/production/src/utils/assertNever.cjs +7 -0
  238. package/dist/production/src/utils/assertNever.cjs.map +1 -0
  239. package/dist/production/src/utils/assertNever.js +7 -0
  240. package/dist/production/src/utils/assertNever.js.map +1 -0
  241. package/dist/production/src/utils/deepCompare.cjs +134 -0
  242. package/dist/production/src/utils/deepCompare.cjs.map +1 -0
  243. package/dist/production/src/utils/deepCompare.js +134 -0
  244. package/dist/production/src/utils/deepCompare.js.map +1 -0
  245. package/dist/production/src/utils/isIt.cjs +7 -0
  246. package/dist/production/src/utils/isIt.cjs.map +1 -0
  247. package/dist/production/src/utils/isIt.js +7 -0
  248. package/dist/production/src/utils/isIt.js.map +1 -0
  249. package/dist/production/src/utils/printJsValue.cjs +42 -0
  250. package/dist/production/src/utils/printJsValue.cjs.map +1 -0
  251. package/dist/production/src/utils/printJsValue.js +42 -0
  252. package/dist/production/src/utils/printJsValue.js.map +1 -0
  253. package/dist/production/src/validation/AclValidator.cjs +168 -0
  254. package/dist/production/src/validation/AclValidator.cjs.map +1 -0
  255. package/dist/production/src/validation/AclValidator.js +168 -0
  256. package/dist/production/src/validation/AclValidator.js.map +1 -0
  257. package/dist/production/src/validation/ActionsValidator.cjs +127 -0
  258. package/dist/production/src/validation/ActionsValidator.cjs.map +1 -0
  259. package/dist/production/src/validation/ActionsValidator.js +110 -0
  260. package/dist/production/src/validation/ActionsValidator.js.map +1 -0
  261. package/dist/production/src/validation/MembershipResolver.cjs +129 -0
  262. package/dist/production/src/validation/MembershipResolver.cjs.map +1 -0
  263. package/dist/production/src/validation/MembershipResolver.js +129 -0
  264. package/dist/production/src/validation/MembershipResolver.js.map +1 -0
  265. package/dist/production/src/validation/ModelValidator.cjs +325 -0
  266. package/dist/production/src/validation/ModelValidator.cjs.map +1 -0
  267. package/dist/production/src/validation/ModelValidator.js +325 -0
  268. package/dist/production/src/validation/ModelValidator.js.map +1 -0
  269. package/dist/production/src/validation/SchemaValidator.cjs +29 -0
  270. package/dist/production/src/validation/SchemaValidator.cjs.map +1 -0
  271. package/dist/production/src/validation/SchemaValidator.js +29 -0
  272. package/dist/production/src/validation/SchemaValidator.js.map +1 -0
  273. package/dist/production/src/validation/ValidationValidator.cjs +121 -0
  274. package/dist/production/src/validation/ValidationValidator.cjs.map +1 -0
  275. package/dist/production/src/validation/ValidationValidator.js +121 -0
  276. package/dist/production/src/validation/ValidationValidator.js.map +1 -0
  277. package/dist/production/src/validation/errors.cjs +16 -0
  278. package/dist/production/src/validation/errors.cjs.map +1 -0
  279. package/dist/production/src/validation/errors.js +16 -0
  280. package/dist/production/src/validation/errors.js.map +1 -0
  281. package/dist/tests/cases/unit/conditionSchema.test.d.ts +2 -0
  282. package/dist/tests/cases/unit/conditionSchema.test.d.ts.map +1 -0
  283. package/dist/tests/cases/unit/deepCompare.test.d.ts +2 -0
  284. package/dist/tests/cases/unit/deepCompare.test.d.ts.map +1 -0
  285. package/dist/tests/cases/unit/laxSchemaConverter.test.d.ts +2 -0
  286. package/dist/tests/cases/unit/laxSchemaConverter.test.d.ts.map +1 -0
  287. package/dist/tests/cases/unit/membershipResolver.test.d.ts +2 -0
  288. package/dist/tests/cases/unit/membershipResolver.test.d.ts.map +1 -0
  289. package/dist/tests/cases/unit/modelSchema.test.d.ts +2 -0
  290. package/dist/tests/cases/unit/modelSchema.test.d.ts.map +1 -0
  291. package/dist/tests/cases/unit/modelValidator.test.d.ts +2 -0
  292. package/dist/tests/cases/unit/modelValidator.test.d.ts.map +1 -0
  293. package/dist/tests/cases/unit/printJsvalue.test.d.ts +2 -0
  294. package/dist/tests/cases/unit/printJsvalue.test.d.ts.map +1 -0
  295. package/dist/tests/cases/unit/schemas/acl.d.ts +12 -0
  296. package/dist/tests/cases/unit/schemas/acl.d.ts.map +1 -0
  297. package/dist/tests/cases/unit/schemas/basic.d.ts +4 -0
  298. package/dist/tests/cases/unit/schemas/basic.d.ts.map +1 -0
  299. package/dist/tests/cases/unit/schemas/complex.d.ts +12 -0
  300. package/dist/tests/cases/unit/schemas/complex.d.ts.map +1 -0
  301. package/dist/tests/cases/unit/schemas/enum.d.ts +6 -0
  302. package/dist/tests/cases/unit/schemas/enum.d.ts.map +1 -0
  303. package/dist/tests/cases/unit/schemas/relations.d.ts +14 -0
  304. package/dist/tests/cases/unit/schemas/relations.d.ts.map +1 -0
  305. package/dist/tests/cases/unit/schemas/unique.d.ts +4 -0
  306. package/dist/tests/cases/unit/schemas/unique.d.ts.map +1 -0
  307. package/dist/tests/cases/unit/schemas/view.d.ts +4 -0
  308. package/dist/tests/cases/unit/schemas/view.d.ts.map +1 -0
  309. package/dist/tests/cases/unit/tsDefinitionGenerator.test.d.ts +2 -0
  310. package/dist/tests/cases/unit/tsDefinitionGenerator.test.d.ts.map +1 -0
  311. package/dist/tests/cases/unit/whereSchema.test.d.ts +2 -0
  312. package/dist/tests/cases/unit/whereSchema.test.d.ts.map +1 -0
  313. package/dist/tests/tsconfig.tsbuildinfo +1 -0
  314. package/dist/types/acl/AllowAllPermissionFactory.d.ts +7 -0
  315. package/dist/types/acl/AllowAllPermissionFactory.d.ts.map +1 -0
  316. package/dist/types/acl/PredicateDefinitionProcessor.d.ts +32 -0
  317. package/dist/types/acl/PredicateDefinitionProcessor.d.ts.map +1 -0
  318. package/dist/types/acl/index.d.ts +4 -0
  319. package/dist/types/acl/index.d.ts.map +1 -0
  320. package/dist/types/acl/schemaUtils.d.ts +3 -0
  321. package/dist/types/acl/schemaUtils.d.ts.map +1 -0
  322. package/dist/types/dataUtils.d.ts +18 -0
  323. package/dist/types/dataUtils.d.ts.map +1 -0
  324. package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts +19 -0
  325. package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts.map +1 -0
  326. package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts +27 -0
  327. package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts.map +1 -0
  328. package/dist/types/definition-generator/DefinitionNamingConventions.d.ts +7 -0
  329. package/dist/types/definition-generator/DefinitionNamingConventions.d.ts.map +1 -0
  330. package/dist/types/definition-generator/TsDefinitionGenerator.d.ts +12 -0
  331. package/dist/types/definition-generator/TsDefinitionGenerator.d.ts.map +1 -0
  332. package/dist/types/definition-generator/index.d.ts +5 -0
  333. package/dist/types/definition-generator/index.d.ts.map +1 -0
  334. package/dist/types/index.d.ts +15 -0
  335. package/dist/types/index.d.ts.map +1 -0
  336. package/dist/types/lax/LaxSchemaConverter.d.ts +10 -0
  337. package/dist/types/lax/LaxSchemaConverter.d.ts.map +1 -0
  338. package/dist/types/lax/index.d.ts +3 -0
  339. package/dist/types/lax/index.d.ts.map +1 -0
  340. package/dist/types/lax/schema.d.ts +285 -0
  341. package/dist/types/lax/schema.d.ts.map +1 -0
  342. package/dist/types/model/NamingConventions.d.ts +17 -0
  343. package/dist/types/model/NamingConventions.d.ts.map +1 -0
  344. package/dist/types/model/index.d.ts +4 -0
  345. package/dist/types/model/index.d.ts.map +1 -0
  346. package/dist/types/model/modelUtils.d.ts +28 -0
  347. package/dist/types/model/modelUtils.d.ts.map +1 -0
  348. package/dist/types/model/resolveDefaultColumnType.d.ts +3 -0
  349. package/dist/types/model/resolveDefaultColumnType.d.ts.map +1 -0
  350. package/dist/types/schemaChecksum.d.ts +3 -0
  351. package/dist/types/schemaChecksum.d.ts.map +1 -0
  352. package/dist/types/schemaFilter.d.ts +3 -0
  353. package/dist/types/schemaFilter.d.ts.map +1 -0
  354. package/dist/types/schemaNormalizer.d.ts +3 -0
  355. package/dist/types/schemaNormalizer.d.ts.map +1 -0
  356. package/dist/types/tsconfig.tsbuildinfo +1 -0
  357. package/dist/types/type-schema/acl.d.ts +10 -0
  358. package/dist/types/type-schema/acl.d.ts.map +1 -0
  359. package/dist/types/type-schema/actions.d.ts +32 -0
  360. package/dist/types/type-schema/actions.d.ts.map +1 -0
  361. package/dist/types/type-schema/condition.d.ts +4 -0
  362. package/dist/types/type-schema/condition.d.ts.map +1 -0
  363. package/dist/types/type-schema/index.d.ts +6 -0
  364. package/dist/types/type-schema/index.d.ts.map +1 -0
  365. package/dist/types/type-schema/model.d.ts +30 -0
  366. package/dist/types/type-schema/model.d.ts.map +1 -0
  367. package/dist/types/type-schema/settings.d.ts +41 -0
  368. package/dist/types/type-schema/settings.d.ts.map +1 -0
  369. package/dist/types/type-schema/validation.d.ts +15 -0
  370. package/dist/types/type-schema/validation.d.ts.map +1 -0
  371. package/dist/types/type-schema/where.d.ts +7 -0
  372. package/dist/types/type-schema/where.d.ts.map +1 -0
  373. package/dist/types/utils/assertNever.d.ts +2 -0
  374. package/dist/types/utils/assertNever.d.ts.map +1 -0
  375. package/dist/types/utils/deepCompare.d.ts +13 -0
  376. package/dist/types/utils/deepCompare.d.ts.map +1 -0
  377. package/dist/types/utils/index.d.ts +4 -0
  378. package/dist/types/utils/index.d.ts.map +1 -0
  379. package/dist/types/utils/isIt.d.ts +2 -0
  380. package/dist/types/utils/isIt.d.ts.map +1 -0
  381. package/dist/types/utils/printJsValue.d.ts +13 -0
  382. package/dist/types/utils/printJsValue.d.ts.map +1 -0
  383. package/dist/types/validation/AclValidator.d.ts +20 -0
  384. package/dist/types/validation/AclValidator.d.ts.map +1 -0
  385. package/dist/types/validation/ActionsValidator.d.ts +13 -0
  386. package/dist/types/validation/ActionsValidator.d.ts.map +1 -0
  387. package/dist/types/validation/MembershipResolver.d.ts +37 -0
  388. package/dist/types/validation/MembershipResolver.d.ts.map +1 -0
  389. package/dist/types/validation/ModelValidator.d.ts +20 -0
  390. package/dist/types/validation/ModelValidator.d.ts.map +1 -0
  391. package/dist/types/validation/SchemaValidator.d.ts +11 -0
  392. package/dist/types/validation/SchemaValidator.d.ts.map +1 -0
  393. package/dist/types/validation/ValidationValidator.d.ts +14 -0
  394. package/dist/types/validation/ValidationValidator.d.ts.map +1 -0
  395. package/dist/types/validation/errors.d.ts +14 -0
  396. package/dist/types/validation/errors.d.ts.map +1 -0
  397. package/dist/types/validation/index.d.ts +7 -0
  398. package/dist/types/validation/index.d.ts.map +1 -0
  399. package/package.json +5 -5
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const assertNever = require("../utils/assertNever.cjs");
4
+ const isIt = require("../utils/isIt.cjs");
5
+ const schema = require("@contember/schema");
6
+ var ModelErrorCode = /* @__PURE__ */ ((ModelErrorCode2) => {
7
+ ModelErrorCode2["ENTITY_NOT_FOUND"] = "entityNotFound";
8
+ ModelErrorCode2["FIELD_NOT_FOUND"] = "fieldNotFound";
9
+ ModelErrorCode2["NOT_RELATION"] = "notRelation";
10
+ ModelErrorCode2["NOT_OWNING_SIDE"] = "notOwningSide";
11
+ return ModelErrorCode2;
12
+ })(ModelErrorCode || {});
13
+ class ModelError extends Error {
14
+ constructor(code, message) {
15
+ super(message);
16
+ this.code = code;
17
+ }
18
+ }
19
+ const createEntityNotFoundError = (entityName) => new ModelError("entityNotFound", `Entity ${entityName} not found`);
20
+ const createFieldNotFoundError = (entityName, fieldName) => new ModelError("fieldNotFound", `Field ${fieldName} of entity ${entityName} not found`);
21
+ const getEntity = (schema2, entityName) => {
22
+ const entity = schema2.entities[entityName];
23
+ if (!entity) {
24
+ throw createEntityNotFoundError(entityName);
25
+ }
26
+ return entity;
27
+ };
28
+ const getField = (entity, fieldName) => {
29
+ const field = entity.fields[fieldName];
30
+ if (!field) {
31
+ throw createFieldNotFoundError(entity.name, fieldName);
32
+ }
33
+ return field;
34
+ };
35
+ const getColumnName = (schema2, entity, fieldName) => {
36
+ return acceptFieldVisitor(schema2, entity, fieldName, {
37
+ visitColumn: ({ column }) => column.columnName,
38
+ visitRelation: ({ entity: entity2, relation }) => {
39
+ if (isIt.isIt(relation, "joiningColumn")) {
40
+ return relation.joiningColumn.columnName;
41
+ }
42
+ throw new ModelError(
43
+ "notOwningSide",
44
+ `Field ${relation.name} of entity ${entity2.name} is not an owning side`
45
+ );
46
+ }
47
+ });
48
+ };
49
+ const tryGetColumnName = (schema2, entity, fieldName) => {
50
+ try {
51
+ return getColumnName(schema2, entity, fieldName);
52
+ } catch (e) {
53
+ if (e instanceof ModelError && e.code === "notOwningSide") {
54
+ return void 0;
55
+ }
56
+ throw e;
57
+ }
58
+ };
59
+ const getColumnType = (schema$1, entity, fieldName) => {
60
+ return acceptFieldVisitor(schema$1, entity, fieldName, {
61
+ // TODO solve enum handling properly maybe we should distinguish between domain and column type
62
+ visitColumn: ({ column }) => (column.type === schema.Model.ColumnType.Enum ? "text" : column.columnType) + (column.list ? "[]" : ""),
63
+ visitRelation: ({ entity: entity2, relation, targetEntity }) => {
64
+ if (isIt.isIt(relation, "joiningColumn")) {
65
+ return getColumnType(schema$1, targetEntity, targetEntity.primary);
66
+ }
67
+ throw new ModelError(
68
+ "notOwningSide",
69
+ `Field ${relation.name} of entity ${entity2.name} is not an owning side`
70
+ );
71
+ }
72
+ });
73
+ };
74
+ const getTargetEntity = (schema2, entity, relationName) => {
75
+ return acceptFieldVisitor(schema2, entity, relationName, {
76
+ visitColumn: () => null,
77
+ visitRelation: ({ targetEntity }) => targetEntity
78
+ });
79
+ };
80
+ const acceptEveryFieldVisitor = (schema2, entity, visitor) => {
81
+ const entityObj = typeof entity === "string" ? getEntity(schema2, entity) : entity;
82
+ const result = {};
83
+ for (const field in entityObj.fields) {
84
+ result[field] = acceptFieldVisitor(schema2, entityObj, field, visitor);
85
+ }
86
+ return result;
87
+ };
88
+ const acceptFieldVisitor = (schema2, entity, field, visitor) => {
89
+ const entityObj = typeof entity === "string" ? getEntity(schema2, entity) : entity;
90
+ const fieldObj = typeof field === "string" ? entityObj.fields[field] : field;
91
+ if (!fieldObj) {
92
+ throw createFieldNotFoundError(entityObj.name, typeof field === "string" ? field : "unknown");
93
+ }
94
+ if (isIt.isIt(fieldObj, "columnType")) {
95
+ return visitor.visitColumn({
96
+ entity: entityObj,
97
+ column: fieldObj
98
+ });
99
+ }
100
+ if (isIt.isIt(visitor, "visitRelation")) {
101
+ return acceptRelationTypeVisitor(schema2, entityObj, fieldObj, {
102
+ visitManyHasManyInverse: visitor.visitRelation.bind(visitor),
103
+ visitManyHasManyOwning: visitor.visitRelation.bind(visitor),
104
+ visitOneHasMany: visitor.visitRelation.bind(visitor),
105
+ visitOneHasOneInverse: visitor.visitRelation.bind(visitor),
106
+ visitOneHasOneOwning: visitor.visitRelation.bind(visitor),
107
+ visitManyHasOne: visitor.visitRelation.bind(visitor)
108
+ });
109
+ }
110
+ if (isIt.isIt(visitor, "visitHasMany")) {
111
+ return acceptRelationTypeVisitor(schema2, entityObj, fieldObj, {
112
+ visitManyHasManyInverse: visitor.visitHasMany.bind(visitor),
113
+ visitManyHasManyOwning: visitor.visitHasMany.bind(visitor),
114
+ visitOneHasMany: visitor.visitHasMany.bind(visitor),
115
+ visitOneHasOneInverse: visitor.visitHasOne.bind(visitor),
116
+ visitOneHasOneOwning: visitor.visitHasOne.bind(visitor),
117
+ visitManyHasOne: visitor.visitHasOne.bind(visitor)
118
+ });
119
+ }
120
+ if (isIt.isIt(visitor, "visitManyHasManyInverse")) {
121
+ return acceptRelationTypeVisitor(schema2, entityObj, fieldObj, visitor);
122
+ }
123
+ throw new Error();
124
+ };
125
+ const acceptRelationTypeVisitor = (schema$1, entity, relation, visitor) => {
126
+ const entityObj = typeof entity === "string" ? getEntity(schema$1, entity) : entity;
127
+ const relationObj = typeof relation === "string" ? entityObj.fields[relation] : relation;
128
+ if (!relationObj) {
129
+ throw createFieldNotFoundError(entityObj.name, typeof relation === "string" ? relation : "unknown");
130
+ }
131
+ if (!isRelation(relationObj)) {
132
+ throw new ModelError(
133
+ "notRelation",
134
+ `Field ${relationObj.name} of entity ${entityObj.name} is not a relation`
135
+ );
136
+ }
137
+ const targetEntity = getEntity(schema$1, relationObj.target);
138
+ if (isInverseRelation(relationObj)) {
139
+ const targetRelation = targetEntity.fields[relationObj.ownedBy];
140
+ switch (relationObj.type) {
141
+ case schema.Model.RelationType.ManyHasMany:
142
+ return visitor.visitManyHasManyInverse({
143
+ type: "manyHasManyInverse",
144
+ entity: entityObj,
145
+ relation: relationObj,
146
+ targetEntity,
147
+ targetRelation
148
+ });
149
+ case schema.Model.RelationType.OneHasOne:
150
+ return visitor.visitOneHasOneInverse({
151
+ type: "oneHasOneInverse",
152
+ entity: entityObj,
153
+ relation: relationObj,
154
+ targetEntity,
155
+ targetRelation
156
+ });
157
+ case schema.Model.RelationType.OneHasMany:
158
+ return visitor.visitOneHasMany({
159
+ type: "oneHasMany",
160
+ entity: entityObj,
161
+ relation: relationObj,
162
+ targetEntity,
163
+ targetRelation
164
+ });
165
+ default:
166
+ return assertNever.assertNever();
167
+ }
168
+ } else if (isOwningRelation(relationObj)) {
169
+ const targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null;
170
+ switch (relationObj.type) {
171
+ case schema.Model.RelationType.ManyHasMany:
172
+ return visitor.visitManyHasManyOwning({
173
+ type: "manyHasManyOwning",
174
+ entity: entityObj,
175
+ relation: relationObj,
176
+ targetEntity,
177
+ targetRelation
178
+ });
179
+ case schema.Model.RelationType.OneHasOne:
180
+ return visitor.visitOneHasOneOwning({
181
+ type: "oneHasOneOwning",
182
+ entity: entityObj,
183
+ relation: relationObj,
184
+ targetEntity,
185
+ targetRelation
186
+ });
187
+ case schema.Model.RelationType.ManyHasOne:
188
+ return visitor.visitManyHasOne({
189
+ type: "manyHasOne",
190
+ entity: entityObj,
191
+ //
192
+ relation: relationObj,
193
+ targetEntity,
194
+ targetRelation
195
+ });
196
+ default:
197
+ return assertNever.assertNever();
198
+ }
199
+ }
200
+ throw new Error("Invalid relation type");
201
+ };
202
+ const isRelation = (field) => {
203
+ return isIt.isIt(field, "target");
204
+ };
205
+ const isInverseRelation = (relation) => {
206
+ return relation.ownedBy !== void 0;
207
+ };
208
+ const isOwningRelation = (relation) => {
209
+ return !isInverseRelation(relation);
210
+ };
211
+ const isColumn = (field) => isIt.isIt(field, "columnType");
212
+ const emptyModelSchema = { entities: {}, enums: {} };
213
+ exports.ModelError = ModelError;
214
+ exports.ModelErrorCode = ModelErrorCode;
215
+ exports.acceptEveryFieldVisitor = acceptEveryFieldVisitor;
216
+ exports.acceptFieldVisitor = acceptFieldVisitor;
217
+ exports.acceptRelationTypeVisitor = acceptRelationTypeVisitor;
218
+ exports.emptyModelSchema = emptyModelSchema;
219
+ exports.getColumnName = getColumnName;
220
+ exports.getColumnType = getColumnType;
221
+ exports.getEntity = getEntity;
222
+ exports.getField = getField;
223
+ exports.getTargetEntity = getTargetEntity;
224
+ exports.isColumn = isColumn;
225
+ exports.isInverseRelation = isInverseRelation;
226
+ exports.isOwningRelation = isOwningRelation;
227
+ exports.isRelation = isRelation;
228
+ exports.tryGetColumnName = tryGetColumnName;
229
+ //# sourceMappingURL=modelUtils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelUtils.cjs","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) => new ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","schema","entity","isIt","Model","assertNever"],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ import { assertNever } from "../utils/assertNever.js";
2
+ import { isIt } from "../utils/isIt.js";
3
+ import { Model } from "@contember/schema";
4
+ var ModelErrorCode = /* @__PURE__ */ ((ModelErrorCode2) => {
5
+ ModelErrorCode2["ENTITY_NOT_FOUND"] = "entityNotFound";
6
+ ModelErrorCode2["FIELD_NOT_FOUND"] = "fieldNotFound";
7
+ ModelErrorCode2["NOT_RELATION"] = "notRelation";
8
+ ModelErrorCode2["NOT_OWNING_SIDE"] = "notOwningSide";
9
+ return ModelErrorCode2;
10
+ })(ModelErrorCode || {});
11
+ class ModelError extends Error {
12
+ constructor(code, message) {
13
+ super(message);
14
+ this.code = code;
15
+ }
16
+ }
17
+ const createEntityNotFoundError = (entityName) => new ModelError("entityNotFound", `Entity ${entityName} not found`);
18
+ const createFieldNotFoundError = (entityName, fieldName) => new ModelError("fieldNotFound", `Field ${fieldName} of entity ${entityName} not found`);
19
+ const getEntity = (schema, entityName) => {
20
+ const entity = schema.entities[entityName];
21
+ if (!entity) {
22
+ throw createEntityNotFoundError(entityName);
23
+ }
24
+ return entity;
25
+ };
26
+ const getField = (entity, fieldName) => {
27
+ const field = entity.fields[fieldName];
28
+ if (!field) {
29
+ throw createFieldNotFoundError(entity.name, fieldName);
30
+ }
31
+ return field;
32
+ };
33
+ const getColumnName = (schema, entity, fieldName) => {
34
+ return acceptFieldVisitor(schema, entity, fieldName, {
35
+ visitColumn: ({ column }) => column.columnName,
36
+ visitRelation: ({ entity: entity2, relation }) => {
37
+ if (isIt(relation, "joiningColumn")) {
38
+ return relation.joiningColumn.columnName;
39
+ }
40
+ throw new ModelError(
41
+ "notOwningSide",
42
+ `Field ${relation.name} of entity ${entity2.name} is not an owning side`
43
+ );
44
+ }
45
+ });
46
+ };
47
+ const tryGetColumnName = (schema, entity, fieldName) => {
48
+ try {
49
+ return getColumnName(schema, entity, fieldName);
50
+ } catch (e) {
51
+ if (e instanceof ModelError && e.code === "notOwningSide") {
52
+ return void 0;
53
+ }
54
+ throw e;
55
+ }
56
+ };
57
+ const getColumnType = (schema, entity, fieldName) => {
58
+ return acceptFieldVisitor(schema, entity, fieldName, {
59
+ // TODO solve enum handling properly maybe we should distinguish between domain and column type
60
+ visitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? "text" : column.columnType) + (column.list ? "[]" : ""),
61
+ visitRelation: ({ entity: entity2, relation, targetEntity }) => {
62
+ if (isIt(relation, "joiningColumn")) {
63
+ return getColumnType(schema, targetEntity, targetEntity.primary);
64
+ }
65
+ throw new ModelError(
66
+ "notOwningSide",
67
+ `Field ${relation.name} of entity ${entity2.name} is not an owning side`
68
+ );
69
+ }
70
+ });
71
+ };
72
+ const getTargetEntity = (schema, entity, relationName) => {
73
+ return acceptFieldVisitor(schema, entity, relationName, {
74
+ visitColumn: () => null,
75
+ visitRelation: ({ targetEntity }) => targetEntity
76
+ });
77
+ };
78
+ const acceptEveryFieldVisitor = (schema, entity, visitor) => {
79
+ const entityObj = typeof entity === "string" ? getEntity(schema, entity) : entity;
80
+ const result = {};
81
+ for (const field in entityObj.fields) {
82
+ result[field] = acceptFieldVisitor(schema, entityObj, field, visitor);
83
+ }
84
+ return result;
85
+ };
86
+ const acceptFieldVisitor = (schema, entity, field, visitor) => {
87
+ const entityObj = typeof entity === "string" ? getEntity(schema, entity) : entity;
88
+ const fieldObj = typeof field === "string" ? entityObj.fields[field] : field;
89
+ if (!fieldObj) {
90
+ throw createFieldNotFoundError(entityObj.name, typeof field === "string" ? field : "unknown");
91
+ }
92
+ if (isIt(fieldObj, "columnType")) {
93
+ return visitor.visitColumn({
94
+ entity: entityObj,
95
+ column: fieldObj
96
+ });
97
+ }
98
+ if (isIt(visitor, "visitRelation")) {
99
+ return acceptRelationTypeVisitor(schema, entityObj, fieldObj, {
100
+ visitManyHasManyInverse: visitor.visitRelation.bind(visitor),
101
+ visitManyHasManyOwning: visitor.visitRelation.bind(visitor),
102
+ visitOneHasMany: visitor.visitRelation.bind(visitor),
103
+ visitOneHasOneInverse: visitor.visitRelation.bind(visitor),
104
+ visitOneHasOneOwning: visitor.visitRelation.bind(visitor),
105
+ visitManyHasOne: visitor.visitRelation.bind(visitor)
106
+ });
107
+ }
108
+ if (isIt(visitor, "visitHasMany")) {
109
+ return acceptRelationTypeVisitor(schema, entityObj, fieldObj, {
110
+ visitManyHasManyInverse: visitor.visitHasMany.bind(visitor),
111
+ visitManyHasManyOwning: visitor.visitHasMany.bind(visitor),
112
+ visitOneHasMany: visitor.visitHasMany.bind(visitor),
113
+ visitOneHasOneInverse: visitor.visitHasOne.bind(visitor),
114
+ visitOneHasOneOwning: visitor.visitHasOne.bind(visitor),
115
+ visitManyHasOne: visitor.visitHasOne.bind(visitor)
116
+ });
117
+ }
118
+ if (isIt(visitor, "visitManyHasManyInverse")) {
119
+ return acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor);
120
+ }
121
+ throw new Error();
122
+ };
123
+ const acceptRelationTypeVisitor = (schema, entity, relation, visitor) => {
124
+ const entityObj = typeof entity === "string" ? getEntity(schema, entity) : entity;
125
+ const relationObj = typeof relation === "string" ? entityObj.fields[relation] : relation;
126
+ if (!relationObj) {
127
+ throw createFieldNotFoundError(entityObj.name, typeof relation === "string" ? relation : "unknown");
128
+ }
129
+ if (!isRelation(relationObj)) {
130
+ throw new ModelError(
131
+ "notRelation",
132
+ `Field ${relationObj.name} of entity ${entityObj.name} is not a relation`
133
+ );
134
+ }
135
+ const targetEntity = getEntity(schema, relationObj.target);
136
+ if (isInverseRelation(relationObj)) {
137
+ const targetRelation = targetEntity.fields[relationObj.ownedBy];
138
+ switch (relationObj.type) {
139
+ case Model.RelationType.ManyHasMany:
140
+ return visitor.visitManyHasManyInverse({
141
+ type: "manyHasManyInverse",
142
+ entity: entityObj,
143
+ relation: relationObj,
144
+ targetEntity,
145
+ targetRelation
146
+ });
147
+ case Model.RelationType.OneHasOne:
148
+ return visitor.visitOneHasOneInverse({
149
+ type: "oneHasOneInverse",
150
+ entity: entityObj,
151
+ relation: relationObj,
152
+ targetEntity,
153
+ targetRelation
154
+ });
155
+ case Model.RelationType.OneHasMany:
156
+ return visitor.visitOneHasMany({
157
+ type: "oneHasMany",
158
+ entity: entityObj,
159
+ relation: relationObj,
160
+ targetEntity,
161
+ targetRelation
162
+ });
163
+ default:
164
+ return assertNever();
165
+ }
166
+ } else if (isOwningRelation(relationObj)) {
167
+ const targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null;
168
+ switch (relationObj.type) {
169
+ case Model.RelationType.ManyHasMany:
170
+ return visitor.visitManyHasManyOwning({
171
+ type: "manyHasManyOwning",
172
+ entity: entityObj,
173
+ relation: relationObj,
174
+ targetEntity,
175
+ targetRelation
176
+ });
177
+ case Model.RelationType.OneHasOne:
178
+ return visitor.visitOneHasOneOwning({
179
+ type: "oneHasOneOwning",
180
+ entity: entityObj,
181
+ relation: relationObj,
182
+ targetEntity,
183
+ targetRelation
184
+ });
185
+ case Model.RelationType.ManyHasOne:
186
+ return visitor.visitManyHasOne({
187
+ type: "manyHasOne",
188
+ entity: entityObj,
189
+ //
190
+ relation: relationObj,
191
+ targetEntity,
192
+ targetRelation
193
+ });
194
+ default:
195
+ return assertNever();
196
+ }
197
+ }
198
+ throw new Error("Invalid relation type");
199
+ };
200
+ const isRelation = (field) => {
201
+ return isIt(field, "target");
202
+ };
203
+ const isInverseRelation = (relation) => {
204
+ return relation.ownedBy !== void 0;
205
+ };
206
+ const isOwningRelation = (relation) => {
207
+ return !isInverseRelation(relation);
208
+ };
209
+ const isColumn = (field) => isIt(field, "columnType");
210
+ const emptyModelSchema = { entities: {}, enums: {} };
211
+ export {
212
+ ModelError,
213
+ ModelErrorCode,
214
+ acceptEveryFieldVisitor,
215
+ acceptFieldVisitor,
216
+ acceptRelationTypeVisitor,
217
+ emptyModelSchema,
218
+ getColumnName,
219
+ getColumnType,
220
+ getEntity,
221
+ getField,
222
+ getTargetEntity,
223
+ isColumn,
224
+ isInverseRelation,
225
+ isOwningRelation,
226
+ isRelation,
227
+ tryGetColumnName
228
+ };
229
+ //# sourceMappingURL=modelUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelUtils.js","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) => new ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","entity"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const schema = require("@contember/schema");
4
+ const assertNever = require("../utils/assertNever.cjs");
5
+ const resolveDefaultColumnType = (type) => {
6
+ switch (type) {
7
+ case schema.Model.ColumnType.Int:
8
+ return "integer";
9
+ case schema.Model.ColumnType.Double:
10
+ return "double precision";
11
+ case schema.Model.ColumnType.String:
12
+ return "text";
13
+ case schema.Model.ColumnType.Uuid:
14
+ return "uuid";
15
+ case schema.Model.ColumnType.Bool:
16
+ return "boolean";
17
+ case schema.Model.ColumnType.DateTime:
18
+ return "timestamptz";
19
+ case schema.Model.ColumnType.Date:
20
+ return "date";
21
+ case schema.Model.ColumnType.Time:
22
+ return "time";
23
+ case schema.Model.ColumnType.Json:
24
+ return "jsonb";
25
+ default:
26
+ return assertNever.assertNever();
27
+ }
28
+ };
29
+ exports.resolveDefaultColumnType = resolveDefaultColumnType;
30
+ //# sourceMappingURL=resolveDefaultColumnType.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveDefaultColumnType.cjs","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Time:\n\t\t\treturn 'time'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":["Model","assertNever"],"mappings":";;;;AAGO,MAAM,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAA;AAAA,IACP,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR;AACC,aAAOC,YAAAA,YAAgB;AAAA,EAAA;AAE1B;;"}
@@ -0,0 +1,30 @@
1
+ import { Model } from "@contember/schema";
2
+ import { assertNever } from "../utils/assertNever.js";
3
+ const resolveDefaultColumnType = (type) => {
4
+ switch (type) {
5
+ case Model.ColumnType.Int:
6
+ return "integer";
7
+ case Model.ColumnType.Double:
8
+ return "double precision";
9
+ case Model.ColumnType.String:
10
+ return "text";
11
+ case Model.ColumnType.Uuid:
12
+ return "uuid";
13
+ case Model.ColumnType.Bool:
14
+ return "boolean";
15
+ case Model.ColumnType.DateTime:
16
+ return "timestamptz";
17
+ case Model.ColumnType.Date:
18
+ return "date";
19
+ case Model.ColumnType.Time:
20
+ return "time";
21
+ case Model.ColumnType.Json:
22
+ return "jsonb";
23
+ default:
24
+ return assertNever();
25
+ }
26
+ };
27
+ export {
28
+ resolveDefaultColumnType
29
+ };
30
+ //# sourceMappingURL=resolveDefaultColumnType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveDefaultColumnType.js","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Time:\n\t\t\treturn 'time'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":[],"mappings":";;AAGO,MAAM,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAA;AAAA,IACP,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR;AACC,aAAO,YAAgB;AAAA,EAAA;AAE1B;"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const crypto = require("node:crypto");
4
+ const calculateSchemaChecksum = (schema) => {
5
+ const jsonSchema = JSON.stringify(schema);
6
+ return crypto.createHash("md5").update(jsonSchema).digest("hex");
7
+ };
8
+ exports.calculateSchemaChecksum = calculateSchemaChecksum;
9
+ //# sourceMappingURL=schemaChecksum.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaChecksum.cjs","sources":["../../../../packages/schema-utils/src/schemaChecksum.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport crypto from 'node:crypto'\n\nexport const calculateSchemaChecksum = (schema: Schema): string => {\n\tconst jsonSchema = JSON.stringify(schema)\n\n\treturn crypto\n\t\t.createHash('md5')\n\t\t.update(jsonSchema)\n\t\t.digest('hex')\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,0BAA0B,CAAC,WAA2B;AAClE,QAAM,aAAa,KAAK,UAAU,MAAM;AAExC,SAAO,OACL,WAAW,KAAK,EAChB,OAAO,UAAU,EACjB,OAAO,KAAK;AACf;;"}
@@ -0,0 +1,9 @@
1
+ import crypto__default from "node:crypto";
2
+ const calculateSchemaChecksum = (schema) => {
3
+ const jsonSchema = JSON.stringify(schema);
4
+ return crypto__default.createHash("md5").update(jsonSchema).digest("hex");
5
+ };
6
+ export {
7
+ calculateSchemaChecksum
8
+ };
9
+ //# sourceMappingURL=schemaChecksum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaChecksum.js","sources":["../../../../packages/schema-utils/src/schemaChecksum.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport crypto from 'node:crypto'\n\nexport const calculateSchemaChecksum = (schema: Schema): string => {\n\tconst jsonSchema = JSON.stringify(schema)\n\n\treturn crypto\n\t\t.createHash('md5')\n\t\t.update(jsonSchema)\n\t\t.digest('hex')\n}\n"],"names":["crypto"],"mappings":";AAGO,MAAM,0BAA0B,CAAC,WAA2B;AAClE,QAAM,aAAa,KAAK,UAAU,MAAM;AAExC,SAAOA,gBACL,WAAW,KAAK,EAChB,OAAO,UAAU,EACjB,OAAO,KAAK;AACf;"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const filterSchemaByStage = (schema, stageSlug) => {
4
+ const roles = Object.entries(schema.acl.roles).filter(
5
+ ([, value]) => !value.stages || value.stages === "*" || !!value.stages.find((pattern) => !!new RegExp(pattern).exec(stageSlug))
6
+ ).map(([name, definition], index, roles2) => [
7
+ name,
8
+ {
9
+ ...definition,
10
+ ...definition.inherits ? {
11
+ inherits: definition.inherits.filter((it) => roles2.map(([role]) => role).includes(it))
12
+ } : {}
13
+ }
14
+ ]);
15
+ return {
16
+ ...schema,
17
+ acl: {
18
+ ...schema.acl,
19
+ roles: Object.fromEntries(roles)
20
+ }
21
+ };
22
+ };
23
+ exports.filterSchemaByStage = filterSchemaByStage;
24
+ //# sourceMappingURL=schemaFilter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaFilter.cjs","sources":["../../../../packages/schema-utils/src/schemaFilter.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\n\nexport const filterSchemaByStage = <S extends Schema>(schema: S, stageSlug: string): S => {\n\tconst roles = Object.entries(schema.acl.roles)\n\t\t.filter(\n\t\t\t([, value]) =>\n\t\t\t\t!value.stages\n\t\t\t\t|| value.stages === '*'\n\t\t\t\t|| !!value.stages.find(pattern => !!new RegExp(pattern).exec(stageSlug)),\n\t\t)\n\t\t.map(([name, definition], index, roles) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\t...definition,\n\t\t\t\t...(definition.inherits\n\t\t\t\t\t? {\n\t\t\t\t\t\tinherits: definition.inherits.filter(it => roles.map(([role]) => role).includes(it)),\n\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t])\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: Object.fromEntries(roles),\n\t\t},\n\t}\n}\n"],"names":["roles"],"mappings":";;AAEO,MAAM,sBAAsB,CAAmB,QAAW,cAAyB;AACzF,QAAM,QAAQ,OAAO,QAAQ,OAAO,IAAI,KAAK,EAC3C;AAAA,IACA,CAAC,CAAA,EAAG,KAAK,MACR,CAAC,MAAM,UACJ,MAAM,WAAW,OACjB,CAAC,CAAC,MAAM,OAAO,KAAK,CAAA,YAAW,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAAA,EAAA,EAExE,IAAI,CAAC,CAAC,MAAM,UAAU,GAAG,OAAOA,WAAU;AAAA,IAC1C;AAAA,IACA;AAAA,MACC,GAAG;AAAA,MACH,GAAI,WAAW,WACZ;AAAA,QACD,UAAU,WAAW,SAAS,OAAO,QAAMA,OAAM,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC;AAAA,MAAA,IAElF,CAAA;AAAA,IAAC;AAAA,EACL,CACA;AACF,SAAO;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO,OAAO,YAAY,KAAK;AAAA,IAAA;AAAA,EAChC;AAEF;;"}