@cyberismo/data-handler 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/LICENSE +702 -0
  2. package/dist/card-metadata-updater.d.ts +33 -0
  3. package/dist/card-metadata-updater.js +121 -0
  4. package/dist/card-metadata-updater.js.map +1 -0
  5. package/dist/command-handler.d.ts +96 -0
  6. package/dist/command-handler.js +557 -0
  7. package/dist/command-handler.js.map +1 -0
  8. package/dist/command-manager.d.ts +43 -0
  9. package/dist/command-manager.js +73 -0
  10. package/dist/command-manager.js.map +1 -0
  11. package/dist/commands/calculate.d.ts +86 -0
  12. package/dist/commands/calculate.js +444 -0
  13. package/dist/commands/calculate.js.map +1 -0
  14. package/dist/commands/create.d.ts +114 -0
  15. package/dist/commands/create.js +389 -0
  16. package/dist/commands/create.js.map +1 -0
  17. package/dist/commands/edit.d.ts +37 -0
  18. package/dist/commands/edit.js +99 -0
  19. package/dist/commands/edit.js.map +1 -0
  20. package/dist/commands/export-site.d.ts +45 -0
  21. package/dist/commands/export-site.js +301 -0
  22. package/dist/commands/export-site.js.map +1 -0
  23. package/dist/commands/export.d.ts +53 -0
  24. package/dist/commands/export.js +251 -0
  25. package/dist/commands/export.js.map +1 -0
  26. package/dist/commands/import.d.ts +53 -0
  27. package/dist/commands/import.js +133 -0
  28. package/dist/commands/import.js.map +1 -0
  29. package/dist/commands/index.d.ts +26 -0
  30. package/dist/commands/index.js +27 -0
  31. package/dist/commands/index.js.map +1 -0
  32. package/dist/commands/move.d.ts +55 -0
  33. package/dist/commands/move.js +341 -0
  34. package/dist/commands/move.js.map +1 -0
  35. package/dist/commands/remove.d.ts +38 -0
  36. package/dist/commands/remove.js +192 -0
  37. package/dist/commands/remove.js.map +1 -0
  38. package/dist/commands/rename.d.ts +46 -0
  39. package/dist/commands/rename.js +289 -0
  40. package/dist/commands/rename.js.map +1 -0
  41. package/dist/commands/show.d.ts +124 -0
  42. package/dist/commands/show.js +345 -0
  43. package/dist/commands/show.js.map +1 -0
  44. package/dist/commands/transition.d.ts +27 -0
  45. package/dist/commands/transition.js +92 -0
  46. package/dist/commands/transition.js.map +1 -0
  47. package/dist/commands/update.d.ts +29 -0
  48. package/dist/commands/update.js +64 -0
  49. package/dist/commands/update.js.map +1 -0
  50. package/dist/commands/validate.d.ts +143 -0
  51. package/dist/commands/validate.js +689 -0
  52. package/dist/commands/validate.js.map +1 -0
  53. package/dist/containers/card-container.d.ts +44 -0
  54. package/dist/containers/card-container.js +282 -0
  55. package/dist/containers/card-container.js.map +1 -0
  56. package/dist/containers/project/project-paths.d.ts +46 -0
  57. package/dist/containers/project/project-paths.js +105 -0
  58. package/dist/containers/project/project-paths.js.map +1 -0
  59. package/dist/containers/project/resource-collector.d.ts +86 -0
  60. package/dist/containers/project/resource-collector.js +331 -0
  61. package/dist/containers/project/resource-collector.js.map +1 -0
  62. package/dist/containers/project.d.ts +351 -0
  63. package/dist/containers/project.js +896 -0
  64. package/dist/containers/project.js.map +1 -0
  65. package/dist/containers/template.d.ts +108 -0
  66. package/dist/containers/template.js +433 -0
  67. package/dist/containers/template.js.map +1 -0
  68. package/dist/exceptions/index.d.ts +19 -0
  69. package/dist/exceptions/index.js +26 -0
  70. package/dist/exceptions/index.js.map +1 -0
  71. package/dist/index.d.ts +16 -0
  72. package/dist/index.js +15 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/interfaces/adoc.d.ts +12 -0
  75. package/dist/interfaces/adoc.js +13 -0
  76. package/dist/interfaces/adoc.js.map +1 -0
  77. package/dist/interfaces/macros.d.ts +45 -0
  78. package/dist/interfaces/macros.js +13 -0
  79. package/dist/interfaces/macros.js.map +1 -0
  80. package/dist/interfaces/project-interfaces.d.ts +121 -0
  81. package/dist/interfaces/project-interfaces.js +21 -0
  82. package/dist/interfaces/project-interfaces.js.map +1 -0
  83. package/dist/interfaces/request-status-interfaces.d.ts +28 -0
  84. package/dist/interfaces/request-status-interfaces.js +20 -0
  85. package/dist/interfaces/request-status-interfaces.js.map +1 -0
  86. package/dist/interfaces/resource-interfaces.d.ts +117 -0
  87. package/dist/interfaces/resource-interfaces.js +20 -0
  88. package/dist/interfaces/resource-interfaces.js.map +1 -0
  89. package/dist/macros/base-macro.d.ts +31 -0
  90. package/dist/macros/base-macro.js +126 -0
  91. package/dist/macros/base-macro.js.map +1 -0
  92. package/dist/macros/common.d.ts +17 -0
  93. package/dist/macros/common.js +23 -0
  94. package/dist/macros/common.js.map +1 -0
  95. package/dist/macros/createCards/index.d.ts +36 -0
  96. package/dist/macros/createCards/index.js +35 -0
  97. package/dist/macros/createCards/index.js.map +1 -0
  98. package/dist/macros/createCards/metadata.d.ts +14 -0
  99. package/dist/macros/createCards/metadata.js +18 -0
  100. package/dist/macros/createCards/metadata.js.map +1 -0
  101. package/dist/macros/graph/index.d.ts +29 -0
  102. package/dist/macros/graph/index.js +91 -0
  103. package/dist/macros/graph/index.js.map +1 -0
  104. package/dist/macros/graph/metadata.d.ts +14 -0
  105. package/dist/macros/graph/metadata.js +18 -0
  106. package/dist/macros/graph/metadata.js.map +1 -0
  107. package/dist/macros/index.d.ts +93 -0
  108. package/dist/macros/index.js +237 -0
  109. package/dist/macros/index.js.map +1 -0
  110. package/dist/macros/report/index.d.ts +26 -0
  111. package/dist/macros/report/index.js +70 -0
  112. package/dist/macros/report/index.js.map +1 -0
  113. package/dist/macros/report/metadata.d.ts +14 -0
  114. package/dist/macros/report/metadata.js +18 -0
  115. package/dist/macros/report/metadata.js.map +1 -0
  116. package/dist/macros/scoreCard/index.d.ts +30 -0
  117. package/dist/macros/scoreCard/index.js +38 -0
  118. package/dist/macros/scoreCard/index.js.map +1 -0
  119. package/dist/macros/scoreCard/metadata.d.ts +14 -0
  120. package/dist/macros/scoreCard/metadata.js +18 -0
  121. package/dist/macros/scoreCard/metadata.js.map +1 -0
  122. package/dist/macros/task-queue.d.ts +46 -0
  123. package/dist/macros/task-queue.js +69 -0
  124. package/dist/macros/task-queue.js.map +1 -0
  125. package/dist/module-manager.d.ts +62 -0
  126. package/dist/module-manager.js +350 -0
  127. package/dist/module-manager.js.map +1 -0
  128. package/dist/permissions/action-guard.d.ts +28 -0
  129. package/dist/permissions/action-guard.js +61 -0
  130. package/dist/permissions/action-guard.js.map +1 -0
  131. package/dist/project-settings.d.ts +42 -0
  132. package/dist/project-settings.js +120 -0
  133. package/dist/project-settings.js.map +1 -0
  134. package/dist/resources/array-handler.d.ts +28 -0
  135. package/dist/resources/array-handler.js +116 -0
  136. package/dist/resources/array-handler.js.map +1 -0
  137. package/dist/resources/card-type-resource.d.ts +72 -0
  138. package/dist/resources/card-type-resource.js +334 -0
  139. package/dist/resources/card-type-resource.js.map +1 -0
  140. package/dist/resources/create-defaults.d.ts +81 -0
  141. package/dist/resources/create-defaults.js +184 -0
  142. package/dist/resources/create-defaults.js.map +1 -0
  143. package/dist/resources/field-type-resource.d.ts +88 -0
  144. package/dist/resources/field-type-resource.js +411 -0
  145. package/dist/resources/field-type-resource.js.map +1 -0
  146. package/dist/resources/file-resource.d.ts +50 -0
  147. package/dist/resources/file-resource.js +301 -0
  148. package/dist/resources/file-resource.js.map +1 -0
  149. package/dist/resources/folder-resource.d.ts +66 -0
  150. package/dist/resources/folder-resource.js +100 -0
  151. package/dist/resources/folder-resource.js.map +1 -0
  152. package/dist/resources/graph-model-resource.d.ts +78 -0
  153. package/dist/resources/graph-model-resource.js +164 -0
  154. package/dist/resources/graph-model-resource.js.map +1 -0
  155. package/dist/resources/graph-view-resource.d.ts +78 -0
  156. package/dist/resources/graph-view-resource.js +163 -0
  157. package/dist/resources/graph-view-resource.js.map +1 -0
  158. package/dist/resources/link-type-resource.d.ts +62 -0
  159. package/dist/resources/link-type-resource.js +150 -0
  160. package/dist/resources/link-type-resource.js.map +1 -0
  161. package/dist/resources/report-resource.d.ts +77 -0
  162. package/dist/resources/report-resource.js +171 -0
  163. package/dist/resources/report-resource.js.map +1 -0
  164. package/dist/resources/resource-object.d.ts +108 -0
  165. package/dist/resources/resource-object.js +147 -0
  166. package/dist/resources/resource-object.js.map +1 -0
  167. package/dist/resources/template-resource.d.ts +82 -0
  168. package/dist/resources/template-resource.js +173 -0
  169. package/dist/resources/template-resource.js.map +1 -0
  170. package/dist/resources/workflow-resource.d.ts +67 -0
  171. package/dist/resources/workflow-resource.js +156 -0
  172. package/dist/resources/workflow-resource.js.map +1 -0
  173. package/dist/types/queries.d.ts +142 -0
  174. package/dist/types/queries.js +16 -0
  175. package/dist/types/queries.js.map +1 -0
  176. package/dist/utils/card-utils.d.ts +34 -0
  177. package/dist/utils/card-utils.js +78 -0
  178. package/dist/utils/card-utils.js.map +1 -0
  179. package/dist/utils/clingo-fact-builder.d.ts +58 -0
  180. package/dist/utils/clingo-fact-builder.js +126 -0
  181. package/dist/utils/clingo-fact-builder.js.map +1 -0
  182. package/dist/utils/clingo-facts.d.ts +97 -0
  183. package/dist/utils/clingo-facts.js +352 -0
  184. package/dist/utils/clingo-facts.js.map +1 -0
  185. package/dist/utils/clingo-parser.d.ts +59 -0
  186. package/dist/utils/clingo-parser.js +403 -0
  187. package/dist/utils/clingo-parser.js.map +1 -0
  188. package/dist/utils/clingo-program-builder.d.ts +39 -0
  189. package/dist/utils/clingo-program-builder.js +57 -0
  190. package/dist/utils/clingo-program-builder.js.map +1 -0
  191. package/dist/utils/common-utils.d.ts +24 -0
  192. package/dist/utils/common-utils.js +47 -0
  193. package/dist/utils/common-utils.js.map +1 -0
  194. package/dist/utils/constants.d.ts +18 -0
  195. package/dist/utils/constants.js +27 -0
  196. package/dist/utils/constants.js.map +1 -0
  197. package/dist/utils/csv.d.ts +18 -0
  198. package/dist/utils/csv.js +45 -0
  199. package/dist/utils/csv.js.map +1 -0
  200. package/dist/utils/file-utils.d.ts +69 -0
  201. package/dist/utils/file-utils.js +158 -0
  202. package/dist/utils/file-utils.js.map +1 -0
  203. package/dist/utils/json.d.ts +61 -0
  204. package/dist/utils/json.js +108 -0
  205. package/dist/utils/json.js.map +1 -0
  206. package/dist/utils/lexorank.d.ts +59 -0
  207. package/dist/utils/lexorank.js +159 -0
  208. package/dist/utils/lexorank.js.map +1 -0
  209. package/dist/utils/log-utils.d.ts +40 -0
  210. package/dist/utils/log-utils.js +109 -0
  211. package/dist/utils/log-utils.js.map +1 -0
  212. package/dist/utils/random.d.ts +19 -0
  213. package/dist/utils/random.js +34 -0
  214. package/dist/utils/random.js.map +1 -0
  215. package/dist/utils/resource-utils.d.ts +45 -0
  216. package/dist/utils/resource-utils.js +137 -0
  217. package/dist/utils/resource-utils.js.map +1 -0
  218. package/dist/utils/sanitize-svg.d.ts +18 -0
  219. package/dist/utils/sanitize-svg.js +38 -0
  220. package/dist/utils/sanitize-svg.js.map +1 -0
  221. package/dist/utils/user-preferences.d.ts +64 -0
  222. package/dist/utils/user-preferences.js +106 -0
  223. package/dist/utils/user-preferences.js.map +1 -0
  224. package/dist/utils/validate.d.ts +26 -0
  225. package/dist/utils/validate.js +53 -0
  226. package/dist/utils/validate.js.map +1 -0
  227. package/dist/utils/value-utils.d.ts +58 -0
  228. package/dist/utils/value-utils.js +181 -0
  229. package/dist/utils/value-utils.js.map +1 -0
  230. package/package.json +67 -0
  231. package/src/card-metadata-updater.ts +182 -0
  232. package/src/command-handler.ts +686 -0
  233. package/src/command-manager.ts +99 -0
  234. package/src/commands/calculate.ts +591 -0
  235. package/src/commands/create.ts +559 -0
  236. package/src/commands/edit.ts +123 -0
  237. package/src/commands/export-site.ts +356 -0
  238. package/src/commands/export.ts +315 -0
  239. package/src/commands/import.ts +169 -0
  240. package/src/commands/index.ts +42 -0
  241. package/src/commands/move.ts +451 -0
  242. package/src/commands/remove.ts +244 -0
  243. package/src/commands/rename.ts +378 -0
  244. package/src/commands/show.ts +442 -0
  245. package/src/commands/transition.ts +127 -0
  246. package/src/commands/update.ts +76 -0
  247. package/src/commands/validate.ts +962 -0
  248. package/src/containers/card-container.ts +378 -0
  249. package/src/containers/project/project-paths.ts +127 -0
  250. package/src/containers/project/resource-collector.ts +379 -0
  251. package/src/containers/project.ts +1135 -0
  252. package/src/containers/template.ts +573 -0
  253. package/src/exceptions/index.ts +29 -0
  254. package/src/index.ts +33 -0
  255. package/src/interfaces/adoc.ts +18 -0
  256. package/src/interfaces/macros.ts +54 -0
  257. package/src/interfaces/project-interfaces.ts +208 -0
  258. package/src/interfaces/request-status-interfaces.ts +30 -0
  259. package/src/interfaces/resource-interfaces.ts +179 -0
  260. package/src/macros/base-macro.ts +176 -0
  261. package/src/macros/common.ts +24 -0
  262. package/src/macros/createCards/index.ts +57 -0
  263. package/src/macros/createCards/metadata.ts +21 -0
  264. package/src/macros/graph/index.ts +130 -0
  265. package/src/macros/graph/metadata.ts +21 -0
  266. package/src/macros/index.ts +321 -0
  267. package/src/macros/report/index.ts +88 -0
  268. package/src/macros/report/metadata.ts +21 -0
  269. package/src/macros/scoreCard/index.ts +55 -0
  270. package/src/macros/scoreCard/metadata.ts +21 -0
  271. package/src/macros/task-queue.ts +79 -0
  272. package/src/module-manager.ts +443 -0
  273. package/src/permissions/action-guard.ts +77 -0
  274. package/src/project-settings.ts +140 -0
  275. package/src/resources/array-handler.ts +141 -0
  276. package/src/resources/card-type-resource.ts +455 -0
  277. package/src/resources/create-defaults.ts +216 -0
  278. package/src/resources/field-type-resource.ts +533 -0
  279. package/src/resources/file-resource.ts +433 -0
  280. package/src/resources/folder-resource.ts +140 -0
  281. package/src/resources/graph-model-resource.ts +205 -0
  282. package/src/resources/graph-view-resource.ts +199 -0
  283. package/src/resources/link-type-resource.ts +191 -0
  284. package/src/resources/report-resource.ts +224 -0
  285. package/src/resources/resource-object.ts +246 -0
  286. package/src/resources/template-resource.ts +210 -0
  287. package/src/resources/workflow-resource.ts +205 -0
  288. package/src/types/queries.ts +149 -0
  289. package/src/utils/card-utils.ts +83 -0
  290. package/src/utils/clingo-fact-builder.ts +167 -0
  291. package/src/utils/clingo-facts.ts +550 -0
  292. package/src/utils/clingo-parser.ts +519 -0
  293. package/src/utils/clingo-program-builder.ts +71 -0
  294. package/src/utils/common-utils.ts +54 -0
  295. package/src/utils/constants.ts +32 -0
  296. package/src/utils/csv.ts +53 -0
  297. package/src/utils/file-utils.ts +182 -0
  298. package/src/utils/json.ts +118 -0
  299. package/src/utils/lexorank.ts +180 -0
  300. package/src/utils/log-utils.ts +127 -0
  301. package/src/utils/random.ts +37 -0
  302. package/src/utils/resource-utils.ts +180 -0
  303. package/src/utils/sanitize-svg.ts +46 -0
  304. package/src/utils/user-preferences.ts +126 -0
  305. package/src/utils/validate.ts +66 -0
  306. package/src/utils/value-utils.ts +189 -0
@@ -0,0 +1,237 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import Handlebars from 'handlebars';
13
+ import createCards from './createCards/index.js';
14
+ import graph from './graph/index.js';
15
+ import report from './report/index.js';
16
+ import scoreCard from './scoreCard/index.js';
17
+ import { validateJson } from '../utils/validate.js';
18
+ import { DHValidationError } from '../exceptions/index.js';
19
+ import TaskQueue from './task-queue.js';
20
+ const CURLY_LEFT = '&#123;';
21
+ const CURLY_RIGHT = '&#125;';
22
+ export const macros = {
23
+ createCards,
24
+ graph,
25
+ report,
26
+ scoreCard,
27
+ };
28
+ export function validateMacroContent(macro, data, validator) {
29
+ if (!macro.schema) {
30
+ throw new Error(`Macro ${macro.name} does not have a schema`);
31
+ }
32
+ try {
33
+ return validateJson(data, {
34
+ schemaId: macro.schema,
35
+ validator,
36
+ });
37
+ }
38
+ catch (error) {
39
+ let message = `Error: ${error instanceof Error ? error.message : 'Unknown error'}`;
40
+ if (error instanceof DHValidationError) {
41
+ message = `${error.errors?.map((e) => e.message).join(', ')}`;
42
+ }
43
+ throw new Error(`${macro.name} macro JSON validation error: ${message}`);
44
+ }
45
+ }
46
+ /**
47
+ * Registers the macros with Handlebars
48
+ * @param {Mode} mode - The mode to register the macros in
49
+ */
50
+ export function registerMacros(instance, context, tasks) {
51
+ const macroInstances = [];
52
+ for (const macro of Object.keys(macros)) {
53
+ const MacroClass = macros[macro];
54
+ const macroInstance = new MacroClass(tasks);
55
+ instance.registerHelper(macro, function (options) {
56
+ if (this != null &&
57
+ typeof this === 'object' &&
58
+ '__isRaw' in this &&
59
+ this.__isRaw) {
60
+ // we use escaped chars so that they will not be re-run
61
+ return `${CURLY_LEFT}${CURLY_LEFT}#${macro}${CURLY_RIGHT}${CURLY_RIGHT}${options.fn(this)}${CURLY_LEFT}${CURLY_LEFT}/${macro}${CURLY_RIGHT}${CURLY_RIGHT}`;
62
+ }
63
+ return macroInstance.invokeMacro(context, options);
64
+ });
65
+ macroInstances.push(macroInstance);
66
+ }
67
+ instance.registerHelper('raw', function (options) {
68
+ return options.fn({
69
+ __isRaw: true,
70
+ });
71
+ });
72
+ return macroInstances;
73
+ }
74
+ /**
75
+ * Calculate amount of handlebars templates inside a string
76
+ * @param input
77
+ */
78
+ export function macroCount(input) {
79
+ const regex = /{{#[\w\s-]+?}}/g;
80
+ const match = input.match(regex);
81
+ return match ? match.length : 0;
82
+ }
83
+ /**
84
+ * Registers macros as handlebars helpers, which just leaves the macros in the content
85
+ * Can be used when your macro uses handlebars and handles content that might contain macros
86
+ * The handleMacros function will handle recursive macros so do not execute them inside your macro
87
+ * @param instance handlebars instance
88
+ */
89
+ export function registerEmptyMacros(instance) {
90
+ for (const macro of Object.keys(macros)) {
91
+ instance.registerHelper(macro, function (options) {
92
+ return `{{#${macro}}}${options.fn(this)}{{/${macro}}}`;
93
+ });
94
+ }
95
+ }
96
+ /**
97
+ * Handle the macros in the content
98
+ * @param content - The content to handle the macros in
99
+ * @param mode - The mode to handle the macros in. Inject mode will generate injectable placeholders for the macros while static mode will generate valid adoc. Validate mode will only validate the macros syntax and throw errors in case of issues.
100
+ */
101
+ export async function evaluateMacros(content, context, maxTries = 10) {
102
+ const handlebars = Handlebars.create();
103
+ const tasks = new TaskQueue();
104
+ registerMacros(handlebars, context, tasks);
105
+ let result = content;
106
+ while (maxTries-- > 0) {
107
+ tasks.reset();
108
+ const compiled = handlebars.compile(result, {
109
+ strict: true,
110
+ });
111
+ try {
112
+ result = compiled({});
113
+ await tasks.waitAll();
114
+ result = applyMacroResults(result, tasks, context);
115
+ if (macroCount(result) === 0) {
116
+ break;
117
+ }
118
+ }
119
+ catch (err) {
120
+ // This will produce a warning in the output in inject/static modes and throw an error in validate mode
121
+ return handleMacroError(err, '', context);
122
+ }
123
+ }
124
+ if (macroCount(result) !== 0) {
125
+ return handleMacroError(new Error(`Too many recursive macro evaluations.`), '', context);
126
+ }
127
+ return result.replaceAll(CURLY_LEFT, '{').replaceAll(CURLY_RIGHT, '}');
128
+ }
129
+ /**
130
+ * This function assumes that tasks, which were started by macros, are complete.
131
+ * It replaces the placeholders of the tasks with the actual results
132
+ * @param input Adoc content, which might have macro placeholders
133
+ * @param tasks The taskqueue, which was used to run the macros
134
+ * @param context General context for the macro evaluation process
135
+ * @returns Adoc, where placeholders have been replaced with the results.
136
+ * Note that the results might include new macros.
137
+ */
138
+ export function applyMacroResults(input, tasks, context) {
139
+ for (const item of tasks) {
140
+ if (item.promiseResult === null) {
141
+ input = handleMacroError(new Error(`Tried to access result before it was resolved for ${item.placeholder}`), item.macro, context);
142
+ }
143
+ else {
144
+ input = input.replace(item.placeholder, item.promiseResult);
145
+ }
146
+ }
147
+ return input;
148
+ }
149
+ /**
150
+ * Handles errors that come when handling macros
151
+ * @param error - The error that was thrown
152
+ * @param macro - The macro that caused the error
153
+ * @returns The error message that is valid adoc
154
+ */
155
+ export function handleMacroError(error, macro, context) {
156
+ let message = `Error: ${error instanceof Error ? error.message : 'Unknown error'}`;
157
+ if (error instanceof DHValidationError) {
158
+ message = `Check json syntax of macro ${macro}: ${error.errors?.map((e) => e.message).join(', ')}`;
159
+ }
160
+ if (typeof error === 'object' &&
161
+ error != null &&
162
+ 'lineNumber' in error &&
163
+ typeof error.lineNumber === 'number') {
164
+ message += ` at line ${error.lineNumber}`;
165
+ }
166
+ if (context.mode === 'validate') {
167
+ throw new Error(message);
168
+ }
169
+ else {
170
+ return createAdmonition('WARNING', 'Macro Error', message);
171
+ }
172
+ }
173
+ // This is used to generate unique keys for macros
174
+ // There might be a better way to do this
175
+ let macroCounter = 0;
176
+ /**
177
+ * Creates an injectable placeholder for a macro
178
+ * @param macro - The macro to create the placeholder for
179
+ * @param options - Options will be passed to the html element as attributes
180
+ */
181
+ export function createHtmlPlaceholder(macro, options) {
182
+ // Flatten nested objects into dot notation attributes
183
+ const flattenedOptions = {};
184
+ // Helper function to flatten nested objects
185
+ const flatten = (obj, prefix = '') => {
186
+ Object.entries(obj).forEach(([key, value]) => {
187
+ const newKey = prefix ? `${prefix}.${key}` : key;
188
+ if (value !== null &&
189
+ typeof value === 'object' &&
190
+ !Array.isArray(value)) {
191
+ // Recursively flatten nested objects
192
+ flatten(value, newKey);
193
+ }
194
+ else {
195
+ // Add leaf values to flattened options
196
+ flattenedOptions[newKey] = value;
197
+ }
198
+ });
199
+ };
200
+ flatten(options);
201
+ // Convert flattened options to attribute strings
202
+ const attributeStrings = Object.entries(flattenedOptions)
203
+ .filter(([, value]) => value !== undefined)
204
+ .map(([key, value]) => `${key}="${value}"`);
205
+ const optionString = attributeStrings.join(' ');
206
+ // start with a line change to ensure that inline passthrough +++ is on its own line
207
+ return `\n+++\n<${macro.tagName}${optionString ? ` ${optionString}` : ''} key="macro-${macroCounter++}"></${macro.tagName}>\n+++\n`;
208
+ }
209
+ /**
210
+ * Creates an adoc admonition
211
+ * @param type - The type of admonition
212
+ * @param label - The label of the admonition
213
+ * @param content - The content of the admonition
214
+ * @returns The adoc admonition as a string
215
+ */
216
+ export function createAdmonition(type, label, content) {
217
+ return `[${type}]\n.${label}\n====\n${content}\n====\n\n`;
218
+ }
219
+ /**
220
+ * Helper function for including base64 encoded images for now
221
+ * @param image base64 encoded image
222
+ * @returns valid asciidoc with the image
223
+ */
224
+ export function createImage(image) {
225
+ if (process.env.EXPORT_FORMAT) {
226
+ return `image::data:image/svg+xml;base64,${image}[]\n`;
227
+ }
228
+ else {
229
+ return `++++
230
+ <div class="cyberismo-svg-wrapper" data-type="cyberismo-svg-wrapper">
231
+ ${Buffer.from(image, 'base64').toString('utf-8')}
232
+ </div>
233
+ ++++
234
+ `;
235
+ }
236
+ }
237
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/macros/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import type { MacroOptions } from '../index.js';
13
+ import type { MacroGenerationContext } from '../../interfaces/macros.js';
14
+ import BaseMacro from '../base-macro.js';
15
+ import type TaskQueue from '../task-queue.js';
16
+ export interface ReportOptions extends MacroOptions {
17
+ name: string;
18
+ }
19
+ declare class ReportMacro extends BaseMacro {
20
+ constructor(tasksQueue: TaskQueue);
21
+ handleValidate: (input: unknown) => void;
22
+ handleStatic: (context: MacroGenerationContext, data: unknown) => Promise<string>;
23
+ handleInject: (context: MacroGenerationContext, data: unknown) => Promise<string>;
24
+ private validate;
25
+ }
26
+ export default ReportMacro;
@@ -0,0 +1,70 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import { registerEmptyMacros, validateMacroContent } from '../index.js';
13
+ import macroMetadata from './metadata.js';
14
+ import { Project } from '../../containers/project.js';
15
+ import { Calculate } from '../../commands/index.js';
16
+ import Handlebars from 'handlebars';
17
+ import BaseMacro from '../base-macro.js';
18
+ import { validateJson } from '../../utils/validate.js';
19
+ import { ReportResource } from '../../resources/report-resource.js';
20
+ import { resourceName } from '../../utils/resource-utils.js';
21
+ class ReportMacro extends BaseMacro {
22
+ constructor(tasksQueue) {
23
+ super(macroMetadata, tasksQueue);
24
+ }
25
+ handleValidate = (input) => {
26
+ this.validate(input);
27
+ };
28
+ handleStatic = async (context, data) => {
29
+ return this.handleInject(context, data);
30
+ };
31
+ handleInject = async (context, data) => {
32
+ const options = this.validate(data);
33
+ const project = new Project(context.projectPath);
34
+ const resource = new ReportResource(project, resourceName(options.name));
35
+ const report = await resource.show();
36
+ if (!report)
37
+ throw new Error(`Report ${options} does not exist`);
38
+ if (report.schema) {
39
+ validateJson(options, {
40
+ schema: report.schema,
41
+ });
42
+ }
43
+ const handlebarsContext = {
44
+ cardKey: context.cardKey,
45
+ ...options,
46
+ };
47
+ const handlebars = Handlebars.create();
48
+ const template = handlebars.compile(report.queryTemplate, {
49
+ strict: true,
50
+ });
51
+ const calculate = new Calculate(project);
52
+ const result = await calculate.runLogicProgram({
53
+ query: template(handlebarsContext),
54
+ });
55
+ if (result.error) {
56
+ throw new Error(result.error);
57
+ }
58
+ // register empty macros so that other macros aren't touched yet
59
+ registerEmptyMacros(handlebars);
60
+ return handlebars.compile(report.contentTemplate)({
61
+ ...handlebarsContext,
62
+ ...result,
63
+ });
64
+ };
65
+ validate(data) {
66
+ return validateMacroContent(this.metadata, data);
67
+ }
68
+ }
69
+ export default ReportMacro;
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/macros/report/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxE,OAAO,aAAa,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAM7D,MAAM,WAAY,SAAQ,SAAS;IACjC,YAAY,UAAqB;QAC/B,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IACD,cAAc,GAAG,CAAC,KAAc,EAAE,EAAE;QAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,YAAY,GAAG,KAAK,EAAE,OAA+B,EAAE,IAAa,EAAE,EAAE;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,YAAY,GAAG,KAAK,EAAE,OAA+B,EAAE,IAAa,EAAE,EAAE;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,iBAAiB,CAAC,CAAC;QAEjE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,YAAY,CAAC,OAAO,EAAE;gBACpB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,iBAAiB,GAAG;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,OAAO;SACX,CAAC;QAEF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAEvC,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;YACxD,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC;YAC7C,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC;SACnC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,gEAAgE;QAChE,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAEhC,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAChD,GAAG,iBAAiB;YACpB,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC,CAAC;IAEM,QAAQ,CAAC,IAAa;QAC5B,OAAO,oBAAoB,CAAgB,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;CACF;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import type { MacroMetadata } from '../../interfaces/macros.js';
13
+ declare const macroMetadata: MacroMetadata;
14
+ export default macroMetadata;
@@ -0,0 +1,18 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ const macroMetadata = {
13
+ name: 'report',
14
+ tagName: 'report',
15
+ schema: 'reportMacroBaseSchema',
16
+ };
17
+ export default macroMetadata;
18
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/macros/report/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAIF,MAAM,aAAa,GAAkB;IACnC,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,uBAAuB;CAChC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import type { MacroOptions } from '../index.js';
13
+ import type { MacroGenerationContext } from '../../interfaces/macros.js';
14
+ import BaseMacro from '../base-macro.js';
15
+ import type TaskQueue from '../task-queue.js';
16
+ export interface ScoreCardOptions extends MacroOptions {
17
+ title?: string;
18
+ value: number;
19
+ unit?: string;
20
+ legend?: string;
21
+ }
22
+ declare class ScoreCardMacro extends BaseMacro {
23
+ constructor(tasksQueue: TaskQueue);
24
+ handleValidate: (data: string) => void;
25
+ handleStatic: (context: MacroGenerationContext, input: unknown) => Promise<string>;
26
+ handleInject: (_: MacroGenerationContext, input: unknown) => Promise<string>;
27
+ private validate;
28
+ private createAsciidocElement;
29
+ }
30
+ export default ScoreCardMacro;
@@ -0,0 +1,38 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import { createHtmlPlaceholder, validateMacroContent } from '../index.js';
13
+ import macroMetadata from './metadata.js';
14
+ import BaseMacro from '../base-macro.js';
15
+ class ScoreCardMacro extends BaseMacro {
16
+ constructor(tasksQueue) {
17
+ super(macroMetadata, tasksQueue);
18
+ }
19
+ handleValidate = (data) => {
20
+ this.validate(data);
21
+ };
22
+ handleStatic = async (context, input) => {
23
+ const options = this.validate(input);
24
+ return this.createAsciidocElement(options);
25
+ };
26
+ handleInject = async (_, input) => {
27
+ const options = this.validate(input);
28
+ return createHtmlPlaceholder(this.metadata, options);
29
+ };
30
+ validate(input) {
31
+ return validateMacroContent(this.metadata, input);
32
+ }
33
+ createAsciidocElement(options) {
34
+ return `\n----\n${options.title}: ${options.value} ${options.unit ?? ''} ${options.legend ?? ''}\n----\n`;
35
+ }
36
+ }
37
+ export default ScoreCardMacro;
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/macros/scoreCard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAGF,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG1E,OAAO,aAAa,MAAM,eAAe,CAAC;AAC1C,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAUzC,MAAM,cAAe,SAAQ,SAAS;IACpC,YAAY,UAAqB;QAC/B,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IACD,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,YAAY,GAAG,KAAK,EAAE,OAA+B,EAAE,KAAc,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,YAAY,GAAG,KAAK,EAAE,CAAyB,EAAE,KAAc,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC;IAEM,QAAQ,CAAC,KAAc;QAC7B,OAAO,oBAAoB,CAAmB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAEO,qBAAqB,CAAC,OAAyB;QACrD,OAAO,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,UAAU,CAAC;IAC5G,CAAC;CACF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import type { MacroMetadata } from '../../interfaces/macros.js';
13
+ declare const macroMetadata: MacroMetadata;
14
+ export default macroMetadata;
@@ -0,0 +1,18 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ const macroMetadata = {
13
+ name: 'scoreCard',
14
+ tagName: 'score-card',
15
+ schema: 'scoreCardMacroSchema',
16
+ };
17
+ export default macroMetadata;
18
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/macros/scoreCard/metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAIF,MAAM,aAAa,GAAkB;IACnC,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,sBAAsB;CAC/B,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ import type { MacroTaskState } from '../interfaces/macros.js';
13
+ export default class TaskQueue {
14
+ private tasks;
15
+ /**
16
+ * Pushes a task to the task queue
17
+ * @param task The task to push
18
+ */
19
+ push(task: MacroTaskState): void;
20
+ /**
21
+ * Finds an existing task based on its id
22
+ * @param globalId unique id across both macro classes and instances
23
+ * @param localId Id within the instance
24
+ * @returns task if found else undefined
25
+ */
26
+ find(globalId: string, localId: number): MacroTaskState | undefined;
27
+ /**
28
+ * Waits for all tasks to be done
29
+ */
30
+ waitAll(): Promise<void>;
31
+ /**
32
+ * Waits for a single task to be done
33
+ * @param task task to wait
34
+ */
35
+ waitTask(task: MacroTaskState): Promise<void>;
36
+ /**
37
+ * Removes all tasks. If they are running, they continue to run because they are promises
38
+ */
39
+ reset(): Promise<void>;
40
+ /**
41
+ * When iterating over task queue, it'll return each task
42
+ */
43
+ [Symbol.iterator](): {
44
+ next(): IteratorResult<MacroTaskState>;
45
+ };
46
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2024
4
+
5
+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
6
+
7
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
8
+
9
+ You should have received a copy of the GNU Affero General Public
10
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
+ */
12
+ export default class TaskQueue {
13
+ tasks = [];
14
+ /**
15
+ * Pushes a task to the task queue
16
+ * @param task The task to push
17
+ */
18
+ push(task) {
19
+ this.tasks.push(task);
20
+ }
21
+ /**
22
+ * Finds an existing task based on its id
23
+ * @param globalId unique id across both macro classes and instances
24
+ * @param localId Id within the instance
25
+ * @returns task if found else undefined
26
+ */
27
+ find(globalId, localId) {
28
+ return this.tasks.find((task) => task.globalId === globalId && task.localId === localId);
29
+ }
30
+ /**
31
+ * Waits for all tasks to be done
32
+ */
33
+ async waitAll() {
34
+ for (const task of this.tasks) {
35
+ await task.promise;
36
+ }
37
+ }
38
+ /**
39
+ * Waits for a single task to be done
40
+ * @param task task to wait
41
+ */
42
+ async waitTask(task) {
43
+ await task.promise;
44
+ }
45
+ /**
46
+ * Removes all tasks. If they are running, they continue to run because they are promises
47
+ */
48
+ async reset() {
49
+ this.tasks = [];
50
+ }
51
+ /**
52
+ * When iterating over task queue, it'll return each task
53
+ */
54
+ [Symbol.iterator]() {
55
+ let index = 0;
56
+ const tasks = this.tasks;
57
+ return {
58
+ next() {
59
+ if (index < tasks.length) {
60
+ return { value: tasks[index++], done: false };
61
+ }
62
+ else {
63
+ return { value: undefined, done: true };
64
+ }
65
+ },
66
+ };
67
+ }
68
+ }
69
+ //# sourceMappingURL=task-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../src/macros/task-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAIF,MAAM,CAAC,OAAO,OAAO,SAAS;IACpB,KAAK,GAAqB,EAAE,CAAC;IAErC;;;OAGG;IACI,IAAI,CAAC,IAAoB;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,QAAgB,EAAE,OAAe;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CACjE,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ,CAAC,IAAoB;QACxC,MAAM,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,OAAO;YACL,IAAI;gBACF,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBACzB,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBAC1C,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}