@cyberismo/data-handler 0.0.15 → 0.0.17
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.
- package/dist/card-metadata-updater.js +7 -1
- package/dist/card-metadata-updater.js.map +1 -1
- package/dist/command-handler.d.ts +4 -0
- package/dist/command-handler.js +22 -8
- package/dist/command-handler.js.map +1 -1
- package/dist/command-manager.d.ts +24 -1
- package/dist/command-manager.js +31 -7
- package/dist/command-manager.js.map +1 -1
- package/dist/commands/create.d.ts +1 -1
- package/dist/commands/create.js +34 -36
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/export.d.ts +11 -2
- package/dist/commands/export.js +54 -41
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/fetch.d.ts +8 -0
- package/dist/commands/fetch.js +101 -23
- package/dist/commands/fetch.js.map +1 -1
- package/dist/commands/import.d.ts +14 -3
- package/dist/commands/import.js +27 -10
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/move.js +0 -1
- package/dist/commands/move.js.map +1 -1
- package/dist/commands/remove.d.ts +11 -2
- package/dist/commands/remove.js +15 -5
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/rename.d.ts +4 -9
- package/dist/commands/rename.js +37 -101
- package/dist/commands/rename.js.map +1 -1
- package/dist/commands/show.d.ts +20 -12
- package/dist/commands/show.js +79 -57
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/transition.d.ts +9 -2
- package/dist/commands/transition.js +25 -17
- package/dist/commands/transition.js.map +1 -1
- package/dist/commands/update.d.ts +16 -12
- package/dist/commands/update.js +19 -17
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts +17 -9
- package/dist/commands/validate.js +94 -35
- package/dist/commands/validate.js.map +1 -1
- package/dist/containers/card-container.d.ts +7 -5
- package/dist/containers/card-container.js +30 -5
- package/dist/containers/card-container.js.map +1 -1
- package/dist/containers/project/calculation-engine.d.ts +7 -4
- package/dist/containers/project/calculation-engine.js +61 -66
- package/dist/containers/project/calculation-engine.js.map +1 -1
- package/dist/containers/project/project-paths.d.ts +7 -4
- package/dist/containers/project/project-paths.js +22 -12
- package/dist/containers/project/project-paths.js.map +1 -1
- package/dist/containers/project/resource-cache.d.ts +169 -0
- package/dist/containers/project/resource-cache.js +509 -0
- package/dist/containers/project/resource-cache.js.map +1 -0
- package/dist/containers/project/resource-handler.d.ts +129 -0
- package/dist/containers/project/resource-handler.js +206 -0
- package/dist/containers/project/resource-handler.js.map +1 -0
- package/dist/containers/project.d.ts +46 -152
- package/dist/containers/project.js +179 -409
- package/dist/containers/project.js.map +1 -1
- package/dist/containers/template.d.ts +8 -2
- package/dist/containers/template.js +24 -19
- package/dist/containers/template.js.map +1 -1
- package/dist/interfaces/command-options.d.ts +3 -1
- package/dist/interfaces/folder-content-interfaces.d.ts +5 -3
- package/dist/interfaces/folder-content-interfaces.js +3 -3
- package/dist/interfaces/folder-content-interfaces.js.map +1 -1
- package/dist/interfaces/project-interfaces.d.ts +7 -9
- package/dist/interfaces/project-interfaces.js.map +1 -1
- package/dist/interfaces/resource-interfaces.d.ts +14 -1
- package/dist/interfaces/resource-interfaces.js.map +1 -1
- package/dist/macros/graph/index.js +12 -26
- package/dist/macros/graph/index.js.map +1 -1
- package/dist/macros/index.d.ts +1 -1
- package/dist/macros/index.js +2 -2
- package/dist/macros/index.js.map +1 -1
- package/dist/macros/report/index.js +3 -6
- package/dist/macros/report/index.js.map +1 -1
- package/dist/module-manager.d.ts +16 -3
- package/dist/module-manager.js +51 -19
- package/dist/module-manager.js.map +1 -1
- package/dist/project-settings.d.ts +21 -3
- package/dist/project-settings.js +91 -14
- package/dist/project-settings.js.map +1 -1
- package/dist/resources/calculation-resource.d.ts +4 -3
- package/dist/resources/calculation-resource.js +11 -5
- package/dist/resources/calculation-resource.js.map +1 -1
- package/dist/resources/card-type-resource.d.ts +6 -1
- package/dist/resources/card-type-resource.js +34 -23
- package/dist/resources/card-type-resource.js.map +1 -1
- package/dist/resources/create-defaults.d.ts +3 -2
- package/dist/resources/create-defaults.js +3 -2
- package/dist/resources/create-defaults.js.map +1 -1
- package/dist/resources/field-type-resource.d.ts +4 -1
- package/dist/resources/field-type-resource.js +22 -23
- package/dist/resources/field-type-resource.js.map +1 -1
- package/dist/resources/file-resource.d.ts +5 -9
- package/dist/resources/file-resource.js +6 -11
- package/dist/resources/file-resource.js.map +1 -1
- package/dist/resources/folder-resource.d.ts +29 -32
- package/dist/resources/folder-resource.js +59 -78
- package/dist/resources/folder-resource.js.map +1 -1
- package/dist/resources/graph-model-resource.d.ts +4 -1
- package/dist/resources/graph-model-resource.js +11 -4
- package/dist/resources/graph-model-resource.js.map +1 -1
- package/dist/resources/graph-view-resource.d.ts +5 -2
- package/dist/resources/graph-view-resource.js +7 -3
- package/dist/resources/graph-view-resource.js.map +1 -1
- package/dist/resources/link-type-resource.d.ts +5 -2
- package/dist/resources/link-type-resource.js +5 -2
- package/dist/resources/link-type-resource.js.map +1 -1
- package/dist/resources/report-resource.d.ts +6 -7
- package/dist/resources/report-resource.js +14 -23
- package/dist/resources/report-resource.js.map +1 -1
- package/dist/resources/resource-object.d.ts +94 -8
- package/dist/resources/resource-object.js +212 -109
- package/dist/resources/resource-object.js.map +1 -1
- package/dist/resources/template-resource.d.ts +7 -3
- package/dist/resources/template-resource.js +10 -3
- package/dist/resources/template-resource.js.map +1 -1
- package/dist/resources/workflow-resource.d.ts +5 -2
- package/dist/resources/workflow-resource.js +18 -22
- package/dist/resources/workflow-resource.js.map +1 -1
- package/dist/utils/card-utils.d.ts +2 -2
- package/dist/utils/card-utils.js +1 -1
- package/dist/utils/clingo-fact-builder.d.ts +25 -14
- package/dist/utils/clingo-fact-builder.js +27 -5
- package/dist/utils/clingo-fact-builder.js.map +1 -1
- package/dist/utils/clingo-facts.js +3 -4
- package/dist/utils/clingo-facts.js.map +1 -1
- package/dist/utils/configuration-logger.d.ts +91 -0
- package/dist/utils/configuration-logger.js +151 -0
- package/dist/utils/configuration-logger.js.map +1 -0
- package/dist/utils/constants.d.ts +1 -1
- package/dist/utils/constants.js +5 -3
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/resource-utils.d.ts +1 -0
- package/dist/utils/resource-utils.js +2 -1
- package/dist/utils/resource-utils.js.map +1 -1
- package/package.json +9 -9
- package/src/card-metadata-updater.ts +6 -2
- package/src/command-handler.ts +39 -12
- package/src/command-manager.ts +33 -21
- package/src/commands/create.ts +43 -78
- package/src/commands/export.ts +63 -52
- package/src/commands/fetch.ts +143 -34
- package/src/commands/import.ts +37 -15
- package/src/commands/move.ts +0 -1
- package/src/commands/remove.ts +20 -7
- package/src/commands/rename.ts +58 -149
- package/src/commands/show.ts +123 -80
- package/src/commands/transition.ts +26 -28
- package/src/commands/update.ts +25 -22
- package/src/commands/validate.ts +104 -67
- package/src/containers/card-container.ts +37 -5
- package/src/containers/project/calculation-engine.ts +61 -93
- package/src/containers/project/project-paths.ts +29 -13
- package/src/containers/project/resource-cache.ts +651 -0
- package/src/containers/project/resource-handler.ts +265 -0
- package/src/containers/project.ts +250 -527
- package/src/containers/template.ts +28 -23
- package/src/interfaces/command-options.ts +3 -1
- package/src/interfaces/folder-content-interfaces.ts +7 -6
- package/src/interfaces/project-interfaces.ts +12 -11
- package/src/interfaces/resource-interfaces.ts +18 -3
- package/src/macros/graph/index.ts +26 -47
- package/src/macros/index.ts +2 -2
- package/src/macros/report/index.ts +3 -9
- package/src/module-manager.ts +74 -17
- package/src/project-settings.ts +96 -14
- package/src/resources/calculation-resource.ts +18 -18
- package/src/resources/card-type-resource.ts +50 -50
- package/src/resources/create-defaults.ts +3 -2
- package/src/resources/field-type-resource.ts +41 -55
- package/src/resources/file-resource.ts +10 -36
- package/src/resources/folder-resource.ts +69 -120
- package/src/resources/graph-model-resource.ts +20 -22
- package/src/resources/graph-view-resource.ts +15 -17
- package/src/resources/link-type-resource.ts +10 -13
- package/src/resources/report-resource.ts +21 -43
- package/src/resources/resource-object.ts +263 -149
- package/src/resources/template-resource.ts +17 -16
- package/src/resources/workflow-resource.ts +25 -44
- package/src/utils/card-utils.ts +2 -2
- package/src/utils/clingo-fact-builder.ts +28 -16
- package/src/utils/clingo-facts.ts +3 -4
- package/src/utils/configuration-logger.ts +206 -0
- package/src/utils/constants.ts +5 -3
- package/src/utils/resource-utils.ts +2 -1
- package/dist/containers/project/resource-collector.d.ts +0 -110
- package/dist/containers/project/resource-collector.js +0 -344
- package/dist/containers/project/resource-collector.js.map +0 -1
- package/src/containers/project/resource-collector.ts +0 -404
|
@@ -16,13 +16,22 @@ import type { CardType } from '../interfaces/resource-interfaces.js';
|
|
|
16
16
|
import type { ExportPdfOptions } from '../interfaces/project-interfaces.js';
|
|
17
17
|
import { Project } from '../containers/project.js';
|
|
18
18
|
import type { QueryResult } from '../types/queries.js';
|
|
19
|
-
import type { Show } from './
|
|
19
|
+
import type { Show } from './show.js';
|
|
20
|
+
/**
|
|
21
|
+
* Handles all export commands.
|
|
22
|
+
*/
|
|
20
23
|
export declare class Export {
|
|
21
24
|
protected project: Project;
|
|
22
25
|
protected showCmd: Show;
|
|
26
|
+
/**
|
|
27
|
+
* Creates an instance of export.
|
|
28
|
+
* @param project Project to use
|
|
29
|
+
* @param showCmd Instance of Export command to use.
|
|
30
|
+
*/
|
|
23
31
|
constructor(project: Project, showCmd: Show);
|
|
24
32
|
private toAdocFile;
|
|
25
33
|
protected metaToAdoc(card: Card, cardType: CardType | undefined): string;
|
|
34
|
+
private runAsciidoctorPdf;
|
|
26
35
|
private toAdocFileAsContent;
|
|
27
36
|
/**
|
|
28
37
|
* Recursively searches for a card with the specified key in the tree hierarchy.
|
|
@@ -35,9 +44,9 @@ export declare class Export {
|
|
|
35
44
|
* Convert treeQueryResult object into a Card object and add content, metadata & attachments
|
|
36
45
|
* Handles card children recursively
|
|
37
46
|
* @param treeQueryResult tree query result object
|
|
47
|
+
* @returns Tree query result as a Card.
|
|
38
48
|
*/
|
|
39
49
|
protected treeQueryResultToCard(treeQueryResult: QueryResult<'tree'>): Promise<Card>;
|
|
40
|
-
private runAsciidoctorPdf;
|
|
41
50
|
/**
|
|
42
51
|
* Exports the card(s) to pdf.
|
|
43
52
|
* @param destination Path to where the resulting file(s) will be created.
|
package/dist/commands/export.js
CHANGED
|
@@ -21,9 +21,17 @@ import { getStaticDirectoryPath, pdfReport } from '@cyberismo/assets';
|
|
|
21
21
|
import { Project } from '../containers/project.js';
|
|
22
22
|
import { sortItems } from '../utils/lexorank.js';
|
|
23
23
|
const attachmentFolder = 'a';
|
|
24
|
+
/**
|
|
25
|
+
* Handles all export commands.
|
|
26
|
+
*/
|
|
24
27
|
export class Export {
|
|
25
28
|
project;
|
|
26
29
|
showCmd;
|
|
30
|
+
/**
|
|
31
|
+
* Creates an instance of export.
|
|
32
|
+
* @param project Project to use
|
|
33
|
+
* @param showCmd Instance of Export command to use.
|
|
34
|
+
*/
|
|
27
35
|
constructor(project, showCmd) {
|
|
28
36
|
this.project = project;
|
|
29
37
|
this.showCmd = showCmd;
|
|
@@ -74,6 +82,48 @@ export class Export {
|
|
|
74
82
|
}
|
|
75
83
|
return content;
|
|
76
84
|
}
|
|
85
|
+
// Runs Ascii Doctor converter --> to PDF
|
|
86
|
+
async runAsciidoctorPdf(content) {
|
|
87
|
+
const staticRootDir = await getStaticDirectoryPath();
|
|
88
|
+
const proc = spawn('asciidoctor-pdf', [
|
|
89
|
+
'-a',
|
|
90
|
+
'pdf-theme=cyberismo',
|
|
91
|
+
'-a',
|
|
92
|
+
`pdf-themesdir=${join(staticRootDir, 'pdf-themes')}`,
|
|
93
|
+
'-a',
|
|
94
|
+
`pdf-fontsdir=${join(staticRootDir, 'pdf-themes', 'fonts')};GEM_FONTS_DIR`,
|
|
95
|
+
'-',
|
|
96
|
+
], {
|
|
97
|
+
timeout: 100000,
|
|
98
|
+
shell: process.platform === 'win32',
|
|
99
|
+
});
|
|
100
|
+
proc.stdin.end(content);
|
|
101
|
+
const result = await new Promise((resolve, reject) => {
|
|
102
|
+
const chunks = [];
|
|
103
|
+
proc.stdout.on('data', (chunk) => {
|
|
104
|
+
chunks.push(chunk);
|
|
105
|
+
});
|
|
106
|
+
proc.stderr.on('data', (chunk) => {
|
|
107
|
+
process.stderr.write(chunk);
|
|
108
|
+
});
|
|
109
|
+
proc.on('error', (error) => {
|
|
110
|
+
if ('code' in error && error.code === 'ENOENT') {
|
|
111
|
+
reject(new Error('Asciidoctor-pdf not found. Please install asciidoctor-pdf to use this feature.'));
|
|
112
|
+
}
|
|
113
|
+
reject(error);
|
|
114
|
+
});
|
|
115
|
+
proc.on('close', (code) => {
|
|
116
|
+
if (code === 0) {
|
|
117
|
+
resolve(Buffer.concat(chunks));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
reject(new Error(`Asciidoctor-pdf failed with code ${code}`));
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
// Adds cards to an ADOC file as additional content.
|
|
77
127
|
async toAdocFileAsContent(path, cards) {
|
|
78
128
|
for (const card of cards) {
|
|
79
129
|
let fileContent = '';
|
|
@@ -84,7 +134,9 @@ export class Export {
|
|
|
84
134
|
fileContent += `== ${card.key}\n\n`;
|
|
85
135
|
}
|
|
86
136
|
if (card.metadata) {
|
|
87
|
-
const cardTypeForCard =
|
|
137
|
+
const cardTypeForCard = this.project.resources
|
|
138
|
+
.byType(card.metadata?.cardType, 'cardTypes')
|
|
139
|
+
.show();
|
|
88
140
|
const metaDataContent = this.metaToAdoc(card, cardTypeForCard);
|
|
89
141
|
fileContent += metaDataContent;
|
|
90
142
|
}
|
|
@@ -134,6 +186,7 @@ export class Export {
|
|
|
134
186
|
* Convert treeQueryResult object into a Card object and add content, metadata & attachments
|
|
135
187
|
* Handles card children recursively
|
|
136
188
|
* @param treeQueryResult tree query result object
|
|
189
|
+
* @returns Tree query result as a Card.
|
|
137
190
|
*/
|
|
138
191
|
async treeQueryResultToCard(treeQueryResult) {
|
|
139
192
|
const card = {
|
|
@@ -167,46 +220,6 @@ export class Export {
|
|
|
167
220
|
}
|
|
168
221
|
return card;
|
|
169
222
|
}
|
|
170
|
-
async runAsciidoctorPdf(content) {
|
|
171
|
-
const staticRootDir = await getStaticDirectoryPath();
|
|
172
|
-
const proc = spawn('asciidoctor-pdf', [
|
|
173
|
-
'-a',
|
|
174
|
-
'pdf-theme=cyberismo',
|
|
175
|
-
'-a',
|
|
176
|
-
`pdf-themesdir=${join(staticRootDir, 'pdf-themes')}`,
|
|
177
|
-
'-a',
|
|
178
|
-
`pdf-fontsdir=${join(staticRootDir, 'pdf-themes', 'fonts')};GEM_FONTS_DIR`,
|
|
179
|
-
'-',
|
|
180
|
-
], {
|
|
181
|
-
timeout: 100000,
|
|
182
|
-
shell: process.platform === 'win32',
|
|
183
|
-
});
|
|
184
|
-
proc.stdin.end(content);
|
|
185
|
-
const result = await new Promise((resolve, reject) => {
|
|
186
|
-
const chunks = [];
|
|
187
|
-
proc.stdout.on('data', (chunk) => {
|
|
188
|
-
chunks.push(chunk);
|
|
189
|
-
});
|
|
190
|
-
proc.stderr.on('data', (chunk) => {
|
|
191
|
-
process.stderr.write(chunk);
|
|
192
|
-
});
|
|
193
|
-
proc.on('error', (error) => {
|
|
194
|
-
if ('code' in error && error.code === 'ENOENT') {
|
|
195
|
-
reject(new Error('Asciidoctor-pdf not found. Please install asciidoctor-pdf to use this feature.'));
|
|
196
|
-
}
|
|
197
|
-
reject(error);
|
|
198
|
-
});
|
|
199
|
-
proc.on('close', (code) => {
|
|
200
|
-
if (code === 0) {
|
|
201
|
-
resolve(Buffer.concat(chunks));
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
reject(new Error(`Asciidoctor-pdf failed with code ${code}`));
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
return result;
|
|
209
|
-
}
|
|
210
223
|
/**
|
|
211
224
|
* Exports the card(s) to pdf.
|
|
212
225
|
* @param destination Path to where the resulting file(s) will be created.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAEF,OAAO;AACP,OAAO,EACL,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,gBAAgB,GAAW,GAAG,CAAC;AAErC,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/fetch.d.ts
CHANGED
|
@@ -14,11 +14,19 @@ import type { Project } from '../containers/project.js';
|
|
|
14
14
|
export declare const MODULE_LIST_FULL_PATH = ".temp/moduleList.json";
|
|
15
15
|
export declare class Fetch {
|
|
16
16
|
private project;
|
|
17
|
+
private moduleListPath;
|
|
17
18
|
constructor(project: Project);
|
|
18
19
|
private get logger();
|
|
20
|
+
private checkRemoteVersion;
|
|
19
21
|
private fetchJSON;
|
|
22
|
+
private fetchModuleList;
|
|
23
|
+
/**
|
|
24
|
+
* Ensures the module list is up to date by fetching if needed.
|
|
25
|
+
*/
|
|
26
|
+
ensureModuleListUpToDate(): Promise<void>;
|
|
20
27
|
/**
|
|
21
28
|
* Fetches modules from modules hub(s) and writes them to a file.
|
|
29
|
+
* Only fetches if the remote version is newer than the local version.
|
|
22
30
|
*/
|
|
23
31
|
fetchHubs(): Promise<void>;
|
|
24
32
|
}
|
package/dist/commands/fetch.js
CHANGED
|
@@ -12,48 +12,76 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { mkdir } from 'node:fs/promises';
|
|
14
14
|
import { resolve, sep } from 'node:path';
|
|
15
|
-
import { writeJsonFile } from '../utils/json.js';
|
|
16
|
-
import { validateJson } from '../utils/validate.js';
|
|
17
|
-
import { errorFunction } from '../utils/error-utils.js';
|
|
18
15
|
import { getChildLogger } from '../utils/log-utils.js';
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
import { readJsonFile, writeJsonFile } from '../utils/json.js';
|
|
17
|
+
import { validateJson } from '../utils/validate.js';
|
|
18
|
+
const FETCH_TIMEOUT_MS = 30 * 1000; // 30s timeout for fetching a hub file.
|
|
19
|
+
const MAX_RESPONSE_SIZE_MB = 1024 * 1024; // 1MB limit for safety
|
|
21
20
|
const HUB_SCHEMA = 'hubSchema';
|
|
22
21
|
const MODULE_LIST_FILE = 'moduleList.json';
|
|
23
22
|
const TEMP_FOLDER = `.temp`;
|
|
24
23
|
export const MODULE_LIST_FULL_PATH = `${TEMP_FOLDER}/${MODULE_LIST_FILE}`;
|
|
25
24
|
export class Fetch {
|
|
26
25
|
project;
|
|
26
|
+
moduleListPath;
|
|
27
27
|
constructor(project) {
|
|
28
28
|
this.project = project;
|
|
29
|
+
this.moduleListPath = resolve(this.project.basePath, MODULE_LIST_FULL_PATH);
|
|
29
30
|
}
|
|
30
31
|
get logger() {
|
|
31
32
|
return getChildLogger({
|
|
32
33
|
module: 'fetch',
|
|
33
34
|
});
|
|
34
35
|
}
|
|
36
|
+
// Checks the version of the remote moduleList.json.
|
|
37
|
+
async checkRemoteVersion(location) {
|
|
38
|
+
try {
|
|
39
|
+
const url = new URL(`${location}/${MODULE_LIST_FILE}`);
|
|
40
|
+
if (!['http:', 'https:'].includes(url.protocol)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const response = await fetch(url.toString(), {
|
|
44
|
+
method: 'GET',
|
|
45
|
+
headers: {
|
|
46
|
+
Accept: 'application/json',
|
|
47
|
+
'User-Agent': 'Cyberismo/1.0',
|
|
48
|
+
},
|
|
49
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const json = await response.json();
|
|
55
|
+
return json.version;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.logger.error(error, `Could not check hub version for ${location} }`);
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Fetches one hub's data as JSON.
|
|
35
63
|
async fetchJSON(location, schemaId) {
|
|
36
64
|
try {
|
|
37
65
|
const url = new URL(`${location}/${MODULE_LIST_FILE}`);
|
|
38
66
|
if (!['http:', 'https:'].includes(url.protocol)) {
|
|
39
67
|
throw new Error(`Invalid protocol: ${url.protocol}. Only HTTP and HTTPS are supported.`);
|
|
40
68
|
}
|
|
41
|
-
this.logger.info(`Fetching module list from: ${url.toString()}`);
|
|
69
|
+
this.logger.info(`Fetching module list from hub: ${url.toString()}`);
|
|
42
70
|
const response = await fetch(url.toString(), {
|
|
43
71
|
method: 'GET',
|
|
44
72
|
headers: {
|
|
45
73
|
Accept: 'application/json',
|
|
46
74
|
'User-Agent': 'Cyberismo/1.0',
|
|
47
75
|
},
|
|
48
|
-
signal: AbortSignal.timeout(
|
|
76
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
49
77
|
});
|
|
50
78
|
if (!response.ok) {
|
|
51
79
|
throw new Error(`HTTP ${response.status}: ${response.statusText} when fetching from ${url.toString()}`);
|
|
52
80
|
}
|
|
53
81
|
// Check content length before downloading
|
|
54
82
|
const contentLength = response.headers.get('content-length');
|
|
55
|
-
if (contentLength && parseInt(contentLength) >
|
|
56
|
-
throw new Error(`Response too large: ${contentLength} bytes (max: ${
|
|
83
|
+
if (contentLength && parseInt(contentLength) > MAX_RESPONSE_SIZE_MB) {
|
|
84
|
+
throw new Error(`Response too large: ${contentLength} bytes (max: ${MAX_RESPONSE_SIZE_MB})`);
|
|
57
85
|
}
|
|
58
86
|
const contentType = response.headers.get('content-type');
|
|
59
87
|
if (!contentType?.includes('application/json')) {
|
|
@@ -62,56 +90,106 @@ export class Fetch {
|
|
|
62
90
|
const json = await response.json();
|
|
63
91
|
// Validate the incoming JSON before saving it into a file.
|
|
64
92
|
await validateJson(json, { schemaId: schemaId });
|
|
65
|
-
// Validate JSON structure and prevent prototype pollution
|
|
66
93
|
if (typeof json !== 'object' || json === null || Array.isArray(json)) {
|
|
67
94
|
throw new Error('Response must be a JSON object');
|
|
68
95
|
}
|
|
69
|
-
|
|
70
|
-
if (JSON.stringify(json).length > MAX_RESPONSE_SIZE) {
|
|
96
|
+
if (JSON.stringify(json).length > MAX_RESPONSE_SIZE_MB) {
|
|
71
97
|
throw new Error('JSON content too large after parsing');
|
|
72
98
|
}
|
|
73
99
|
return json;
|
|
74
100
|
}
|
|
75
101
|
catch (error) {
|
|
76
|
-
this.logger.error(error, `Failed to fetch module list from ${location}
|
|
102
|
+
this.logger.error(error, `Failed to fetch module list from hub ${location}`);
|
|
77
103
|
throw error;
|
|
78
104
|
}
|
|
79
105
|
}
|
|
106
|
+
// Checks if the local moduleList.json needs to be updated by comparing
|
|
107
|
+
// each hub's version with the stored version.
|
|
108
|
+
async fetchModuleList() {
|
|
109
|
+
try {
|
|
110
|
+
const configuredHubs = this.project.configuration.hubs;
|
|
111
|
+
if (configuredHubs.length === 0) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
const localData = (await readJsonFile(this.moduleListPath));
|
|
115
|
+
const localHubs = localData.hubs || [];
|
|
116
|
+
if (localHubs.length !== configuredHubs.length) {
|
|
117
|
+
this.logger.info('Hub configuration changed, fetching module list');
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
// Check each hub's version
|
|
121
|
+
for (const configHub of configuredHubs) {
|
|
122
|
+
const localHub = localHubs.find((hub) => hub.location === configHub.location);
|
|
123
|
+
if (!localHub) {
|
|
124
|
+
this.logger.info(`New hub detected: ${configHub.location}, fetching module list`);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
const remoteVersion = await this.checkRemoteVersion(configHub.location);
|
|
128
|
+
if (remoteVersion === undefined) {
|
|
129
|
+
const hubName = configHub.displayName || configHub.location;
|
|
130
|
+
this.logger.info(`Hub ${hubName} has no version data, skipped.`);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (remoteVersion > localHub.version) {
|
|
134
|
+
this.logger.info(`Hub ${configHub.location} has newer version (remote: ${remoteVersion}, local: ${localHub.version}), fetching module list`);
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.logger.info('Module list is up to date');
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
this.logger.error(error, `Error when checking versions for hub module list`);
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Ensures the module list is up to date by fetching if needed.
|
|
148
|
+
*/
|
|
149
|
+
async ensureModuleListUpToDate() {
|
|
150
|
+
await this.fetchHubs();
|
|
151
|
+
}
|
|
80
152
|
/**
|
|
81
153
|
* Fetches modules from modules hub(s) and writes them to a file.
|
|
154
|
+
* Only fetches if the remote version is newer than the local version.
|
|
82
155
|
*/
|
|
83
156
|
async fetchHubs() {
|
|
157
|
+
const needsFetch = await this.fetchModuleList();
|
|
158
|
+
if (!needsFetch) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
84
161
|
const hubs = this.project.configuration.hubs;
|
|
85
162
|
const moduleMap = new Map([]);
|
|
163
|
+
const hubVersions = [];
|
|
86
164
|
for (const hub of hubs) {
|
|
87
165
|
const json = await this.fetchJSON(hub.location, HUB_SCHEMA);
|
|
88
166
|
json.modules.forEach((module) => {
|
|
89
167
|
if (!moduleMap.has(module.name)) {
|
|
90
168
|
moduleMap.set(module.name, module);
|
|
91
169
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
170
|
+
});
|
|
171
|
+
hubVersions.push({
|
|
172
|
+
location: hub.location,
|
|
173
|
+
version: json.version || 1,
|
|
95
174
|
});
|
|
96
175
|
}
|
|
97
176
|
try {
|
|
98
|
-
const fullPath = resolve(this.project.basePath, MODULE_LIST_FULL_PATH);
|
|
99
177
|
const normalizedBasePath = resolve(this.project.basePath);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
fullPath !== normalizedBasePath) {
|
|
178
|
+
if (!this.moduleListPath.startsWith(normalizedBasePath + sep) &&
|
|
179
|
+
this.moduleListPath !== normalizedBasePath) {
|
|
103
180
|
throw new Error('Invalid file path: attempting to write outside project directory');
|
|
104
181
|
}
|
|
105
182
|
await mkdir(resolve(this.project.basePath, TEMP_FOLDER), {
|
|
106
183
|
recursive: true,
|
|
107
184
|
});
|
|
108
|
-
await writeJsonFile(
|
|
185
|
+
await writeJsonFile(this.moduleListPath, {
|
|
109
186
|
modules: Array.from(moduleMap.values()),
|
|
187
|
+
hubs: hubVersions,
|
|
110
188
|
});
|
|
111
|
-
this.logger.info(`Module list written to: ${
|
|
189
|
+
this.logger.info(`Module list written to: ${this.moduleListPath}`);
|
|
112
190
|
}
|
|
113
191
|
catch (error) {
|
|
114
|
-
this.logger.error(error, `Failed to write module list to local file
|
|
192
|
+
this.logger.error(error, `Failed to write module list to local file`);
|
|
115
193
|
throw error;
|
|
116
194
|
}
|
|
117
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/commands/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/commands/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,14 +10,24 @@
|
|
|
10
10
|
details. You should have received a copy of the GNU Affero General Public
|
|
11
11
|
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
13
|
+
import type { Create } from './create.js';
|
|
14
14
|
import type { Credentials, ModuleSettingOptions } from '../interfaces/project-interfaces.js';
|
|
15
|
+
import type { Fetch } from './fetch.js';
|
|
15
16
|
import type { Project } from '../containers/project.js';
|
|
17
|
+
/**
|
|
18
|
+
* Handles all import commands.
|
|
19
|
+
*/
|
|
16
20
|
export declare class Import {
|
|
17
21
|
private project;
|
|
18
22
|
private createCmd;
|
|
23
|
+
private fetchCmd;
|
|
19
24
|
private moduleManager;
|
|
20
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Creates an instance of Import.
|
|
27
|
+
* @param project Project to use.
|
|
28
|
+
* @param createCmd Instance of Create to use.
|
|
29
|
+
*/
|
|
30
|
+
constructor(project: Project, createCmd: Create, fetchCmd: Fetch);
|
|
21
31
|
/**
|
|
22
32
|
* Imports cards based on a csv file
|
|
23
33
|
* @param csvFilePath path to the csv file
|
|
@@ -38,8 +48,9 @@ export declare class Import {
|
|
|
38
48
|
* @param options Additional options for module import. Optional.
|
|
39
49
|
* branch: Git branch for module from Git.
|
|
40
50
|
* private: If true, uses credentials to clone the repository
|
|
51
|
+
* @param skipMigrationLog If true, skip logging to migration log (used during project creation)
|
|
41
52
|
*/
|
|
42
|
-
importModule(source: string, destination?: string, options?: ModuleSettingOptions): Promise<void>;
|
|
53
|
+
importModule(source: string, destination?: string, options?: ModuleSettingOptions, skipMigrationLog?: boolean): Promise<void>;
|
|
43
54
|
/**
|
|
44
55
|
* Updates a specific imported module.
|
|
45
56
|
* @param moduleName Name (prefix) of module to update.
|
package/dist/commands/import.js
CHANGED
|
@@ -10,18 +10,26 @@
|
|
|
10
10
|
details. You should have received a copy of the GNU Affero General Public
|
|
11
11
|
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
12
12
|
*/
|
|
13
|
-
import { Validate } from './index.js';
|
|
14
13
|
import { ModuleManager } from '../module-manager.js';
|
|
15
14
|
import { readCsvFile } from '../utils/csv.js';
|
|
16
|
-
import {
|
|
17
|
-
|
|
15
|
+
import { Validate } from './validate.js';
|
|
16
|
+
/**
|
|
17
|
+
* Handles all import commands.
|
|
18
|
+
*/
|
|
18
19
|
export class Import {
|
|
19
20
|
project;
|
|
20
21
|
createCmd;
|
|
22
|
+
fetchCmd;
|
|
21
23
|
moduleManager;
|
|
22
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Creates an instance of Import.
|
|
26
|
+
* @param project Project to use.
|
|
27
|
+
* @param createCmd Instance of Create to use.
|
|
28
|
+
*/
|
|
29
|
+
constructor(project, createCmd, fetchCmd) {
|
|
23
30
|
this.project = project;
|
|
24
31
|
this.createCmd = createCmd;
|
|
32
|
+
this.fetchCmd = fetchCmd;
|
|
25
33
|
this.moduleManager = new ModuleManager(this.project);
|
|
26
34
|
}
|
|
27
35
|
/**
|
|
@@ -39,7 +47,7 @@ export class Import {
|
|
|
39
47
|
const importedCards = [];
|
|
40
48
|
for (const row of csv) {
|
|
41
49
|
const { title, template, description, labels, ...customFields } = row;
|
|
42
|
-
const templateResource =
|
|
50
|
+
const templateResource = this.project.resources.byType(template, 'templates');
|
|
43
51
|
const templateObject = templateResource.templateObject();
|
|
44
52
|
if (!templateObject) {
|
|
45
53
|
throw new Error(`Template '${template}' not found`);
|
|
@@ -56,10 +64,12 @@ export class Import {
|
|
|
56
64
|
}
|
|
57
65
|
const cardKey = cards[0].key;
|
|
58
66
|
const card = this.project.findCard(cardKey);
|
|
59
|
-
|
|
60
|
-
if (!cardType) {
|
|
67
|
+
if (!card.metadata?.cardType) {
|
|
61
68
|
throw new Error(`Card type not found for card ${cardKey}`);
|
|
62
69
|
}
|
|
70
|
+
const cardType = this.project.resources
|
|
71
|
+
.byType(card.metadata?.cardType, 'cardTypes')
|
|
72
|
+
.show();
|
|
63
73
|
if (description) {
|
|
64
74
|
await this.project.updateCardContent(cardKey, description);
|
|
65
75
|
}
|
|
@@ -96,8 +106,11 @@ export class Import {
|
|
|
96
106
|
* @param options Additional options for module import. Optional.
|
|
97
107
|
* branch: Git branch for module from Git.
|
|
98
108
|
* private: If true, uses credentials to clone the repository
|
|
109
|
+
* @param skipMigrationLog If true, skip logging to migration log (used during project creation)
|
|
99
110
|
*/
|
|
100
|
-
async importModule(source, destination, options) {
|
|
111
|
+
async importModule(source, destination, options, skipMigrationLog = false) {
|
|
112
|
+
// Ensure module list is up to date before importing
|
|
113
|
+
await this.fetchCmd.ensureModuleListUpToDate();
|
|
101
114
|
const beforeImportValidateErrors = await Validate.getInstance().validate(this.project.basePath, () => this.project);
|
|
102
115
|
const gitModule = source.startsWith('https') || source.startsWith('git@');
|
|
103
116
|
const modulePrefix = gitModule
|
|
@@ -113,9 +126,9 @@ export class Import {
|
|
|
113
126
|
location: gitModule ? source : `file:${source}`,
|
|
114
127
|
};
|
|
115
128
|
// Fetch module dependencies.
|
|
116
|
-
await this.moduleManager.
|
|
129
|
+
await this.moduleManager.updateDependencies(moduleSettings, options?.credentials);
|
|
117
130
|
// Add module as a dependency.
|
|
118
|
-
await this.project.importModule(moduleSettings);
|
|
131
|
+
await this.project.importModule(moduleSettings, skipMigrationLog);
|
|
119
132
|
// Validate the project after module has been imported
|
|
120
133
|
const afterImportValidateErrors = await Validate.getInstance().validate(this.project.basePath, () => this.project);
|
|
121
134
|
if (afterImportValidateErrors.length > beforeImportValidateErrors.length) {
|
|
@@ -129,6 +142,8 @@ export class Import {
|
|
|
129
142
|
* @throws if module is not part of the project
|
|
130
143
|
*/
|
|
131
144
|
async updateModule(moduleName, credentials) {
|
|
145
|
+
// Ensure module list is up to date before updating
|
|
146
|
+
await this.fetchCmd.ensureModuleListUpToDate();
|
|
132
147
|
const module = this.project.configuration.modules.find((item) => item.name === moduleName);
|
|
133
148
|
if (!module) {
|
|
134
149
|
throw new Error(`Module '${moduleName}' is not part of the project`);
|
|
@@ -140,6 +155,8 @@ export class Import {
|
|
|
140
155
|
* @param credentials Optional credentials for private modules.
|
|
141
156
|
*/
|
|
142
157
|
async updateAllModules(credentials) {
|
|
158
|
+
// Ensure module list is up to date before updating all modules
|
|
159
|
+
await this.fetchCmd.ensureModuleListUpToDate();
|
|
143
160
|
return this.moduleManager.updateModules(credentials);
|
|
144
161
|
}
|
|
145
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/move.js
CHANGED
|
@@ -147,7 +147,6 @@ export class Move {
|
|
|
147
147
|
sourceCard.parent = movingToRoot ? ROOT : destination;
|
|
148
148
|
if (sourceCard.metadata) {
|
|
149
149
|
sourceCard.metadata.rank = rank;
|
|
150
|
-
sourceCard.metadata.parent = movingToRoot ? ROOT : destination;
|
|
151
150
|
}
|
|
152
151
|
// Handle cache update and persistence
|
|
153
152
|
await this.project.updateCard(sourceCard);
|