@lokalise/maestro-expert-tenant-lib 4.1.0 → 4.1.1
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type LayoutValidatorInterface, type WorkflowValidationViolation } from '@lokalise/maestro-common';
|
|
1
|
+
import { type LayoutValidatorInterface, type WorkflowLayoutStepSettingsList, type WorkflowValidationViolation } from '@lokalise/maestro-common';
|
|
2
2
|
import type { StrictWorkflowLayout, StrictWorkflowLayoutSettings } from '../templates/types.js';
|
|
3
3
|
export declare class LayoutValidator implements LayoutValidatorInterface {
|
|
4
4
|
validateWorkflowLayout({ layout, settings, }: {
|
|
@@ -17,4 +17,8 @@ export declare class LayoutValidator implements LayoutValidatorInterface {
|
|
|
17
17
|
* Validates the settings of a single step in the workflow layout.
|
|
18
18
|
*/
|
|
19
19
|
protected validateStepSettings(stepId: string, stepSettings: Record<string, unknown>): WorkflowValidationViolation[];
|
|
20
|
+
/**
|
|
21
|
+
* Validation for custom workflows is based on the fact that steps provided in layout and settings are matching.
|
|
22
|
+
*/
|
|
23
|
+
protected validateCustomWorkflowSettings(workflowLayoutSettings: WorkflowLayoutStepSettingsList): WorkflowValidationViolation[];
|
|
20
24
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WORKFLOW_LAYOUT, WORKFLOW_LAYOUT_STEP_SETTINGS_LIST, } from '@lokalise/maestro-common';
|
|
2
|
-
import {
|
|
2
|
+
import { areDeepEqual } from '@lokalise/universal-ts-utils/node';
|
|
3
3
|
import { ZodError } from 'zod';
|
|
4
|
-
import { AI_MT_TRANSLATION_STEP_SETTINGS_SCHEMA, APPLY_TM_STEP_SETTINGS_SCHEMA, CLEAR_TRANSLATIONS_STEP_SETTINGS_SCHEMA, END_STEP_SETTINGS_SCHEMA, REVIEW_TASK_STEP_SETTINGS_SCHEMA, SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA, STEP_TYPES, TRANSLATE_TASK_STEP_SETTINGS_SCHEMA, } from './steps.js';
|
|
4
|
+
import { AI_MT_TRANSLATION_STEP_SETTINGS_SCHEMA, APPLY_TM_STEP_SETTINGS_SCHEMA, CLEAR_TRANSLATIONS_STEP_SETTINGS_SCHEMA, END_STEP_SETTINGS_SCHEMA, MAX_STEPS, REVIEW_TASK_STEP_SETTINGS_SCHEMA, SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA, STEP_TYPES, TRANSLATE_TASK_STEP_SETTINGS_SCHEMA, } from './steps.js';
|
|
5
5
|
export class LayoutValidator {
|
|
6
6
|
validateWorkflowLayout({ layout, settings, }) {
|
|
7
7
|
const violations = this.validateLayout(layout, settings);
|
|
@@ -26,7 +26,8 @@ export class LayoutValidator {
|
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
const settingsSteps = Object.keys(workflowLayoutSettings);
|
|
29
|
-
if
|
|
29
|
+
// Early return if the steps and their order are the same
|
|
30
|
+
if (areDeepEqual(layoutSteps, settingsSteps)) {
|
|
30
31
|
return violations;
|
|
31
32
|
}
|
|
32
33
|
const missingSteps = layoutSteps.filter((step) => !settingsSteps.includes(step));
|
|
@@ -45,14 +46,23 @@ export class LayoutValidator {
|
|
|
45
46
|
group: step,
|
|
46
47
|
});
|
|
47
48
|
}
|
|
49
|
+
// Should not be possible as we built the layout from the settings
|
|
50
|
+
// but just in case
|
|
51
|
+
if (missingSteps.length === 0 && extraSteps.length === 0) {
|
|
52
|
+
violations.push({
|
|
53
|
+
message: 'Layout and settings are not consistent',
|
|
54
|
+
property: undefined,
|
|
55
|
+
group: 'TriggerStep',
|
|
56
|
+
});
|
|
57
|
+
}
|
|
48
58
|
return violations;
|
|
49
59
|
}
|
|
50
60
|
/**
|
|
51
61
|
* Validates the settings of the workflow layout.
|
|
52
62
|
*/
|
|
53
63
|
validateSettings(settings) {
|
|
54
|
-
const violations = [];
|
|
55
64
|
const workflowLayoutSettings = WORKFLOW_LAYOUT_STEP_SETTINGS_LIST.parse(settings);
|
|
65
|
+
const violations = this.validateCustomWorkflowSettings(workflowLayoutSettings);
|
|
56
66
|
for (const [stepId, stepSettings] of Object.entries(workflowLayoutSettings)) {
|
|
57
67
|
const stepViolations = this.validateStepSettings(stepId, stepSettings);
|
|
58
68
|
if (stepViolations.length > 0) {
|
|
@@ -99,5 +109,48 @@ export class LayoutValidator {
|
|
|
99
109
|
}
|
|
100
110
|
return violations;
|
|
101
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Validation for custom workflows is based on the fact that steps provided in layout and settings are matching.
|
|
114
|
+
*/
|
|
115
|
+
validateCustomWorkflowSettings(workflowLayoutSettings) {
|
|
116
|
+
const violations = [];
|
|
117
|
+
const listOfStepTypes = Object.entries(workflowLayoutSettings).map(([_stepId, stepSettings]) => stepSettings.stepType);
|
|
118
|
+
const endStepType = 'end_step';
|
|
119
|
+
const triggerStepType = 'trigger_step';
|
|
120
|
+
if (listOfStepTypes[listOfStepTypes.length - 1] !== endStepType) {
|
|
121
|
+
// Check if end_step is present and is the last step
|
|
122
|
+
violations.push({
|
|
123
|
+
message: 'End step is not the last step in the layout',
|
|
124
|
+
property: undefined,
|
|
125
|
+
group: 'TriggerStep',
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
// Check if trigger_step is the first step
|
|
129
|
+
if (listOfStepTypes[0] !== triggerStepType) {
|
|
130
|
+
violations.push({
|
|
131
|
+
message: 'Trigger step is not the first step in the layout',
|
|
132
|
+
property: undefined,
|
|
133
|
+
group: 'TriggerStep',
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Check if amount of steps is within the limit
|
|
137
|
+
if (listOfStepTypes.length > MAX_STEPS) {
|
|
138
|
+
violations.push({
|
|
139
|
+
message: `Layout has more than ${MAX_STEPS} steps defined`,
|
|
140
|
+
property: undefined,
|
|
141
|
+
group: 'EndStep',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// Check if layout is empty after removing the initial step and end step
|
|
145
|
+
const nonInitialAndEndSteps = listOfStepTypes.filter((stepType) => stepType !== triggerStepType && stepType !== endStepType);
|
|
146
|
+
if (nonInitialAndEndSteps.length === 0) {
|
|
147
|
+
violations.push({
|
|
148
|
+
message: 'Layout has no steps defined',
|
|
149
|
+
property: undefined,
|
|
150
|
+
group: 'EndStep',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return violations;
|
|
154
|
+
}
|
|
102
155
|
}
|
|
103
156
|
//# sourceMappingURL=LayoutValidator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutValidator.js","sourceRoot":"","sources":["../../src/workflow/LayoutValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,kCAAkC,
|
|
1
|
+
{"version":3,"file":"LayoutValidator.js","sourceRoot":"","sources":["../../src/workflow/LayoutValidator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED