@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.
- package/LICENSE +702 -0
- package/dist/card-metadata-updater.d.ts +33 -0
- package/dist/card-metadata-updater.js +121 -0
- package/dist/card-metadata-updater.js.map +1 -0
- package/dist/command-handler.d.ts +96 -0
- package/dist/command-handler.js +557 -0
- package/dist/command-handler.js.map +1 -0
- package/dist/command-manager.d.ts +43 -0
- package/dist/command-manager.js +73 -0
- package/dist/command-manager.js.map +1 -0
- package/dist/commands/calculate.d.ts +86 -0
- package/dist/commands/calculate.js +444 -0
- package/dist/commands/calculate.js.map +1 -0
- package/dist/commands/create.d.ts +114 -0
- package/dist/commands/create.js +389 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/edit.d.ts +37 -0
- package/dist/commands/edit.js +99 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/export-site.d.ts +45 -0
- package/dist/commands/export-site.js +301 -0
- package/dist/commands/export-site.js.map +1 -0
- package/dist/commands/export.d.ts +53 -0
- package/dist/commands/export.js +251 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +53 -0
- package/dist/commands/import.js +133 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/index.d.ts +26 -0
- package/dist/commands/index.js +27 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/move.d.ts +55 -0
- package/dist/commands/move.js +341 -0
- package/dist/commands/move.js.map +1 -0
- package/dist/commands/remove.d.ts +38 -0
- package/dist/commands/remove.js +192 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/rename.d.ts +46 -0
- package/dist/commands/rename.js +289 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/show.d.ts +124 -0
- package/dist/commands/show.js +345 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/transition.d.ts +27 -0
- package/dist/commands/transition.js +92 -0
- package/dist/commands/transition.js.map +1 -0
- package/dist/commands/update.d.ts +29 -0
- package/dist/commands/update.js +64 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +143 -0
- package/dist/commands/validate.js +689 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/containers/card-container.d.ts +44 -0
- package/dist/containers/card-container.js +282 -0
- package/dist/containers/card-container.js.map +1 -0
- package/dist/containers/project/project-paths.d.ts +46 -0
- package/dist/containers/project/project-paths.js +105 -0
- package/dist/containers/project/project-paths.js.map +1 -0
- package/dist/containers/project/resource-collector.d.ts +86 -0
- package/dist/containers/project/resource-collector.js +331 -0
- package/dist/containers/project/resource-collector.js.map +1 -0
- package/dist/containers/project.d.ts +351 -0
- package/dist/containers/project.js +896 -0
- package/dist/containers/project.js.map +1 -0
- package/dist/containers/template.d.ts +108 -0
- package/dist/containers/template.js +433 -0
- package/dist/containers/template.js.map +1 -0
- package/dist/exceptions/index.d.ts +19 -0
- package/dist/exceptions/index.js +26 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/adoc.d.ts +12 -0
- package/dist/interfaces/adoc.js +13 -0
- package/dist/interfaces/adoc.js.map +1 -0
- package/dist/interfaces/macros.d.ts +45 -0
- package/dist/interfaces/macros.js +13 -0
- package/dist/interfaces/macros.js.map +1 -0
- package/dist/interfaces/project-interfaces.d.ts +121 -0
- package/dist/interfaces/project-interfaces.js +21 -0
- package/dist/interfaces/project-interfaces.js.map +1 -0
- package/dist/interfaces/request-status-interfaces.d.ts +28 -0
- package/dist/interfaces/request-status-interfaces.js +20 -0
- package/dist/interfaces/request-status-interfaces.js.map +1 -0
- package/dist/interfaces/resource-interfaces.d.ts +117 -0
- package/dist/interfaces/resource-interfaces.js +20 -0
- package/dist/interfaces/resource-interfaces.js.map +1 -0
- package/dist/macros/base-macro.d.ts +31 -0
- package/dist/macros/base-macro.js +126 -0
- package/dist/macros/base-macro.js.map +1 -0
- package/dist/macros/common.d.ts +17 -0
- package/dist/macros/common.js +23 -0
- package/dist/macros/common.js.map +1 -0
- package/dist/macros/createCards/index.d.ts +36 -0
- package/dist/macros/createCards/index.js +35 -0
- package/dist/macros/createCards/index.js.map +1 -0
- package/dist/macros/createCards/metadata.d.ts +14 -0
- package/dist/macros/createCards/metadata.js +18 -0
- package/dist/macros/createCards/metadata.js.map +1 -0
- package/dist/macros/graph/index.d.ts +29 -0
- package/dist/macros/graph/index.js +91 -0
- package/dist/macros/graph/index.js.map +1 -0
- package/dist/macros/graph/metadata.d.ts +14 -0
- package/dist/macros/graph/metadata.js +18 -0
- package/dist/macros/graph/metadata.js.map +1 -0
- package/dist/macros/index.d.ts +93 -0
- package/dist/macros/index.js +237 -0
- package/dist/macros/index.js.map +1 -0
- package/dist/macros/report/index.d.ts +26 -0
- package/dist/macros/report/index.js +70 -0
- package/dist/macros/report/index.js.map +1 -0
- package/dist/macros/report/metadata.d.ts +14 -0
- package/dist/macros/report/metadata.js +18 -0
- package/dist/macros/report/metadata.js.map +1 -0
- package/dist/macros/scoreCard/index.d.ts +30 -0
- package/dist/macros/scoreCard/index.js +38 -0
- package/dist/macros/scoreCard/index.js.map +1 -0
- package/dist/macros/scoreCard/metadata.d.ts +14 -0
- package/dist/macros/scoreCard/metadata.js +18 -0
- package/dist/macros/scoreCard/metadata.js.map +1 -0
- package/dist/macros/task-queue.d.ts +46 -0
- package/dist/macros/task-queue.js +69 -0
- package/dist/macros/task-queue.js.map +1 -0
- package/dist/module-manager.d.ts +62 -0
- package/dist/module-manager.js +350 -0
- package/dist/module-manager.js.map +1 -0
- package/dist/permissions/action-guard.d.ts +28 -0
- package/dist/permissions/action-guard.js +61 -0
- package/dist/permissions/action-guard.js.map +1 -0
- package/dist/project-settings.d.ts +42 -0
- package/dist/project-settings.js +120 -0
- package/dist/project-settings.js.map +1 -0
- package/dist/resources/array-handler.d.ts +28 -0
- package/dist/resources/array-handler.js +116 -0
- package/dist/resources/array-handler.js.map +1 -0
- package/dist/resources/card-type-resource.d.ts +72 -0
- package/dist/resources/card-type-resource.js +334 -0
- package/dist/resources/card-type-resource.js.map +1 -0
- package/dist/resources/create-defaults.d.ts +81 -0
- package/dist/resources/create-defaults.js +184 -0
- package/dist/resources/create-defaults.js.map +1 -0
- package/dist/resources/field-type-resource.d.ts +88 -0
- package/dist/resources/field-type-resource.js +411 -0
- package/dist/resources/field-type-resource.js.map +1 -0
- package/dist/resources/file-resource.d.ts +50 -0
- package/dist/resources/file-resource.js +301 -0
- package/dist/resources/file-resource.js.map +1 -0
- package/dist/resources/folder-resource.d.ts +66 -0
- package/dist/resources/folder-resource.js +100 -0
- package/dist/resources/folder-resource.js.map +1 -0
- package/dist/resources/graph-model-resource.d.ts +78 -0
- package/dist/resources/graph-model-resource.js +164 -0
- package/dist/resources/graph-model-resource.js.map +1 -0
- package/dist/resources/graph-view-resource.d.ts +78 -0
- package/dist/resources/graph-view-resource.js +163 -0
- package/dist/resources/graph-view-resource.js.map +1 -0
- package/dist/resources/link-type-resource.d.ts +62 -0
- package/dist/resources/link-type-resource.js +150 -0
- package/dist/resources/link-type-resource.js.map +1 -0
- package/dist/resources/report-resource.d.ts +77 -0
- package/dist/resources/report-resource.js +171 -0
- package/dist/resources/report-resource.js.map +1 -0
- package/dist/resources/resource-object.d.ts +108 -0
- package/dist/resources/resource-object.js +147 -0
- package/dist/resources/resource-object.js.map +1 -0
- package/dist/resources/template-resource.d.ts +82 -0
- package/dist/resources/template-resource.js +173 -0
- package/dist/resources/template-resource.js.map +1 -0
- package/dist/resources/workflow-resource.d.ts +67 -0
- package/dist/resources/workflow-resource.js +156 -0
- package/dist/resources/workflow-resource.js.map +1 -0
- package/dist/types/queries.d.ts +142 -0
- package/dist/types/queries.js +16 -0
- package/dist/types/queries.js.map +1 -0
- package/dist/utils/card-utils.d.ts +34 -0
- package/dist/utils/card-utils.js +78 -0
- package/dist/utils/card-utils.js.map +1 -0
- package/dist/utils/clingo-fact-builder.d.ts +58 -0
- package/dist/utils/clingo-fact-builder.js +126 -0
- package/dist/utils/clingo-fact-builder.js.map +1 -0
- package/dist/utils/clingo-facts.d.ts +97 -0
- package/dist/utils/clingo-facts.js +352 -0
- package/dist/utils/clingo-facts.js.map +1 -0
- package/dist/utils/clingo-parser.d.ts +59 -0
- package/dist/utils/clingo-parser.js +403 -0
- package/dist/utils/clingo-parser.js.map +1 -0
- package/dist/utils/clingo-program-builder.d.ts +39 -0
- package/dist/utils/clingo-program-builder.js +57 -0
- package/dist/utils/clingo-program-builder.js.map +1 -0
- package/dist/utils/common-utils.d.ts +24 -0
- package/dist/utils/common-utils.js +47 -0
- package/dist/utils/common-utils.js.map +1 -0
- package/dist/utils/constants.d.ts +18 -0
- package/dist/utils/constants.js +27 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/csv.d.ts +18 -0
- package/dist/utils/csv.js +45 -0
- package/dist/utils/csv.js.map +1 -0
- package/dist/utils/file-utils.d.ts +69 -0
- package/dist/utils/file-utils.js +158 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/json.d.ts +61 -0
- package/dist/utils/json.js +108 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/lexorank.d.ts +59 -0
- package/dist/utils/lexorank.js +159 -0
- package/dist/utils/lexorank.js.map +1 -0
- package/dist/utils/log-utils.d.ts +40 -0
- package/dist/utils/log-utils.js +109 -0
- package/dist/utils/log-utils.js.map +1 -0
- package/dist/utils/random.d.ts +19 -0
- package/dist/utils/random.js +34 -0
- package/dist/utils/random.js.map +1 -0
- package/dist/utils/resource-utils.d.ts +45 -0
- package/dist/utils/resource-utils.js +137 -0
- package/dist/utils/resource-utils.js.map +1 -0
- package/dist/utils/sanitize-svg.d.ts +18 -0
- package/dist/utils/sanitize-svg.js +38 -0
- package/dist/utils/sanitize-svg.js.map +1 -0
- package/dist/utils/user-preferences.d.ts +64 -0
- package/dist/utils/user-preferences.js +106 -0
- package/dist/utils/user-preferences.js.map +1 -0
- package/dist/utils/validate.d.ts +26 -0
- package/dist/utils/validate.js +53 -0
- package/dist/utils/validate.js.map +1 -0
- package/dist/utils/value-utils.d.ts +58 -0
- package/dist/utils/value-utils.js +181 -0
- package/dist/utils/value-utils.js.map +1 -0
- package/package.json +67 -0
- package/src/card-metadata-updater.ts +182 -0
- package/src/command-handler.ts +686 -0
- package/src/command-manager.ts +99 -0
- package/src/commands/calculate.ts +591 -0
- package/src/commands/create.ts +559 -0
- package/src/commands/edit.ts +123 -0
- package/src/commands/export-site.ts +356 -0
- package/src/commands/export.ts +315 -0
- package/src/commands/import.ts +169 -0
- package/src/commands/index.ts +42 -0
- package/src/commands/move.ts +451 -0
- package/src/commands/remove.ts +244 -0
- package/src/commands/rename.ts +378 -0
- package/src/commands/show.ts +442 -0
- package/src/commands/transition.ts +127 -0
- package/src/commands/update.ts +76 -0
- package/src/commands/validate.ts +962 -0
- package/src/containers/card-container.ts +378 -0
- package/src/containers/project/project-paths.ts +127 -0
- package/src/containers/project/resource-collector.ts +379 -0
- package/src/containers/project.ts +1135 -0
- package/src/containers/template.ts +573 -0
- package/src/exceptions/index.ts +29 -0
- package/src/index.ts +33 -0
- package/src/interfaces/adoc.ts +18 -0
- package/src/interfaces/macros.ts +54 -0
- package/src/interfaces/project-interfaces.ts +208 -0
- package/src/interfaces/request-status-interfaces.ts +30 -0
- package/src/interfaces/resource-interfaces.ts +179 -0
- package/src/macros/base-macro.ts +176 -0
- package/src/macros/common.ts +24 -0
- package/src/macros/createCards/index.ts +57 -0
- package/src/macros/createCards/metadata.ts +21 -0
- package/src/macros/graph/index.ts +130 -0
- package/src/macros/graph/metadata.ts +21 -0
- package/src/macros/index.ts +321 -0
- package/src/macros/report/index.ts +88 -0
- package/src/macros/report/metadata.ts +21 -0
- package/src/macros/scoreCard/index.ts +55 -0
- package/src/macros/scoreCard/metadata.ts +21 -0
- package/src/macros/task-queue.ts +79 -0
- package/src/module-manager.ts +443 -0
- package/src/permissions/action-guard.ts +77 -0
- package/src/project-settings.ts +140 -0
- package/src/resources/array-handler.ts +141 -0
- package/src/resources/card-type-resource.ts +455 -0
- package/src/resources/create-defaults.ts +216 -0
- package/src/resources/field-type-resource.ts +533 -0
- package/src/resources/file-resource.ts +433 -0
- package/src/resources/folder-resource.ts +140 -0
- package/src/resources/graph-model-resource.ts +205 -0
- package/src/resources/graph-view-resource.ts +199 -0
- package/src/resources/link-type-resource.ts +191 -0
- package/src/resources/report-resource.ts +224 -0
- package/src/resources/resource-object.ts +246 -0
- package/src/resources/template-resource.ts +210 -0
- package/src/resources/workflow-resource.ts +205 -0
- package/src/types/queries.ts +149 -0
- package/src/utils/card-utils.ts +83 -0
- package/src/utils/clingo-fact-builder.ts +167 -0
- package/src/utils/clingo-facts.ts +550 -0
- package/src/utils/clingo-parser.ts +519 -0
- package/src/utils/clingo-program-builder.ts +71 -0
- package/src/utils/common-utils.ts +54 -0
- package/src/utils/constants.ts +32 -0
- package/src/utils/csv.ts +53 -0
- package/src/utils/file-utils.ts +182 -0
- package/src/utils/json.ts +118 -0
- package/src/utils/lexorank.ts +180 -0
- package/src/utils/log-utils.ts +127 -0
- package/src/utils/random.ts +37 -0
- package/src/utils/resource-utils.ts +180 -0
- package/src/utils/sanitize-svg.ts +46 -0
- package/src/utils/user-preferences.ts +126 -0
- package/src/utils/validate.ts +66 -0
- package/src/utils/value-utils.ts +189 -0
|
@@ -0,0 +1,73 @@
|
|
|
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 { Calculate, Create, Edit, Export, ExportSite, Import, Move, Remove, Rename, Show, Transition, Update, Validate, } from './commands/index.js';
|
|
13
|
+
import { Project } from './containers/project.js';
|
|
14
|
+
// Handles commands and ensures that no extra instances are created.
|
|
15
|
+
export class CommandManager {
|
|
16
|
+
static instance;
|
|
17
|
+
project;
|
|
18
|
+
calculateCmd;
|
|
19
|
+
createCmd;
|
|
20
|
+
editCmd;
|
|
21
|
+
exportSiteCmd;
|
|
22
|
+
exportCmd;
|
|
23
|
+
importCmd;
|
|
24
|
+
moveCmd;
|
|
25
|
+
removeCmd;
|
|
26
|
+
renameCmd;
|
|
27
|
+
showCmd;
|
|
28
|
+
transitionCmd;
|
|
29
|
+
updateCmd;
|
|
30
|
+
validateCmd;
|
|
31
|
+
constructor(path) {
|
|
32
|
+
this.project = new Project(path);
|
|
33
|
+
this.validateCmd = Validate.getInstance();
|
|
34
|
+
this.showCmd = new Show(this.project);
|
|
35
|
+
this.calculateCmd = new Calculate(this.project);
|
|
36
|
+
this.createCmd = new Create(this.project, this.calculateCmd);
|
|
37
|
+
this.editCmd = new Edit(this.project, this.calculateCmd);
|
|
38
|
+
this.exportCmd = new Export(this.project, this.calculateCmd, this.showCmd);
|
|
39
|
+
this.exportSiteCmd = new ExportSite(this.project, this.calculateCmd, this.showCmd);
|
|
40
|
+
this.importCmd = new Import(this.project, this.createCmd);
|
|
41
|
+
this.moveCmd = new Move(this.project, this.calculateCmd);
|
|
42
|
+
this.removeCmd = new Remove(this.project, this.calculateCmd);
|
|
43
|
+
this.renameCmd = new Rename(this.project, this.calculateCmd);
|
|
44
|
+
this.transitionCmd = new Transition(this.project, this.calculateCmd);
|
|
45
|
+
this.updateCmd = new Update(this.project);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Some commands needs initialization that cannot be performed inside constructor.
|
|
49
|
+
* Add such calls here.
|
|
50
|
+
*/
|
|
51
|
+
async initialize() {
|
|
52
|
+
await this.project.collectModuleResources();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Either creates a new instance, or passes the current one.
|
|
56
|
+
* New instance is created, if path differs, or there is no previous instance.
|
|
57
|
+
* @param path Project path.
|
|
58
|
+
* @returns Instance of this class.
|
|
59
|
+
*/
|
|
60
|
+
static async getInstance(path) {
|
|
61
|
+
if (CommandManager.instance &&
|
|
62
|
+
CommandManager.instance.project.basePath !== path) {
|
|
63
|
+
CommandManager.instance = new CommandManager(path);
|
|
64
|
+
await CommandManager.instance.initialize();
|
|
65
|
+
}
|
|
66
|
+
if (!CommandManager.instance) {
|
|
67
|
+
CommandManager.instance = new CommandManager(path);
|
|
68
|
+
await CommandManager.instance.initialize();
|
|
69
|
+
}
|
|
70
|
+
return CommandManager.instance;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=command-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-manager.js","sourceRoot":"","sources":["../src/command-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2024
|
|
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 type { BaseResult, ParseResult, QueryName, QueryResult } from '../types/queries.js';
|
|
14
|
+
import type { Card } from '../interfaces/project-interfaces.js';
|
|
15
|
+
import { type Project } from '../containers/project.js';
|
|
16
|
+
export declare class Calculate {
|
|
17
|
+
private project;
|
|
18
|
+
private static mutex;
|
|
19
|
+
private pythonBinary;
|
|
20
|
+
constructor(project: Project);
|
|
21
|
+
private logicProgram;
|
|
22
|
+
private modules;
|
|
23
|
+
private modulesInitialized;
|
|
24
|
+
private initializeModules;
|
|
25
|
+
private creationQuery;
|
|
26
|
+
private generateCardTreeContent;
|
|
27
|
+
private generateCardTypes;
|
|
28
|
+
private generateFieldTypes;
|
|
29
|
+
private generateLinkTypes;
|
|
30
|
+
private generateModules;
|
|
31
|
+
private generateCalculations;
|
|
32
|
+
private generateReports;
|
|
33
|
+
private generateTemplates;
|
|
34
|
+
private generateWorkFlows;
|
|
35
|
+
private getCards;
|
|
36
|
+
private parseClingoResult;
|
|
37
|
+
private run;
|
|
38
|
+
/**
|
|
39
|
+
* Generates a logic program.
|
|
40
|
+
* @param cardKey Optional, sub-card tree defining card
|
|
41
|
+
*/
|
|
42
|
+
generate(cardKey?: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* When card changes, update the card specific calculations.
|
|
45
|
+
* @param changedCard Card that was changed.
|
|
46
|
+
*/
|
|
47
|
+
handleCardChanged(changedCard: Card): Promise<{
|
|
48
|
+
statusCode: number;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* When cards are removed, automatically remove card-specific calculations.
|
|
52
|
+
* @param deletedCard Card that is to be removed.
|
|
53
|
+
*/
|
|
54
|
+
handleDeleteCard(deletedCard: Card): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* When new cards are added, automatically calculate card-specific values.
|
|
57
|
+
* @param cards Added cards.
|
|
58
|
+
*/
|
|
59
|
+
handleNewCards(cards: Card[]): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Runs given logic program and creates a graph using clingraph
|
|
62
|
+
* @param data Provide a query or/and a file which can be given to clingraph
|
|
63
|
+
* @param timeout Maximum amount of milliseconds clingraph is allowed to run
|
|
64
|
+
* @returns a base64 encoded image as a string
|
|
65
|
+
*/
|
|
66
|
+
runGraph(data: {
|
|
67
|
+
query?: string;
|
|
68
|
+
file?: string;
|
|
69
|
+
}, timeout?: number): Promise<string>;
|
|
70
|
+
/**
|
|
71
|
+
* Runs a logic program using clingo.
|
|
72
|
+
* @param filePath Path to a query file to be run in relation to current working directory
|
|
73
|
+
* @returns parsed program output
|
|
74
|
+
*/
|
|
75
|
+
runLogicProgram(data: {
|
|
76
|
+
query?: string;
|
|
77
|
+
file?: string;
|
|
78
|
+
}): Promise<ParseResult<BaseResult>>;
|
|
79
|
+
/**
|
|
80
|
+
* Runs a pre-defined query.
|
|
81
|
+
* @param queryName Name of the query file without extension
|
|
82
|
+
* @param options Any object that contains state for handlebars
|
|
83
|
+
* @returns parsed program output
|
|
84
|
+
*/
|
|
85
|
+
runQuery<T extends QueryName>(queryName: T, options?: unknown): Promise<QueryResult<T>[]>;
|
|
86
|
+
}
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2024
|
|
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
|
+
// node
|
|
14
|
+
import { basename, join, resolve } from 'node:path';
|
|
15
|
+
import { readFile, rm } from 'node:fs/promises';
|
|
16
|
+
import { spawnSync } from 'node:child_process';
|
|
17
|
+
import { sanitizeSvgBase64 } from '../utils/sanitize-svg.js';
|
|
18
|
+
import ClingoParser from '../utils/clingo-parser.js';
|
|
19
|
+
import { pathExists } from '../utils/file-utils.js';
|
|
20
|
+
import { Mutex } from 'async-mutex';
|
|
21
|
+
import Handlebars from 'handlebars';
|
|
22
|
+
import { ResourcesFrom } from '../containers/project.js';
|
|
23
|
+
import { flattenCardArray } from '../utils/card-utils.js';
|
|
24
|
+
import { logger } from '../utils/log-utils.js';
|
|
25
|
+
import { createCardFacts, createCardTypeFacts, createFieldTypeFacts, createLinkTypeFacts, createModuleFacts, createProjectFacts, createReportFacts, createTemplateFacts, createWorkflowFacts, } from '../utils/clingo-facts.js';
|
|
26
|
+
import { CardMetadataUpdater } from '../card-metadata-updater.js';
|
|
27
|
+
import { generateRandomString } from '../utils/random.js';
|
|
28
|
+
import { solve, setBaseProgram } from '@cyberismocom/node-clingo';
|
|
29
|
+
import { lpFiles } from '@cyberismocom/resources';
|
|
30
|
+
// Define names for the base programs
|
|
31
|
+
const BASE_PROGRAM_KEY = 'base';
|
|
32
|
+
const QUERY_LANGUAGE_KEY = 'queryLanguage';
|
|
33
|
+
// Class that calculates with logic program card / project level calculations.
|
|
34
|
+
export class Calculate {
|
|
35
|
+
project;
|
|
36
|
+
static mutex = new Mutex();
|
|
37
|
+
pythonBinary = 'python';
|
|
38
|
+
constructor(project) {
|
|
39
|
+
this.project = project;
|
|
40
|
+
}
|
|
41
|
+
// Storage for in-memory program content
|
|
42
|
+
logicProgram = '';
|
|
43
|
+
modules = '';
|
|
44
|
+
modulesInitialized = false;
|
|
45
|
+
// Initialize modules during construction
|
|
46
|
+
async initializeModules() {
|
|
47
|
+
try {
|
|
48
|
+
// Collect all available calculations at initialization time
|
|
49
|
+
const modules = await this.generateModules();
|
|
50
|
+
this.modules = modules; // Store initial modules in logicProgram
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
logger.error(`Failed to initialize modules: ${error}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Wrapper to run onCreation query.
|
|
57
|
+
async creationQuery(cardKeys) {
|
|
58
|
+
if (!cardKeys)
|
|
59
|
+
return undefined;
|
|
60
|
+
return this.runQuery('onCreation', {
|
|
61
|
+
cardKeys,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Generate card tree content
|
|
65
|
+
async generateCardTreeContent(parentCard) {
|
|
66
|
+
const cards = await this.getCards(parentCard);
|
|
67
|
+
let content = '% SECTION: CARDS_START\n';
|
|
68
|
+
for (const card of cards) {
|
|
69
|
+
const cardContent = await createCardFacts(card, this.project);
|
|
70
|
+
content += `% SECTION: CARD_${card.key}_START\n`;
|
|
71
|
+
content += `% Card ${card.key}\n`;
|
|
72
|
+
content += `${cardContent}\n`;
|
|
73
|
+
content += `% SECTION: CARD_${card.key}_END\n\n`;
|
|
74
|
+
}
|
|
75
|
+
content += '% SECTION: CARDS_END';
|
|
76
|
+
return content;
|
|
77
|
+
}
|
|
78
|
+
//
|
|
79
|
+
async generateCardTypes() {
|
|
80
|
+
const cardTypes = await this.project.cardTypes();
|
|
81
|
+
let content = '';
|
|
82
|
+
for (const cardType of await Promise.all(cardTypes.map((c) => this.project.resource(c.name)))) {
|
|
83
|
+
if (!cardType)
|
|
84
|
+
continue;
|
|
85
|
+
const cardTypeContent = createCardTypeFacts(cardType);
|
|
86
|
+
content += `% CardType ${cardType.name}\n${cardTypeContent}\n\n`;
|
|
87
|
+
}
|
|
88
|
+
return content;
|
|
89
|
+
}
|
|
90
|
+
//
|
|
91
|
+
async generateFieldTypes() {
|
|
92
|
+
const fieldTypes = await this.project.fieldTypes();
|
|
93
|
+
let content = '';
|
|
94
|
+
for (const fieldType of await Promise.all(fieldTypes.map((m) => this.project.resource(m.name)))) {
|
|
95
|
+
if (!fieldType)
|
|
96
|
+
continue;
|
|
97
|
+
const fieldTypeContent = createFieldTypeFacts(fieldType);
|
|
98
|
+
content += `% FieldType ${fieldType.name}\n${fieldTypeContent}\n\n`;
|
|
99
|
+
}
|
|
100
|
+
return content;
|
|
101
|
+
}
|
|
102
|
+
// Collects all linkTypes from the project
|
|
103
|
+
async generateLinkTypes() {
|
|
104
|
+
const linkTypes = await this.project.linkTypes();
|
|
105
|
+
let content = '';
|
|
106
|
+
for (const linkType of await Promise.all(linkTypes.map((c) => this.project.resource(c.name)))) {
|
|
107
|
+
if (!linkType)
|
|
108
|
+
continue;
|
|
109
|
+
const linkTypeContent = createLinkTypeFacts(linkType);
|
|
110
|
+
content += `% LinkType ${linkType.name}\n${linkTypeContent}\n\n`;
|
|
111
|
+
}
|
|
112
|
+
return content;
|
|
113
|
+
}
|
|
114
|
+
// Generates logic programs related to modules (and project itself).
|
|
115
|
+
async generateModules() {
|
|
116
|
+
const modules = await this.project.modules();
|
|
117
|
+
let content = '';
|
|
118
|
+
for (const module of await Promise.all(modules.map((mod) => this.project.module(mod.name)))) {
|
|
119
|
+
if (!module)
|
|
120
|
+
continue;
|
|
121
|
+
const moduleContent = createModuleFacts(module);
|
|
122
|
+
content = content.concat(moduleContent);
|
|
123
|
+
}
|
|
124
|
+
const projectContent = createProjectFacts(this.project.projectPrefix);
|
|
125
|
+
content = content.concat(projectContent);
|
|
126
|
+
return content;
|
|
127
|
+
}
|
|
128
|
+
// Collects all logic calculation files from project (local and imported modules)
|
|
129
|
+
async generateCalculations() {
|
|
130
|
+
// Collect all available calculations
|
|
131
|
+
const calculations = await this.project.calculations(ResourcesFrom.all);
|
|
132
|
+
let content = '% SECTION: MODULES_START\n';
|
|
133
|
+
// Process modules content
|
|
134
|
+
for (const calculationFile of calculations) {
|
|
135
|
+
if (calculationFile.path) {
|
|
136
|
+
const moduleLogicFile = resolve(join(calculationFile.path, basename(calculationFile.name)));
|
|
137
|
+
const filePath = moduleLogicFile.endsWith('.lp')
|
|
138
|
+
? moduleLogicFile
|
|
139
|
+
: moduleLogicFile + '.lp';
|
|
140
|
+
if (pathExists(filePath)) {
|
|
141
|
+
try {
|
|
142
|
+
const moduleContent = await readFile(filePath, 'utf-8');
|
|
143
|
+
content += `% SECTION: MODULE_${calculationFile.name}_START\n`;
|
|
144
|
+
content += `% Module ${calculationFile.name}\n`;
|
|
145
|
+
content += `${moduleContent}\n`;
|
|
146
|
+
content += `% SECTION: MODULE_${calculationFile.name}_END\n\n`;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
logger.warn(`Failed to read module ${calculationFile.name}: ${error}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
content += '% SECTION: MODULES_END';
|
|
155
|
+
return content;
|
|
156
|
+
}
|
|
157
|
+
// Generates logic programs related to reports.
|
|
158
|
+
async generateReports() {
|
|
159
|
+
const reports = await this.project.reports();
|
|
160
|
+
let content = '';
|
|
161
|
+
for (const report of await Promise.all(reports.map((r) => this.project.resource(r.name)))) {
|
|
162
|
+
if (!report)
|
|
163
|
+
continue;
|
|
164
|
+
content += createReportFacts(report);
|
|
165
|
+
}
|
|
166
|
+
return content;
|
|
167
|
+
}
|
|
168
|
+
// Generates logic programs related to templates (including their cards).
|
|
169
|
+
async generateTemplates() {
|
|
170
|
+
const templates = await this.project.templates();
|
|
171
|
+
let content = '';
|
|
172
|
+
for (const template of await Promise.all(templates.map((r) => this.project.resource(r.name)))) {
|
|
173
|
+
if (!template)
|
|
174
|
+
continue;
|
|
175
|
+
let templateContent = createTemplateFacts(template);
|
|
176
|
+
const cards = await this.getCards(undefined, template.name);
|
|
177
|
+
for (const card of cards) {
|
|
178
|
+
const cardContent = await createCardFacts(card, this.project);
|
|
179
|
+
templateContent = templateContent.concat(cardContent);
|
|
180
|
+
}
|
|
181
|
+
content = content.concat(templateContent);
|
|
182
|
+
}
|
|
183
|
+
return content;
|
|
184
|
+
}
|
|
185
|
+
//
|
|
186
|
+
async generateWorkFlows() {
|
|
187
|
+
const workflows = await this.project.workflows();
|
|
188
|
+
let content = '';
|
|
189
|
+
// loop through workflows
|
|
190
|
+
for (const workflow of await Promise.all(workflows.map((m) => this.project.resource(m.name)))) {
|
|
191
|
+
if (!workflow)
|
|
192
|
+
continue;
|
|
193
|
+
const workflowContent = createWorkflowFacts(workflow);
|
|
194
|
+
content += `% Workflow ${workflow.name}\n${workflowContent}\n\n`;
|
|
195
|
+
}
|
|
196
|
+
return content;
|
|
197
|
+
}
|
|
198
|
+
// Gets either all the cards (no parent), or a subtree.
|
|
199
|
+
async getCards(card, templateName) {
|
|
200
|
+
let cards = [];
|
|
201
|
+
if (!card) {
|
|
202
|
+
return templateName
|
|
203
|
+
? this.project.templateCards(templateName)
|
|
204
|
+
: this.project.cards();
|
|
205
|
+
}
|
|
206
|
+
if (card.children) {
|
|
207
|
+
cards = flattenCardArray(card.children);
|
|
208
|
+
}
|
|
209
|
+
card.children = [];
|
|
210
|
+
cards.unshift(card);
|
|
211
|
+
return cards;
|
|
212
|
+
}
|
|
213
|
+
// Checks that Clingo successfully returned result.
|
|
214
|
+
async parseClingoResult(data) {
|
|
215
|
+
const parser = new ClingoParser();
|
|
216
|
+
return parser.parseInput(data.join('\n'));
|
|
217
|
+
}
|
|
218
|
+
//
|
|
219
|
+
async run(data, argMode = 'query') {
|
|
220
|
+
if (!data.query) {
|
|
221
|
+
throw new Error('Must provide query to run a clingo program');
|
|
222
|
+
}
|
|
223
|
+
const res = await Calculate.mutex.runExclusive(async () => {
|
|
224
|
+
// For queries, use both base and queryLanguage
|
|
225
|
+
const basePrograms = argMode === 'query'
|
|
226
|
+
? [BASE_PROGRAM_KEY, QUERY_LANGUAGE_KEY]
|
|
227
|
+
: BASE_PROGRAM_KEY;
|
|
228
|
+
// Then solve with the program - need to pass the program as parameter
|
|
229
|
+
return solve(data.query, basePrograms);
|
|
230
|
+
});
|
|
231
|
+
logger.trace({
|
|
232
|
+
query: data.query,
|
|
233
|
+
}, `Ran Clingo solve command`);
|
|
234
|
+
if (res && res.answers && res.answers.length > 0) {
|
|
235
|
+
logger.trace({
|
|
236
|
+
result: res.answers,
|
|
237
|
+
});
|
|
238
|
+
return res.answers;
|
|
239
|
+
}
|
|
240
|
+
throw new Error('Failed to run Clingo solve. No answers returned.');
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Generates a logic program.
|
|
244
|
+
* @param cardKey Optional, sub-card tree defining card
|
|
245
|
+
*/
|
|
246
|
+
async generate(cardKey) {
|
|
247
|
+
await Calculate.mutex.runExclusive(async () => {
|
|
248
|
+
if (!this.modulesInitialized) {
|
|
249
|
+
await this.initializeModules();
|
|
250
|
+
this.modulesInitialized = true;
|
|
251
|
+
}
|
|
252
|
+
let card;
|
|
253
|
+
if (cardKey) {
|
|
254
|
+
card = await this.project.findSpecificCard(cardKey, {
|
|
255
|
+
metadata: true,
|
|
256
|
+
children: true,
|
|
257
|
+
content: false,
|
|
258
|
+
parent: false,
|
|
259
|
+
});
|
|
260
|
+
if (!card) {
|
|
261
|
+
throw new Error(`Card '${cardKey}' not found`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const calculations = await this.generateCalculations();
|
|
265
|
+
const cardTreeContent = await this.generateCardTreeContent(card);
|
|
266
|
+
const workFlows = await this.generateWorkFlows();
|
|
267
|
+
const cardTypes = await this.generateCardTypes();
|
|
268
|
+
const fieldTypes = await this.generateFieldTypes();
|
|
269
|
+
const linkTypes = await this.generateLinkTypes();
|
|
270
|
+
const reports = await this.generateReports();
|
|
271
|
+
const templates = await this.generateTemplates();
|
|
272
|
+
// Combine all resources
|
|
273
|
+
const resourcesProgram = '% SECTION: RESOURCES_START\n' +
|
|
274
|
+
calculations +
|
|
275
|
+
workFlows +
|
|
276
|
+
cardTypes +
|
|
277
|
+
fieldTypes +
|
|
278
|
+
linkTypes +
|
|
279
|
+
reports +
|
|
280
|
+
templates +
|
|
281
|
+
'% SECTION: RESOURCES_END';
|
|
282
|
+
// Create base program content
|
|
283
|
+
const baseProgram = '% SECTION: BASE_START\n' +
|
|
284
|
+
lpFiles.common.base +
|
|
285
|
+
'\n% SECTION: BASE_END\n\n' +
|
|
286
|
+
this.modules +
|
|
287
|
+
'\n\n' +
|
|
288
|
+
cardTreeContent +
|
|
289
|
+
'\n\n' +
|
|
290
|
+
resourcesProgram;
|
|
291
|
+
// Set the base programs separately
|
|
292
|
+
setBaseProgram(baseProgram, BASE_PROGRAM_KEY);
|
|
293
|
+
setBaseProgram('% SECTION: QUERY_LANGUAGE_START\n' +
|
|
294
|
+
lpFiles.common.queryLanguage +
|
|
295
|
+
'\n% SECTION: QUERY_LANGUAGE_END', QUERY_LANGUAGE_KEY);
|
|
296
|
+
// Also store the base program (without query language) for updates
|
|
297
|
+
this.logicProgram = baseProgram;
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* When card changes, update the card specific calculations.
|
|
302
|
+
* @param changedCard Card that was changed.
|
|
303
|
+
*/
|
|
304
|
+
async handleCardChanged(changedCard) {
|
|
305
|
+
await this.generate(changedCard.key);
|
|
306
|
+
return { statusCode: 200 };
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* When cards are removed, automatically remove card-specific calculations.
|
|
310
|
+
* @param deletedCard Card that is to be removed.
|
|
311
|
+
*/
|
|
312
|
+
async handleDeleteCard(deletedCard) {
|
|
313
|
+
if (!deletedCard) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
await Calculate.mutex.runExclusive(async () => {
|
|
317
|
+
const affectedCards = await this.getCards(deletedCard);
|
|
318
|
+
// Filter out deleted cards' content from the cardsProgram string
|
|
319
|
+
for (const card of affectedCards) {
|
|
320
|
+
// Remove card-specific content from the in-memory program using section markers
|
|
321
|
+
const cardSectionPattern = new RegExp(`% SECTION: CARD_${card.key}_START[\\s\\S]*?% SECTION: CARD_${card.key}_END\\n\\n`, 'g');
|
|
322
|
+
this.logicProgram = this.logicProgram.replace(cardSectionPattern, '');
|
|
323
|
+
}
|
|
324
|
+
// Update the base program after modifying logicProgram
|
|
325
|
+
setBaseProgram(this.logicProgram, BASE_PROGRAM_KEY);
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* When new cards are added, automatically calculate card-specific values.
|
|
330
|
+
* @param cards Added cards.
|
|
331
|
+
*/
|
|
332
|
+
async handleNewCards(cards) {
|
|
333
|
+
if (!cards) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
// Only proceed if we already have a logic program
|
|
337
|
+
if (!this.logicProgram) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
await Calculate.mutex.runExclusive(async () => {
|
|
341
|
+
// Generate content for all cards (including new ones)
|
|
342
|
+
const cardTreeContent = await this.generateCardTreeContent(undefined);
|
|
343
|
+
// Update the main logic program with the new cards program
|
|
344
|
+
if (this.logicProgram.includes('% SECTION: CARDS_START') &&
|
|
345
|
+
this.logicProgram.includes('% SECTION: CARDS_END')) {
|
|
346
|
+
this.logicProgram = this.logicProgram.replace(/% SECTION: CARDS_START[\s\S]*?% SECTION: CARDS_END/, cardTreeContent);
|
|
347
|
+
}
|
|
348
|
+
// Update the base program after modifying logicProgram
|
|
349
|
+
setBaseProgram(this.logicProgram, BASE_PROGRAM_KEY);
|
|
350
|
+
});
|
|
351
|
+
const cardKeys = cards.map((item) => item.key);
|
|
352
|
+
const queryResult = await this.creationQuery(cardKeys);
|
|
353
|
+
if (!queryResult ||
|
|
354
|
+
queryResult.at(0) === undefined ||
|
|
355
|
+
queryResult.at(0)?.updateFields === undefined) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const fieldsToUpdate = queryResult.at(0).updateFields;
|
|
359
|
+
await CardMetadataUpdater.apply(this.project, fieldsToUpdate);
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Runs given logic program and creates a graph using clingraph
|
|
363
|
+
* @param data Provide a query or/and a file which can be given to clingraph
|
|
364
|
+
* @param timeout Maximum amount of milliseconds clingraph is allowed to run
|
|
365
|
+
* @returns a base64 encoded image as a string
|
|
366
|
+
*/
|
|
367
|
+
async runGraph(data, timeout) {
|
|
368
|
+
const clingoOutput = await this.run(data, 'graph');
|
|
369
|
+
// unlikely we ever get a collision
|
|
370
|
+
const randomId = generateRandomString(36, 20);
|
|
371
|
+
const clingGraphArgs = [
|
|
372
|
+
'--out=render',
|
|
373
|
+
'--format=svg',
|
|
374
|
+
'--type=digraph',
|
|
375
|
+
`--name-format=${randomId}`,
|
|
376
|
+
`--dir=${this.project.paths.tempFolder}`,
|
|
377
|
+
];
|
|
378
|
+
// python is only used for windows
|
|
379
|
+
const pythonArgs = [
|
|
380
|
+
'-c',
|
|
381
|
+
`from clingraph import main; import sys; sys.argv = ["sys.argv[0]", ${clingGraphArgs
|
|
382
|
+
.map((arg) => `'${arg.replace(/\\/g, '\\\\')}'`)
|
|
383
|
+
.join(',')}]; sys.exit(main())`,
|
|
384
|
+
];
|
|
385
|
+
const clingraph = spawnSync(this.pythonBinary, pythonArgs, {
|
|
386
|
+
encoding: 'utf8',
|
|
387
|
+
// below looks like it could be replaced by just joining dots, but
|
|
388
|
+
// it breaks it because elements contain newlines, which must be
|
|
389
|
+
// replaced by dots
|
|
390
|
+
input: clingoOutput.join('\n').replaceAll('\n', '.') + '.',
|
|
391
|
+
timeout,
|
|
392
|
+
maxBuffer: 1024 * 1024 * 100,
|
|
393
|
+
});
|
|
394
|
+
if (clingraph.status !== 0) {
|
|
395
|
+
throw new Error(`Graph: Failed to run clingraph ${clingraph.stderr}`);
|
|
396
|
+
}
|
|
397
|
+
const filePath = join(this.project.paths.tempFolder, randomId);
|
|
398
|
+
let fileData;
|
|
399
|
+
try {
|
|
400
|
+
fileData = await readFile(filePath + '.svg');
|
|
401
|
+
}
|
|
402
|
+
catch (e) {
|
|
403
|
+
throw new Error(`Graph: Failed to read image file after generating graph: ${e}`);
|
|
404
|
+
}
|
|
405
|
+
finally {
|
|
406
|
+
await rm(filePath, { force: true });
|
|
407
|
+
await rm(filePath + '.svg', { force: true });
|
|
408
|
+
}
|
|
409
|
+
// Sanitizing SVG before returning it
|
|
410
|
+
return sanitizeSvgBase64(fileData);
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Runs a logic program using clingo.
|
|
414
|
+
* @param filePath Path to a query file to be run in relation to current working directory
|
|
415
|
+
* @returns parsed program output
|
|
416
|
+
*/
|
|
417
|
+
async runLogicProgram(data) {
|
|
418
|
+
const clingoOutput = await this.run(data);
|
|
419
|
+
return this.parseClingoResult(clingoOutput);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Runs a pre-defined query.
|
|
423
|
+
* @param queryName Name of the query file without extension
|
|
424
|
+
* @param options Any object that contains state for handlebars
|
|
425
|
+
* @returns parsed program output
|
|
426
|
+
*/
|
|
427
|
+
async runQuery(queryName, options) {
|
|
428
|
+
let content = lpFiles.queries[queryName];
|
|
429
|
+
if (options && typeof options === 'object') {
|
|
430
|
+
const handlebars = Handlebars.create();
|
|
431
|
+
const compiled = handlebars.compile(content);
|
|
432
|
+
content = compiled(options);
|
|
433
|
+
}
|
|
434
|
+
const clingoOutput = await this.run({
|
|
435
|
+
query: content,
|
|
436
|
+
}, 'query');
|
|
437
|
+
const result = await this.parseClingoResult(clingoOutput);
|
|
438
|
+
if (result.error) {
|
|
439
|
+
throw new Error(result.error);
|
|
440
|
+
}
|
|
441
|
+
return result.results;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=calculate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.js","sourceRoot":"","sources":["../../src/commands/calculate.ts"],"names":[],"mappings":"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"}
|