@cyberismo/data-handler 0.0.14 → 0.0.16

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 (280) hide show
  1. package/dist/card-metadata-updater.js +8 -4
  2. package/dist/card-metadata-updater.js.map +1 -1
  3. package/dist/command-handler.d.ts +4 -0
  4. package/dist/command-handler.js +29 -19
  5. package/dist/command-handler.js.map +1 -1
  6. package/dist/command-manager.d.ts +25 -2
  7. package/dist/command-manager.js +30 -5
  8. package/dist/command-manager.js.map +1 -1
  9. package/dist/commands/create.d.ts +1 -1
  10. package/dist/commands/create.js +45 -93
  11. package/dist/commands/create.js.map +1 -1
  12. package/dist/commands/edit.d.ts +1 -15
  13. package/dist/commands/edit.js +15 -89
  14. package/dist/commands/edit.js.map +1 -1
  15. package/dist/commands/export.d.ts +11 -2
  16. package/dist/commands/export.js +58 -58
  17. package/dist/commands/export.js.map +1 -1
  18. package/dist/commands/import.d.ts +9 -1
  19. package/dist/commands/import.js +17 -11
  20. package/dist/commands/import.js.map +1 -1
  21. package/dist/commands/move.d.ts +1 -2
  22. package/dist/commands/move.js +107 -146
  23. package/dist/commands/move.js.map +1 -1
  24. package/dist/commands/remove.d.ts +8 -1
  25. package/dist/commands/remove.js +17 -48
  26. package/dist/commands/remove.js.map +1 -1
  27. package/dist/commands/rename.d.ts +4 -9
  28. package/dist/commands/rename.js +34 -108
  29. package/dist/commands/rename.js.map +1 -1
  30. package/dist/commands/show.d.ts +22 -34
  31. package/dist/commands/show.js +103 -151
  32. package/dist/commands/show.js.map +1 -1
  33. package/dist/commands/transition.d.ts +9 -2
  34. package/dist/commands/transition.js +49 -44
  35. package/dist/commands/transition.js.map +1 -1
  36. package/dist/commands/update.d.ts +18 -12
  37. package/dist/commands/update.js +34 -18
  38. package/dist/commands/update.js.map +1 -1
  39. package/dist/commands/validate.d.ts +18 -10
  40. package/dist/commands/validate.js +101 -47
  41. package/dist/commands/validate.js.map +1 -1
  42. package/dist/containers/card-container.d.ts +87 -24
  43. package/dist/containers/card-container.js +183 -279
  44. package/dist/containers/card-container.js.map +1 -1
  45. package/dist/containers/project/calculation-engine.d.ts +13 -4
  46. package/dist/containers/project/calculation-engine.js +79 -77
  47. package/dist/containers/project/calculation-engine.js.map +1 -1
  48. package/dist/containers/project/card-cache.d.ts +146 -0
  49. package/dist/containers/project/card-cache.js +411 -0
  50. package/dist/containers/project/card-cache.js.map +1 -0
  51. package/dist/containers/project/project-paths.d.ts +5 -4
  52. package/dist/containers/project/project-paths.js +16 -12
  53. package/dist/containers/project/project-paths.js.map +1 -1
  54. package/dist/containers/project/resource-cache.d.ts +169 -0
  55. package/dist/containers/project/resource-cache.js +507 -0
  56. package/dist/containers/project/resource-cache.js.map +1 -0
  57. package/dist/containers/project/resource-handler.d.ts +129 -0
  58. package/dist/containers/project/resource-handler.js +206 -0
  59. package/dist/containers/project/resource-handler.js.map +1 -0
  60. package/dist/containers/project.d.ts +114 -195
  61. package/dist/containers/project.js +425 -535
  62. package/dist/containers/project.js.map +1 -1
  63. package/dist/containers/template.d.ts +22 -32
  64. package/dist/containers/template.js +113 -115
  65. package/dist/containers/template.js.map +1 -1
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.js +1 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/interfaces/folder-content-interfaces.d.ts +7 -4
  70. package/dist/interfaces/folder-content-interfaces.js +3 -3
  71. package/dist/interfaces/folder-content-interfaces.js.map +1 -1
  72. package/dist/interfaces/macros.d.ts +1 -0
  73. package/dist/interfaces/macros.js +1 -1
  74. package/dist/interfaces/macros.js.map +1 -1
  75. package/dist/interfaces/project-interfaces.d.ts +7 -5
  76. package/dist/interfaces/project-interfaces.js.map +1 -1
  77. package/dist/interfaces/resource-interfaces.d.ts +25 -22
  78. package/dist/interfaces/resource-interfaces.js +3 -0
  79. package/dist/interfaces/resource-interfaces.js.map +1 -1
  80. package/dist/macros/common.d.ts +10 -10
  81. package/dist/macros/createCards/index.d.ts +0 -13
  82. package/dist/macros/createCards/index.js.map +1 -1
  83. package/dist/macros/createCards/types.d.ts +44 -0
  84. package/dist/macros/createCards/types.js +15 -0
  85. package/dist/macros/createCards/types.js.map +1 -0
  86. package/dist/macros/graph/index.d.ts +2 -6
  87. package/dist/macros/graph/index.js +14 -28
  88. package/dist/macros/graph/index.js.map +1 -1
  89. package/dist/macros/graph/types.d.ts +23 -0
  90. package/dist/macros/graph/types.js +15 -0
  91. package/dist/macros/graph/types.js.map +1 -0
  92. package/dist/macros/image/index.d.ts +8 -16
  93. package/dist/macros/image/index.js +36 -33
  94. package/dist/macros/image/index.js.map +1 -1
  95. package/dist/macros/image/types.d.ts +38 -0
  96. package/dist/macros/image/types.js +15 -0
  97. package/dist/macros/image/types.js.map +1 -0
  98. package/dist/macros/include/index.d.ts +1 -6
  99. package/dist/macros/include/index.js +4 -7
  100. package/dist/macros/include/index.js.map +1 -1
  101. package/dist/macros/include/types.d.ts +31 -0
  102. package/dist/macros/include/types.js +15 -0
  103. package/dist/macros/include/types.js.map +1 -0
  104. package/dist/macros/index.d.ts +1 -1
  105. package/dist/macros/index.js +2 -2
  106. package/dist/macros/index.js.map +1 -1
  107. package/dist/macros/percentage/index.d.ts +0 -6
  108. package/dist/macros/percentage/index.js.map +1 -1
  109. package/dist/macros/percentage/types.d.ts +31 -0
  110. package/dist/macros/percentage/types.js +15 -0
  111. package/dist/macros/percentage/types.js.map +1 -0
  112. package/dist/macros/report/index.d.ts +0 -3
  113. package/dist/macros/report/index.js +3 -6
  114. package/dist/macros/report/index.js.map +1 -1
  115. package/dist/macros/report/types.d.ts +19 -0
  116. package/dist/macros/report/types.js +15 -0
  117. package/dist/macros/report/types.js.map +1 -0
  118. package/dist/macros/scoreCard/index.d.ts +0 -6
  119. package/dist/macros/scoreCard/index.js.map +1 -1
  120. package/dist/macros/scoreCard/types.d.ts +31 -0
  121. package/dist/macros/scoreCard/types.js +15 -0
  122. package/dist/macros/scoreCard/types.js.map +1 -0
  123. package/dist/macros/types.d.ts +25 -0
  124. package/dist/macros/types.js +2 -0
  125. package/dist/macros/types.js.map +1 -0
  126. package/dist/macros/vega/index.d.ts +0 -4
  127. package/dist/macros/vega/index.js.map +1 -1
  128. package/dist/macros/vega/types.d.ts +20 -0
  129. package/dist/macros/vega/types.js +2 -0
  130. package/dist/macros/vega/types.js.map +1 -0
  131. package/dist/macros/vegalite/index.d.ts +0 -4
  132. package/dist/macros/vegalite/index.js.map +1 -1
  133. package/dist/macros/vegalite/types.d.ts +20 -0
  134. package/dist/macros/vegalite/types.js +15 -0
  135. package/dist/macros/vegalite/types.js.map +1 -0
  136. package/dist/macros/xref/index.d.ts +0 -3
  137. package/dist/macros/xref/index.js +5 -14
  138. package/dist/macros/xref/index.js.map +1 -1
  139. package/dist/macros/xref/types.d.ts +19 -0
  140. package/dist/macros/xref/types.js +15 -0
  141. package/dist/macros/xref/types.js.map +1 -0
  142. package/dist/module-manager.d.ts +16 -3
  143. package/dist/module-manager.js +55 -23
  144. package/dist/module-manager.js.map +1 -1
  145. package/dist/project-settings.d.ts +16 -3
  146. package/dist/project-settings.js +79 -14
  147. package/dist/project-settings.js.map +1 -1
  148. package/dist/resources/calculation-resource.d.ts +6 -33
  149. package/dist/resources/calculation-resource.js +11 -60
  150. package/dist/resources/calculation-resource.js.map +1 -1
  151. package/dist/resources/card-type-resource.d.ts +10 -22
  152. package/dist/resources/card-type-resource.js +46 -66
  153. package/dist/resources/card-type-resource.js.map +1 -1
  154. package/dist/resources/create-defaults.d.ts +3 -2
  155. package/dist/resources/create-defaults.js +3 -2
  156. package/dist/resources/create-defaults.js.map +1 -1
  157. package/dist/resources/field-type-resource.d.ts +8 -22
  158. package/dist/resources/field-type-resource.js +35 -60
  159. package/dist/resources/field-type-resource.js.map +1 -1
  160. package/dist/resources/file-resource.d.ts +14 -35
  161. package/dist/resources/file-resource.js +22 -301
  162. package/dist/resources/file-resource.js.map +1 -1
  163. package/dist/resources/folder-resource.d.ts +44 -66
  164. package/dist/resources/folder-resource.js +102 -149
  165. package/dist/resources/folder-resource.js.map +1 -1
  166. package/dist/resources/graph-model-resource.d.ts +9 -34
  167. package/dist/resources/graph-model-resource.js +18 -64
  168. package/dist/resources/graph-model-resource.js.map +1 -1
  169. package/dist/resources/graph-view-resource.d.ts +9 -29
  170. package/dist/resources/graph-view-resource.js +13 -48
  171. package/dist/resources/graph-view-resource.js.map +1 -1
  172. package/dist/resources/link-type-resource.d.ts +9 -23
  173. package/dist/resources/link-type-resource.js +11 -33
  174. package/dist/resources/link-type-resource.js.map +1 -1
  175. package/dist/resources/report-resource.d.ts +10 -23
  176. package/dist/resources/report-resource.js +20 -67
  177. package/dist/resources/report-resource.js.map +1 -1
  178. package/dist/resources/resource-object.d.ts +143 -23
  179. package/dist/resources/resource-object.js +369 -48
  180. package/dist/resources/resource-object.js.map +1 -1
  181. package/dist/resources/template-resource.d.ts +10 -17
  182. package/dist/resources/template-resource.js +19 -27
  183. package/dist/resources/template-resource.js.map +1 -1
  184. package/dist/resources/workflow-resource.d.ts +9 -25
  185. package/dist/resources/workflow-resource.js +25 -55
  186. package/dist/resources/workflow-resource.js.map +1 -1
  187. package/dist/utils/card-utils.d.ts +69 -19
  188. package/dist/utils/card-utils.js +179 -30
  189. package/dist/utils/card-utils.js.map +1 -1
  190. package/dist/utils/clingo-fact-builder.d.ts +25 -14
  191. package/dist/utils/clingo-fact-builder.js +27 -5
  192. package/dist/utils/clingo-fact-builder.js.map +1 -1
  193. package/dist/utils/clingo-facts.js +14 -7
  194. package/dist/utils/clingo-facts.js.map +1 -1
  195. package/dist/utils/clingo-parser.js +1 -1
  196. package/dist/utils/clingo-parser.js.map +1 -1
  197. package/dist/utils/constants.d.ts +2 -0
  198. package/dist/utils/constants.js +4 -0
  199. package/dist/utils/constants.js.map +1 -1
  200. package/dist/utils/csv.js +1 -1
  201. package/dist/utils/csv.js.map +1 -1
  202. package/dist/utils/resource-utils.d.ts +1 -0
  203. package/dist/utils/resource-utils.js +2 -1
  204. package/dist/utils/resource-utils.js.map +1 -1
  205. package/package.json +11 -11
  206. package/src/card-metadata-updater.ts +9 -7
  207. package/src/command-handler.ts +35 -23
  208. package/src/command-manager.ts +32 -19
  209. package/src/commands/create.ts +59 -160
  210. package/src/commands/edit.ts +16 -132
  211. package/src/commands/export.ts +71 -81
  212. package/src/commands/import.ts +26 -18
  213. package/src/commands/move.ts +143 -179
  214. package/src/commands/remove.ts +20 -59
  215. package/src/commands/rename.ts +45 -156
  216. package/src/commands/show.ts +153 -211
  217. package/src/commands/transition.ts +53 -58
  218. package/src/commands/update.ts +44 -23
  219. package/src/commands/validate.ts +108 -82
  220. package/src/containers/card-container.ts +200 -360
  221. package/src/containers/project/calculation-engine.ts +81 -105
  222. package/src/containers/project/card-cache.ts +497 -0
  223. package/src/containers/project/project-paths.ts +21 -13
  224. package/src/containers/project/resource-cache.ts +648 -0
  225. package/src/containers/project/resource-handler.ts +265 -0
  226. package/src/containers/project.ts +551 -693
  227. package/src/containers/template.ts +129 -142
  228. package/src/index.ts +1 -0
  229. package/src/interfaces/folder-content-interfaces.ts +14 -7
  230. package/src/interfaces/macros.ts +2 -0
  231. package/src/interfaces/project-interfaces.ts +14 -7
  232. package/src/interfaces/resource-interfaces.ts +30 -27
  233. package/src/macros/createCards/index.ts +1 -12
  234. package/src/macros/createCards/types.ts +46 -0
  235. package/src/macros/graph/index.ts +27 -52
  236. package/src/macros/graph/types.ts +24 -0
  237. package/src/macros/image/index.ts +50 -61
  238. package/src/macros/image/types.ts +39 -0
  239. package/src/macros/include/index.ts +6 -15
  240. package/src/macros/include/types.ts +32 -0
  241. package/src/macros/index.ts +2 -2
  242. package/src/macros/percentage/index.ts +1 -7
  243. package/src/macros/percentage/types.ts +32 -0
  244. package/src/macros/report/index.ts +4 -13
  245. package/src/macros/report/types.ts +20 -0
  246. package/src/macros/scoreCard/index.ts +1 -7
  247. package/src/macros/scoreCard/types.ts +32 -0
  248. package/src/macros/types.ts +48 -0
  249. package/src/macros/vega/index.ts +1 -4
  250. package/src/macros/vega/types.ts +21 -0
  251. package/src/macros/vegalite/index.ts +1 -4
  252. package/src/macros/vegalite/types.ts +22 -0
  253. package/src/macros/xref/index.ts +6 -20
  254. package/src/macros/xref/types.ts +20 -0
  255. package/src/module-manager.ts +79 -22
  256. package/src/project-settings.ts +84 -15
  257. package/src/resources/calculation-resource.ts +21 -91
  258. package/src/resources/card-type-resource.ts +74 -109
  259. package/src/resources/create-defaults.ts +3 -2
  260. package/src/resources/field-type-resource.ts +61 -104
  261. package/src/resources/file-resource.ts +33 -441
  262. package/src/resources/folder-resource.ts +130 -207
  263. package/src/resources/graph-model-resource.ts +36 -95
  264. package/src/resources/graph-view-resource.ts +28 -70
  265. package/src/resources/link-type-resource.ts +23 -53
  266. package/src/resources/report-resource.ts +34 -96
  267. package/src/resources/resource-object.ts +511 -66
  268. package/src/resources/template-resource.ts +32 -44
  269. package/src/resources/workflow-resource.ts +42 -85
  270. package/src/utils/card-utils.ts +217 -31
  271. package/src/utils/clingo-fact-builder.ts +28 -16
  272. package/src/utils/clingo-facts.ts +16 -7
  273. package/src/utils/clingo-parser.ts +1 -1
  274. package/src/utils/constants.ts +6 -0
  275. package/src/utils/csv.ts +1 -1
  276. package/src/utils/resource-utils.ts +2 -1
  277. package/dist/containers/project/resource-collector.d.ts +0 -87
  278. package/dist/containers/project/resource-collector.js +0 -337
  279. package/dist/containers/project/resource-collector.js.map +0 -1
  280. package/src/containers/project/resource-collector.ts +0 -396
@@ -1 +1 @@
1
- {"version":3,"file":"transition.js","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAM7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,OAAO,UAAU;IACD;IAApB,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC;;;;OAIG;IACI,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,UAAyB;QACpE,eAAe;QACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE;YAC1D,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,QAAQ,OAAO,gCAAgC,CAAC,CAAC;QACnE,CAAC;QAED,YAAY;QACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAC1C,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAC3B,CAAC;QACF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,qBAAqB,OAAO,CAAC,QAAQ,EAAE,QAAQ,iCAAiC,CACjF,CAAC;QACJ,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAW,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,oBAAoB,QAAQ,CAAC,QAAQ,iCAAiC,CACvE,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CACzC,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,OAAO,CAAC,QAAQ;YACf,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC/B,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,oBAAoB,QAAQ,CAAC,QAAQ,4DAA4D,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,CACpI,CAAC;QACJ,CAAC;QAED,oDAAoD;QACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CACxC,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,QAAQ,wCAAwC,UAAU,CAAC,IAAI;6DACrD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,IACE,CAAC,CACC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC;YACzD,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAC9B,EACD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,oBAAoB,QAAQ,CAAC,QAAQ,mDAAmD,OAAO,CAAC,QAAQ,EAAE,aAAa,UAAU,UAAU,CAAC,IAAI,EAAE,CACnJ,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACpE,MAAM,WAAW,CAAC,eAAe,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAE1E,OAAO,CAAC,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,OAAO;aAChB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;aAC7C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;aACvE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;YAC1B,IACE,CAAC,WAAW;gBACZ,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS;gBAC/B,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,SAAS,EAC7C,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC;YACvD,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,qCAAqC;IAC7B,KAAK,CAAC,sBAAsB,CAAC,OAAe,EAAE,UAAkB;QACtE,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU,EAAE;YACzE,OAAO;YACP,UAAU;SACX,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"transition.js","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"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"}
@@ -10,18 +10,34 @@
10
10
  License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
11
  */
12
12
  import type { OperationFor, UpdateOperations } from '../resources/resource-object.js';
13
- import { Project } from '../containers/project.js';
13
+ import type { Project } from '../containers/project.js';
14
+ import type { UpdateKey } from '../interfaces/resource-interfaces.js';
14
15
  /**
15
16
  * Class that handles 'update' commands.
16
17
  */
17
18
  export declare class Update {
18
19
  private project;
20
+ /**
21
+ * Creates an instance of Update command.
22
+ * @param project Project to use.
23
+ */
19
24
  constructor(project: Project);
25
+ /**
26
+ * Update single resource property
27
+ * This is similar to updateValue, but allows the operation to be fully specified
28
+ * @param name Name of the resource to operate on.
29
+ * @param updateKey Property to change in resource or in resource content.
30
+ * @param operation The full operation object
31
+ * @template Type Type of the target of the operation
32
+ * @template T Type of operation ('add', 'remove', 'change', 'rank')
33
+ * @template K Type of the key to change
34
+ */
35
+ applyResourceOperation<Type, T extends UpdateOperations, K extends string>(name: string, updateKey: UpdateKey<K>, operation: OperationFor<Type, T>): Promise<void>;
20
36
  /**
21
37
  * Updates single resource property.
22
38
  * @param name Name of the resource to operate on.
23
39
  * @param operation Operation to perform ('add', 'remove', 'change', 'rank')
24
- * @param key Property to change in resource JSON
40
+ * @param key Property to change in resource JSON. If content, content/<property>
25
41
  * @param value Value for 'key'
26
42
  * @param optionalDetail Additional detail needed for some operations. For example, 'update' needs a new value.
27
43
  * @param mappingTable Optional mapping table for workflow state transitions (only used for workflow changes)
@@ -30,14 +46,4 @@ export declare class Update {
30
46
  mappingTable?: {
31
47
  stateMapping: Record<string, string>;
32
48
  }): Promise<void>;
33
- /**
34
- * Update single resource property
35
- * This is similar to updateValue, but allows the operation to be fully specified
36
- * @param name Name of the resource to operate on.
37
- * @param key Property to change in resource JSON
38
- * @param operation The full operation object
39
- * @template Type Type of the target of the operation
40
- * @template T Type of operation ('add', 'remove', 'change', 'rank')
41
- */
42
- applyResourceOperation<Type, T extends UpdateOperations>(name: string, key: string, operation: OperationFor<Type, T>): Promise<void>;
43
49
  }
@@ -9,21 +9,38 @@
9
9
  You should have received a copy of the GNU Affero General Public
10
10
  License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
11
  */
12
- import { Project } from '../containers/project.js';
13
- import { resourceName } from '../utils/resource-utils.js';
14
12
  /**
15
13
  * Class that handles 'update' commands.
16
14
  */
17
15
  export class Update {
18
16
  project;
17
+ /**
18
+ * Creates an instance of Update command.
19
+ * @param project Project to use.
20
+ */
19
21
  constructor(project) {
20
22
  this.project = project;
21
23
  }
24
+ /**
25
+ * Update single resource property
26
+ * This is similar to updateValue, but allows the operation to be fully specified
27
+ * @param name Name of the resource to operate on.
28
+ * @param updateKey Property to change in resource or in resource content.
29
+ * @param operation The full operation object
30
+ * @template Type Type of the target of the operation
31
+ * @template T Type of operation ('add', 'remove', 'change', 'rank')
32
+ * @template K Type of the key to change
33
+ */
34
+ async applyResourceOperation(name, updateKey, operation) {
35
+ const type = this.project.resources.extractType(name);
36
+ const resource = this.project.resources.byType(name, type);
37
+ await resource?.update(updateKey, operation);
38
+ }
22
39
  /**
23
40
  * Updates single resource property.
24
41
  * @param name Name of the resource to operate on.
25
42
  * @param operation Operation to perform ('add', 'remove', 'change', 'rank')
26
- * @param key Property to change in resource JSON
43
+ * @param key Property to change in resource JSON. If content, content/<property>
27
44
  * @param value Value for 'key'
28
45
  * @param optionalDetail Additional detail needed for some operations. For example, 'update' needs a new value.
29
46
  * @param mappingTable Optional mapping table for workflow state transitions (only used for workflow changes)
@@ -62,21 +79,20 @@ export class Update {
62
79
  ? optionalDetail
63
80
  : undefined;
64
81
  }
65
- await this.applyResourceOperation(name, key, op);
66
- }
67
- /**
68
- * Update single resource property
69
- * This is similar to updateValue, but allows the operation to be fully specified
70
- * @param name Name of the resource to operate on.
71
- * @param key Property to change in resource JSON
72
- * @param operation The full operation object
73
- * @template Type Type of the target of the operation
74
- * @template T Type of operation ('add', 'remove', 'change', 'rank')
75
- */
76
- async applyResourceOperation(name, key, operation) {
77
- const resource = Project.resourceObject(this.project, resourceName(name));
78
- await resource?.update(key, operation);
79
- this.project.collectLocalResources();
82
+ const splitKey = key.split('/');
83
+ if (splitKey.length !== 1 && splitKey.length !== 2) {
84
+ throw new Error(`Invalid key format: ${key}. Use 'property' or 'content/<property>'.`);
85
+ }
86
+ if (splitKey.length === 2 && splitKey[0] !== 'content') {
87
+ throw new Error(`Invalid key format: ${key}. When using 'content', always use as 'content/<property>'.`);
88
+ }
89
+ const [parsedKey, subKey] = splitKey;
90
+ if (parsedKey === 'content') {
91
+ await this.applyResourceOperation(name, { key: parsedKey, subKey }, op);
92
+ }
93
+ else {
94
+ await this.applyResourceOperation(name, { key: parsedKey }, op);
95
+ }
80
96
  }
81
97
  }
82
98
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAWF,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,MAAM;IACG;IAApB,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC;;;;;;;;OAQG;IACI,KAAK,CAAC,WAAW,CACtB,IAAY,EACZ,SAA2B,EAC3B,GAAW,EACX,KAAW,EACX,cAAqB,EAAE,kEAAkE;IACzF,YAAuD;QAEvD,MAAM,EAAE,GAAoB;YAC1B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,EAAU;YAClB,EAAE,EAAE,EAAU;YACd,QAAQ,EAAE,CAAW;SACtB,CAAC;QAEF,qCAAqC;QACrC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACvB,EAAyB,CAAC,MAAM,GAAG,KAAK,CAAC;QAC5C,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,EAA4B,CAAC,MAAM,GAAG,cAAc;gBACnD,CAAC,CAAC,KAAK;gBACP,CAAC,CAAE,cAAuB,CAAC;YAC5B,EAA4B,CAAC,EAAE,GAAG,cAAc;gBAC/C,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAE,KAAc,CAAC;YACpB,uDAAuD;YACvD,IAAI,YAAY,EAAE,CAAC;gBAChB,EAA4B,CAAC,YAAY,GAAG,YAAY,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAC/B,EAA0B,CAAC,QAAQ,GAAG,cAAwB,CAAC;YAC/D,EAA0B,CAAC,MAAM,GAAG,KAAK,CAAC;QAC7C,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,EAA4B,CAAC,MAAM,GAAG,KAAK,CAAC;YAC5C,EAA4B,CAAC,gBAAgB,GAAG,cAAc;gBAC7D,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,sBAAsB,CACjC,IAAY,EACZ,GAAW,EACX,SAAgC;QAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,MAAM,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAcF;;GAEG;AACH,MAAM,OAAO,MAAM;IAKG;IAJpB;;;OAGG;IACH,YAAoB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAExC;;;;;;;;;OASG;IACI,KAAK,CAAC,sBAAsB,CAIjC,IAAY,EAAE,SAAuB,EAAE,SAAgC;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,WAAW,CACtB,IAAY,EACZ,SAA2B,EAC3B,GAAW,EACX,KAAW,EACX,cAAqB,EAAE,kEAAkE;IACzF,YAAuD;QAEvD,MAAM,EAAE,GAAoB;YAC1B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,EAAU;YAClB,EAAE,EAAE,EAAU;YACd,QAAQ,EAAE,CAAW;SACtB,CAAC;QAEF,qCAAqC;QACrC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACvB,EAAyB,CAAC,MAAM,GAAG,KAAK,CAAC;QAC5C,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,EAA4B,CAAC,MAAM,GAAG,cAAc;gBACnD,CAAC,CAAC,KAAK;gBACP,CAAC,CAAE,cAAuB,CAAC;YAC5B,EAA4B,CAAC,EAAE,GAAG,cAAc;gBAC/C,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAE,KAAc,CAAC;YACpB,uDAAuD;YACvD,IAAI,YAAY,EAAE,CAAC;gBAChB,EAA4B,CAAC,YAAY,GAAG,YAAY,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAC/B,EAA0B,CAAC,QAAQ,GAAG,cAAwB,CAAC;YAC/D,EAA0B,CAAC,MAAM,GAAG,KAAK,CAAC;QAC7C,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACjC,EAA4B,CAAC,MAAM,GAAG,KAAK,CAAC;YAC5C,EAA4B,CAAC,gBAAgB,GAAG,cAAc;gBAC7D,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,uBAAuB,GAAG,2CAA2C,CACtE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACb,uBAAuB,GAAG,6DAA6D,CACxF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC;QACrC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;CACF"}
@@ -13,7 +13,7 @@
13
13
  import { Validator as JSONValidator } from 'jsonschema';
14
14
  import { Validator as DirectoryValidator } from 'directory-schema-validator';
15
15
  import type { Card, ResourceTypes } from '../interfaces/project-interfaces.js';
16
- import { Project } from '../containers/project.js';
16
+ import type { Project } from '../containers/project.js';
17
17
  import { type ResourceName } from '../utils/resource-utils.js';
18
18
  export interface LengthProvider {
19
19
  length: number;
@@ -37,12 +37,14 @@ export declare class Validate {
37
37
  static cardMetadataFile: string;
38
38
  static dotSchemaSchemaId: string;
39
39
  static parameterSchemaFile: string;
40
+ /**
41
+ * Creates an instance of Validate command.
42
+ */
40
43
  constructor();
41
44
  private length;
42
45
  private addChildSchemas;
43
46
  private checkResourceName;
44
47
  private fullPath;
45
- private getAndCacheResource;
46
48
  private parseValidatorMessage;
47
49
  private readAndValidateContentFiles;
48
50
  private removeDuplicateEntries;
@@ -53,7 +55,7 @@ export declare class Validate {
53
55
  private validType;
54
56
  /**
55
57
  * Validates that new identifier of a resource is according to naming convention.
56
- * @param identifier: resource identifier
58
+ * @param identifier Resource identifier
57
59
  * returns true if identifier is valid, and false otherwise.
58
60
  */
59
61
  static isValidIdentifierName(identifier: string): boolean;
@@ -100,9 +102,12 @@ export declare class Validate {
100
102
  * @param resourceType Type of resource
101
103
  * @param name Name of resource
102
104
  * @param prefixes currently used project prefixes
105
+ * @throws when resource is not from given prefixes,
106
+ * or when actual resource does not match the type,
107
+ * or when identifier name is not valid
103
108
  * @returns resource name as valid resource name; throws in error cases.
104
109
  */
105
- validResourceName(resourceType: ResourceTypes, name: string, prefixes: string[]): Promise<string>;
110
+ validResourceName(resourceType: ResourceTypes, name: string, prefixes: string[]): string;
106
111
  /**
107
112
  * Validates that 'prefix' is valid project prefix.
108
113
  * @param prefix project prefix
@@ -113,26 +118,29 @@ export declare class Validate {
113
118
  * Validates that card's custom fields are according to schema and have correct data in them.
114
119
  * @param project currently used Project
115
120
  * @param card specific card
116
- * @returns string containing all validation errors
121
+ * @throws when card does not have metadata
122
+ * @returns validation errors, if any.
117
123
  */
118
- validateCustomFields(project: Project, card: Card): Promise<string>;
124
+ validateCustomFields(project: Project, card: Card, prefixes: string[]): Promise<string>;
119
125
  /**
120
126
  * Validates the labels of a card
121
127
  * @param card card to validate. Card must have metadata.
128
+ * @returns validation errors, if any.
122
129
  */
123
- validateCardLabels(card: Card): Promise<string>;
130
+ validateCardLabels(card: Card): string;
124
131
  /**
125
132
  * Checks if card's current workflow state matches workflow that card's card type is using.
126
133
  * Template cards are expected to have empty workflow state.
127
134
  * @param project Project object.
128
135
  * @param card Card object to validate
129
- * @returns string containing all validation errors
136
+ * @returns validation errors, if any.
130
137
  */
131
138
  validateWorkflowState(project: Project, card: Card): Promise<string>;
132
139
  /**
133
140
  * Validates a single resource.
134
- * @param resource Resource to validate
135
- * @returns string containing all validation errors
141
+ * @param resourceName Resource to validate
142
+ * @param project Project instance to use.
143
+ * @returns validation errors, if any.
136
144
  */
137
145
  validateResource(resourceName: ResourceName, project: Project): Promise<string>;
138
146
  /**
@@ -18,15 +18,15 @@ import { Validator as DirectoryValidator } from 'directory-schema-validator';
18
18
  import { parentSchema, schemas } from '@cyberismo/assets';
19
19
  import { errorFunction } from '../utils/error-utils.js';
20
20
  import { isTemplateCard } from '../utils/card-utils.js';
21
+ import { isPredefinedField } from '../utils/constants.js';
21
22
  import { pathExists } from '../utils/file-utils.js';
22
- import { Project } from '../containers/project.js';
23
23
  import { readJsonFile } from '../utils/json.js';
24
24
  import { resourceName } from '../utils/resource-utils.js';
25
25
  const invalidNames = new RegExp('[<>:"/\\|?*\x00-\x1F]|^(?:aux|con|clock$|nul|prn|com[1-9]|lpt[1-9])$');
26
26
  const SHORT_TEXT_MAX_LENGTH = 80;
27
27
  import * as EmailValidator from 'email-validator';
28
28
  import { evaluateMacros } from '../macros/index.js';
29
- const baseDir = import.meta.dirname;
29
+ const baseDir = import.meta.dirname ?? new URL('.', import.meta.url).pathname;
30
30
  const subFoldersToValidate = ['.cards', 'cardRoot'];
31
31
  /**
32
32
  * Validates content.
@@ -47,6 +47,9 @@ export class Validate {
47
47
  static cardMetadataFile = 'index.json';
48
48
  static dotSchemaSchemaId = '/dotSchema';
49
49
  static parameterSchemaFile = 'parameterSchema.json';
50
+ /**
51
+ * Creates an instance of Validate command.
52
+ */
50
53
  constructor() {
51
54
  Validate.baseFolder = pathExists(join(process.cwd(), '../../schema', 'cardTreeDirectorySchema.json'))
52
55
  ? join(process.cwd(), '../../schema')
@@ -102,18 +105,7 @@ export class Validate {
102
105
  fullPath(file) {
103
106
  return join(file.parentPath, file.name);
104
107
  }
105
- // Puts resource to a local cache if found and returns the resource.
106
- // If value is already cached, returns from cache.
107
- async getAndCacheResource(project, cachedValues, valueName) {
108
- return (cachedValues.get(valueName) ||
109
- project.resource(valueName).then((resource) => {
110
- if (!resource) {
111
- return undefined;
112
- }
113
- cachedValues.set(valueName, resource);
114
- return resource;
115
- }));
116
- }
108
+ // Parses validator messages
117
109
  parseValidatorMessage(errorObject) {
118
110
  let parsedErrorMessage = '';
119
111
  // todo: get schema name here?
@@ -155,7 +147,7 @@ export class Validate {
155
147
  async readAndValidateContentFiles(project, path) {
156
148
  const message = [];
157
149
  try {
158
- const prefixes = await project.projectPrefixes();
150
+ const prefixes = project.projectPrefixes();
159
151
  const files = await readdir(path, {
160
152
  withFileTypes: true,
161
153
  });
@@ -266,7 +258,13 @@ export class Validate {
266
258
  const errors = [];
267
259
  if (cardType && fieldArray) {
268
260
  const validationPromises = fieldArray.map(async (field) => {
269
- const fieldType = await this.getAndCacheResource(project, this.validatedFieldTypes, field);
261
+ let fieldType;
262
+ try {
263
+ fieldType = project.resources.byType(field, 'fieldTypes').show();
264
+ }
265
+ catch {
266
+ fieldType = undefined;
267
+ }
270
268
  if (!fieldType) {
271
269
  return `Card type '${cardType.name}' has invalid reference to unknown ${nameOfArray} '${field}'`;
272
270
  }
@@ -329,7 +327,7 @@ export class Validate {
329
327
  }
330
328
  /**
331
329
  * Validates that new identifier of a resource is according to naming convention.
332
- * @param identifier: resource identifier
330
+ * @param identifier Resource identifier
333
331
  * returns true if identifier is valid, and false otherwise.
334
332
  */
335
333
  static isValidIdentifierName(identifier) {
@@ -391,15 +389,17 @@ export class Validate {
391
389
  else {
392
390
  const errorMsg = [];
393
391
  const project = projectFn();
392
+ await project.populateCaches();
394
393
  // Then, validate that each 'contentSchema' children as well.
395
394
  const result = await this.readAndValidateContentFiles(project, projectPath);
396
395
  if (result.length > 0) {
397
396
  errorMsg.push(...result);
398
397
  }
399
398
  // Finally, validate that each card is correct
400
- const cards = await project.cards();
401
- cards.push(...(await project.allTemplateCards()));
399
+ const cards = project.cards();
400
+ cards.push(...project.allTemplateCards());
402
401
  const cardIds = new Map();
402
+ const allPrefixes = await project.projectPrefixes();
403
403
  for (const card of cards) {
404
404
  if (cardIds.has(card.key)) {
405
405
  cardIds.set(card.key, (cardIds.get(card.key) || 0) + 1);
@@ -408,7 +408,6 @@ export class Validate {
408
408
  cardIds.set(card.key, 1);
409
409
  }
410
410
  if (card.metadata) {
411
- // validate card's workflow
412
411
  if (!isTemplateCard(card)) {
413
412
  const validWorkflow = await this.validateWorkflowState(project, card);
414
413
  if (validWorkflow.length !== 0) {
@@ -416,7 +415,7 @@ export class Validate {
416
415
  }
417
416
  }
418
417
  }
419
- const validCustomFields = await this.validateCustomFields(project, card);
418
+ const validCustomFields = await this.validateCustomFields(project, card, allPrefixes);
420
419
  if (validCustomFields.length !== 0) {
421
420
  errorMsg.push(validCustomFields);
422
421
  }
@@ -429,7 +428,7 @@ export class Validate {
429
428
  await evaluateMacros(card.content, {
430
429
  context: 'localApp',
431
430
  mode: 'validate',
432
- project,
431
+ project: project,
433
432
  cardKey: card.key,
434
433
  });
435
434
  }
@@ -492,17 +491,16 @@ export class Validate {
492
491
  * @param resourceType Type of resource
493
492
  * @param name Name of resource
494
493
  * @param prefixes currently used project prefixes
494
+ * @throws when resource is not from given prefixes,
495
+ * or when actual resource does not match the type,
496
+ * or when identifier name is not valid
495
497
  * @returns resource name as valid resource name; throws in error cases.
496
498
  */
497
- async validResourceName(resourceType, name, prefixes) {
499
+ validResourceName(resourceType, name, prefixes) {
498
500
  const resource = resourceName(name);
499
501
  resource.type = resource.type ? resource.type : resourceType;
500
- // a bit shaky way to ensure that prefix is set; first of the project prefixes should be the actual project prefix.
501
502
  if (resource.prefix === '') {
502
- resource.prefix = prefixes.length > 0 ? prefixes.at(0) || '' : '';
503
- if (resource.prefix === '') {
504
- throw new Error(`Project prefix cannot be empty string`);
505
- }
503
+ throw new Error(`Project prefix cannot be empty string`);
506
504
  }
507
505
  if (!prefixes.includes(resource.prefix)) {
508
506
  throw new Error(`Resource name can only refer to project that it is part of. Prefix '${resource.prefix}' is not included in '[${prefixes.join(',')}]'`);
@@ -530,14 +528,23 @@ export class Validate {
530
528
  * Validates that card's custom fields are according to schema and have correct data in them.
531
529
  * @param project currently used Project
532
530
  * @param card specific card
533
- * @returns string containing all validation errors
531
+ * @throws when card does not have metadata
532
+ * @returns validation errors, if any.
534
533
  */
535
- async validateCustomFields(project, card) {
534
+ async validateCustomFields(project, card, prefixes) {
536
535
  const validationErrors = [];
537
536
  if (!card.metadata) {
538
537
  throw new Error(`Card '${card.key}' has no metadata. Card object needs to be instantiated with '{metadata: true}'`);
539
538
  }
540
- const cardType = await this.getAndCacheResource(project, this.validatedCardTypes, card.metadata?.cardType);
539
+ let cardType;
540
+ try {
541
+ cardType = project.resources
542
+ .byType(card.metadata?.cardType, 'cardTypes')
543
+ .show();
544
+ }
545
+ catch {
546
+ cardType = undefined;
547
+ }
541
548
  if (!cardType) {
542
549
  validationErrors.push(`Card '${card.key}' has invalid card type '${card.metadata?.cardType}'`);
543
550
  return validationErrors.join('\n');
@@ -548,9 +555,18 @@ export class Validate {
548
555
  fieldErrors = await this.validateArrayOfFields(project, cardType, cardType.alwaysVisibleFields, 'always visible fields');
549
556
  validationErrors.push(...fieldErrors);
550
557
  for (const field of cardType.customFields) {
551
- const found = await project.resourceExists('fieldTypes', field.name);
552
- if (!found) {
553
- validationErrors.push(`Custom field '${field.name}' from card type '${cardType.name}' not found from project`);
558
+ let fieldType;
559
+ try {
560
+ fieldType = await project.resources
561
+ .byType(field.name, 'fieldTypes')
562
+ .show();
563
+ }
564
+ catch {
565
+ fieldType = undefined;
566
+ }
567
+ if (!fieldType) {
568
+ validationErrors.push(`In card '${card.key}' field '${field.name}' is missing from project\n`);
569
+ continue;
554
570
  }
555
571
  if (field.isCalculated) {
556
572
  if (card.metadata[field.name] !== undefined) {
@@ -564,11 +580,6 @@ export class Validate {
564
580
  continue;
565
581
  }
566
582
  }
567
- const fieldType = await this.getAndCacheResource(project, this.validatedFieldTypes, field.name);
568
- if (!fieldType) {
569
- validationErrors.push(`In card '${card.key}' field '${field.name}' is missing from project\n`);
570
- continue;
571
- }
572
583
  if (!this.validType(card.metadata[field.name], fieldType)) {
573
584
  const typeOfValue = typeof card.metadata[field.name];
574
585
  let fieldValue = card.metadata[field.name];
@@ -589,13 +600,40 @@ export class Validate {
589
600
  validationErrors.push(`In card '${card.key}' field '${field.name}' is defined as '${fieldType.dataType}', but it is '${typeOfValue}' with value of ${fieldValue}\n`);
590
601
  }
591
602
  }
603
+ // Validate that all metadata keys are either predefined fields or valid field type names
604
+ for (const key of Object.keys(card.metadata)) {
605
+ if (isPredefinedField(key) ||
606
+ key === 'labels' ||
607
+ key === 'links') {
608
+ continue;
609
+ }
610
+ try {
611
+ this.validResourceName('fieldTypes', key, prefixes);
612
+ }
613
+ catch {
614
+ validationErrors.push(`Card '${card.key}' has invalid metadata key '${key}'`);
615
+ continue;
616
+ }
617
+ // Check that the card's fieldType exists in the project
618
+ let fieldType;
619
+ try {
620
+ fieldType = await project.resources.byType(key, 'fieldTypes').show();
621
+ }
622
+ catch {
623
+ fieldType = undefined;
624
+ }
625
+ if (!fieldType) {
626
+ validationErrors.push(`Card '${card.key}' has field '${key}' that does not exist in the project`);
627
+ }
628
+ }
592
629
  return validationErrors.join('\n');
593
630
  }
594
631
  /**
595
632
  * Validates the labels of a card
596
633
  * @param card card to validate. Card must have metadata.
634
+ * @returns validation errors, if any.
597
635
  */
598
- async validateCardLabels(card) {
636
+ validateCardLabels(card) {
599
637
  const validationErrors = [];
600
638
  if (!card.metadata) {
601
639
  validationErrors.push(`Card '${card.key}' has no metadata. Card object needs to be instantiated with '{metadata: true}'`);
@@ -621,15 +659,22 @@ export class Validate {
621
659
  * Template cards are expected to have empty workflow state.
622
660
  * @param project Project object.
623
661
  * @param card Card object to validate
624
- * @returns string containing all validation errors
662
+ * @returns validation errors, if any.
625
663
  */
626
664
  async validateWorkflowState(project, card) {
627
665
  const validationErrors = [];
628
666
  if (!card.metadata) {
629
667
  validationErrors.push(`Card '${card.key}' has no metadata. Card object needs to be instantiated with '{metadata: true}'`);
630
668
  }
631
- // Use caches for cardTypes and workflows, to avoid re-reading the same JSON files multiple times.
632
- const cardType = await this.getAndCacheResource(project, this.validatedCardTypes, card.metadata?.cardType || '');
669
+ let cardType;
670
+ try {
671
+ cardType = card.metadata?.cardType
672
+ ? project.resources.byType(card.metadata?.cardType, 'cardTypes').show()
673
+ : undefined;
674
+ }
675
+ catch {
676
+ cardType = undefined;
677
+ }
633
678
  if (!cardType) {
634
679
  validationErrors.push(`Card '${card.key}' has invalid card type '${card.metadata?.cardType}'`);
635
680
  return validationErrors.join('\n');
@@ -638,7 +683,15 @@ export class Validate {
638
683
  validationErrors.push(`Card type '${card.metadata?.cardType}' does not have 'workflow'`);
639
684
  return validationErrors.join('\n');
640
685
  }
641
- const workflow = await this.getAndCacheResource(project, this.validatedWorkflows, cardType.workflow);
686
+ let workflow;
687
+ try {
688
+ workflow = project.resources
689
+ .byType(cardType.workflow, 'workflows')
690
+ .show();
691
+ }
692
+ catch {
693
+ workflow = undefined;
694
+ }
642
695
  if (!workflow) {
643
696
  validationErrors.push(`Workflow of '${cardType.workflow}' card type '${card.metadata?.cardType}' does not exist in the project`);
644
697
  return validationErrors.join('\n');
@@ -659,12 +712,13 @@ export class Validate {
659
712
  }
660
713
  /**
661
714
  * Validates a single resource.
662
- * @param resource Resource to validate
663
- * @returns string containing all validation errors
715
+ * @param resourceName Resource to validate
716
+ * @param project Project instance to use.
717
+ * @returns validation errors, if any.
664
718
  */
665
719
  async validateResource(resourceName, project) {
666
720
  try {
667
- const resource = Project.resourceObject(project, resourceName);
721
+ const resource = project.resources.byType(resourceName);
668
722
  await resource.validate();
669
723
  return '';
670
724
  }