@contember/schema-utils 2.1.0-alpha.30 → 2.1.0-alpha.36

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 (435) hide show
  1. package/package.json +11 -6
  2. package/src/acl/AllowAllPermissionFactory.ts +1 -1
  3. package/src/acl/PredicateDefinitionProcessor.ts +5 -7
  4. package/src/dataUtils.ts +1 -1
  5. package/src/definition-generator/AclDefinitionCodeGenerator.ts +7 -8
  6. package/src/definition-generator/DefinitionCodeGenerator.ts +8 -14
  7. package/src/definition-generator/DefinitionNamingConventions.ts +50 -1
  8. package/src/index.ts +2 -2
  9. package/src/lax/LaxSchemaConverter.ts +0 -4
  10. package/src/lax/schema.ts +4 -1
  11. package/src/model/modelUtils.ts +2 -4
  12. package/src/schemaChecksum.ts +0 -1
  13. package/src/schemaFilter.ts +1 -1
  14. package/src/type-schema/acl.ts +16 -13
  15. package/src/type-schema/actions.ts +0 -2
  16. package/src/type-schema/condition.ts +25 -23
  17. package/src/type-schema/model.ts +10 -8
  18. package/src/type-schema/validation.ts +5 -4
  19. package/src/type-schema/where.ts +11 -9
  20. package/src/utils/deepCompare.ts +1 -1
  21. package/src/utils/printJsValue.ts +23 -25
  22. package/src/validation/AclValidator.ts +0 -2
  23. package/src/validation/ActionsValidator.ts +7 -7
  24. package/src/validation/MembershipResolver.ts +0 -3
  25. package/src/validation/ModelValidator.ts +43 -32
  26. package/src/validation/SchemaValidator.ts +7 -6
  27. package/src/validation/ValidationValidator.ts +1 -3
  28. package/src/validation/errors.ts +0 -3
  29. package/tests/cases/unit/conditionSchema.test.ts +1 -2
  30. package/tests/cases/unit/deepCompare.test.ts +2 -3
  31. package/tests/cases/unit/laxSchemaConverter.test.ts +0 -4
  32. package/tests/cases/unit/membershipResolver.test.ts +88 -60
  33. package/tests/cases/unit/modelSchema.test.ts +4 -4
  34. package/tests/cases/unit/modelValidator.test.ts +0 -1
  35. package/tests/cases/unit/printJsvalue.test.ts +11 -7
  36. package/tests/cases/unit/whereSchema.test.ts +19 -18
  37. package/dist/development/index.cjs +0 -110
  38. package/dist/development/index.cjs.map +0 -1
  39. package/dist/development/index.js +0 -94
  40. package/dist/development/index.js.map +0 -1
  41. package/dist/development/src/acl/AllowAllPermissionFactory.cjs +0 -42
  42. package/dist/development/src/acl/AllowAllPermissionFactory.cjs.map +0 -1
  43. package/dist/development/src/acl/AllowAllPermissionFactory.js +0 -42
  44. package/dist/development/src/acl/AllowAllPermissionFactory.js.map +0 -1
  45. package/dist/development/src/acl/PredicateDefinitionProcessor.cjs +0 -71
  46. package/dist/development/src/acl/PredicateDefinitionProcessor.cjs.map +0 -1
  47. package/dist/development/src/acl/PredicateDefinitionProcessor.js +0 -71
  48. package/dist/development/src/acl/PredicateDefinitionProcessor.js.map +0 -1
  49. package/dist/development/src/acl/schemaUtils.cjs +0 -11
  50. package/dist/development/src/acl/schemaUtils.cjs.map +0 -1
  51. package/dist/development/src/acl/schemaUtils.js +0 -11
  52. package/dist/development/src/acl/schemaUtils.js.map +0 -1
  53. package/dist/development/src/dataUtils.cjs +0 -59
  54. package/dist/development/src/dataUtils.cjs.map +0 -1
  55. package/dist/development/src/dataUtils.js +0 -59
  56. package/dist/development/src/dataUtils.js.map +0 -1
  57. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs +0 -117
  58. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +0 -1
  59. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js +0 -117
  60. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js.map +0 -1
  61. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs +0 -218
  62. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +0 -1
  63. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js +0 -218
  64. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +0 -1
  65. package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs +0 -19
  66. package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs.map +0 -1
  67. package/dist/development/src/definition-generator/DefinitionNamingConventions.js +0 -19
  68. package/dist/development/src/definition-generator/DefinitionNamingConventions.js.map +0 -1
  69. package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs +0 -17
  70. package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs.map +0 -1
  71. package/dist/development/src/definition-generator/TsDefinitionGenerator.js +0 -17
  72. package/dist/development/src/definition-generator/TsDefinitionGenerator.js.map +0 -1
  73. package/dist/development/src/lax/LaxSchemaConverter.cjs +0 -202
  74. package/dist/development/src/lax/LaxSchemaConverter.cjs.map +0 -1
  75. package/dist/development/src/lax/LaxSchemaConverter.js +0 -202
  76. package/dist/development/src/lax/LaxSchemaConverter.js.map +0 -1
  77. package/dist/development/src/lax/schema.cjs +0 -70
  78. package/dist/development/src/lax/schema.cjs.map +0 -1
  79. package/dist/development/src/lax/schema.js +0 -53
  80. package/dist/development/src/lax/schema.js.map +0 -1
  81. package/dist/development/src/model/NamingConventions.cjs +0 -28
  82. package/dist/development/src/model/NamingConventions.cjs.map +0 -1
  83. package/dist/development/src/model/NamingConventions.js +0 -28
  84. package/dist/development/src/model/NamingConventions.js.map +0 -1
  85. package/dist/development/src/model/modelUtils.cjs +0 -231
  86. package/dist/development/src/model/modelUtils.cjs.map +0 -1
  87. package/dist/development/src/model/modelUtils.js +0 -231
  88. package/dist/development/src/model/modelUtils.js.map +0 -1
  89. package/dist/development/src/model/resolveDefaultColumnType.cjs +0 -30
  90. package/dist/development/src/model/resolveDefaultColumnType.cjs.map +0 -1
  91. package/dist/development/src/model/resolveDefaultColumnType.js +0 -30
  92. package/dist/development/src/model/resolveDefaultColumnType.js.map +0 -1
  93. package/dist/development/src/schemaChecksum.cjs +0 -9
  94. package/dist/development/src/schemaChecksum.cjs.map +0 -1
  95. package/dist/development/src/schemaChecksum.js +0 -9
  96. package/dist/development/src/schemaChecksum.js.map +0 -1
  97. package/dist/development/src/schemaFilter.cjs +0 -24
  98. package/dist/development/src/schemaFilter.cjs.map +0 -1
  99. package/dist/development/src/schemaFilter.js +0 -24
  100. package/dist/development/src/schemaFilter.js.map +0 -1
  101. package/dist/development/src/schemaNormalizer.cjs +0 -72
  102. package/dist/development/src/schemaNormalizer.cjs.map +0 -1
  103. package/dist/development/src/schemaNormalizer.js +0 -72
  104. package/dist/development/src/schemaNormalizer.js.map +0 -1
  105. package/dist/development/src/type-schema/acl.cjs +0 -146
  106. package/dist/development/src/type-schema/acl.cjs.map +0 -1
  107. package/dist/development/src/type-schema/acl.js +0 -129
  108. package/dist/development/src/type-schema/acl.js.map +0 -1
  109. package/dist/development/src/type-schema/actions.cjs +0 -88
  110. package/dist/development/src/type-schema/actions.cjs.map +0 -1
  111. package/dist/development/src/type-schema/actions.js +0 -71
  112. package/dist/development/src/type-schema/actions.js.map +0 -1
  113. package/dist/development/src/type-schema/condition.cjs +0 -92
  114. package/dist/development/src/type-schema/condition.cjs.map +0 -1
  115. package/dist/development/src/type-schema/condition.js +0 -75
  116. package/dist/development/src/type-schema/condition.js.map +0 -1
  117. package/dist/development/src/type-schema/model.cjs +0 -219
  118. package/dist/development/src/type-schema/model.cjs.map +0 -1
  119. package/dist/development/src/type-schema/model.js +0 -203
  120. package/dist/development/src/type-schema/model.js.map +0 -1
  121. package/dist/development/src/type-schema/settings.cjs +0 -34
  122. package/dist/development/src/type-schema/settings.cjs.map +0 -1
  123. package/dist/development/src/type-schema/settings.js +0 -17
  124. package/dist/development/src/type-schema/settings.js.map +0 -1
  125. package/dist/development/src/type-schema/validation.cjs +0 -115
  126. package/dist/development/src/type-schema/validation.cjs.map +0 -1
  127. package/dist/development/src/type-schema/validation.js +0 -98
  128. package/dist/development/src/type-schema/validation.js.map +0 -1
  129. package/dist/development/src/type-schema/where.cjs +0 -44
  130. package/dist/development/src/type-schema/where.cjs.map +0 -1
  131. package/dist/development/src/type-schema/where.js +0 -27
  132. package/dist/development/src/type-schema/where.js.map +0 -1
  133. package/dist/development/src/utils/assertNever.cjs +0 -7
  134. package/dist/development/src/utils/assertNever.cjs.map +0 -1
  135. package/dist/development/src/utils/assertNever.js +0 -7
  136. package/dist/development/src/utils/assertNever.js.map +0 -1
  137. package/dist/development/src/utils/deepCompare.cjs +0 -134
  138. package/dist/development/src/utils/deepCompare.cjs.map +0 -1
  139. package/dist/development/src/utils/deepCompare.js +0 -134
  140. package/dist/development/src/utils/deepCompare.js.map +0 -1
  141. package/dist/development/src/utils/isIt.cjs +0 -7
  142. package/dist/development/src/utils/isIt.cjs.map +0 -1
  143. package/dist/development/src/utils/isIt.js +0 -7
  144. package/dist/development/src/utils/isIt.js.map +0 -1
  145. package/dist/development/src/utils/printJsValue.cjs +0 -42
  146. package/dist/development/src/utils/printJsValue.cjs.map +0 -1
  147. package/dist/development/src/utils/printJsValue.js +0 -42
  148. package/dist/development/src/utils/printJsValue.js.map +0 -1
  149. package/dist/development/src/validation/AclValidator.cjs +0 -168
  150. package/dist/development/src/validation/AclValidator.cjs.map +0 -1
  151. package/dist/development/src/validation/AclValidator.js +0 -168
  152. package/dist/development/src/validation/AclValidator.js.map +0 -1
  153. package/dist/development/src/validation/ActionsValidator.cjs +0 -127
  154. package/dist/development/src/validation/ActionsValidator.cjs.map +0 -1
  155. package/dist/development/src/validation/ActionsValidator.js +0 -110
  156. package/dist/development/src/validation/ActionsValidator.js.map +0 -1
  157. package/dist/development/src/validation/MembershipResolver.cjs +0 -129
  158. package/dist/development/src/validation/MembershipResolver.cjs.map +0 -1
  159. package/dist/development/src/validation/MembershipResolver.js +0 -129
  160. package/dist/development/src/validation/MembershipResolver.js.map +0 -1
  161. package/dist/development/src/validation/ModelValidator.cjs +0 -310
  162. package/dist/development/src/validation/ModelValidator.cjs.map +0 -1
  163. package/dist/development/src/validation/ModelValidator.js +0 -310
  164. package/dist/development/src/validation/ModelValidator.js.map +0 -1
  165. package/dist/development/src/validation/SchemaValidator.cjs +0 -29
  166. package/dist/development/src/validation/SchemaValidator.cjs.map +0 -1
  167. package/dist/development/src/validation/SchemaValidator.js +0 -29
  168. package/dist/development/src/validation/SchemaValidator.js.map +0 -1
  169. package/dist/development/src/validation/ValidationValidator.cjs +0 -121
  170. package/dist/development/src/validation/ValidationValidator.cjs.map +0 -1
  171. package/dist/development/src/validation/ValidationValidator.js +0 -121
  172. package/dist/development/src/validation/ValidationValidator.js.map +0 -1
  173. package/dist/development/src/validation/errors.cjs +0 -16
  174. package/dist/development/src/validation/errors.cjs.map +0 -1
  175. package/dist/development/src/validation/errors.js +0 -16
  176. package/dist/development/src/validation/errors.js.map +0 -1
  177. package/dist/production/index.cjs +0 -110
  178. package/dist/production/index.cjs.map +0 -1
  179. package/dist/production/index.js +0 -94
  180. package/dist/production/index.js.map +0 -1
  181. package/dist/production/src/acl/AllowAllPermissionFactory.cjs +0 -42
  182. package/dist/production/src/acl/AllowAllPermissionFactory.cjs.map +0 -1
  183. package/dist/production/src/acl/AllowAllPermissionFactory.js +0 -42
  184. package/dist/production/src/acl/AllowAllPermissionFactory.js.map +0 -1
  185. package/dist/production/src/acl/PredicateDefinitionProcessor.cjs +0 -71
  186. package/dist/production/src/acl/PredicateDefinitionProcessor.cjs.map +0 -1
  187. package/dist/production/src/acl/PredicateDefinitionProcessor.js +0 -71
  188. package/dist/production/src/acl/PredicateDefinitionProcessor.js.map +0 -1
  189. package/dist/production/src/acl/schemaUtils.cjs +0 -11
  190. package/dist/production/src/acl/schemaUtils.cjs.map +0 -1
  191. package/dist/production/src/acl/schemaUtils.js +0 -11
  192. package/dist/production/src/acl/schemaUtils.js.map +0 -1
  193. package/dist/production/src/dataUtils.cjs +0 -59
  194. package/dist/production/src/dataUtils.cjs.map +0 -1
  195. package/dist/production/src/dataUtils.js +0 -59
  196. package/dist/production/src/dataUtils.js.map +0 -1
  197. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs +0 -117
  198. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +0 -1
  199. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js +0 -117
  200. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js.map +0 -1
  201. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs +0 -218
  202. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +0 -1
  203. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js +0 -218
  204. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +0 -1
  205. package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs +0 -19
  206. package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs.map +0 -1
  207. package/dist/production/src/definition-generator/DefinitionNamingConventions.js +0 -19
  208. package/dist/production/src/definition-generator/DefinitionNamingConventions.js.map +0 -1
  209. package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs +0 -17
  210. package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs.map +0 -1
  211. package/dist/production/src/definition-generator/TsDefinitionGenerator.js +0 -17
  212. package/dist/production/src/definition-generator/TsDefinitionGenerator.js.map +0 -1
  213. package/dist/production/src/lax/LaxSchemaConverter.cjs +0 -202
  214. package/dist/production/src/lax/LaxSchemaConverter.cjs.map +0 -1
  215. package/dist/production/src/lax/LaxSchemaConverter.js +0 -202
  216. package/dist/production/src/lax/LaxSchemaConverter.js.map +0 -1
  217. package/dist/production/src/lax/schema.cjs +0 -70
  218. package/dist/production/src/lax/schema.cjs.map +0 -1
  219. package/dist/production/src/lax/schema.js +0 -53
  220. package/dist/production/src/lax/schema.js.map +0 -1
  221. package/dist/production/src/model/NamingConventions.cjs +0 -28
  222. package/dist/production/src/model/NamingConventions.cjs.map +0 -1
  223. package/dist/production/src/model/NamingConventions.js +0 -28
  224. package/dist/production/src/model/NamingConventions.js.map +0 -1
  225. package/dist/production/src/model/modelUtils.cjs +0 -231
  226. package/dist/production/src/model/modelUtils.cjs.map +0 -1
  227. package/dist/production/src/model/modelUtils.js +0 -231
  228. package/dist/production/src/model/modelUtils.js.map +0 -1
  229. package/dist/production/src/model/resolveDefaultColumnType.cjs +0 -30
  230. package/dist/production/src/model/resolveDefaultColumnType.cjs.map +0 -1
  231. package/dist/production/src/model/resolveDefaultColumnType.js +0 -30
  232. package/dist/production/src/model/resolveDefaultColumnType.js.map +0 -1
  233. package/dist/production/src/schemaChecksum.cjs +0 -9
  234. package/dist/production/src/schemaChecksum.cjs.map +0 -1
  235. package/dist/production/src/schemaChecksum.js +0 -9
  236. package/dist/production/src/schemaChecksum.js.map +0 -1
  237. package/dist/production/src/schemaFilter.cjs +0 -24
  238. package/dist/production/src/schemaFilter.cjs.map +0 -1
  239. package/dist/production/src/schemaFilter.js +0 -24
  240. package/dist/production/src/schemaFilter.js.map +0 -1
  241. package/dist/production/src/schemaNormalizer.cjs +0 -72
  242. package/dist/production/src/schemaNormalizer.cjs.map +0 -1
  243. package/dist/production/src/schemaNormalizer.js +0 -72
  244. package/dist/production/src/schemaNormalizer.js.map +0 -1
  245. package/dist/production/src/type-schema/acl.cjs +0 -146
  246. package/dist/production/src/type-schema/acl.cjs.map +0 -1
  247. package/dist/production/src/type-schema/acl.js +0 -129
  248. package/dist/production/src/type-schema/acl.js.map +0 -1
  249. package/dist/production/src/type-schema/actions.cjs +0 -88
  250. package/dist/production/src/type-schema/actions.cjs.map +0 -1
  251. package/dist/production/src/type-schema/actions.js +0 -71
  252. package/dist/production/src/type-schema/actions.js.map +0 -1
  253. package/dist/production/src/type-schema/condition.cjs +0 -92
  254. package/dist/production/src/type-schema/condition.cjs.map +0 -1
  255. package/dist/production/src/type-schema/condition.js +0 -75
  256. package/dist/production/src/type-schema/condition.js.map +0 -1
  257. package/dist/production/src/type-schema/model.cjs +0 -219
  258. package/dist/production/src/type-schema/model.cjs.map +0 -1
  259. package/dist/production/src/type-schema/model.js +0 -203
  260. package/dist/production/src/type-schema/model.js.map +0 -1
  261. package/dist/production/src/type-schema/settings.cjs +0 -34
  262. package/dist/production/src/type-schema/settings.cjs.map +0 -1
  263. package/dist/production/src/type-schema/settings.js +0 -17
  264. package/dist/production/src/type-schema/settings.js.map +0 -1
  265. package/dist/production/src/type-schema/validation.cjs +0 -115
  266. package/dist/production/src/type-schema/validation.cjs.map +0 -1
  267. package/dist/production/src/type-schema/validation.js +0 -98
  268. package/dist/production/src/type-schema/validation.js.map +0 -1
  269. package/dist/production/src/type-schema/where.cjs +0 -44
  270. package/dist/production/src/type-schema/where.cjs.map +0 -1
  271. package/dist/production/src/type-schema/where.js +0 -27
  272. package/dist/production/src/type-schema/where.js.map +0 -1
  273. package/dist/production/src/utils/assertNever.cjs +0 -7
  274. package/dist/production/src/utils/assertNever.cjs.map +0 -1
  275. package/dist/production/src/utils/assertNever.js +0 -7
  276. package/dist/production/src/utils/assertNever.js.map +0 -1
  277. package/dist/production/src/utils/deepCompare.cjs +0 -134
  278. package/dist/production/src/utils/deepCompare.cjs.map +0 -1
  279. package/dist/production/src/utils/deepCompare.js +0 -134
  280. package/dist/production/src/utils/deepCompare.js.map +0 -1
  281. package/dist/production/src/utils/isIt.cjs +0 -7
  282. package/dist/production/src/utils/isIt.cjs.map +0 -1
  283. package/dist/production/src/utils/isIt.js +0 -7
  284. package/dist/production/src/utils/isIt.js.map +0 -1
  285. package/dist/production/src/utils/printJsValue.cjs +0 -42
  286. package/dist/production/src/utils/printJsValue.cjs.map +0 -1
  287. package/dist/production/src/utils/printJsValue.js +0 -42
  288. package/dist/production/src/utils/printJsValue.js.map +0 -1
  289. package/dist/production/src/validation/AclValidator.cjs +0 -168
  290. package/dist/production/src/validation/AclValidator.cjs.map +0 -1
  291. package/dist/production/src/validation/AclValidator.js +0 -168
  292. package/dist/production/src/validation/AclValidator.js.map +0 -1
  293. package/dist/production/src/validation/ActionsValidator.cjs +0 -127
  294. package/dist/production/src/validation/ActionsValidator.cjs.map +0 -1
  295. package/dist/production/src/validation/ActionsValidator.js +0 -110
  296. package/dist/production/src/validation/ActionsValidator.js.map +0 -1
  297. package/dist/production/src/validation/MembershipResolver.cjs +0 -129
  298. package/dist/production/src/validation/MembershipResolver.cjs.map +0 -1
  299. package/dist/production/src/validation/MembershipResolver.js +0 -129
  300. package/dist/production/src/validation/MembershipResolver.js.map +0 -1
  301. package/dist/production/src/validation/ModelValidator.cjs +0 -310
  302. package/dist/production/src/validation/ModelValidator.cjs.map +0 -1
  303. package/dist/production/src/validation/ModelValidator.js +0 -310
  304. package/dist/production/src/validation/ModelValidator.js.map +0 -1
  305. package/dist/production/src/validation/SchemaValidator.cjs +0 -29
  306. package/dist/production/src/validation/SchemaValidator.cjs.map +0 -1
  307. package/dist/production/src/validation/SchemaValidator.js +0 -29
  308. package/dist/production/src/validation/SchemaValidator.js.map +0 -1
  309. package/dist/production/src/validation/ValidationValidator.cjs +0 -121
  310. package/dist/production/src/validation/ValidationValidator.cjs.map +0 -1
  311. package/dist/production/src/validation/ValidationValidator.js +0 -121
  312. package/dist/production/src/validation/ValidationValidator.js.map +0 -1
  313. package/dist/production/src/validation/errors.cjs +0 -16
  314. package/dist/production/src/validation/errors.cjs.map +0 -1
  315. package/dist/production/src/validation/errors.js +0 -16
  316. package/dist/production/src/validation/errors.js.map +0 -1
  317. package/dist/tests/cases/unit/conditionSchema.test.d.ts +0 -2
  318. package/dist/tests/cases/unit/conditionSchema.test.d.ts.map +0 -1
  319. package/dist/tests/cases/unit/deepCompare.test.d.ts +0 -2
  320. package/dist/tests/cases/unit/deepCompare.test.d.ts.map +0 -1
  321. package/dist/tests/cases/unit/laxSchemaConverter.test.d.ts +0 -2
  322. package/dist/tests/cases/unit/laxSchemaConverter.test.d.ts.map +0 -1
  323. package/dist/tests/cases/unit/membershipResolver.test.d.ts +0 -2
  324. package/dist/tests/cases/unit/membershipResolver.test.d.ts.map +0 -1
  325. package/dist/tests/cases/unit/modelSchema.test.d.ts +0 -2
  326. package/dist/tests/cases/unit/modelSchema.test.d.ts.map +0 -1
  327. package/dist/tests/cases/unit/modelValidator.test.d.ts +0 -2
  328. package/dist/tests/cases/unit/modelValidator.test.d.ts.map +0 -1
  329. package/dist/tests/cases/unit/printJsvalue.test.d.ts +0 -2
  330. package/dist/tests/cases/unit/printJsvalue.test.d.ts.map +0 -1
  331. package/dist/tests/cases/unit/schemas/acl.d.ts +0 -12
  332. package/dist/tests/cases/unit/schemas/acl.d.ts.map +0 -1
  333. package/dist/tests/cases/unit/schemas/basic.d.ts +0 -4
  334. package/dist/tests/cases/unit/schemas/basic.d.ts.map +0 -1
  335. package/dist/tests/cases/unit/schemas/complex.d.ts +0 -12
  336. package/dist/tests/cases/unit/schemas/complex.d.ts.map +0 -1
  337. package/dist/tests/cases/unit/schemas/enum.d.ts +0 -6
  338. package/dist/tests/cases/unit/schemas/enum.d.ts.map +0 -1
  339. package/dist/tests/cases/unit/schemas/relations.d.ts +0 -14
  340. package/dist/tests/cases/unit/schemas/relations.d.ts.map +0 -1
  341. package/dist/tests/cases/unit/schemas/unique.d.ts +0 -4
  342. package/dist/tests/cases/unit/schemas/unique.d.ts.map +0 -1
  343. package/dist/tests/cases/unit/schemas/view.d.ts +0 -4
  344. package/dist/tests/cases/unit/schemas/view.d.ts.map +0 -1
  345. package/dist/tests/cases/unit/tsDefinitionGenerator.test.d.ts +0 -2
  346. package/dist/tests/cases/unit/tsDefinitionGenerator.test.d.ts.map +0 -1
  347. package/dist/tests/cases/unit/whereSchema.test.d.ts +0 -2
  348. package/dist/tests/cases/unit/whereSchema.test.d.ts.map +0 -1
  349. package/dist/tests/tsconfig.tsbuildinfo +0 -1
  350. package/dist/types/acl/AllowAllPermissionFactory.d.ts +0 -7
  351. package/dist/types/acl/AllowAllPermissionFactory.d.ts.map +0 -1
  352. package/dist/types/acl/PredicateDefinitionProcessor.d.ts +0 -32
  353. package/dist/types/acl/PredicateDefinitionProcessor.d.ts.map +0 -1
  354. package/dist/types/acl/index.d.ts +0 -4
  355. package/dist/types/acl/index.d.ts.map +0 -1
  356. package/dist/types/acl/schemaUtils.d.ts +0 -3
  357. package/dist/types/acl/schemaUtils.d.ts.map +0 -1
  358. package/dist/types/dataUtils.d.ts +0 -18
  359. package/dist/types/dataUtils.d.ts.map +0 -1
  360. package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts +0 -19
  361. package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts.map +0 -1
  362. package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts +0 -27
  363. package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts.map +0 -1
  364. package/dist/types/definition-generator/DefinitionNamingConventions.d.ts +0 -7
  365. package/dist/types/definition-generator/DefinitionNamingConventions.d.ts.map +0 -1
  366. package/dist/types/definition-generator/TsDefinitionGenerator.d.ts +0 -12
  367. package/dist/types/definition-generator/TsDefinitionGenerator.d.ts.map +0 -1
  368. package/dist/types/definition-generator/index.d.ts +0 -5
  369. package/dist/types/definition-generator/index.d.ts.map +0 -1
  370. package/dist/types/index.d.ts +0 -15
  371. package/dist/types/index.d.ts.map +0 -1
  372. package/dist/types/lax/LaxSchemaConverter.d.ts +0 -10
  373. package/dist/types/lax/LaxSchemaConverter.d.ts.map +0 -1
  374. package/dist/types/lax/index.d.ts +0 -3
  375. package/dist/types/lax/index.d.ts.map +0 -1
  376. package/dist/types/lax/schema.d.ts +0 -285
  377. package/dist/types/lax/schema.d.ts.map +0 -1
  378. package/dist/types/model/NamingConventions.d.ts +0 -17
  379. package/dist/types/model/NamingConventions.d.ts.map +0 -1
  380. package/dist/types/model/index.d.ts +0 -4
  381. package/dist/types/model/index.d.ts.map +0 -1
  382. package/dist/types/model/modelUtils.d.ts +0 -28
  383. package/dist/types/model/modelUtils.d.ts.map +0 -1
  384. package/dist/types/model/resolveDefaultColumnType.d.ts +0 -3
  385. package/dist/types/model/resolveDefaultColumnType.d.ts.map +0 -1
  386. package/dist/types/schemaChecksum.d.ts +0 -3
  387. package/dist/types/schemaChecksum.d.ts.map +0 -1
  388. package/dist/types/schemaFilter.d.ts +0 -3
  389. package/dist/types/schemaFilter.d.ts.map +0 -1
  390. package/dist/types/schemaNormalizer.d.ts +0 -3
  391. package/dist/types/schemaNormalizer.d.ts.map +0 -1
  392. package/dist/types/tsconfig.tsbuildinfo +0 -1
  393. package/dist/types/type-schema/acl.d.ts +0 -10
  394. package/dist/types/type-schema/acl.d.ts.map +0 -1
  395. package/dist/types/type-schema/actions.d.ts +0 -32
  396. package/dist/types/type-schema/actions.d.ts.map +0 -1
  397. package/dist/types/type-schema/condition.d.ts +0 -4
  398. package/dist/types/type-schema/condition.d.ts.map +0 -1
  399. package/dist/types/type-schema/index.d.ts +0 -6
  400. package/dist/types/type-schema/index.d.ts.map +0 -1
  401. package/dist/types/type-schema/model.d.ts +0 -30
  402. package/dist/types/type-schema/model.d.ts.map +0 -1
  403. package/dist/types/type-schema/settings.d.ts +0 -41
  404. package/dist/types/type-schema/settings.d.ts.map +0 -1
  405. package/dist/types/type-schema/validation.d.ts +0 -15
  406. package/dist/types/type-schema/validation.d.ts.map +0 -1
  407. package/dist/types/type-schema/where.d.ts +0 -7
  408. package/dist/types/type-schema/where.d.ts.map +0 -1
  409. package/dist/types/utils/assertNever.d.ts +0 -2
  410. package/dist/types/utils/assertNever.d.ts.map +0 -1
  411. package/dist/types/utils/deepCompare.d.ts +0 -13
  412. package/dist/types/utils/deepCompare.d.ts.map +0 -1
  413. package/dist/types/utils/index.d.ts +0 -4
  414. package/dist/types/utils/index.d.ts.map +0 -1
  415. package/dist/types/utils/isIt.d.ts +0 -2
  416. package/dist/types/utils/isIt.d.ts.map +0 -1
  417. package/dist/types/utils/printJsValue.d.ts +0 -13
  418. package/dist/types/utils/printJsValue.d.ts.map +0 -1
  419. package/dist/types/validation/AclValidator.d.ts +0 -20
  420. package/dist/types/validation/AclValidator.d.ts.map +0 -1
  421. package/dist/types/validation/ActionsValidator.d.ts +0 -13
  422. package/dist/types/validation/ActionsValidator.d.ts.map +0 -1
  423. package/dist/types/validation/MembershipResolver.d.ts +0 -37
  424. package/dist/types/validation/MembershipResolver.d.ts.map +0 -1
  425. package/dist/types/validation/ModelValidator.d.ts +0 -20
  426. package/dist/types/validation/ModelValidator.d.ts.map +0 -1
  427. package/dist/types/validation/SchemaValidator.d.ts +0 -11
  428. package/dist/types/validation/SchemaValidator.d.ts.map +0 -1
  429. package/dist/types/validation/ValidationValidator.d.ts +0 -14
  430. package/dist/types/validation/ValidationValidator.d.ts.map +0 -1
  431. package/dist/types/validation/errors.d.ts +0 -14
  432. package/dist/types/validation/errors.d.ts.map +0 -1
  433. package/dist/types/validation/index.d.ts +0 -7
  434. package/dist/types/validation/index.d.ts.map +0 -1
  435. package/tests/cases/unit/schemas/.eslintignore +0 -1
@@ -1,42 +0,0 @@
1
- class Literal {
2
- constructor(value) {
3
- this.value = value;
4
- }
5
- }
6
- const printJsValue = (value, shouldIndentCb = () => false, path = []) => {
7
- if (value instanceof Literal) {
8
- return value.value;
9
- }
10
- if (value === void 0 || value === null || typeof value === "boolean" || typeof value === "number" || typeof value === "function") {
11
- return String(value);
12
- }
13
- if (typeof value === "bigint") {
14
- return value.toString(10) + "n";
15
- }
16
- if (typeof value === "string") {
17
- return `'${value.replaceAll(/'/g, "\\'")}'`;
18
- }
19
- const shouldIndent = shouldIndentCb(value, path);
20
- if (!shouldIndent) {
21
- shouldIndentCb = () => false;
22
- }
23
- const indent = (inc) => " ".repeat(path.length + inc);
24
- const nl = "\n";
25
- if (Array.isArray(value)) {
26
- return "[" + value.map(
27
- (it, index, arr) => (shouldIndent ? nl + indent(1) : "") + printJsValue(it, shouldIndentCb, [...path, { type: "array" }]) + (shouldIndent ? "," : index + 1 < arr.length ? ", " : "")
28
- ).join("") + (shouldIndent ? nl + indent(0) : "") + "]";
29
- }
30
- return "{" + (shouldIndent ? "" : " ") + Object.entries(value).map(([key, value2], index, arr) => {
31
- const formattedKey = isSimpleIdentifier(key) ? key : `[${printJsValue(key)}]`;
32
- return "" + (shouldIndent ? nl + indent(1) : "") + formattedKey + ": " + printJsValue(value2, shouldIndentCb, [...path, { type: "object", key }]) + (shouldIndent ? "," : index + 1 < arr.length ? ", " : "");
33
- }).join("") + (shouldIndent ? nl + indent(0) : " ") + "}";
34
- };
35
- const isSimpleIdentifier = (identifier) => {
36
- return !!identifier.match(/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/);
37
- };
38
- export {
39
- Literal,
40
- printJsValue
41
- };
42
- //# sourceMappingURL=printJsValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"printJsValue.js","sources":["../../../../../packages/schema-utils/src/utils/printJsValue.ts"],"sourcesContent":["export class Literal {\n\tconstructor(public readonly value: string) {\n\t}\n}\n\nexport type FormatterPath = ({ type: 'array' } | { type: 'object'; key: string })[]\nexport type IndentDecider = (value: any, path: FormatterPath) => boolean\n\n\nexport const printJsValue = (value: any, shouldIndentCb: IndentDecider = () => false, path: FormatterPath = []): string => {\n\tif (value instanceof Literal) {\n\t\treturn value.value\n\t}\n\tif (value === undefined || value === null || typeof value === 'boolean' || typeof value === 'number' || typeof value === 'function') {\n\t\treturn String(value)\n\t}\n\tif (typeof value === 'bigint') {\n\t\treturn value.toString(10) + 'n'\n\t}\n\tif (typeof value === 'string') {\n\t\treturn `'${value.replaceAll(/'/g, '\\\\\\'')}'`\n\t}\n\tconst shouldIndent = shouldIndentCb(value, path)\n\tif (!shouldIndent) {\n\t\tshouldIndentCb = () => false\n\t}\n\n\tconst indent = (inc: number) => '\\t'.repeat(path.length + inc)\n\tconst nl = '\\n'\n\n\tif (Array.isArray(value)) {\n\t\treturn ''\n\t\t\t\t+ '['\n\t\t\t\t+ value.map((it, index, arr) =>\n\t\t\t\t\t(shouldIndent ? nl + indent(1) : '')\n\t\t\t\t\t+ printJsValue(it, shouldIndentCb, [...path, { type: 'array' }])\n\t\t\t\t\t+ (shouldIndent ? ',' : ((index + 1) < arr.length ? ', ' : '')),\n\t\t\t\t).join('')\n\t\t\t\t+ (shouldIndent ? nl + indent(0) : '')\n\t\t\t\t+ ']'\n\t}\n\n\treturn ''\n\t\t\t+ '{'\n\t\t\t+ (shouldIndent ? '' : ' ')\n\t\t\t+ Object.entries(value).map(([key, value], index, arr) => {\n\t\t\t\tconst formattedKey = isSimpleIdentifier(key) ? key : `[${printJsValue(key)}]`\n\t\t\t\treturn ''\n\t\t\t\t\t+ (shouldIndent ? nl + indent(1) : '')\n\t\t\t\t\t+ formattedKey\n\t\t\t\t\t+ ': '\n\t\t\t\t\t+ printJsValue(value, shouldIndentCb, [...path, { type: 'object', key }])\n\t\t\t\t\t+ (shouldIndent ? ',' : ((index + 1) < arr.length ? ', ' : ''))\n\t\t\t}).join('')\n\t\t\t+ (shouldIndent ? nl + indent(0) : ' ')\n\t\t\t+ '}'\n\n}\n\nconst isSimpleIdentifier = (identifier: string): boolean => {\n\treturn !!identifier.match(/^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/)\n}\n"],"names":["value"],"mappings":"AAAO,MAAM,QAAQ;AAAA,EACpB,YAA4B,OAAe;AAAf,SAAA,QAAA;AAAA,EAAA;AAE7B;AAMa,MAAA,eAAe,CAAC,OAAY,iBAAgC,MAAM,OAAO,OAAsB,OAAe;AAC1H,MAAI,iBAAiB,SAAS;AAC7B,WAAO,MAAM;AAAA,EAAA;AAEd,MAAI,UAAU,UAAa,UAAU,QAAQ,OAAO,UAAU,aAAa,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY;AACpI,WAAO,OAAO,KAAK;AAAA,EAAA;AAEhB,MAAA,OAAO,UAAU,UAAU;AACvB,WAAA,MAAM,SAAS,EAAE,IAAI;AAAA,EAAA;AAEzB,MAAA,OAAO,UAAU,UAAU;AAC9B,WAAO,IAAI,MAAM,WAAW,MAAM,KAAM,CAAC;AAAA,EAAA;AAEpC,QAAA,eAAe,eAAe,OAAO,IAAI;AAC/C,MAAI,CAAC,cAAc;AAClB,qBAAiB,MAAM;AAAA,EAAA;AAGxB,QAAM,SAAS,CAAC,QAAgB,IAAK,OAAO,KAAK,SAAS,GAAG;AAC7D,QAAM,KAAK;AAEP,MAAA,MAAM,QAAQ,KAAK,GAAG;AACzB,WAAQ,MAEJ,MAAM;AAAA,MAAI,CAAC,IAAI,OAAO,SACtB,eAAe,KAAK,OAAO,CAAC,IAAI,MAC/B,aAAa,IAAI,gBAAgB,CAAC,GAAG,MAAM,EAAE,MAAM,QAAS,CAAA,CAAC,KAC5D,eAAe,MAAQ,QAAQ,IAAK,IAAI,SAAS,OAAO;AAAA,IAAA,EAC1D,KAAK,EAAE,KACN,eAAe,KAAK,OAAO,CAAC,IAAI,MACjC;AAAA,EAAA;AAGL,SAAO,OAEF,eAAe,KAAK,OACrB,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAKA,MAAK,GAAG,OAAO,QAAQ;AACnD,UAAA,eAAe,mBAAmB,GAAG,IAAI,MAAM,IAAI,aAAa,GAAG,CAAC;AAC1E,WAAO,MACH,eAAe,KAAK,OAAO,CAAC,IAAI,MACjC,eACA,OACA,aAAaA,QAAO,gBAAgB,CAAC,GAAG,MAAM,EAAE,MAAM,UAAU,IAAK,CAAA,CAAC,KACrE,eAAe,MAAQ,QAAQ,IAAK,IAAI,SAAS,OAAO;AAAA,EAAA,CAC5D,EAAE,KAAK,EAAE,KACP,eAAe,KAAK,OAAO,CAAC,IAAI,OACjC;AAEL;AAEA,MAAM,qBAAqB,CAAC,eAAgC;AAC3D,SAAO,CAAC,CAAC,WAAW,MAAM,kDAAkD;AAC7E;"}
@@ -1,168 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- require("@contember/schema");
4
- const PredicateDefinitionProcessor = require("../acl/PredicateDefinitionProcessor.cjs");
5
- const modelUtils = require("../model/modelUtils.cjs");
6
- const errors = require("./errors.cjs");
7
- require("../type-schema/acl.cjs");
8
- const condition = require("../type-schema/condition.cjs");
9
- require("../type-schema/model.cjs");
10
- require("../type-schema/settings.cjs");
11
- require("../type-schema/validation.cjs");
12
- class AclValidator {
13
- constructor(model) {
14
- this.model = model;
15
- }
16
- validate(schema) {
17
- const errorBuilder = new errors.ErrorBuilder([], ["acl"]);
18
- this.validateRoles(schema.roles, errorBuilder);
19
- return errorBuilder.errors;
20
- }
21
- validateRoles(roles, errorBuilder) {
22
- for (const role in roles) {
23
- if (!roles.hasOwnProperty(role)) {
24
- continue;
25
- }
26
- this.validateRolePermissions(roles[role], Object.keys(roles), errorBuilder.for(role));
27
- }
28
- }
29
- validateRolePermissions(permissions, roles, errorBuilder) {
30
- this.validateInherits(permissions.inherits, roles, errorBuilder.for("inherits"));
31
- this.validateVariables(permissions.variables, errorBuilder.for("variables"));
32
- this.validatePermissions(permissions.entities, permissions.variables || {}, errorBuilder.for("entities"));
33
- }
34
- validateInherits(inherits, roles, errorBuilder) {
35
- if (inherits === void 0) {
36
- return void 0;
37
- }
38
- for (const inheritsFrom of inherits) {
39
- if (!roles.includes(inheritsFrom)) {
40
- errorBuilder.for(inheritsFrom).add("ACL_UNDEFINED_ROLE", "Referenced role not exists.");
41
- }
42
- }
43
- }
44
- validateVariables(variables, errorBuilder) {
45
- for (const varName in variables) {
46
- if (!variables.hasOwnProperty(varName)) {
47
- continue;
48
- }
49
- this.validateVariable(variables[varName], errorBuilder.for(varName));
50
- }
51
- }
52
- validateVariable(variable, errorBuilder) {
53
- switch (variable.type) {
54
- case "entity":
55
- if (!this.model.entities[variable.entityName]) {
56
- errorBuilder.add("ACL_UNDEFINED_ENTITY", `Entity "${variable.entityName}" not found`);
57
- return;
58
- }
59
- }
60
- return;
61
- }
62
- validatePermissions(permissions, variables, errorBuilder) {
63
- for (const entityName in permissions) {
64
- if (!permissions.hasOwnProperty(entityName)) {
65
- continue;
66
- }
67
- if (!this.model.entities[entityName]) {
68
- errorBuilder.add("ACL_UNDEFINED_ENTITY", `Entity ${entityName} not found`);
69
- continue;
70
- }
71
- const entity = modelUtils.getEntity(this.model, entityName);
72
- this.validateEntityPermissions(
73
- permissions[entityName],
74
- entity,
75
- variables,
76
- errorBuilder.for(entityName)
77
- );
78
- }
79
- }
80
- validateEntityPermissions(entityPermissions, entity, variables, errorBuilder) {
81
- this.validatePredicates(
82
- entityPermissions.predicates,
83
- entity,
84
- variables,
85
- errorBuilder.for("predicates")
86
- );
87
- this.validateOperations(
88
- entityPermissions.operations,
89
- entity,
90
- entityPermissions.predicates,
91
- errorBuilder.for("operations")
92
- );
93
- }
94
- validatePredicates(predicates, entity, variables, errorBuilder) {
95
- for (const predicateName in predicates) {
96
- if (!predicates.hasOwnProperty(predicateName)) {
97
- continue;
98
- }
99
- this.validatePredicateDefinition(
100
- predicates[predicateName],
101
- entity,
102
- variables,
103
- errorBuilder.for(predicateName)
104
- );
105
- }
106
- }
107
- validatePredicateDefinition(predicate, entity, variables, errorBuilder) {
108
- const processor = new PredicateDefinitionProcessor.PredicateDefinitionProcessor(this.model);
109
- processor.process(entity, predicate, {
110
- handleColumn: (ctx) => {
111
- if (typeof ctx.value === "string") {
112
- if (!variables[ctx.value]) {
113
- errorBuilder.for(...ctx.path).add("ACL_UNDEFINED_VARIABLE", `Undefined variable ${ctx.value}`);
114
- }
115
- } else {
116
- try {
117
- condition.conditionSchema(ctx.column.type)(ctx.value);
118
- } catch (e) {
119
- errorBuilder.for(...ctx.path).add("ACL_INVALID_CONDITION", `Invalid condition (${e.message}): ${JSON.stringify(ctx.value)}`);
120
- }
121
- }
122
- return ctx.value;
123
- },
124
- handleRelation: (ctx) => {
125
- if (typeof ctx.value === "string" && !variables[ctx.value]) {
126
- errorBuilder.for(...ctx.path).add("ACL_UNDEFINED_VARIABLE", `Undefined variable ${ctx.value}`);
127
- }
128
- return ctx.value;
129
- },
130
- handleUndefinedField: (ctx) => {
131
- errorBuilder.for(...ctx.path).add("ACL_UNDEFINED_FIELD", `Undefined field ${ctx.name} on entity ${ctx.entity.name}`);
132
- return ctx.value;
133
- }
134
- });
135
- }
136
- validateOperations(operations, entity, predicates, errorBuilder) {
137
- if (operations.delete !== void 0) {
138
- this.validatePredicate(operations.delete, predicates, errorBuilder.for("delete"));
139
- }
140
- for (const op of ["read", "create", "update"]) {
141
- const operation = operations[op];
142
- if (operation !== void 0) {
143
- this.validateFieldPermissions(operation, entity, predicates, errorBuilder.for(op));
144
- }
145
- }
146
- }
147
- validateFieldPermissions(permissions, entity, predicates, errorBuilder) {
148
- for (const field in permissions) {
149
- if (!permissions.hasOwnProperty(field)) {
150
- continue;
151
- }
152
- if (!entity.fields[field]) {
153
- errorBuilder.add("ACL_UNDEFINED_FIELD", `Field ${field} not found on entity ${entity.name}`);
154
- }
155
- this.validatePredicate(permissions[field], predicates, errorBuilder.for(field));
156
- }
157
- }
158
- validatePredicate(predicate, predicates, errorBuilder) {
159
- if (predicate === false || predicate === true) {
160
- return;
161
- }
162
- if (!predicates[predicate]) {
163
- errorBuilder.add("ACL_UNDEFINED_PREDICATE", `Predicate ${predicate} not found`);
164
- }
165
- }
166
- }
167
- exports.AclValidator = AclValidator;
168
- //# sourceMappingURL=AclValidator.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AclValidator.cjs","sources":["../../../../../packages/schema-utils/src/validation/AclValidator.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '../acl'\nimport { getEntity } from '../model'\nimport { ErrorBuilder, ValidationError } from './errors'\nimport { conditionSchema } from '../type-schema'\n\n\nexport class AclValidator {\n\tconstructor(private readonly model: Model.Schema) {}\n\n\tpublic validate(schema: Acl.Schema): ValidationError[] {\n\t\tconst errorBuilder = new ErrorBuilder([], ['acl'])\n\t\tthis.validateRoles(schema.roles, errorBuilder)\n\t\treturn errorBuilder.errors\n\t}\n\n\tprivate validateRoles(roles: Acl.Roles, errorBuilder: ErrorBuilder): void {\n\t\tfor (const role in roles) {\n\t\t\tif (!roles.hasOwnProperty(role)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthis.validateRolePermissions(roles[role], Object.keys(roles), errorBuilder.for(role))\n\t\t}\n\t}\n\n\tprivate validateRolePermissions(\n\t\tpermissions: Acl.RolePermissions,\n\t\troles: string[],\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\n\t\tthis.validateInherits(permissions.inherits, roles, errorBuilder.for('inherits'))\n\t\tthis.validateVariables(permissions.variables, errorBuilder.for('variables'))\n\t\tthis.validatePermissions(permissions.entities, (permissions.variables as Acl.Variables) || {}, errorBuilder.for('entities'))\n\t\t// todo: plugins validation\n\t}\n\n\tprivate validateInherits(inherits: Acl.RolePermissions['inherits'], roles: string[], errorBuilder: ErrorBuilder): void {\n\t\tif (inherits === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tfor (const inheritsFrom of inherits) {\n\t\t\tif (!roles.includes(inheritsFrom)) {\n\t\t\t\terrorBuilder.for(inheritsFrom).add('ACL_UNDEFINED_ROLE', 'Referenced role not exists.')\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateVariables(variables: Acl.Variables, errorBuilder: ErrorBuilder): void {\n\t\tfor (const varName in variables) {\n\t\t\tif (!variables.hasOwnProperty(varName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthis.validateVariable(variables[varName], errorBuilder.for(varName))\n\t\t}\n\t}\n\n\tprivate validateVariable(variable: Acl.Variable, errorBuilder: ErrorBuilder): void {\n\t\tswitch (variable.type) {\n\t\t\tcase 'entity':\n\t\t\t\tif (!this.model.entities[variable.entityName]) {\n\t\t\t\t\terrorBuilder.add('ACL_UNDEFINED_ENTITY', `Entity \"${variable.entityName}\" not found`)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tprivate validatePermissions(permissions: Acl.Permissions, variables: Acl.Variables, errorBuilder: ErrorBuilder): void {\n\t\tfor (const entityName in permissions) {\n\t\t\tif (!permissions.hasOwnProperty(entityName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!this.model.entities[entityName]) {\n\t\t\t\terrorBuilder.add('ACL_UNDEFINED_ENTITY', `Entity ${entityName} not found`)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst entity = getEntity(this.model, entityName)\n\n\t\t\tthis.validateEntityPermissions(\n\t\t\t\tpermissions[entityName],\n\t\t\t\tentity,\n\t\t\t\tvariables,\n\t\t\t\terrorBuilder.for(entityName),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate validateEntityPermissions(\n\t\tentityPermissions: Acl.EntityPermissions,\n\t\tentity: Model.Entity,\n\t\tvariables: Acl.Variables,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tthis.validatePredicates(\n\t\t\tentityPermissions.predicates,\n\t\t\tentity,\n\t\t\tvariables,\n\t\t\terrorBuilder.for('predicates'),\n\t\t)\n\t\tthis.validateOperations(\n\t\t\tentityPermissions.operations,\n\t\t\tentity,\n\t\t\tentityPermissions.predicates as Acl.PredicateMap,\n\t\t\terrorBuilder.for('operations'),\n\t\t)\n\t}\n\n\tprivate validatePredicates(predicates: Acl.PredicateMap, entity: Model.Entity, variables: Acl.Variables, errorBuilder: ErrorBuilder): void {\n\t\tfor (const predicateName in predicates) {\n\t\t\tif (!predicates.hasOwnProperty(predicateName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthis.validatePredicateDefinition(\n\t\t\t\tpredicates[predicateName],\n\t\t\t\tentity,\n\t\t\t\tvariables,\n\t\t\t\terrorBuilder.for(predicateName),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate validatePredicateDefinition(\n\t\tpredicate: Acl.PredicateDefinition,\n\t\tentity: Model.Entity,\n\t\tvariables: Acl.Variables,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tconst processor = new PredicateDefinitionProcessor(this.model)\n\t\tprocessor.process(entity, predicate, {\n\t\t\thandleColumn: ctx => {\n\t\t\t\tif (typeof ctx.value === 'string') {\n\t\t\t\t\tif (!variables[ctx.value]) {\n\t\t\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_UNDEFINED_VARIABLE', `Undefined variable ${ctx.value}`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconditionSchema(ctx.column.type)(ctx.value)\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_INVALID_CONDITION', `Invalid condition (${e.message}): ${JSON.stringify(ctx.value)}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation: ctx => {\n\t\t\t\tif (typeof ctx.value === 'string' && !variables[ctx.value]) {\n\t\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_UNDEFINED_VARIABLE', `Undefined variable ${ctx.value}`)\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleUndefinedField: ctx => {\n\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_UNDEFINED_FIELD', `Undefined field ${ctx.name} on entity ${ctx.entity.name}`)\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate validateOperations(\n\t\toperations: Acl.EntityOperations,\n\t\tentity: Model.Entity,\n\t\tpredicates: Acl.PredicateDefinition,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tif (operations.delete !== undefined) {\n\t\t\tthis.validatePredicate(operations.delete, predicates, errorBuilder.for('delete'))\n\t\t}\n\t\tfor (const op of ['read', 'create', 'update'] as const) {\n\t\t\tconst operation = operations[op]\n\t\t\tif (operation !== undefined) {\n\t\t\t\tthis.validateFieldPermissions(operation, entity, predicates, errorBuilder.for(op))\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateFieldPermissions(\n\t\tpermissions: Acl.FieldPermissions,\n\t\tentity: Model.Entity,\n\t\tpredicates: Acl.PredicateDefinition,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tfor (const field in permissions) {\n\t\t\tif (!permissions.hasOwnProperty(field)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!entity.fields[field]) {\n\t\t\t\terrorBuilder.add('ACL_UNDEFINED_FIELD', `Field ${field} not found on entity ${entity.name}`)\n\t\t\t}\n\t\t\tthis.validatePredicate(permissions[field], predicates, errorBuilder.for(field))\n\t\t}\n\t}\n\n\tprivate validatePredicate(\n\t\tpredicate: Acl.Predicate,\n\t\tpredicates: Acl.PredicateDefinition,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tif (predicate === false || predicate === true) {\n\t\t\treturn\n\t\t}\n\t\tif (!predicates[predicate]) {\n\t\t\terrorBuilder.add('ACL_UNDEFINED_PREDICATE', `Predicate ${predicate} not found`)\n\t\t}\n\t}\n}\n"],"names":["ErrorBuilder","getEntity","PredicateDefinitionProcessor","conditionSchema"],"mappings":"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"}
@@ -1,168 +0,0 @@
1
- import "@contember/schema";
2
- import { PredicateDefinitionProcessor } from "../acl/PredicateDefinitionProcessor.js";
3
- import { getEntity } from "../model/modelUtils.js";
4
- import { ErrorBuilder } from "./errors.js";
5
- import "../type-schema/acl.js";
6
- import { conditionSchema } from "../type-schema/condition.js";
7
- import "../type-schema/model.js";
8
- import "../type-schema/settings.js";
9
- import "../type-schema/validation.js";
10
- class AclValidator {
11
- constructor(model) {
12
- this.model = model;
13
- }
14
- validate(schema) {
15
- const errorBuilder = new ErrorBuilder([], ["acl"]);
16
- this.validateRoles(schema.roles, errorBuilder);
17
- return errorBuilder.errors;
18
- }
19
- validateRoles(roles, errorBuilder) {
20
- for (const role in roles) {
21
- if (!roles.hasOwnProperty(role)) {
22
- continue;
23
- }
24
- this.validateRolePermissions(roles[role], Object.keys(roles), errorBuilder.for(role));
25
- }
26
- }
27
- validateRolePermissions(permissions, roles, errorBuilder) {
28
- this.validateInherits(permissions.inherits, roles, errorBuilder.for("inherits"));
29
- this.validateVariables(permissions.variables, errorBuilder.for("variables"));
30
- this.validatePermissions(permissions.entities, permissions.variables || {}, errorBuilder.for("entities"));
31
- }
32
- validateInherits(inherits, roles, errorBuilder) {
33
- if (inherits === void 0) {
34
- return void 0;
35
- }
36
- for (const inheritsFrom of inherits) {
37
- if (!roles.includes(inheritsFrom)) {
38
- errorBuilder.for(inheritsFrom).add("ACL_UNDEFINED_ROLE", "Referenced role not exists.");
39
- }
40
- }
41
- }
42
- validateVariables(variables, errorBuilder) {
43
- for (const varName in variables) {
44
- if (!variables.hasOwnProperty(varName)) {
45
- continue;
46
- }
47
- this.validateVariable(variables[varName], errorBuilder.for(varName));
48
- }
49
- }
50
- validateVariable(variable, errorBuilder) {
51
- switch (variable.type) {
52
- case "entity":
53
- if (!this.model.entities[variable.entityName]) {
54
- errorBuilder.add("ACL_UNDEFINED_ENTITY", `Entity "${variable.entityName}" not found`);
55
- return;
56
- }
57
- }
58
- return;
59
- }
60
- validatePermissions(permissions, variables, errorBuilder) {
61
- for (const entityName in permissions) {
62
- if (!permissions.hasOwnProperty(entityName)) {
63
- continue;
64
- }
65
- if (!this.model.entities[entityName]) {
66
- errorBuilder.add("ACL_UNDEFINED_ENTITY", `Entity ${entityName} not found`);
67
- continue;
68
- }
69
- const entity = getEntity(this.model, entityName);
70
- this.validateEntityPermissions(
71
- permissions[entityName],
72
- entity,
73
- variables,
74
- errorBuilder.for(entityName)
75
- );
76
- }
77
- }
78
- validateEntityPermissions(entityPermissions, entity, variables, errorBuilder) {
79
- this.validatePredicates(
80
- entityPermissions.predicates,
81
- entity,
82
- variables,
83
- errorBuilder.for("predicates")
84
- );
85
- this.validateOperations(
86
- entityPermissions.operations,
87
- entity,
88
- entityPermissions.predicates,
89
- errorBuilder.for("operations")
90
- );
91
- }
92
- validatePredicates(predicates, entity, variables, errorBuilder) {
93
- for (const predicateName in predicates) {
94
- if (!predicates.hasOwnProperty(predicateName)) {
95
- continue;
96
- }
97
- this.validatePredicateDefinition(
98
- predicates[predicateName],
99
- entity,
100
- variables,
101
- errorBuilder.for(predicateName)
102
- );
103
- }
104
- }
105
- validatePredicateDefinition(predicate, entity, variables, errorBuilder) {
106
- const processor = new PredicateDefinitionProcessor(this.model);
107
- processor.process(entity, predicate, {
108
- handleColumn: (ctx) => {
109
- if (typeof ctx.value === "string") {
110
- if (!variables[ctx.value]) {
111
- errorBuilder.for(...ctx.path).add("ACL_UNDEFINED_VARIABLE", `Undefined variable ${ctx.value}`);
112
- }
113
- } else {
114
- try {
115
- conditionSchema(ctx.column.type)(ctx.value);
116
- } catch (e) {
117
- errorBuilder.for(...ctx.path).add("ACL_INVALID_CONDITION", `Invalid condition (${e.message}): ${JSON.stringify(ctx.value)}`);
118
- }
119
- }
120
- return ctx.value;
121
- },
122
- handleRelation: (ctx) => {
123
- if (typeof ctx.value === "string" && !variables[ctx.value]) {
124
- errorBuilder.for(...ctx.path).add("ACL_UNDEFINED_VARIABLE", `Undefined variable ${ctx.value}`);
125
- }
126
- return ctx.value;
127
- },
128
- handleUndefinedField: (ctx) => {
129
- errorBuilder.for(...ctx.path).add("ACL_UNDEFINED_FIELD", `Undefined field ${ctx.name} on entity ${ctx.entity.name}`);
130
- return ctx.value;
131
- }
132
- });
133
- }
134
- validateOperations(operations, entity, predicates, errorBuilder) {
135
- if (operations.delete !== void 0) {
136
- this.validatePredicate(operations.delete, predicates, errorBuilder.for("delete"));
137
- }
138
- for (const op of ["read", "create", "update"]) {
139
- const operation = operations[op];
140
- if (operation !== void 0) {
141
- this.validateFieldPermissions(operation, entity, predicates, errorBuilder.for(op));
142
- }
143
- }
144
- }
145
- validateFieldPermissions(permissions, entity, predicates, errorBuilder) {
146
- for (const field in permissions) {
147
- if (!permissions.hasOwnProperty(field)) {
148
- continue;
149
- }
150
- if (!entity.fields[field]) {
151
- errorBuilder.add("ACL_UNDEFINED_FIELD", `Field ${field} not found on entity ${entity.name}`);
152
- }
153
- this.validatePredicate(permissions[field], predicates, errorBuilder.for(field));
154
- }
155
- }
156
- validatePredicate(predicate, predicates, errorBuilder) {
157
- if (predicate === false || predicate === true) {
158
- return;
159
- }
160
- if (!predicates[predicate]) {
161
- errorBuilder.add("ACL_UNDEFINED_PREDICATE", `Predicate ${predicate} not found`);
162
- }
163
- }
164
- }
165
- export {
166
- AclValidator
167
- };
168
- //# sourceMappingURL=AclValidator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AclValidator.js","sources":["../../../../../packages/schema-utils/src/validation/AclValidator.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '../acl'\nimport { getEntity } from '../model'\nimport { ErrorBuilder, ValidationError } from './errors'\nimport { conditionSchema } from '../type-schema'\n\n\nexport class AclValidator {\n\tconstructor(private readonly model: Model.Schema) {}\n\n\tpublic validate(schema: Acl.Schema): ValidationError[] {\n\t\tconst errorBuilder = new ErrorBuilder([], ['acl'])\n\t\tthis.validateRoles(schema.roles, errorBuilder)\n\t\treturn errorBuilder.errors\n\t}\n\n\tprivate validateRoles(roles: Acl.Roles, errorBuilder: ErrorBuilder): void {\n\t\tfor (const role in roles) {\n\t\t\tif (!roles.hasOwnProperty(role)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthis.validateRolePermissions(roles[role], Object.keys(roles), errorBuilder.for(role))\n\t\t}\n\t}\n\n\tprivate validateRolePermissions(\n\t\tpermissions: Acl.RolePermissions,\n\t\troles: string[],\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\n\t\tthis.validateInherits(permissions.inherits, roles, errorBuilder.for('inherits'))\n\t\tthis.validateVariables(permissions.variables, errorBuilder.for('variables'))\n\t\tthis.validatePermissions(permissions.entities, (permissions.variables as Acl.Variables) || {}, errorBuilder.for('entities'))\n\t\t// todo: plugins validation\n\t}\n\n\tprivate validateInherits(inherits: Acl.RolePermissions['inherits'], roles: string[], errorBuilder: ErrorBuilder): void {\n\t\tif (inherits === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tfor (const inheritsFrom of inherits) {\n\t\t\tif (!roles.includes(inheritsFrom)) {\n\t\t\t\terrorBuilder.for(inheritsFrom).add('ACL_UNDEFINED_ROLE', 'Referenced role not exists.')\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateVariables(variables: Acl.Variables, errorBuilder: ErrorBuilder): void {\n\t\tfor (const varName in variables) {\n\t\t\tif (!variables.hasOwnProperty(varName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthis.validateVariable(variables[varName], errorBuilder.for(varName))\n\t\t}\n\t}\n\n\tprivate validateVariable(variable: Acl.Variable, errorBuilder: ErrorBuilder): void {\n\t\tswitch (variable.type) {\n\t\t\tcase 'entity':\n\t\t\t\tif (!this.model.entities[variable.entityName]) {\n\t\t\t\t\terrorBuilder.add('ACL_UNDEFINED_ENTITY', `Entity \"${variable.entityName}\" not found`)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tprivate validatePermissions(permissions: Acl.Permissions, variables: Acl.Variables, errorBuilder: ErrorBuilder): void {\n\t\tfor (const entityName in permissions) {\n\t\t\tif (!permissions.hasOwnProperty(entityName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!this.model.entities[entityName]) {\n\t\t\t\terrorBuilder.add('ACL_UNDEFINED_ENTITY', `Entity ${entityName} not found`)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst entity = getEntity(this.model, entityName)\n\n\t\t\tthis.validateEntityPermissions(\n\t\t\t\tpermissions[entityName],\n\t\t\t\tentity,\n\t\t\t\tvariables,\n\t\t\t\terrorBuilder.for(entityName),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate validateEntityPermissions(\n\t\tentityPermissions: Acl.EntityPermissions,\n\t\tentity: Model.Entity,\n\t\tvariables: Acl.Variables,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tthis.validatePredicates(\n\t\t\tentityPermissions.predicates,\n\t\t\tentity,\n\t\t\tvariables,\n\t\t\terrorBuilder.for('predicates'),\n\t\t)\n\t\tthis.validateOperations(\n\t\t\tentityPermissions.operations,\n\t\t\tentity,\n\t\t\tentityPermissions.predicates as Acl.PredicateMap,\n\t\t\terrorBuilder.for('operations'),\n\t\t)\n\t}\n\n\tprivate validatePredicates(predicates: Acl.PredicateMap, entity: Model.Entity, variables: Acl.Variables, errorBuilder: ErrorBuilder): void {\n\t\tfor (const predicateName in predicates) {\n\t\t\tif (!predicates.hasOwnProperty(predicateName)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthis.validatePredicateDefinition(\n\t\t\t\tpredicates[predicateName],\n\t\t\t\tentity,\n\t\t\t\tvariables,\n\t\t\t\terrorBuilder.for(predicateName),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate validatePredicateDefinition(\n\t\tpredicate: Acl.PredicateDefinition,\n\t\tentity: Model.Entity,\n\t\tvariables: Acl.Variables,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tconst processor = new PredicateDefinitionProcessor(this.model)\n\t\tprocessor.process(entity, predicate, {\n\t\t\thandleColumn: ctx => {\n\t\t\t\tif (typeof ctx.value === 'string') {\n\t\t\t\t\tif (!variables[ctx.value]) {\n\t\t\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_UNDEFINED_VARIABLE', `Undefined variable ${ctx.value}`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconditionSchema(ctx.column.type)(ctx.value)\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_INVALID_CONDITION', `Invalid condition (${e.message}): ${JSON.stringify(ctx.value)}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation: ctx => {\n\t\t\t\tif (typeof ctx.value === 'string' && !variables[ctx.value]) {\n\t\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_UNDEFINED_VARIABLE', `Undefined variable ${ctx.value}`)\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleUndefinedField: ctx => {\n\t\t\t\terrorBuilder.for(...ctx.path).add('ACL_UNDEFINED_FIELD', `Undefined field ${ctx.name} on entity ${ctx.entity.name}`)\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate validateOperations(\n\t\toperations: Acl.EntityOperations,\n\t\tentity: Model.Entity,\n\t\tpredicates: Acl.PredicateDefinition,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tif (operations.delete !== undefined) {\n\t\t\tthis.validatePredicate(operations.delete, predicates, errorBuilder.for('delete'))\n\t\t}\n\t\tfor (const op of ['read', 'create', 'update'] as const) {\n\t\t\tconst operation = operations[op]\n\t\t\tif (operation !== undefined) {\n\t\t\t\tthis.validateFieldPermissions(operation, entity, predicates, errorBuilder.for(op))\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateFieldPermissions(\n\t\tpermissions: Acl.FieldPermissions,\n\t\tentity: Model.Entity,\n\t\tpredicates: Acl.PredicateDefinition,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tfor (const field in permissions) {\n\t\t\tif (!permissions.hasOwnProperty(field)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!entity.fields[field]) {\n\t\t\t\terrorBuilder.add('ACL_UNDEFINED_FIELD', `Field ${field} not found on entity ${entity.name}`)\n\t\t\t}\n\t\t\tthis.validatePredicate(permissions[field], predicates, errorBuilder.for(field))\n\t\t}\n\t}\n\n\tprivate validatePredicate(\n\t\tpredicate: Acl.Predicate,\n\t\tpredicates: Acl.PredicateDefinition,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tif (predicate === false || predicate === true) {\n\t\t\treturn\n\t\t}\n\t\tif (!predicates[predicate]) {\n\t\t\terrorBuilder.add('ACL_UNDEFINED_PREDICATE', `Predicate ${predicate} not found`)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -1,127 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const modelUtils = require("../model/modelUtils.cjs");
4
- require("@contember/schema");
5
- const assertNever = require("../utils/assertNever.cjs");
6
- const errors = require("./errors.cjs");
7
- const Typesafe = require("@contember/typesafe");
8
- const where = require("../type-schema/where.cjs");
9
- function _interopNamespaceDefault(e) {
10
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
11
- if (e) {
12
- for (const k in e) {
13
- if (k !== "default") {
14
- const d = Object.getOwnPropertyDescriptor(e, k);
15
- Object.defineProperty(n, k, d.get ? d : {
16
- enumerable: true,
17
- get: () => e[k]
18
- });
19
- }
20
- }
21
- }
22
- n.default = e;
23
- return Object.freeze(n);
24
- }
25
- const Typesafe__namespace = /* @__PURE__ */ _interopNamespaceDefault(Typesafe);
26
- const manyArgsSchema = (args) => Typesafe__namespace.partial({
27
- limit: Typesafe__namespace.integer,
28
- offset: Typesafe__namespace.integer,
29
- orderBy: Typesafe__namespace.array(Typesafe__namespace.anyJsonObject),
30
- filter: where.whereSchema(args)
31
- });
32
- class ActionsValidator {
33
- constructor(model) {
34
- this.model = model;
35
- }
36
- validate(schema) {
37
- const errorBuilder = new errors.ErrorBuilder([], ["actions"]);
38
- this.validateTriggers(schema, errorBuilder.for("triggers"));
39
- return errorBuilder.errors;
40
- }
41
- validateTriggers(schema, errorBuilder) {
42
- for (const [name, def] of Object.entries(schema.triggers)) {
43
- const triggerErrorBuilder = errorBuilder.for(name);
44
- if (name !== def.name) {
45
- triggerErrorBuilder.add("ACTIONS_NAME_MISMATCH", `Trigger name ${def.name} does not match the name in a map ${name}`);
46
- }
47
- if (!schema.targets[def.target]) {
48
- triggerErrorBuilder.add("ACTIONS_UNDEFINED_TRIGGER_TARGET", `Trigger target ${def.target} not found`);
49
- }
50
- this.validateTrigger(def, triggerErrorBuilder);
51
- }
52
- }
53
- validateTrigger(trigger, errorBuilder) {
54
- const entity = this.model.entities[trigger.entity];
55
- if (!entity) {
56
- errorBuilder.add("ACTIONS_UNDEFINED_ENTITY", `Entity ${trigger.entity} not found.`);
57
- return;
58
- }
59
- switch (trigger.type) {
60
- case "watch":
61
- this.validateWatchTrigger(trigger, entity, errorBuilder);
62
- break;
63
- case "basic":
64
- this.validateBasicTrigger(trigger, entity, errorBuilder);
65
- break;
66
- default:
67
- assertNever.assertNever();
68
- }
69
- }
70
- validateWatchTrigger(trigger, entity, errorBuilder) {
71
- this.validateSelection(trigger.watch, entity, errorBuilder.for("watch"));
72
- if (trigger.selection) {
73
- this.validateSelection(trigger.selection, entity, errorBuilder.for("selection"));
74
- }
75
- }
76
- validateBasicTrigger(trigger, entity, errorBuilder) {
77
- if (trigger.selection) {
78
- this.validateSelection(trigger.selection, entity, errorBuilder.for("selection"));
79
- }
80
- if (Array.isArray(trigger.update)) {
81
- for (const field of trigger.update) {
82
- if (!entity.fields[field]) {
83
- errorBuilder.for("update").add("ACTIONS_UNDEFINED_FIELD", `Field ${field} of entity ${entity.name} not found.`);
84
- }
85
- }
86
- }
87
- }
88
- validateSelection(selectionNode, entity, errorBuilder) {
89
- for (const part of selectionNode) {
90
- const [field, args, selection] = Array.isArray(part) ? part : [part, {}, []];
91
- const fieldErrorBuilder = errorBuilder.for(field);
92
- if (!entity.fields[field]) {
93
- fieldErrorBuilder.add("ACTIONS_UNDEFINED_FIELD", `Undefined field ${field} on entity ${entity.name}`);
94
- continue;
95
- }
96
- modelUtils.acceptFieldVisitor(this.model, entity, field, {
97
- visitColumn: () => {
98
- if (selection.length) {
99
- fieldErrorBuilder.add("ACTIONS_INVALID_SELECTION", `Unexpected sub selection on a column.`);
100
- }
101
- if (Object.keys(args).length !== 0) {
102
- fieldErrorBuilder.add("ACTIONS_INVALID_SELECTION", `Unexpected args on a column.`);
103
- }
104
- },
105
- visitHasMany: ({ targetEntity }) => {
106
- if (selection.length === 0) {
107
- fieldErrorBuilder.add("ACTIONS_INVALID_SELECTION", `Sub-selection expected on a relation.`);
108
- }
109
- this.validateSelection(selection, targetEntity, fieldErrorBuilder);
110
- try {
111
- manyArgsSchema({ schema: this.model, entity: targetEntity })(args);
112
- } catch (e) {
113
- fieldErrorBuilder.add("ACTIONS_INVALID_SELECTION", `Selection args are not valid: ` + e.message);
114
- }
115
- },
116
- visitHasOne: ({ targetEntity }) => {
117
- if (selection.length === 0) {
118
- fieldErrorBuilder.add("ACTIONS_INVALID_SELECTION", `Sub-selection expected on a relation.`);
119
- }
120
- this.validateSelection(selection, targetEntity, fieldErrorBuilder);
121
- }
122
- });
123
- }
124
- }
125
- }
126
- exports.ActionsValidator = ActionsValidator;
127
- //# sourceMappingURL=ActionsValidator.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ActionsValidator.cjs","sources":["../../../../../packages/schema-utils/src/validation/ActionsValidator.ts"],"sourcesContent":["import { Actions, Model } from '@contember/schema'\nimport { acceptFieldVisitor } from '../model'\nimport { ErrorBuilder, ValidationError } from './errors'\nimport { assertNever } from '../utils'\nimport * as Typesafe from '@contember/typesafe'\nimport { whereSchema } from '../type-schema/where'\n\nconst manyArgsSchema = (args: {schema: Model.Schema; entity: Model.Entity}) => Typesafe.partial({\n\tlimit: Typesafe.integer,\n\toffset: Typesafe.integer,\n\torderBy: Typesafe.array(Typesafe.anyJsonObject),\n\tfilter: whereSchema(args),\n})\n\nexport class ActionsValidator {\n\tconstructor(private readonly model: Model.Schema) {}\n\n\tpublic validate(schema: Actions.Schema): ValidationError[] {\n\t\tconst errorBuilder = new ErrorBuilder([], ['actions'])\n\t\tthis.validateTriggers(schema, errorBuilder.for('triggers'))\n\t\treturn errorBuilder.errors\n\t}\n\n\tprivate validateTriggers(schema: Actions.Schema, errorBuilder: ErrorBuilder) {\n\t\tfor (const [name, def] of Object.entries(schema.triggers)) {\n\t\t\tconst triggerErrorBuilder = errorBuilder.for(name)\n\t\t\tif (name !== def.name) {\n\t\t\t\ttriggerErrorBuilder.add('ACTIONS_NAME_MISMATCH', `Trigger name ${def.name} does not match the name in a map ${name}`)\n\t\t\t}\n\t\t\tif (!schema.targets[def.target]) {\n\t\t\t\ttriggerErrorBuilder.add('ACTIONS_UNDEFINED_TRIGGER_TARGET', `Trigger target ${def.target} not found`)\n\t\t\t}\n\t\t\tthis.validateTrigger(def, triggerErrorBuilder)\n\t\t}\n\t}\n\n\n\tprivate validateTrigger(trigger: Actions.AnyTrigger, errorBuilder: ErrorBuilder): void {\n\t\tconst entity = this.model.entities[trigger.entity]\n\t\tif (!entity) {\n\t\t\terrorBuilder.add('ACTIONS_UNDEFINED_ENTITY', `Entity ${trigger.entity} not found.`)\n\t\t\treturn\n\t\t}\n\n\t\tswitch (trigger.type) {\n\t\t\tcase 'watch':\n\t\t\t\tthis.validateWatchTrigger(trigger, entity, errorBuilder)\n\t\t\t\tbreak\n\t\t\tcase 'basic':\n\t\t\t\tthis.validateBasicTrigger(trigger, entity, errorBuilder)\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tassertNever(trigger)\n\t\t}\n\t}\n\n\tprivate validateWatchTrigger(trigger: Actions.WatchTrigger, entity: Model.Entity, errorBuilder: ErrorBuilder): void {\n\t\tthis.validateSelection(trigger.watch, entity, errorBuilder.for('watch'))\n\t\tif (trigger.selection) {\n\t\t\tthis.validateSelection(trigger.selection, entity, errorBuilder.for('selection'))\n\t\t}\n\t}\n\n\tprivate validateBasicTrigger(trigger: Actions.BasicTrigger, entity: Model.Entity, errorBuilder: ErrorBuilder): void {\n\t\tif (trigger.selection) {\n\t\t\tthis.validateSelection(trigger.selection, entity, errorBuilder.for('selection'))\n\t\t}\n\n\t\tif (Array.isArray(trigger.update)) {\n\t\t\tfor (const field of trigger.update) {\n\t\t\t\tif (!entity.fields[field]) {\n\t\t\t\t\terrorBuilder.for('update').add('ACTIONS_UNDEFINED_FIELD', `Field ${field} of entity ${entity.name} not found.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateSelection(\n\t\tselectionNode: Actions.SelectionNode,\n\t\tentity: Model.Entity,\n\t\terrorBuilder: ErrorBuilder,\n\t): void {\n\t\tfor (const part of selectionNode) {\n\t\t\tconst [field, args, selection] = Array.isArray(part) ? part : [part, {}, []]\n\t\t\tconst fieldErrorBuilder = errorBuilder.for(field)\n\t\t\tif (!entity.fields[field]) {\n\t\t\t\tfieldErrorBuilder.add('ACTIONS_UNDEFINED_FIELD', `Undefined field ${field} on entity ${entity.name}`)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tacceptFieldVisitor(this.model, entity, field, {\n\t\t\t\tvisitColumn: () => {\n\t\t\t\t\tif (selection.length) {\n\t\t\t\t\t\tfieldErrorBuilder.add('ACTIONS_INVALID_SELECTION', `Unexpected sub selection on a column.`)\n\t\t\t\t\t}\n\t\t\t\t\tif (Object.keys(args).length !== 0) {\n\t\t\t\t\t\tfieldErrorBuilder.add('ACTIONS_INVALID_SELECTION', `Unexpected args on a column.`)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitHasMany: ({ targetEntity }) => {\n\t\t\t\t\tif (selection.length === 0) {\n\t\t\t\t\t\tfieldErrorBuilder.add('ACTIONS_INVALID_SELECTION', `Sub-selection expected on a relation.`)\n\t\t\t\t\t}\n\t\t\t\t\tthis.validateSelection(selection, targetEntity, fieldErrorBuilder)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmanyArgsSchema({ schema: this.model, entity: targetEntity })(args)\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tfieldErrorBuilder.add('ACTIONS_INVALID_SELECTION', `Selection args are not valid: ` + e.message)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvisitHasOne: ({ targetEntity }) => {\n\t\t\t\t\tif (selection.length === 0) {\n\t\t\t\t\t\tfieldErrorBuilder.add('ACTIONS_INVALID_SELECTION', `Sub-selection expected on a relation.`)\n\t\t\t\t\t}\n\t\t\t\t\tthis.validateSelection(selection, targetEntity, fieldErrorBuilder)\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":["Typesafe","whereSchema","ErrorBuilder","assertNever","acceptFieldVisitor"],"mappings":"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"}