@cyberismo/backend 0.0.7 → 0.0.9

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 (152) hide show
  1. package/dist/app.js +22 -8
  2. package/dist/app.js.map +1 -1
  3. package/dist/common/validationSchemas.js +39 -0
  4. package/dist/common/validationSchemas.js.map +1 -0
  5. package/dist/domain/calculations/index.js +50 -0
  6. package/dist/domain/calculations/index.js.map +1 -0
  7. package/dist/domain/calculations/schema.js +17 -0
  8. package/dist/domain/calculations/schema.js.map +1 -0
  9. package/dist/domain/calculations/service.js +16 -0
  10. package/dist/domain/calculations/service.js.map +1 -0
  11. package/dist/domain/cardTypes/index.js +86 -0
  12. package/dist/domain/cardTypes/index.js.map +1 -0
  13. package/dist/domain/cardTypes/schema.js +19 -0
  14. package/dist/domain/cardTypes/schema.js.map +1 -0
  15. package/dist/domain/cardTypes/service.js +20 -0
  16. package/dist/domain/cardTypes/service.js.map +1 -0
  17. package/dist/{routes/cards.js → domain/cards/index.js} +52 -223
  18. package/dist/domain/cards/index.js.map +1 -0
  19. package/dist/domain/cards/lib.js +80 -0
  20. package/dist/domain/cards/lib.js.map +1 -0
  21. package/dist/domain/cards/service.js +178 -0
  22. package/dist/domain/cards/service.js.map +1 -0
  23. package/dist/domain/fieldTypes/index.js +87 -0
  24. package/dist/domain/fieldTypes/index.js.map +1 -0
  25. package/dist/domain/fieldTypes/schema.js +30 -0
  26. package/dist/domain/fieldTypes/schema.js.map +1 -0
  27. package/dist/domain/fieldTypes/service.js +24 -0
  28. package/dist/domain/fieldTypes/service.js.map +1 -0
  29. package/dist/domain/graphModels/index.js +50 -0
  30. package/dist/domain/graphModels/index.js.map +1 -0
  31. package/dist/domain/graphModels/schema.js +18 -0
  32. package/dist/domain/graphModels/schema.js.map +1 -0
  33. package/dist/domain/graphModels/service.js +16 -0
  34. package/dist/domain/graphModels/service.js.map +1 -0
  35. package/dist/domain/graphViews/index.js +50 -0
  36. package/dist/domain/graphViews/index.js.map +1 -0
  37. package/dist/domain/graphViews/schema.js +6 -0
  38. package/dist/domain/graphViews/schema.js.map +1 -0
  39. package/dist/domain/graphViews/service.js +16 -0
  40. package/dist/domain/graphViews/service.js.map +1 -0
  41. package/dist/domain/linkTypes/index.js +76 -0
  42. package/dist/domain/linkTypes/index.js.map +1 -0
  43. package/dist/domain/linkTypes/schema.js +18 -0
  44. package/dist/domain/linkTypes/schema.js.map +1 -0
  45. package/dist/domain/linkTypes/service.js +24 -0
  46. package/dist/domain/linkTypes/service.js.map +1 -0
  47. package/dist/domain/logicPrograms/index.js +25 -0
  48. package/dist/domain/logicPrograms/index.js.map +1 -0
  49. package/dist/domain/logicPrograms/service.js +9 -0
  50. package/dist/domain/logicPrograms/service.js.map +1 -0
  51. package/dist/domain/reports/index.js +50 -0
  52. package/dist/domain/reports/index.js.map +1 -0
  53. package/dist/domain/reports/schema.js +18 -0
  54. package/dist/domain/reports/schema.js.map +1 -0
  55. package/dist/domain/reports/service.js +16 -0
  56. package/dist/domain/reports/service.js.map +1 -0
  57. package/dist/domain/resources/index.js +125 -0
  58. package/dist/domain/resources/index.js.map +1 -0
  59. package/dist/domain/resources/schema.js +9 -0
  60. package/dist/domain/resources/schema.js.map +1 -0
  61. package/dist/domain/resources/service.js +258 -0
  62. package/dist/domain/resources/service.js.map +1 -0
  63. package/dist/domain/templates/index.js +81 -0
  64. package/dist/domain/templates/index.js.map +1 -0
  65. package/dist/domain/templates/schema.js +18 -0
  66. package/dist/domain/templates/schema.js.map +1 -0
  67. package/dist/domain/templates/service.js +23 -0
  68. package/dist/domain/templates/service.js.map +1 -0
  69. package/dist/domain/tree/index.js +44 -0
  70. package/dist/domain/tree/index.js.map +1 -0
  71. package/dist/domain/tree/service.js +17 -0
  72. package/dist/domain/tree/service.js.map +1 -0
  73. package/dist/domain/workflows/index.js +50 -0
  74. package/dist/domain/workflows/index.js.map +1 -0
  75. package/dist/domain/workflows/schema.js +18 -0
  76. package/dist/domain/workflows/schema.js.map +1 -0
  77. package/dist/domain/workflows/service.js +16 -0
  78. package/dist/domain/workflows/service.js.map +1 -0
  79. package/dist/export.js +3 -3
  80. package/dist/export.js.map +1 -1
  81. package/dist/middleware/zvalidator.js +8 -0
  82. package/dist/middleware/zvalidator.js.map +1 -0
  83. package/dist/public/THIRD-PARTY.txt +2452 -296
  84. package/dist/public/assets/index-CXcBl8RN.js +161392 -0
  85. package/dist/public/cropped-favicon-180x180.png +0 -0
  86. package/dist/public/cropped-favicon-192x192.png +0 -0
  87. package/dist/public/cropped-favicon-270x270.png +0 -0
  88. package/dist/public/cropped-favicon-32x32.png +0 -0
  89. package/dist/public/index.html +8 -1
  90. package/dist/types.js +14 -0
  91. package/dist/types.js.map +1 -0
  92. package/dist/utils.js +3 -1
  93. package/dist/utils.js.map +1 -1
  94. package/package.json +7 -3
  95. package/src/app.ts +22 -8
  96. package/src/common/validationSchemas.ts +46 -0
  97. package/src/domain/calculations/index.ts +54 -0
  98. package/src/domain/calculations/schema.ts +18 -0
  99. package/src/domain/calculations/service.ts +21 -0
  100. package/src/domain/cardTypes/index.ts +96 -0
  101. package/src/domain/cardTypes/schema.ts +19 -0
  102. package/src/domain/cardTypes/service.ts +28 -0
  103. package/src/{routes/cards.ts → domain/cards/index.ts} +82 -270
  104. package/src/domain/cards/lib.ts +103 -0
  105. package/src/domain/cards/service.ts +254 -0
  106. package/src/domain/fieldTypes/index.ts +97 -0
  107. package/src/domain/fieldTypes/schema.ts +30 -0
  108. package/src/domain/fieldTypes/service.ts +38 -0
  109. package/src/domain/graphModels/index.ts +54 -0
  110. package/src/domain/graphModels/schema.ts +18 -0
  111. package/src/domain/graphModels/service.ts +21 -0
  112. package/src/domain/graphViews/index.ts +53 -0
  113. package/src/domain/graphViews/schema.ts +6 -0
  114. package/src/domain/graphViews/service.ts +20 -0
  115. package/src/domain/linkTypes/index.ts +84 -0
  116. package/src/domain/linkTypes/schema.ts +19 -0
  117. package/src/domain/linkTypes/service.ts +34 -0
  118. package/src/domain/logicPrograms/index.ts +35 -0
  119. package/src/domain/logicPrograms/service.ts +25 -0
  120. package/src/domain/reports/index.ts +54 -0
  121. package/src/domain/reports/schema.ts +19 -0
  122. package/src/domain/reports/service.ts +21 -0
  123. package/src/domain/resources/index.ts +164 -0
  124. package/src/domain/resources/schema.ts +19 -0
  125. package/src/domain/resources/service.ts +436 -0
  126. package/src/domain/templates/index.ts +89 -0
  127. package/src/domain/templates/schema.ts +19 -0
  128. package/src/domain/templates/service.ts +29 -0
  129. package/src/domain/tree/index.ts +50 -0
  130. package/src/domain/tree/service.ts +22 -0
  131. package/src/domain/workflows/index.ts +54 -0
  132. package/src/domain/workflows/schema.ts +19 -0
  133. package/src/domain/workflows/service.ts +21 -0
  134. package/src/export.ts +9 -5
  135. package/src/middleware/commandManager.ts +1 -1
  136. package/src/middleware/zvalidator.ts +17 -0
  137. package/src/types.ts +20 -0
  138. package/src/utils.ts +4 -2
  139. package/dist/public/assets/index-D5kiRHuF.js +0 -111171
  140. package/dist/routes/cards.js.map +0 -1
  141. package/dist/routes/fieldTypes.js +0 -42
  142. package/dist/routes/fieldTypes.js.map +0 -1
  143. package/dist/routes/linkTypes.js +0 -42
  144. package/dist/routes/linkTypes.js.map +0 -1
  145. package/dist/routes/templates.js +0 -46
  146. package/dist/routes/templates.js.map +0 -1
  147. package/dist/routes/tree.js +0 -40
  148. package/dist/routes/tree.js.map +0 -1
  149. package/src/routes/fieldTypes.ts +0 -53
  150. package/src/routes/linkTypes.ts +0 -53
  151. package/src/routes/templates.ts +0 -52
  152. package/src/routes/tree.ts +0 -45
@@ -1,19 +1,19 @@
1
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/>.
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2025
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
11
12
  */
12
13
  import { Hono } from 'hono';
13
- import Processor from '@asciidoctor/core';
14
- import { CardLocation, } from '@cyberismo/data-handler/interfaces/project-interfaces';
15
- import { evaluateMacros } from '@cyberismo/data-handler';
16
- import { getCardQueryResult, isSSGContext, ssgParams } from '../export.js';
14
+ import { ssgParams, isSSGContext } from '../../export.js';
15
+ import { getCardDetails } from './lib.js';
16
+ import * as cardService from './service.js';
17
17
  const router = new Hono();
18
18
  /**
19
19
  * @swagger
@@ -31,89 +31,14 @@ const router = new Hono();
31
31
  */
32
32
  router.get('/', async (c) => {
33
33
  const commands = c.get('commands');
34
- const projectResponse = await commands.showCmd.showProject();
35
- const workflowsResponse = await commands.showCmd.showWorkflowsWithDetails();
36
- if (!workflowsResponse) {
37
- return c.text(`No workflows found from path ${c.get('projectPath')}`, 500);
38
- }
39
- const cardTypesResponse = await commands.showCmd.showCardTypesWithDetails();
40
- if (!cardTypesResponse) {
41
- return c.text(`No card types found from path ${c.get('projectPath')}`, 500);
42
- }
43
- const cardsResponse = await commands.showCmd.showProjectCards();
44
- if (!cardsResponse) {
45
- return c.text(`No cards found from path ${c.get('projectPath')}`, 500);
46
- }
47
- const response = {
48
- name: projectResponse.name,
49
- cards: cardsResponse,
50
- workflows: workflowsResponse,
51
- cardTypes: cardTypesResponse,
52
- };
53
- return c.json(response);
54
- });
55
- async function getCardDetails(commands, key, staticMode) {
56
- const fetchCardDetails = {
57
- attachments: true,
58
- children: false,
59
- content: true,
60
- contentType: 'adoc',
61
- metadata: false,
62
- parent: false,
63
- location: CardLocation.projectOnly,
64
- };
65
- let cardDetailsResponse;
66
- try {
67
- cardDetailsResponse = await commands.showCmd.showCardDetails(fetchCardDetails, key);
68
- }
69
- catch {
70
- return { status: 400, message: `Card ${key} not found from project` };
71
- }
72
- if (!cardDetailsResponse) {
73
- return { status: 400, message: `Card ${key} not found from project` };
74
- }
75
- let asciidocContent = '';
76
34
  try {
77
- asciidocContent = await evaluateMacros(cardDetailsResponse.content || '', {
78
- mode: staticMode ? 'static' : 'inject',
79
- project: commands.project,
80
- cardKey: key,
81
- }, commands.calculateCmd);
35
+ const response = await cardService.getProjectInfo(commands);
36
+ return c.json(response);
82
37
  }
83
38
  catch (error) {
84
- asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${asciidocContent}`;
85
- }
86
- const htmlContent = Processor()
87
- .convert(asciidocContent, {
88
- safe: 'safe',
89
- attributes: {
90
- imagesdir: `/api/cards/${key}/a`,
91
- icons: 'font',
92
- },
93
- })
94
- .toString();
95
- // always parse for now if not in export mode
96
- if (!staticMode) {
97
- await commands.calculateCmd.generate();
98
- }
99
- const card = staticMode
100
- ? await getCardQueryResult(commands.project.basePath, key)
101
- : await commands.calculateCmd.runQuery('card', {
102
- cardKey: key,
103
- });
104
- if (card.length !== 1) {
105
- throw new Error('Query failed. Check card-query syntax');
106
- }
107
- return {
108
- status: 200,
109
- data: {
110
- ...card[0],
111
- rawContent: cardDetailsResponse.content || '',
112
- parsedContent: htmlContent,
113
- attachments: cardDetailsResponse.attachments,
114
- },
115
- };
116
- }
39
+ return c.text(`${error instanceof Error ? error.message : 'Unknown error'} from path ${c.get('projectPath')}`, 500);
40
+ }
41
+ });
117
42
  /**
118
43
  * @swagger
119
44
  * /api/cards/{key}:
@@ -135,12 +60,8 @@ async function getCardDetails(commands, key, staticMode) {
135
60
  */
136
61
  router.get('/:key', ssgParams(async (c) => {
137
62
  const commands = c.get('commands');
138
- const fetchedCards = await commands.showCmd.showCards(CardLocation.projectOnly);
139
- const projectCards = fetchedCards.find((cardContainer) => cardContainer.type === 'project');
140
- if (!projectCards) {
141
- throw new Error('Data handler did not return project cards');
142
- }
143
- return projectCards.cards.map((key) => ({ key }));
63
+ const cards = await cardService.getAllCards(commands);
64
+ return cards.map((key) => ({ key }));
144
65
  }), async (c) => {
145
66
  const key = c.req.param('key');
146
67
  if (!key) {
@@ -193,72 +114,19 @@ router.patch('/:key', async (c) => {
193
114
  return c.text('No search key', 400);
194
115
  }
195
116
  const body = await c.req.json();
196
- let successes = 0;
197
- const errors = [];
198
- if (body.state) {
199
- try {
200
- await commands.transitionCmd.cardTransition(key, body.state);
201
- successes++;
202
- }
203
- catch (error) {
204
- if (error instanceof Error)
205
- errors.push(error.message);
206
- }
207
- }
208
- if (body.content != null) {
209
- try {
210
- await commands.editCmd.editCardContent(key, body.content);
211
- successes++;
212
- }
213
- catch (error) {
214
- if (error instanceof Error)
215
- errors.push(error.message);
216
- }
217
- }
218
- if (body.metadata) {
219
- for (const [metadataKey, metadataValue] of Object.entries(body.metadata)) {
220
- const value = metadataValue;
221
- try {
222
- await commands.editCmd.editCardMetadata(key, metadataKey, value);
223
- successes++;
224
- }
225
- catch (error) {
226
- if (error instanceof Error)
227
- errors.push(error.message);
228
- }
229
- }
230
- }
231
- if (body.parent) {
232
- try {
233
- await commands.moveCmd.moveCard(key, body.parent);
234
- successes++;
235
- }
236
- catch (error) {
237
- if (error instanceof Error)
238
- errors.push(error.message);
239
- }
240
- }
241
- if (body.index != null) {
242
- try {
243
- await commands.moveCmd.rankByIndex(key, body.index);
244
- successes++;
117
+ try {
118
+ const result = await cardService.updateCard(commands, key, body);
119
+ if (result.status === 200) {
120
+ return c.json(result.data);
245
121
  }
246
- catch (error) {
247
- if (error instanceof Error)
248
- errors.push(error.message);
122
+ else {
123
+ return c.json({
124
+ error: result.message || 'Unknown error',
125
+ }, result.status);
249
126
  }
250
127
  }
251
- if (errors.length > 0) {
252
- return c.text(errors.join('\n'), 400);
253
- }
254
- const result = await getCardDetails(commands, key);
255
- if (result.status === 200) {
256
- return c.json(result.data);
257
- }
258
- else {
259
- return c.json({
260
- error: result.message || 'Unknown error',
261
- }, result.status);
128
+ catch (error) {
129
+ return c.text(error instanceof Error ? error.message : 'Unknown error', 400);
262
130
  }
263
131
  });
264
132
  /**
@@ -288,7 +156,7 @@ router.delete('/:key', async (c) => {
288
156
  return c.text('No search key', 400);
289
157
  }
290
158
  try {
291
- await commands.removeCmd.remove('card', key);
159
+ await cardService.deleteCard(commands, key);
292
160
  return new Response(null, { status: 204 });
293
161
  }
294
162
  catch (error) {
@@ -330,12 +198,7 @@ router.post('/:key', async (c) => {
330
198
  return c.text('template is required', 400);
331
199
  }
332
200
  try {
333
- const result = await c
334
- .get('commands')
335
- .createCmd.createCard(body.template, key === 'root' ? undefined : key);
336
- if (result.length === 0) {
337
- return c.json({ error: 'No cards created' }, 400);
338
- }
201
+ const result = await cardService.createCard(c.get('commands'), body.template, key);
339
202
  return c.json(result);
340
203
  }
341
204
  catch (error) {
@@ -384,18 +247,8 @@ router.post('/:key/attachments', async (c) => {
384
247
  if (!files || files.length === 0) {
385
248
  return c.json({ error: 'No files uploaded' }, 400);
386
249
  }
387
- const succeeded = [];
388
- for (const file of files) {
389
- if (file instanceof File) {
390
- const buffer = await file.arrayBuffer();
391
- await commands.createCmd.createAttachment(key, file.name, Buffer.from(buffer));
392
- succeeded.push(file.name);
393
- }
394
- }
395
- return c.json({
396
- message: 'Attachments uploaded successfully',
397
- files: succeeded,
398
- });
250
+ const result = await cardService.uploadAttachments(commands, key, files);
251
+ return c.json(result);
399
252
  }
400
253
  catch (error) {
401
254
  return c.json({
@@ -433,8 +286,8 @@ router.delete('/:key/attachments/:filename', async (c) => {
433
286
  const commands = c.get('commands');
434
287
  const { key, filename } = c.req.param();
435
288
  try {
436
- await commands.removeCmd.remove('attachment', key, filename);
437
- return c.json({ message: 'Attachment removed successfully' });
289
+ const result = await cardService.removeAttachment(commands, key, filename);
290
+ return c.json(result);
438
291
  }
439
292
  catch (error) {
440
293
  return c.json({
@@ -472,8 +325,8 @@ router.post('/:key/attachments/:filename/open', async (c) => {
472
325
  const commands = c.get('commands');
473
326
  const { key, filename } = c.req.param();
474
327
  try {
475
- await commands.showCmd.openAttachment(key, filename);
476
- return c.json({ message: 'Attachment opened successfully' });
328
+ const result = await cardService.openAttachment(commands, key, filename);
329
+ return c.json(result);
477
330
  }
478
331
  catch (error) {
479
332
  return c.json({
@@ -516,28 +369,8 @@ router.post('/:key/parse', async (c) => {
516
369
  return c.json({ error: 'Content is required' }, 400);
517
370
  }
518
371
  try {
519
- let asciidocContent = '';
520
- try {
521
- asciidocContent = await evaluateMacros(content, {
522
- mode: 'inject',
523
- project: commands.project,
524
- cardKey: key,
525
- }, commands.calculateCmd);
526
- }
527
- catch (error) {
528
- asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${content}`;
529
- }
530
- const processor = Processor();
531
- const parsedContent = processor
532
- .convert(asciidocContent, {
533
- safe: 'safe',
534
- attributes: {
535
- imagesdir: `/api/cards/${key}/a`,
536
- icons: 'font',
537
- },
538
- })
539
- .toString();
540
- return c.json({ parsedContent });
372
+ const result = await cardService.parseContent(commands, key, content);
373
+ return c.json(result);
541
374
  }
542
375
  catch (error) {
543
376
  return c.json({
@@ -584,8 +417,8 @@ router.post('/:key/links', async (c) => {
584
417
  return c.json({ error: 'toCard and linkType are required' }, 400);
585
418
  }
586
419
  try {
587
- await commands.createCmd.createLink(key, toCard, linkType, description);
588
- return c.json({ message: 'Link created successfully' });
420
+ const result = await cardService.createLink(commands, key, toCard, linkType, description);
421
+ return c.json(result);
589
422
  }
590
423
  catch (error) {
591
424
  return c.json({
@@ -632,8 +465,8 @@ router.delete('/:key/links', async (c) => {
632
465
  return c.json({ error: 'toCard and linkType are required' }, 400);
633
466
  }
634
467
  try {
635
- await commands.removeCmd.remove('link', key, toCard, linkType, description);
636
- return c.json({ message: 'Link removed successfully' });
468
+ const result = await cardService.removeLink(commands, key, toCard, linkType, description);
469
+ return c.json(result);
637
470
  }
638
471
  catch (error) {
639
472
  return c.json({
@@ -667,11 +500,7 @@ router.delete('/:key/links', async (c) => {
667
500
  */
668
501
  router.get('/:key/a/:attachment', ssgParams(async (c) => {
669
502
  const commands = c.get('commands');
670
- const attachments = await commands.showCmd.showAttachments();
671
- return attachments.map((attachment) => ({
672
- key: attachment.card,
673
- attachment: attachment.fileName,
674
- }));
503
+ return await cardService.getAllAttachments(commands);
675
504
  }), async (c) => {
676
505
  const commands = c.get('commands');
677
506
  const { key, attachment } = c.req.param();
@@ -680,10 +509,8 @@ router.get('/:key/a/:attachment', ssgParams(async (c) => {
680
509
  return c.text('Missing cardKey or filename', 400);
681
510
  }
682
511
  try {
683
- const attachmentResponse = await commands.showCmd.showAttachment(key, filename);
684
- if (!attachmentResponse) {
685
- return c.text(`No attachment found from card ${key} and filename ${filename}`, 404);
686
- }
512
+ const attachmentResponse = await cardService.getAttachment(commands, key, filename);
513
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
687
514
  const payload = attachmentResponse;
688
515
  return new Response(payload.fileBuffer, {
689
516
  headers: {
@@ -693,11 +520,13 @@ router.get('/:key/a/:attachment', ssgParams(async (c) => {
693
520
  },
694
521
  });
695
522
  }
696
- catch {
523
+ catch (error) {
697
524
  return c.json({
698
- error: `No attachment found from card ${key} and filename ${filename}`,
525
+ error: error instanceof Error
526
+ ? error.message
527
+ : `No attachment found from card ${key} and filename ${filename}`,
699
528
  }, 404);
700
529
  }
701
530
  });
702
531
  export default router;
703
- //# sourceMappingURL=cards.js.map
532
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/cards/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2025
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import Processor from '@asciidoctor/core';
14
+ import { CardLocation, } from '@cyberismo/data-handler/interfaces/project-interfaces';
15
+ import { evaluateMacros } from '@cyberismo/data-handler';
16
+ import { getCardQueryResult } from '../../export.js';
17
+ export async function getCardDetails(commands, key, staticMode) {
18
+ const fetchCardDetails = {
19
+ attachments: true,
20
+ children: false,
21
+ content: true,
22
+ contentType: 'adoc',
23
+ metadata: false,
24
+ parent: false,
25
+ location: CardLocation.all,
26
+ };
27
+ let cardDetailsResponse;
28
+ try {
29
+ cardDetailsResponse = await commands.showCmd.showCardDetails(fetchCardDetails, key);
30
+ }
31
+ catch {
32
+ return { status: 400, message: `Card ${key} not found from project` };
33
+ }
34
+ if (!cardDetailsResponse) {
35
+ return { status: 400, message: `Card ${key} not found from project` };
36
+ }
37
+ // always parse for now if not in export mode
38
+ if (!staticMode) {
39
+ await commands.calculateCmd.generate();
40
+ }
41
+ let asciidocContent = '';
42
+ try {
43
+ asciidocContent = await evaluateMacros(cardDetailsResponse.content || '', {
44
+ context: staticMode ? 'exportedSite' : 'localApp',
45
+ mode: staticMode ? 'static' : 'inject',
46
+ project: commands.project,
47
+ cardKey: key,
48
+ });
49
+ }
50
+ catch (error) {
51
+ asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${asciidocContent}`;
52
+ }
53
+ const htmlContent = Processor()
54
+ .convert(asciidocContent, {
55
+ safe: 'safe',
56
+ attributes: {
57
+ imagesdir: `/api/cards/${key}/a`,
58
+ icons: 'font',
59
+ },
60
+ })
61
+ .toString();
62
+ const card = staticMode
63
+ ? await getCardQueryResult(commands.project.basePath, key)
64
+ : await commands.calculateCmd.runQuery('card', 'localApp', {
65
+ cardKey: key,
66
+ });
67
+ if (card.length !== 1) {
68
+ throw new Error('Query failed. Check card-query syntax');
69
+ }
70
+ return {
71
+ status: 200,
72
+ data: {
73
+ ...card[0],
74
+ rawContent: cardDetailsResponse.content || '',
75
+ parsedContent: htmlContent,
76
+ attachments: cardDetailsResponse.attachments,
77
+ },
78
+ };
79
+ }
80
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/domain/cards/lib.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ Cyberismo
3
+ Copyright © Cyberismo Ltd and contributors 2025
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU Affero General Public License version 3 as published by
6
+ the Free Software Foundation.
7
+ This program is distributed in the hope that it will be useful, but WITHOUT
8
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
+ FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
10
+ details. You should have received a copy of the GNU Affero General Public
11
+ License along with this program. If not, see <https://www.gnu.org/licenses/>.
12
+ */
13
+ import Processor from '@asciidoctor/core';
14
+ import { CardLocation, } from '@cyberismo/data-handler/interfaces/project-interfaces';
15
+ import { evaluateMacros } from '@cyberismo/data-handler';
16
+ import { getCardDetails } from './lib.js';
17
+ export async function getProjectInfo(commands) {
18
+ const projectResponse = await commands.showCmd.showProject();
19
+ const workflowsResponse = await commands.showCmd.showWorkflowsWithDetails();
20
+ if (!workflowsResponse) {
21
+ throw new Error('No workflows found');
22
+ }
23
+ const cardTypesResponse = await commands.showCmd.showCardTypesWithDetails();
24
+ if (!cardTypesResponse) {
25
+ throw new Error('No card types found');
26
+ }
27
+ return {
28
+ name: projectResponse.name,
29
+ prefix: projectResponse.prefix,
30
+ workflows: workflowsResponse,
31
+ cardTypes: cardTypesResponse,
32
+ };
33
+ }
34
+ export async function updateCard(commands, key,
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ body) {
37
+ const errors = [];
38
+ if (body.state) {
39
+ try {
40
+ await commands.transitionCmd.cardTransition(key, body.state);
41
+ }
42
+ catch (error) {
43
+ if (error instanceof Error)
44
+ errors.push(error.message);
45
+ }
46
+ }
47
+ if (body.content != null) {
48
+ try {
49
+ await commands.editCmd.editCardContent(key, body.content);
50
+ }
51
+ catch (error) {
52
+ if (error instanceof Error)
53
+ errors.push(error.message);
54
+ }
55
+ }
56
+ if (body.metadata) {
57
+ for (const [metadataKey, metadataValue] of Object.entries(body.metadata)) {
58
+ const value = metadataValue;
59
+ try {
60
+ await commands.editCmd.editCardMetadata(key, metadataKey, value);
61
+ }
62
+ catch (error) {
63
+ if (error instanceof Error)
64
+ errors.push(error.message);
65
+ }
66
+ }
67
+ }
68
+ if (body.parent) {
69
+ try {
70
+ await commands.moveCmd.moveCard(key, body.parent);
71
+ }
72
+ catch (error) {
73
+ if (error instanceof Error)
74
+ errors.push(error.message);
75
+ }
76
+ }
77
+ if (body.index != null) {
78
+ try {
79
+ await commands.moveCmd.rankByIndex(key, body.index);
80
+ }
81
+ catch (error) {
82
+ if (error instanceof Error)
83
+ errors.push(error.message);
84
+ }
85
+ }
86
+ if (errors.length > 0) {
87
+ throw new Error(errors.join('\n'));
88
+ }
89
+ return await getCardDetails(commands, key);
90
+ }
91
+ export async function deleteCard(commands, key) {
92
+ await commands.removeCmd.remove('card', key);
93
+ }
94
+ export async function createCard(commands, template, parentKey) {
95
+ const result = await commands.createCmd.createCard(template, parentKey === 'root' ? undefined : parentKey);
96
+ if (result.length === 0) {
97
+ throw new Error('No cards created');
98
+ }
99
+ return result;
100
+ }
101
+ export async function uploadAttachments(commands, key, files) {
102
+ const succeeded = [];
103
+ for (const file of files) {
104
+ if (file instanceof File) {
105
+ const buffer = await file.arrayBuffer();
106
+ await commands.createCmd.createAttachment(key, file.name, Buffer.from(buffer));
107
+ succeeded.push(file.name);
108
+ }
109
+ }
110
+ return {
111
+ message: 'Attachments uploaded successfully',
112
+ files: succeeded,
113
+ };
114
+ }
115
+ export async function removeAttachment(commands, key, filename) {
116
+ await commands.removeCmd.remove('attachment', key, filename);
117
+ return { message: 'Attachment removed successfully' };
118
+ }
119
+ export async function openAttachment(commands, key, filename) {
120
+ await commands.showCmd.openAttachment(key, filename);
121
+ return { message: 'Attachment opened successfully' };
122
+ }
123
+ export async function parseContent(commands, key, content) {
124
+ let asciidocContent = '';
125
+ try {
126
+ asciidocContent = await evaluateMacros(content, {
127
+ context: 'localApp',
128
+ mode: 'inject',
129
+ project: commands.project,
130
+ cardKey: key,
131
+ });
132
+ }
133
+ catch (error) {
134
+ asciidocContent = `Macro error: ${error instanceof Error ? error.message : 'Unknown error'}\n\n${content}`;
135
+ }
136
+ const processor = Processor();
137
+ const parsedContent = processor
138
+ .convert(asciidocContent, {
139
+ safe: 'safe',
140
+ attributes: {
141
+ imagesdir: `/api/cards/${key}/a`,
142
+ icons: 'font',
143
+ },
144
+ })
145
+ .toString();
146
+ return { parsedContent };
147
+ }
148
+ export async function createLink(commands, key, toCard, linkType, description) {
149
+ await commands.createCmd.createLink(key, toCard, linkType, description);
150
+ return { message: 'Link created successfully' };
151
+ }
152
+ export async function removeLink(commands, key, toCard, linkType, description) {
153
+ await commands.removeCmd.remove('link', key, toCard, linkType, description);
154
+ return { message: 'Link removed successfully' };
155
+ }
156
+ export async function getAttachment(commands, key, filename) {
157
+ const attachmentResponse = await commands.showCmd.showAttachment(key, filename);
158
+ if (!attachmentResponse) {
159
+ throw new Error(`No attachment found from card ${key} and filename ${filename}`);
160
+ }
161
+ return attachmentResponse;
162
+ }
163
+ export async function getAllCards(commands) {
164
+ const fetchedCards = await commands.showCmd.showCards(CardLocation.projectOnly);
165
+ const projectCards = fetchedCards.find((cardContainer) => cardContainer.type === 'project');
166
+ if (!projectCards) {
167
+ throw new Error('Data handler did not return project cards');
168
+ }
169
+ return projectCards.cards;
170
+ }
171
+ export async function getAllAttachments(commands) {
172
+ const attachments = await commands.showCmd.showAttachments();
173
+ return attachments.map((attachment) => ({
174
+ key: attachment.card,
175
+ attachment: attachment.fileName,
176
+ }));
177
+ }
178
+ //# sourceMappingURL=service.js.map