@cyberismo/data-handler 0.0.17 → 0.0.19
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/command-handler.d.ts +2 -0
- package/dist/command-handler.js +26 -2
- package/dist/command-handler.js.map +1 -1
- package/dist/command-manager.d.ts +2 -0
- package/dist/command-manager.js +3 -0
- package/dist/command-manager.js.map +1 -1
- package/dist/commands/create.d.ts +3 -1
- package/dist/commands/create.js +10 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/migrate.d.ts +33 -0
- package/dist/commands/migrate.js +66 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/containers/project/card-cache.js +13 -1
- package/dist/containers/project/card-cache.js.map +1 -1
- package/dist/containers/project/project-paths.d.ts +1 -0
- package/dist/containers/project/project-paths.js +5 -2
- package/dist/containers/project/project-paths.js.map +1 -1
- package/dist/containers/project.d.ts +10 -0
- package/dist/containers/project.js +39 -2
- package/dist/containers/project.js.map +1 -1
- package/dist/containers/template.js +2 -0
- package/dist/containers/template.js.map +1 -1
- package/dist/interfaces/command-options.d.ts +6 -1
- package/dist/interfaces/project-interfaces.d.ts +4 -0
- package/dist/interfaces/project-interfaces.js.map +1 -1
- package/dist/migrations/index.d.ts +14 -0
- package/dist/migrations/index.js +14 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migration-executor.d.ts +79 -0
- package/dist/migrations/migration-executor.js +312 -0
- package/dist/migrations/migration-executor.js.map +1 -0
- package/dist/migrations/migration-worker.d.ts +13 -0
- package/dist/migrations/migration-worker.js +156 -0
- package/dist/migrations/migration-worker.js.map +1 -0
- package/dist/migrations/worker-executor.d.ts +24 -0
- package/dist/migrations/worker-executor.js +157 -0
- package/dist/migrations/worker-executor.js.map +1 -0
- package/dist/project-settings.d.ts +2 -0
- package/dist/project-settings.js +7 -0
- package/dist/project-settings.js.map +1 -1
- package/dist/resources/calculation-resource.d.ts +9 -0
- package/dist/resources/calculation-resource.js +13 -2
- package/dist/resources/calculation-resource.js.map +1 -1
- package/dist/resources/card-type-resource.d.ts +12 -3
- package/dist/resources/card-type-resource.js +73 -91
- package/dist/resources/card-type-resource.js.map +1 -1
- package/dist/resources/field-type-resource.d.ts +10 -1
- package/dist/resources/field-type-resource.js +62 -61
- package/dist/resources/field-type-resource.js.map +1 -1
- package/dist/resources/file-resource.d.ts +27 -2
- package/dist/resources/file-resource.js +46 -8
- package/dist/resources/file-resource.js.map +1 -1
- package/dist/resources/graph-model-resource.d.ts +5 -0
- package/dist/resources/graph-model-resource.js +6 -0
- package/dist/resources/graph-model-resource.js.map +1 -1
- package/dist/resources/graph-view-resource.d.ts +5 -0
- package/dist/resources/graph-view-resource.js +6 -0
- package/dist/resources/graph-view-resource.js.map +1 -1
- package/dist/resources/link-type-resource.d.ts +11 -1
- package/dist/resources/link-type-resource.js +54 -30
- package/dist/resources/link-type-resource.js.map +1 -1
- package/dist/resources/report-resource.d.ts +6 -1
- package/dist/resources/report-resource.js +7 -1
- package/dist/resources/report-resource.js.map +1 -1
- package/dist/resources/resource-object.d.ts +22 -7
- package/dist/resources/resource-object.js +44 -15
- package/dist/resources/resource-object.js.map +1 -1
- package/dist/resources/template-resource.d.ts +5 -1
- package/dist/resources/template-resource.js +11 -27
- package/dist/resources/template-resource.js.map +1 -1
- package/dist/resources/workflow-resource.d.ts +7 -3
- package/dist/resources/workflow-resource.js +90 -82
- package/dist/resources/workflow-resource.js.map +1 -1
- package/dist/utils/card-utils.d.ts +1 -1
- package/dist/utils/common-utils.d.ts +8 -0
- package/dist/utils/common-utils.js +14 -0
- package/dist/utils/common-utils.js.map +1 -1
- package/dist/utils/file-utils.d.ts +15 -3
- package/dist/utils/file-utils.js +48 -9
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/json.js +2 -2
- package/dist/utils/json.js.map +1 -1
- package/package.json +5 -3
- package/src/command-handler.ts +38 -1
- package/src/command-manager.ts +3 -0
- package/src/commands/create.ts +11 -0
- package/src/commands/migrate.ts +88 -0
- package/src/containers/project/card-cache.ts +18 -1
- package/src/containers/project/project-paths.ts +6 -2
- package/src/containers/project.ts +66 -1
- package/src/containers/template.ts +5 -0
- package/src/interfaces/command-options.ts +8 -0
- package/src/interfaces/project-interfaces.ts +4 -0
- package/src/migrations/index.ts +20 -0
- package/src/migrations/migration-executor.ts +478 -0
- package/src/migrations/migration-worker.ts +190 -0
- package/src/migrations/worker-executor.ts +185 -0
- package/src/project-settings.ts +7 -0
- package/src/resources/calculation-resource.ts +13 -2
- package/src/resources/card-type-resource.ts +101 -114
- package/src/resources/field-type-resource.ts +78 -71
- package/src/resources/file-resource.ts +68 -9
- package/src/resources/graph-model-resource.ts +6 -0
- package/src/resources/graph-view-resource.ts +6 -0
- package/src/resources/link-type-resource.ts +66 -36
- package/src/resources/report-resource.ts +7 -1
- package/src/resources/resource-object.ts +57 -18
- package/src/resources/template-resource.ts +12 -27
- package/src/resources/workflow-resource.ts +119 -100
- package/src/utils/common-utils.ts +15 -0
- package/src/utils/file-utils.ts +56 -12
- package/src/utils/json.ts +2 -6
|
@@ -19,6 +19,11 @@ import { sortCards } from '../utils/card-utils.js';
|
|
|
19
19
|
* Workflow resource class.
|
|
20
20
|
*/
|
|
21
21
|
export class WorkflowResource extends FileResource {
|
|
22
|
+
/**
|
|
23
|
+
* Creates an instance of WorkflowResource
|
|
24
|
+
* @param project Project to use
|
|
25
|
+
* @param name Resource name
|
|
26
|
+
*/
|
|
22
27
|
constructor(project, name) {
|
|
23
28
|
super(project, name, 'workflows');
|
|
24
29
|
this.contentSchemaId = 'workflowSchema';
|
|
@@ -30,16 +35,18 @@ export class WorkflowResource extends FileResource {
|
|
|
30
35
|
const promises = [];
|
|
31
36
|
for (const cardType of cardTypes) {
|
|
32
37
|
if (cardType.data?.workflow === resourceNameToString(this.resourceName)) {
|
|
33
|
-
promises.push(this.collectCards(cardType.data.name));
|
|
38
|
+
promises.push(this.collectCards(cardType.data.name, (card, cardTypeName) => card.metadata?.cardType === cardTypeName));
|
|
34
39
|
}
|
|
35
40
|
}
|
|
36
41
|
return (await Promise.all(promises)).flat();
|
|
37
42
|
}
|
|
38
43
|
// When resource name changes.
|
|
39
|
-
async
|
|
44
|
+
async onNameChange(existingName) {
|
|
40
45
|
await Promise.all([
|
|
41
46
|
super.updateHandleBars(existingName, this.content.name),
|
|
42
47
|
super.updateCalculations(existingName, this.content.name),
|
|
48
|
+
super.updateCardContentReferences(existingName, this.content.name),
|
|
49
|
+
this.updateCardTypes(existingName),
|
|
43
50
|
]);
|
|
44
51
|
// Finally, write updated content.
|
|
45
52
|
await this.write();
|
|
@@ -94,6 +101,10 @@ export class WorkflowResource extends FileResource {
|
|
|
94
101
|
await this.updateCardStates(stateName, replacementState.name);
|
|
95
102
|
}
|
|
96
103
|
}
|
|
104
|
+
// Check if operation is a string operation.
|
|
105
|
+
isStringOperation(op) {
|
|
106
|
+
return typeof op.target === 'string';
|
|
107
|
+
}
|
|
97
108
|
// Returns target name irregardless of the type
|
|
98
109
|
targetName(op) {
|
|
99
110
|
const name = op.target.name ? op.target.name : op.target;
|
|
@@ -120,10 +131,6 @@ export class WorkflowResource extends FileResource {
|
|
|
120
131
|
}
|
|
121
132
|
return op.to;
|
|
122
133
|
}
|
|
123
|
-
// Check if operation is a string operation.
|
|
124
|
-
isStringOperation(op) {
|
|
125
|
-
return typeof op.target === 'string';
|
|
126
|
-
}
|
|
127
134
|
// Update card states when state is changed
|
|
128
135
|
async updateCardStates(oldState, newState) {
|
|
129
136
|
const cards = await this.collectCardsUsingWorkflow();
|
|
@@ -144,15 +151,17 @@ export class WorkflowResource extends FileResource {
|
|
|
144
151
|
to: this.content.name,
|
|
145
152
|
};
|
|
146
153
|
for (const cardType of cardTypes) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
154
|
+
// Only update card types that use this workflow
|
|
155
|
+
if (cardType.data?.workflow === oldName) {
|
|
156
|
+
await cardType.update({
|
|
157
|
+
key: 'workflow',
|
|
158
|
+
}, op);
|
|
159
|
+
}
|
|
150
160
|
}
|
|
151
161
|
}
|
|
152
162
|
/**
|
|
153
163
|
* Sets new metadata into the workflow object.
|
|
154
164
|
* @param newContent metadata content for the workflow.
|
|
155
|
-
* @throws if 'newContent' is not valid.
|
|
156
165
|
*/
|
|
157
166
|
async create(newContent) {
|
|
158
167
|
if (!newContent) {
|
|
@@ -170,7 +179,7 @@ export class WorkflowResource extends FileResource {
|
|
|
170
179
|
async rename(newName) {
|
|
171
180
|
const existingName = this.content.name;
|
|
172
181
|
await super.rename(newName);
|
|
173
|
-
return this.
|
|
182
|
+
return this.onNameChange(existingName);
|
|
174
183
|
}
|
|
175
184
|
/**
|
|
176
185
|
* Updates workflow resource.
|
|
@@ -180,86 +189,85 @@ export class WorkflowResource extends FileResource {
|
|
|
180
189
|
*/
|
|
181
190
|
async update(updateKey, op) {
|
|
182
191
|
const { key } = updateKey;
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
await super.update(updateKey, op);
|
|
186
|
-
const content = structuredClone(this.content);
|
|
187
|
-
if (key === 'name') {
|
|
188
|
-
content.name = super.handleScalar(op);
|
|
189
|
-
}
|
|
190
|
-
else if (key === 'displayName') {
|
|
191
|
-
content.displayName = super.handleScalar(op);
|
|
192
|
-
}
|
|
193
|
-
else if (key === 'description') {
|
|
194
|
-
content.description = super.handleScalar(op);
|
|
195
|
-
}
|
|
196
|
-
else if (key === 'states') {
|
|
197
|
-
content.states = super.handleArray(op, key, content.states);
|
|
198
|
-
}
|
|
199
|
-
else if (key === 'transitions') {
|
|
200
|
-
content.transitions = super.handleArray(op, key, content.transitions);
|
|
192
|
+
if (key === 'name' || key === 'displayName' || key === 'description') {
|
|
193
|
+
await super.update(updateKey, op);
|
|
201
194
|
}
|
|
202
195
|
else {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
to: {
|
|
215
|
-
name: op.to,
|
|
216
|
-
toState: targetTransition.toState,
|
|
217
|
-
fromState: targetTransition.fromState,
|
|
218
|
-
},
|
|
219
|
-
};
|
|
196
|
+
const content = structuredClone(this.content);
|
|
197
|
+
// Validate state change operations before processing
|
|
198
|
+
if (key === 'states' && op.name === 'change') {
|
|
199
|
+
const changeOp = op;
|
|
200
|
+
if (changeOp.to.name === undefined ||
|
|
201
|
+
changeOp.to.category === undefined) {
|
|
202
|
+
const stateName = changeOp.target['name'] ||
|
|
203
|
+
changeOp.target;
|
|
204
|
+
throw new Error(`Cannot change state '${stateName}' for workflow '${this.content.name}'.
|
|
205
|
+
Updated state must have 'name' and 'category' properties.`);
|
|
206
|
+
}
|
|
220
207
|
}
|
|
221
|
-
|
|
222
|
-
|
|
208
|
+
if (key === 'states') {
|
|
209
|
+
content.states = super.handleArray(op, key, content.states);
|
|
223
210
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
227
|
-
if (key === 'states' && op.name === 'remove') {
|
|
228
|
-
// If workflow state is removed, remove all transitions "to" and "from" this state.
|
|
229
|
-
let removeOp;
|
|
230
|
-
if (this.isStringOperation(op)) {
|
|
231
|
-
const toBeRemovedState = this.content.states.find((state) => state.name === op.target);
|
|
232
|
-
removeOp = {
|
|
233
|
-
name: 'remove',
|
|
234
|
-
target: toBeRemovedState,
|
|
235
|
-
};
|
|
211
|
+
else if (key === 'transitions') {
|
|
212
|
+
content.transitions = super.handleArray(op, key, content.transitions);
|
|
236
213
|
}
|
|
237
214
|
else {
|
|
238
|
-
|
|
215
|
+
throw new Error(`Unknown property '${key}' for Workflow`);
|
|
239
216
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
217
|
+
// If workflow transition is removed, then above call to 'handleArray' is all that is needed.
|
|
218
|
+
if (key === 'transitions' && op.name === 'change') {
|
|
219
|
+
// If workflow transition is changed, update to full object and change the content.
|
|
220
|
+
let changeOp;
|
|
221
|
+
if (this.isStringOperation(op)) {
|
|
222
|
+
const targetTransition = this.content.transitions.find((transition) => transition.name === op.target);
|
|
223
|
+
changeOp = {
|
|
224
|
+
name: 'change',
|
|
225
|
+
target: targetTransition,
|
|
226
|
+
to: {
|
|
227
|
+
name: op.to,
|
|
228
|
+
toState: targetTransition.toState,
|
|
229
|
+
fromState: targetTransition.fromState,
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
changeOp = op;
|
|
235
|
+
}
|
|
236
|
+
const newTransition = await this.transitionObject(changeOp);
|
|
237
|
+
content.transitions = content.transitions.map((item) => item.name == newTransition.name ? newTransition : item);
|
|
252
238
|
}
|
|
253
|
-
|
|
254
|
-
|
|
239
|
+
if (key === 'states' && op.name === 'remove') {
|
|
240
|
+
// If workflow state is removed, remove all transitions "to" and "from" this state.
|
|
241
|
+
let removeOp;
|
|
242
|
+
if (this.isStringOperation(op)) {
|
|
243
|
+
const toBeRemovedState = this.content.states.find((state) => state.name === op.target);
|
|
244
|
+
removeOp = {
|
|
245
|
+
name: 'remove',
|
|
246
|
+
target: toBeRemovedState,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
removeOp = op;
|
|
251
|
+
}
|
|
252
|
+
await this.handleStateRemoval(removeOp);
|
|
255
253
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
254
|
+
else if (key === 'states' && op.name === 'change') {
|
|
255
|
+
// If workflow state is renamed, replace all transitions "to" and "from" the old state with new state.
|
|
256
|
+
let changeOp;
|
|
257
|
+
if (this.isStringOperation(op)) {
|
|
258
|
+
const toBeChangedState = this.content.states.find((state) => state.name === op.target);
|
|
259
|
+
changeOp = {
|
|
260
|
+
name: 'change',
|
|
261
|
+
target: toBeChangedState,
|
|
262
|
+
to: { name: op.to },
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
changeOp = op;
|
|
267
|
+
}
|
|
268
|
+
await this.handleStateChange(changeOp);
|
|
269
|
+
}
|
|
270
|
+
await super.postUpdate(content, updateKey, op);
|
|
263
271
|
}
|
|
264
272
|
}
|
|
265
273
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-resource.js","sourceRoot":"","sources":["../../src/resources/workflow-resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAQF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAWnD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAsB;IAC1D,YAAY,OAAgB,EAAE,IAAkB;QAC9C,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAElC,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACxE,CAAC;IAED,4CAA4C;IACpC,KAAK,CAAC,yBAAyB;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,IAAI,EAAE,QAAQ,KAAK,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxE,QAAQ,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"workflow-resource.js","sourceRoot":"","sources":["../../src/resources/workflow-resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,4 +87,4 @@ export declare function parentCard(cardPath: string): string | undefined;
|
|
|
87
87
|
* @param b Second card to be sorted
|
|
88
88
|
* @returns Cards ordered; first by prefixes, then by ID.
|
|
89
89
|
*/
|
|
90
|
-
export declare const sortCards: (a: string, b: string) =>
|
|
90
|
+
export declare const sortCards: (a: string, b: string) => 1 | -1 | 0;
|
|
@@ -22,3 +22,11 @@ export declare function deepCompare(arg1: object, arg2: object): boolean;
|
|
|
22
22
|
* @returns true, if 'value' can be represented as BigInt; false otherwise.
|
|
23
23
|
*/
|
|
24
24
|
export declare function isBigInt(value: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Removes the first occurrence of a value from an array.
|
|
27
|
+
* Modifies the array in place.
|
|
28
|
+
* @param array The array to modify
|
|
29
|
+
* @param value The value to remove
|
|
30
|
+
* @returns The modified array (same reference as input)
|
|
31
|
+
*/
|
|
32
|
+
export declare function removeValue<T>(array: T[], value: T): T[];
|
|
@@ -44,4 +44,18 @@ export function isBigInt(value) {
|
|
|
44
44
|
return false;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Removes the first occurrence of a value from an array.
|
|
49
|
+
* Modifies the array in place.
|
|
50
|
+
* @param array The array to modify
|
|
51
|
+
* @param value The value to remove
|
|
52
|
+
* @returns The modified array (same reference as input)
|
|
53
|
+
*/
|
|
54
|
+
export function removeValue(array, value) {
|
|
55
|
+
const index = array.findIndex((element) => element === value);
|
|
56
|
+
if (index !== -1) {
|
|
57
|
+
array.splice(index, 1);
|
|
58
|
+
}
|
|
59
|
+
return array;
|
|
60
|
+
}
|
|
47
61
|
//# sourceMappingURL=common-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-utils.js","sourceRoot":"","sources":["../../src/utils/common-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,IACE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,CAAC;QACD,IACE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB;YAC1D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,EACzD,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG;gBAC1C,OAAO,WAAW,CAChB,IAAI,CAAC,GAAwB,CAAC,EAC9B,IAAI,CAAC,GAAwB,CAAC,CAC/B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,KAAK,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"common-utils.js","sourceRoot":"","sources":["../../src/utils/common-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,IACE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,CAAC;QACD,IACE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,iBAAiB;YAC1D,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,EACzD,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG;gBAC1C,OAAO,WAAW,CAChB,IAAI,CAAC,GAAwB,CAAC,EAC9B,IAAI,CAAC,GAAwB,CAAC,CAC/B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,KAAK,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAI,KAAU,EAAE,KAAQ;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { writeFile } from 'node:fs/promises';
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* Get available disk space for a given path.
|
|
17
|
+
* @param path Path to check
|
|
18
|
+
* @returns Available space in bytes
|
|
18
19
|
*/
|
|
19
|
-
export declare function
|
|
20
|
+
export declare function availableSpace(path: string): Promise<number>;
|
|
20
21
|
/**
|
|
21
22
|
* Copies directory content (subdirectories and files) to destination.
|
|
22
23
|
* Note that it won't create 'source', but copies all that is inside of 'source'.
|
|
@@ -35,6 +36,12 @@ export declare function deleteDir(path: string): Promise<void>;
|
|
|
35
36
|
* @returns true, if file was deleted; false otherwise.
|
|
36
37
|
*/
|
|
37
38
|
export declare function deleteFile(path: string): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Calculate the total size of a directory recursively.
|
|
41
|
+
* @param dirPath Path to directory
|
|
42
|
+
* @returns Size in bytes
|
|
43
|
+
*/
|
|
44
|
+
export declare function folderSize(dirPath: string): Promise<number>;
|
|
38
45
|
/**
|
|
39
46
|
* Removes extension from filename.
|
|
40
47
|
* @param filename Filename
|
|
@@ -67,3 +74,8 @@ export declare function resolveTilde(filePath: string): string;
|
|
|
67
74
|
* Path separator RE.
|
|
68
75
|
*/
|
|
69
76
|
export declare const sepRegex: RegExp;
|
|
77
|
+
/**
|
|
78
|
+
* Works like the writeFile method, but ensures that the directory exists
|
|
79
|
+
* There is only one difference: This method only supports a string as the filePath
|
|
80
|
+
*/
|
|
81
|
+
export declare function writeFileSafe(filePath: string, data: Parameters<typeof writeFile>[1], options?: Parameters<typeof writeFile>[2]): Promise<void>;
|
package/dist/utils/file-utils.js
CHANGED
|
@@ -11,20 +11,23 @@
|
|
|
11
11
|
You should have received a copy of the GNU Affero General Public
|
|
12
12
|
License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
13
13
|
*/
|
|
14
|
-
import { copyFile, mkdir, readdir, rm, unlink, writeFile, } from 'node:fs/promises';
|
|
14
|
+
import { copyFile, mkdir, readdir, rm, stat, statfs, unlink, writeFile, } from 'node:fs/promises';
|
|
15
15
|
import { existsSync, readdirSync } from 'node:fs';
|
|
16
16
|
import { dirname, join, sep } from 'node:path';
|
|
17
17
|
import { homedir } from 'node:os';
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* Get available disk space for a given path.
|
|
20
|
+
* @param path Path to check
|
|
21
|
+
* @returns Available space in bytes
|
|
21
22
|
*/
|
|
22
|
-
export async function
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
23
|
+
export async function availableSpace(path) {
|
|
24
|
+
try {
|
|
25
|
+
const stats = await statfs(path);
|
|
26
|
+
return stats.bavail * stats.bsize;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new Error(`Failed to check available disk space: ${error}`);
|
|
30
|
+
}
|
|
28
31
|
}
|
|
29
32
|
/**
|
|
30
33
|
* Copies directory content (subdirectories and files) to destination.
|
|
@@ -72,6 +75,31 @@ export async function deleteFile(path) {
|
|
|
72
75
|
}
|
|
73
76
|
return true;
|
|
74
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Calculate the total size of a directory recursively.
|
|
80
|
+
* @param dirPath Path to directory
|
|
81
|
+
* @returns Size in bytes
|
|
82
|
+
*/
|
|
83
|
+
export async function folderSize(dirPath) {
|
|
84
|
+
let size = 0;
|
|
85
|
+
try {
|
|
86
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
87
|
+
for (const entry of entries) {
|
|
88
|
+
const fullPath = join(dirPath, entry.name);
|
|
89
|
+
if (entry.isDirectory()) {
|
|
90
|
+
size += await folderSize(fullPath);
|
|
91
|
+
}
|
|
92
|
+
else if (entry.isFile()) {
|
|
93
|
+
const stats = await stat(fullPath);
|
|
94
|
+
size += stats.size;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Ignore permission errors or missing directories
|
|
100
|
+
}
|
|
101
|
+
return size;
|
|
102
|
+
}
|
|
75
103
|
/**
|
|
76
104
|
* Removes extension from filename.
|
|
77
105
|
* @param filename Filename
|
|
@@ -155,4 +183,15 @@ export function resolveTilde(filePath) {
|
|
|
155
183
|
* Path separator RE.
|
|
156
184
|
*/
|
|
157
185
|
export const sepRegex = /[/\\]/;
|
|
186
|
+
/**
|
|
187
|
+
* Works like the writeFile method, but ensures that the directory exists
|
|
188
|
+
* There is only one difference: This method only supports a string as the filePath
|
|
189
|
+
*/
|
|
190
|
+
export async function writeFileSafe(filePath, data, options) {
|
|
191
|
+
const dir = dirname(filePath);
|
|
192
|
+
await mkdir(dir, {
|
|
193
|
+
recursive: true,
|
|
194
|
+
});
|
|
195
|
+
return writeFile(filePath, data, options);
|
|
196
|
+
}
|
|
158
197
|
//# sourceMappingURL=file-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAEF,OAAO,EACL,QAAQ,EACR,KAAK,EACL,OAAO,EACP,EAAE,EACF,MAAM,EACN,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC
|
|
1
|
+
{"version":3,"file":"file-utils.js","sourceRoot":"","sources":["../../src/utils/file-utils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/json.js
CHANGED
|
@@ -27,7 +27,7 @@ export function readJsonFileSync(file) {
|
|
|
27
27
|
}
|
|
28
28
|
catch (error) {
|
|
29
29
|
if (error instanceof Error) {
|
|
30
|
-
throw new Error(`
|
|
30
|
+
throw new Error(`Invalid JSON in file '${file}': ${error.message}`);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -44,7 +44,7 @@ export async function readJsonFile(file) {
|
|
|
44
44
|
}
|
|
45
45
|
catch (error) {
|
|
46
46
|
if (error instanceof Error) {
|
|
47
|
-
throw new Error(`
|
|
47
|
+
throw new Error(`Invalid JSON in file '${file}': ${error.message}`);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
}
|
package/dist/utils/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAEF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAmB,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAEF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAmB,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,aAAa,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS,EAAE,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAA6B,EAC7B,IAAY,EACZ,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyberismo/data-handler",
|
|
3
3
|
"description": "Command handler for cards and web service",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.19",
|
|
5
5
|
"author": "sami.merila@cyberismo.com",
|
|
6
6
|
"license": "AGPL-3.0",
|
|
7
7
|
"homepage": "https://github.com/CyberismoCom/cyberismo",
|
|
@@ -46,8 +46,9 @@
|
|
|
46
46
|
"vega": "^6.2.0",
|
|
47
47
|
"vega-lite": "^6.4.1",
|
|
48
48
|
"write-json-file": "^7.0.0",
|
|
49
|
-
"@cyberismo/assets": "0.0.
|
|
50
|
-
"@cyberismo/node-clingo": "1.3.3"
|
|
49
|
+
"@cyberismo/assets": "0.0.19",
|
|
50
|
+
"@cyberismo/node-clingo": "1.3.3",
|
|
51
|
+
"@cyberismo/migrations": "0.0.19"
|
|
51
52
|
},
|
|
52
53
|
"type": "module",
|
|
53
54
|
"files": [
|
|
@@ -58,6 +59,7 @@
|
|
|
58
59
|
"build": "tsc -p tsconfig.build.json",
|
|
59
60
|
"clean": "rm -rf node_modules",
|
|
60
61
|
"lint": "eslint .",
|
|
62
|
+
"pretest": "pnpm build",
|
|
61
63
|
"posttest": "pnpm lint",
|
|
62
64
|
"test": "mocha --require mocha-suppress-logs --disable-warning=ExperimentalWarning --forbid-only \"./test/**/*.test.ts\"",
|
|
63
65
|
"test-coverage": "c8 pnpm test",
|
package/src/command-handler.ts
CHANGED
|
@@ -38,6 +38,7 @@ import type {
|
|
|
38
38
|
CalcCommandOptions,
|
|
39
39
|
ExportCommandOptions,
|
|
40
40
|
ImportCommandOptions,
|
|
41
|
+
MigrateCommandOptions,
|
|
41
42
|
ReportCommandOptions,
|
|
42
43
|
ShowCommandOptions,
|
|
43
44
|
StartCommandOptions,
|
|
@@ -70,6 +71,7 @@ export const Cmd = {
|
|
|
70
71
|
export: 'export',
|
|
71
72
|
fetch: 'fetch',
|
|
72
73
|
import: 'import',
|
|
74
|
+
migrate: 'migrate',
|
|
73
75
|
move: 'move',
|
|
74
76
|
rank: 'rank',
|
|
75
77
|
remove: 'remove',
|
|
@@ -272,11 +274,15 @@ export class Commands {
|
|
|
272
274
|
const [name] = rest;
|
|
273
275
|
await this.commands?.createCmd.createLinkType(name);
|
|
274
276
|
} else if (target === 'project') {
|
|
275
|
-
|
|
277
|
+
// 3rd parameter - path - is skipped it is used in general command handling
|
|
278
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
279
|
+
const [name, prefix, _, category, description] = rest;
|
|
276
280
|
await Create.createProject(
|
|
277
281
|
resolveTilde(this.projectPath),
|
|
278
282
|
prefix,
|
|
279
283
|
name,
|
|
284
|
+
category || '',
|
|
285
|
+
description || '',
|
|
280
286
|
);
|
|
281
287
|
} else if (target === 'report') {
|
|
282
288
|
const [name] = rest;
|
|
@@ -323,6 +329,12 @@ export class Commands {
|
|
|
323
329
|
const [csvFile, cardKey] = args;
|
|
324
330
|
return await this.importCsv(csvFile, cardKey);
|
|
325
331
|
}
|
|
332
|
+
} else if (command === Cmd.migrate) {
|
|
333
|
+
const [toVersion] = args;
|
|
334
|
+
return await this.migrate(
|
|
335
|
+
toVersion ? parseInt(toVersion, 10) : undefined,
|
|
336
|
+
options as MigrateCommandOptions,
|
|
337
|
+
);
|
|
326
338
|
} else if (command === Cmd.move) {
|
|
327
339
|
const [source, destination] = args;
|
|
328
340
|
await this.commands?.moveCmd.moveCard(source, destination);
|
|
@@ -848,6 +860,31 @@ export class Commands {
|
|
|
848
860
|
return { statusCode: 200 };
|
|
849
861
|
}
|
|
850
862
|
|
|
863
|
+
// Run migrations to bring project to target schema version
|
|
864
|
+
private async migrate(
|
|
865
|
+
toVersion?: number,
|
|
866
|
+
options?: { backup?: string; timeout?: number },
|
|
867
|
+
): Promise<requestStatus> {
|
|
868
|
+
if (!this.commands) {
|
|
869
|
+
return { statusCode: 500, message: 'Commands not initialized' };
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
const timeout = options?.timeout;
|
|
873
|
+
try {
|
|
874
|
+
const result = await this.commands.migrateCmd.migrate(
|
|
875
|
+
toVersion,
|
|
876
|
+
options?.backup,
|
|
877
|
+
timeout,
|
|
878
|
+
);
|
|
879
|
+
return {
|
|
880
|
+
statusCode: 200,
|
|
881
|
+
message: result.message || 'Migration completed successfully',
|
|
882
|
+
};
|
|
883
|
+
} catch (e) {
|
|
884
|
+
return { statusCode: 500, message: errorFunction(e) };
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
|
|
851
888
|
// Validates that a given path conforms to schema. Validates both file/folder structure and file content.
|
|
852
889
|
private async validate(): Promise<requestStatus> {
|
|
853
890
|
if (!this.commands) {
|