@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,124 @@
|
|
|
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 { attachmentPayload } from '../interfaces/request-status-interfaces.js';
|
|
14
|
+
import type { CardAttachment, Card, CardListContainer, ModuleContent, ProjectFetchCardDetails, ProjectMetadata } from '../interfaces/project-interfaces.js';
|
|
15
|
+
import type { CardType, ResourceContent, TemplateConfiguration, Workflow } from '../interfaces/resource-interfaces.js';
|
|
16
|
+
import { Project } from '../containers/project.js';
|
|
17
|
+
/**
|
|
18
|
+
* Show command.
|
|
19
|
+
*/
|
|
20
|
+
export declare class Show {
|
|
21
|
+
private project;
|
|
22
|
+
private resourceFunction;
|
|
23
|
+
constructor(project: Project);
|
|
24
|
+
private collectLabels;
|
|
25
|
+
private getAttachment;
|
|
26
|
+
private openUsingDefaultApplication;
|
|
27
|
+
/**
|
|
28
|
+
* Shows all attachments (either template or project attachments) from a project.
|
|
29
|
+
* @returns array of card attachments
|
|
30
|
+
*/
|
|
31
|
+
showAttachments(): Promise<CardAttachment[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Returns file buffer and mime type of an attachment. Used by app UI to download attachments.
|
|
34
|
+
* @param cardKey card key to find
|
|
35
|
+
* @param filename attachment filename
|
|
36
|
+
* @returns attachment details
|
|
37
|
+
*/
|
|
38
|
+
showAttachment(cardKey: string, filename: string): Promise<attachmentPayload>;
|
|
39
|
+
/**
|
|
40
|
+
* Opens an attachment using a configured application or the operating system's default application.
|
|
41
|
+
* @param cardKey card key of the attachment
|
|
42
|
+
* @param filename attachment filename
|
|
43
|
+
* @param waitDelay amount of time to wait for the application to open the attachment
|
|
44
|
+
* @todo: Move away from Show.
|
|
45
|
+
*/
|
|
46
|
+
openAttachment(cardKey: string, filename: string, waitDelay?: number): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Shows details of a particular card (template card, or project card)
|
|
49
|
+
* @note Note that parameter 'cardKey' is optional due to technical limitations of class calling this class. It must be defined to get valid results.
|
|
50
|
+
* @param details card details to show
|
|
51
|
+
* @param cardKey card key to find
|
|
52
|
+
* @returns card details
|
|
53
|
+
*/
|
|
54
|
+
showCardDetails(details: ProjectFetchCardDetails, cardKey?: string): Promise<Card>;
|
|
55
|
+
/**
|
|
56
|
+
* Shows all cards (either template or project cards) from a project.
|
|
57
|
+
* @returns cards list array
|
|
58
|
+
*/
|
|
59
|
+
showCards(): Promise<CardListContainer[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Shows all card types in a project.
|
|
62
|
+
* @returns array of card type details
|
|
63
|
+
*/
|
|
64
|
+
showCardTypesWithDetails(): Promise<(CardType | undefined)[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Returns all unique labels in a project
|
|
67
|
+
* @returns labels in a list
|
|
68
|
+
*/
|
|
69
|
+
showLabels(): Promise<string[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Shows details of a module.
|
|
72
|
+
* @param moduleName name of a module
|
|
73
|
+
* @returns details of a module.
|
|
74
|
+
*/
|
|
75
|
+
showModule(moduleName: string): Promise<ModuleContent>;
|
|
76
|
+
/**
|
|
77
|
+
* Returns all project cards in the project. Cards don't have content and nor metadata.
|
|
78
|
+
* @note AppUi uses this method.
|
|
79
|
+
* @returns array of cards
|
|
80
|
+
*/
|
|
81
|
+
showProjectCards(): Promise<Card[]>;
|
|
82
|
+
/**
|
|
83
|
+
* Shows all modules (if any) in a project.
|
|
84
|
+
* @returns all modules in a project.
|
|
85
|
+
*/
|
|
86
|
+
showModules(): Promise<string[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Shows details of a particular project.
|
|
89
|
+
* @returns project information
|
|
90
|
+
*/
|
|
91
|
+
showProject(): Promise<ProjectMetadata>;
|
|
92
|
+
/**
|
|
93
|
+
* Shows report results for a given report name and card key.
|
|
94
|
+
* @param reportName Name of the report to show
|
|
95
|
+
* @param cardKey Card key to use for the report
|
|
96
|
+
* @param parameters Additional parameters for the report
|
|
97
|
+
* @param outputPath Optional output path for the report
|
|
98
|
+
* @returns Report results as a string
|
|
99
|
+
* @throws Error if the report does not exist
|
|
100
|
+
*/
|
|
101
|
+
showReportResults(reportName: string, cardKey: string, parameters: object, outputPath?: string): Promise<string>;
|
|
102
|
+
/**
|
|
103
|
+
* Shows details of certain resource.
|
|
104
|
+
* @param name Name of resource.
|
|
105
|
+
* @returns resource metadata as JSON.
|
|
106
|
+
*/
|
|
107
|
+
showResource(name: string, showUse?: boolean): Promise<ResourceContent | undefined>;
|
|
108
|
+
/**
|
|
109
|
+
* Shows all available resources of a given type.
|
|
110
|
+
* @param type Name of resources to return (in plural form, e.g. 'templates')
|
|
111
|
+
* @returns sorted array of resources
|
|
112
|
+
*/
|
|
113
|
+
showResources(type: string): Promise<string[]>;
|
|
114
|
+
/**
|
|
115
|
+
* Shows all templates with full details in a project.
|
|
116
|
+
* @returns all templates in a project.
|
|
117
|
+
*/
|
|
118
|
+
showTemplatesWithDetails(): Promise<TemplateConfiguration[]>;
|
|
119
|
+
/**
|
|
120
|
+
* Shows all workflows with full details in a project.
|
|
121
|
+
* @returns workflows with full details
|
|
122
|
+
*/
|
|
123
|
+
showWorkflowsWithDetails(): Promise<(Workflow | undefined)[]>;
|
|
124
|
+
}
|
|
@@ -0,0 +1,345 @@
|
|
|
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 { existsSync, readFileSync } from 'node:fs';
|
|
15
|
+
import { homedir } from 'node:os';
|
|
16
|
+
import { join, resolve } from 'node:path';
|
|
17
|
+
import { spawn } from 'node:child_process';
|
|
18
|
+
import { writeFile } from 'node:fs/promises';
|
|
19
|
+
import mime from 'mime-types';
|
|
20
|
+
import { Project } from '../containers/project.js';
|
|
21
|
+
import { resourceName } from '../utils/resource-utils.js';
|
|
22
|
+
import { TemplateResource } from '../resources/template-resource.js';
|
|
23
|
+
import { UserPreferences } from '../utils/user-preferences.js';
|
|
24
|
+
import ReportMacro from '../macros/report/index.js';
|
|
25
|
+
import TaskQueue from '../macros/task-queue.js';
|
|
26
|
+
/**
|
|
27
|
+
* Show command.
|
|
28
|
+
*/
|
|
29
|
+
export class Show {
|
|
30
|
+
project;
|
|
31
|
+
resourceFunction;
|
|
32
|
+
constructor(project) {
|
|
33
|
+
this.project = project;
|
|
34
|
+
this.resourceFunction = new Map([
|
|
35
|
+
['cardTypes', this.project.cardTypes.bind(this.project)],
|
|
36
|
+
['fieldTypes', this.project.fieldTypes.bind(this.project)],
|
|
37
|
+
['graphModels', this.project.graphModels.bind(this.project)],
|
|
38
|
+
['graphViews', this.project.graphViews.bind(this.project)],
|
|
39
|
+
['linkTypes', this.project.linkTypes.bind(this.project)],
|
|
40
|
+
['reports', this.project.reports.bind(this.project)],
|
|
41
|
+
['templates', this.project.templates.bind(this.project)],
|
|
42
|
+
['workflows', this.project.workflows.bind(this.project)],
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
// Collect all labels from cards.
|
|
46
|
+
collectLabels = (cards) => {
|
|
47
|
+
return cards.reduce((labels, card) => {
|
|
48
|
+
// Add the labels from the current card
|
|
49
|
+
if (card.metadata?.labels) {
|
|
50
|
+
labels.push(...card.metadata.labels);
|
|
51
|
+
}
|
|
52
|
+
// Recursively collect labels from subcards, if they exist
|
|
53
|
+
if (card.children) {
|
|
54
|
+
labels.push(...this.collectLabels(card.children));
|
|
55
|
+
}
|
|
56
|
+
return labels;
|
|
57
|
+
}, []);
|
|
58
|
+
};
|
|
59
|
+
// Returns attachment details
|
|
60
|
+
async getAttachment(cardKey, filename) {
|
|
61
|
+
const details = {
|
|
62
|
+
content: false,
|
|
63
|
+
metadata: true,
|
|
64
|
+
children: false,
|
|
65
|
+
parent: false,
|
|
66
|
+
attachments: true,
|
|
67
|
+
};
|
|
68
|
+
const card = await this.project.cardDetailsById(cardKey, details);
|
|
69
|
+
if (card === undefined) {
|
|
70
|
+
throw new Error(`Card '${cardKey}' does not exist in the project`);
|
|
71
|
+
}
|
|
72
|
+
const attachment = card.attachments?.find((a) => a.fileName === filename) ?? undefined;
|
|
73
|
+
return attachment;
|
|
74
|
+
}
|
|
75
|
+
// Opens the given path using the operating system's default application. Doesn't block the main thread.
|
|
76
|
+
// @todo: Move away from Show.
|
|
77
|
+
openUsingDefaultApplication(path) {
|
|
78
|
+
if (process.platform === 'win32') {
|
|
79
|
+
// This is a workaround to get windows to open the file in foreground
|
|
80
|
+
spawn(`start`, ['cmd.exe', '/c', 'start', '""', `"${path}"`], {
|
|
81
|
+
shell: true,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else if (process.platform === 'darwin') {
|
|
85
|
+
spawn('open', [path]);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
spawn('xdg-open', [path]);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Shows all attachments (either template or project attachments) from a project.
|
|
93
|
+
* @returns array of card attachments
|
|
94
|
+
*/
|
|
95
|
+
async showAttachments() {
|
|
96
|
+
const attachments = await this.project.attachments();
|
|
97
|
+
const templateAttachments = [];
|
|
98
|
+
const templates = await this.project.templates();
|
|
99
|
+
for (const template of templates) {
|
|
100
|
+
const templateResource = new TemplateResource(this.project, resourceName(template.name));
|
|
101
|
+
const templateObject = templateResource.templateObject();
|
|
102
|
+
if (templateObject) {
|
|
103
|
+
templateAttachments.push(...(await templateObject.attachments()));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
attachments.push(...templateAttachments);
|
|
107
|
+
return attachments;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Returns file buffer and mime type of an attachment. Used by app UI to download attachments.
|
|
111
|
+
* @param cardKey card key to find
|
|
112
|
+
* @param filename attachment filename
|
|
113
|
+
* @returns attachment details
|
|
114
|
+
*/
|
|
115
|
+
async showAttachment(cardKey, filename) {
|
|
116
|
+
if (!cardKey) {
|
|
117
|
+
throw new Error(`Mandatory parameter 'cardKey' missing`);
|
|
118
|
+
}
|
|
119
|
+
const attachment = await this.getAttachment(cardKey, filename);
|
|
120
|
+
let attachmentPath = '';
|
|
121
|
+
if (attachment) {
|
|
122
|
+
attachmentPath = `${attachment.path}/${attachment.fileName}`;
|
|
123
|
+
}
|
|
124
|
+
if (!attachment || !existsSync(attachmentPath)) {
|
|
125
|
+
throw new Error(`Attachment '${filename}' not found for card ${cardKey}`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const fileBuffer = readFileSync(attachmentPath);
|
|
129
|
+
let mimeType = mime.lookup(attachmentPath);
|
|
130
|
+
if (mimeType === false) {
|
|
131
|
+
mimeType = 'application/octet-stream';
|
|
132
|
+
}
|
|
133
|
+
const payload = { fileBuffer, mimeType };
|
|
134
|
+
return payload;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Opens an attachment using a configured application or the operating system's default application.
|
|
139
|
+
* @param cardKey card key of the attachment
|
|
140
|
+
* @param filename attachment filename
|
|
141
|
+
* @param waitDelay amount of time to wait for the application to open the attachment
|
|
142
|
+
* @todo: Move away from Show.
|
|
143
|
+
*/
|
|
144
|
+
async openAttachment(cardKey, filename, waitDelay = 1000) {
|
|
145
|
+
const attachment = await this.getAttachment(cardKey, filename);
|
|
146
|
+
if (!attachment) {
|
|
147
|
+
throw new Error(`Attachment '${filename}' not found for card ${cardKey}`);
|
|
148
|
+
}
|
|
149
|
+
// Try to open the attachment using a configured application if one exists
|
|
150
|
+
const prefs = new UserPreferences(join(homedir(), '.cyberismo', 'cards.prefs.json')).getPreferences();
|
|
151
|
+
const attachmentEditors = prefs.attachmentEditors && process.platform in prefs.attachmentEditors
|
|
152
|
+
? prefs.attachmentEditors[process.platform]
|
|
153
|
+
: [];
|
|
154
|
+
const editor = attachmentEditors.find((editor) => editor.mimeType === attachment.mimeType);
|
|
155
|
+
const path = resolve(attachment.path, attachment.fileName);
|
|
156
|
+
if (!editor) {
|
|
157
|
+
this.openUsingDefaultApplication(path);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
// We can safely assume that the editor command is safe to execute, since it is defined in the preferences file by the user
|
|
161
|
+
const processHandle = spawn(editor.command.replace('{{attachmentPath}}', path), [], {
|
|
162
|
+
shell: true,
|
|
163
|
+
});
|
|
164
|
+
// wait for the application to open the attachment
|
|
165
|
+
await new Promise((resolve) => setTimeout(resolve, waitDelay));
|
|
166
|
+
// If the application exists with a non-zero exit code, open the attachment using the operating system's default application
|
|
167
|
+
if (processHandle.exitCode !== 0 && processHandle.exitCode !== null) {
|
|
168
|
+
this.openUsingDefaultApplication(path);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Shows details of a particular card (template card, or project card)
|
|
173
|
+
* @note Note that parameter 'cardKey' is optional due to technical limitations of class calling this class. It must be defined to get valid results.
|
|
174
|
+
* @param details card details to show
|
|
175
|
+
* @param cardKey card key to find
|
|
176
|
+
* @returns card details
|
|
177
|
+
*/
|
|
178
|
+
async showCardDetails(details, cardKey) {
|
|
179
|
+
if (!cardKey) {
|
|
180
|
+
throw new Error(`Mandatory parameter 'cardKey' missing`);
|
|
181
|
+
}
|
|
182
|
+
const cardDetails = await this.project.cardDetailsById(cardKey, details);
|
|
183
|
+
if (cardDetails === undefined) {
|
|
184
|
+
throw new Error(`Card '${cardKey}' does not exist in the project`);
|
|
185
|
+
}
|
|
186
|
+
return cardDetails;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Shows all cards (either template or project cards) from a project.
|
|
190
|
+
* @returns cards list array
|
|
191
|
+
*/
|
|
192
|
+
async showCards() {
|
|
193
|
+
return this.project.listCards();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Shows all card types in a project.
|
|
197
|
+
* @returns array of card type details
|
|
198
|
+
*/
|
|
199
|
+
async showCardTypesWithDetails() {
|
|
200
|
+
const promiseContainer = [];
|
|
201
|
+
for (const cardType of await this.project.cardTypes()) {
|
|
202
|
+
const cardTypeDetails = await this.project.resource(cardType.name);
|
|
203
|
+
if (cardTypeDetails) {
|
|
204
|
+
promiseContainer.push(cardTypeDetails);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const results = await Promise.all(promiseContainer);
|
|
208
|
+
return results.filter((item) => item);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Returns all unique labels in a project
|
|
212
|
+
* @returns labels in a list
|
|
213
|
+
*/
|
|
214
|
+
async showLabels() {
|
|
215
|
+
const cards = await this.project.showProjectCards();
|
|
216
|
+
const templateCards = await this.project.allTemplateCards({
|
|
217
|
+
metadata: true,
|
|
218
|
+
children: true,
|
|
219
|
+
});
|
|
220
|
+
const labels = this.collectLabels([...cards, ...templateCards]);
|
|
221
|
+
return Array.from(new Set(labels));
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Shows details of a module.
|
|
225
|
+
* @param moduleName name of a module
|
|
226
|
+
* @returns details of a module.
|
|
227
|
+
*/
|
|
228
|
+
async showModule(moduleName) {
|
|
229
|
+
const moduleDetails = await this.project.module(moduleName);
|
|
230
|
+
if (!moduleDetails) {
|
|
231
|
+
throw new Error(`Module '${moduleName}' does not exist in the project`);
|
|
232
|
+
}
|
|
233
|
+
return moduleDetails;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Returns all project cards in the project. Cards don't have content and nor metadata.
|
|
237
|
+
* @note AppUi uses this method.
|
|
238
|
+
* @returns array of cards
|
|
239
|
+
*/
|
|
240
|
+
async showProjectCards() {
|
|
241
|
+
const projectCards = await this.project.showProjectCards();
|
|
242
|
+
return projectCards;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Shows all modules (if any) in a project.
|
|
246
|
+
* @returns all modules in a project.
|
|
247
|
+
*/
|
|
248
|
+
async showModules() {
|
|
249
|
+
return (await this.project.modules()).map((item) => item.name).sort();
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Shows details of a particular project.
|
|
253
|
+
* @returns project information
|
|
254
|
+
*/
|
|
255
|
+
async showProject() {
|
|
256
|
+
return this.project.show();
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Shows report results for a given report name and card key.
|
|
260
|
+
* @param reportName Name of the report to show
|
|
261
|
+
* @param cardKey Card key to use for the report
|
|
262
|
+
* @param parameters Additional parameters for the report
|
|
263
|
+
* @param outputPath Optional output path for the report
|
|
264
|
+
* @returns Report results as a string
|
|
265
|
+
* @throws Error if the report does not exist
|
|
266
|
+
*/
|
|
267
|
+
async showReportResults(reportName, cardKey, parameters, outputPath) {
|
|
268
|
+
if (!(await this.project.reports()).some((report) => report.name === reportName)) {
|
|
269
|
+
throw new Error(`Report '${reportName}' does not exist`);
|
|
270
|
+
}
|
|
271
|
+
const reportMacro = new ReportMacro(new TaskQueue());
|
|
272
|
+
const result = await reportMacro.handleInject({
|
|
273
|
+
projectPath: this.project.basePath,
|
|
274
|
+
cardKey: cardKey,
|
|
275
|
+
mode: 'static',
|
|
276
|
+
}, { name: reportName, ...parameters });
|
|
277
|
+
// Show the results either in the console or write to a file.
|
|
278
|
+
if (outputPath) {
|
|
279
|
+
try {
|
|
280
|
+
await writeFile(outputPath, result ?? '', 'utf-8');
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
if (error instanceof Error) {
|
|
284
|
+
throw new Error(`Failed to write report to ${outputPath}: ${error.message}`);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return outputPath ? '' : (result ?? '');
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Shows details of certain resource.
|
|
292
|
+
* @param name Name of resource.
|
|
293
|
+
* @returns resource metadata as JSON.
|
|
294
|
+
*/
|
|
295
|
+
async showResource(name, showUse = false) {
|
|
296
|
+
const strictNameCheck = true;
|
|
297
|
+
const resource = Project.resourceObject(this.project, resourceName(name, strictNameCheck));
|
|
298
|
+
const [details, usage] = await Promise.all([
|
|
299
|
+
resource?.show(),
|
|
300
|
+
showUse ? resource?.usage() : [],
|
|
301
|
+
]);
|
|
302
|
+
if (showUse) {
|
|
303
|
+
return {
|
|
304
|
+
...details,
|
|
305
|
+
usedIn: [...usage],
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
return details;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Shows all available resources of a given type.
|
|
314
|
+
* @param type Name of resources to return (in plural form, e.g. 'templates')
|
|
315
|
+
* @returns sorted array of resources
|
|
316
|
+
*/
|
|
317
|
+
async showResources(type) {
|
|
318
|
+
const func = this.resourceFunction.get(type);
|
|
319
|
+
if (!func)
|
|
320
|
+
return [];
|
|
321
|
+
return (await func()).map((item) => item.name).sort();
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Shows all templates with full details in a project.
|
|
325
|
+
* @returns all templates in a project.
|
|
326
|
+
*/
|
|
327
|
+
async showTemplatesWithDetails() {
|
|
328
|
+
const promiseContainer = (await this.project.templates()).map((template) => new TemplateResource(this.project, resourceName(template.name)).show());
|
|
329
|
+
const result = await Promise.all(promiseContainer);
|
|
330
|
+
return result.filter(Boolean);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Shows all workflows with full details in a project.
|
|
334
|
+
* @returns workflows with full details
|
|
335
|
+
*/
|
|
336
|
+
async showWorkflowsWithDetails() {
|
|
337
|
+
const promiseContainer = [];
|
|
338
|
+
for (const workflow of await this.project.workflows()) {
|
|
339
|
+
promiseContainer.push(this.project.resource(workflow.name));
|
|
340
|
+
}
|
|
341
|
+
const results = await Promise.all(promiseContainer);
|
|
342
|
+
return results.filter((item) => item);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 { Calculate } from './calculate.js';
|
|
14
|
+
import type { WorkflowState } from '../interfaces/resource-interfaces.js';
|
|
15
|
+
import type { Project } from '../containers/project.js';
|
|
16
|
+
export declare class Transition {
|
|
17
|
+
private project;
|
|
18
|
+
private calculateCmd;
|
|
19
|
+
constructor(project: Project, calculateCmd: Calculate);
|
|
20
|
+
/**
|
|
21
|
+
* Transitions a card from its current state to a new state.
|
|
22
|
+
* @param cardKey card key
|
|
23
|
+
* @param transition which transition to do
|
|
24
|
+
*/
|
|
25
|
+
cardTransition(cardKey: string, transition: WorkflowState): Promise<void>;
|
|
26
|
+
private transitionChangesQuery;
|
|
27
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
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 { ActionGuard } from '../permissions/action-guard.js';
|
|
14
|
+
import { CardMetadataUpdater } from '../card-metadata-updater.js';
|
|
15
|
+
export class Transition {
|
|
16
|
+
project;
|
|
17
|
+
calculateCmd;
|
|
18
|
+
constructor(project, calculateCmd) {
|
|
19
|
+
this.project = project;
|
|
20
|
+
this.calculateCmd = calculateCmd;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Transitions a card from its current state to a new state.
|
|
24
|
+
* @param cardKey card key
|
|
25
|
+
* @param transition which transition to do
|
|
26
|
+
*/
|
|
27
|
+
async cardTransition(cardKey, transition) {
|
|
28
|
+
// Card details
|
|
29
|
+
const details = await this.project.cardDetailsById(cardKey, {
|
|
30
|
+
metadata: true,
|
|
31
|
+
});
|
|
32
|
+
if (!details || !details.metadata) {
|
|
33
|
+
throw new Error(`Card ${cardKey} does not exist in the project`);
|
|
34
|
+
}
|
|
35
|
+
// Card type
|
|
36
|
+
const cardType = await this.project.resource(details.metadata?.cardType);
|
|
37
|
+
if (cardType === undefined) {
|
|
38
|
+
throw new Error(`Card's card type '${details.metadata?.cardType}' does not exist in the project`);
|
|
39
|
+
}
|
|
40
|
+
// Workflow
|
|
41
|
+
const workflow = await this.project.resource(cardType.workflow);
|
|
42
|
+
if (workflow === undefined) {
|
|
43
|
+
throw new Error(`Card's workflow '${cardType.workflow}' does not exist in the project`);
|
|
44
|
+
}
|
|
45
|
+
// Check that the state transition can be made "from".
|
|
46
|
+
const foundFrom = workflow.transitions.find((item) => (details.metadata &&
|
|
47
|
+
item.fromState.includes(details.metadata?.workflowState)) ||
|
|
48
|
+
item.fromState.includes('*'));
|
|
49
|
+
if (!foundFrom) {
|
|
50
|
+
throw new Error(`Card's workflow '${cardType.workflow}' does not contain transition from card's current state '${details.metadata?.workflowState}'`);
|
|
51
|
+
}
|
|
52
|
+
// Check that the state transition can be made "to".
|
|
53
|
+
const found = workflow.transitions.find((item) => item.name === transition.name);
|
|
54
|
+
if (!found) {
|
|
55
|
+
const transitionNames = workflow.transitions.map((item) => item.name);
|
|
56
|
+
throw new Error(`Card's workflow '${cardType.workflow}' does not contain state transition '${transition.name}'.
|
|
57
|
+
\nThe available transitions are: ${transitionNames.join(', ')}`);
|
|
58
|
+
}
|
|
59
|
+
if (!(found.fromState.includes(details.metadata?.workflowState) ||
|
|
60
|
+
found.fromState.includes('*'))) {
|
|
61
|
+
throw new Error(`Card's workflow '${cardType.workflow}' does not contain state transition from state '${details.metadata?.workflowState}' for '${transition.name}`);
|
|
62
|
+
}
|
|
63
|
+
const actionGuard = new ActionGuard(this.calculateCmd);
|
|
64
|
+
await actionGuard.checkPermission('transition', cardKey, transition.name);
|
|
65
|
+
details.metadata.workflowState = found.toState;
|
|
66
|
+
details.metadata.lastUpdated = new Date().toISOString();
|
|
67
|
+
details.metadata.lastTransitioned = new Date().toISOString();
|
|
68
|
+
return this.project
|
|
69
|
+
.updateCardMetadata(details, details.metadata)
|
|
70
|
+
.then(async () => this.transitionChangesQuery(cardKey, transition.name))
|
|
71
|
+
.then(async (queryResult) => {
|
|
72
|
+
if (!queryResult ||
|
|
73
|
+
queryResult.at(0) === undefined ||
|
|
74
|
+
queryResult.at(0)?.updateFields === undefined) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const fieldsToUpdate = queryResult.at(0).updateFields;
|
|
78
|
+
return CardMetadataUpdater.apply(this.project, fieldsToUpdate);
|
|
79
|
+
})
|
|
80
|
+
.catch((error) => console.error(error));
|
|
81
|
+
}
|
|
82
|
+
// Wrapper to run onTransition query.
|
|
83
|
+
async transitionChangesQuery(cardKey, transition) {
|
|
84
|
+
if (!cardKey || !transition)
|
|
85
|
+
return undefined;
|
|
86
|
+
return this.calculateCmd.runQuery('onTransition', {
|
|
87
|
+
cardKey,
|
|
88
|
+
transition,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=transition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition.js","sourceRoot":"","sources":["../../src/commands/transition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Cyberismo
|
|
3
|
+
Copyright © Cyberismo Ltd and contributors 2024
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License version 3 as published by the Free Software Foundation.
|
|
6
|
+
|
|
7
|
+
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
|
|
8
|
+
|
|
9
|
+
You should have received a copy of the GNU Affero General Public
|
|
10
|
+
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
11
|
+
*/
|
|
12
|
+
import type { UpdateOperations } from '../resources/resource-object.js';
|
|
13
|
+
import { Project } from '../containers/project.js';
|
|
14
|
+
/**
|
|
15
|
+
* Class that handles 'update' commands.
|
|
16
|
+
*/
|
|
17
|
+
export declare class Update {
|
|
18
|
+
private project;
|
|
19
|
+
constructor(project: Project);
|
|
20
|
+
/**
|
|
21
|
+
* Updates single resource property.
|
|
22
|
+
* @param name Name of the resource to operate on.
|
|
23
|
+
* @param operation Operation to perform ('add', 'remove', 'change', 'rank')
|
|
24
|
+
* @param key Property to change in resource JSON
|
|
25
|
+
* @param value Value for 'key'
|
|
26
|
+
* @param optionalDetail Additional detail needed for some operations. For example, 'update' needs a new value.
|
|
27
|
+
*/
|
|
28
|
+
updateValue<Type>(name: string, operation: UpdateOperations, key: string, value: Type, optionalDetail?: Type): Promise<void>;
|
|
29
|
+
}
|