@lokalise/maestro-expert-tenant-lib 4.0.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.
@@ -23,40 +23,40 @@ type StrictWorkflowLayoutStepSettingsList = WorkflowLayoutStepSettingsList & {
23
23
  export type StrictWorkflowLayoutSettings<StateName extends string> = StrictWorkflowLayoutStepSettingsList & {
24
24
  [key in StateName]: StrictWorkflowLayoutStepSettings;
25
25
  };
26
- export type FrontendLayoutStep<StateName extends string> = {
27
- id: StateName;
26
+ export type FrontendLayoutStep = {
27
+ id: string;
28
28
  type: 'trigger_step';
29
29
  values: Record<string, unknown>;
30
30
  triggerType: string;
31
31
  } | {
32
- id: StateName;
32
+ id: string;
33
33
  type: 'translate_task_step';
34
34
  values: Record<string, unknown>;
35
35
  taskType: string;
36
36
  } | {
37
- id: StateName;
37
+ id: string;
38
38
  type: 'review_task_step';
39
39
  values: Record<string, unknown>;
40
40
  taskType: string;
41
41
  } | {
42
- id: StateName;
42
+ id: string;
43
43
  type: 'clear_translations_step';
44
44
  values: Record<string, unknown>;
45
45
  } | {
46
- id: StateName;
46
+ id: string;
47
47
  type: 'apply_tm_step';
48
48
  values: Record<string, unknown>;
49
49
  } | {
50
- id: StateName;
50
+ id: string;
51
51
  type: 'ai_mt_translation_step';
52
52
  values: Record<string, unknown>;
53
53
  taskType: string;
54
54
  } | {
55
- id: StateName;
55
+ id: string;
56
56
  type: 'end_step';
57
57
  values: Record<string, unknown>;
58
58
  };
59
- export type FrontendLayout<StateName extends string> = FrontendLayoutStep<StateName>[];
59
+ export type FrontendLayout = FrontendLayoutStep[];
60
60
  export type InternalTemplate<StateName extends string> = BaseTemplate<StateName> & {
61
61
  id: TemplateId;
62
62
  title: string;
@@ -68,6 +68,6 @@ export type InternalTemplate<StateName extends string> = BaseTemplate<StateName>
68
68
  gateLevel: number;
69
69
  };
70
70
  export type Template<StateName extends string> = InternalTemplate<StateName> & {
71
- frontendLayout: FrontendLayout<StateName>;
71
+ frontendLayout: FrontendLayout;
72
72
  };
73
73
  export {};
@@ -1,14 +1,23 @@
1
- import type { LayoutTranslatorInterface, WorkflowLayout, WorkflowLayoutStepSettingsList, WorkflowMetadata } from '@lokalise/maestro-common';
1
+ import type { LayoutTranslatorInterface, WorkflowLayout, WorkflowLayoutStep, WorkflowLayoutStepSettingsList, WorkflowMetadata } from '@lokalise/maestro-common';
2
2
  import type { FrontendLayout, InternalTemplate, StrictWorkflowLayoutSettings, Template } from '../templates/types.js';
3
+ import { type StepType, type StrictFrontendStep } from './steps.js';
3
4
  export declare class LayoutTranslator implements LayoutTranslatorInterface {
4
- translateTemplateToFrontendLayout<StateName extends string>(template: InternalTemplate<StateName>): FrontendLayout<StateName>;
5
- translateFrontendLayoutToTemplate<StateName extends string>(frontendLayout: FrontendLayout<StateName>): Pick<InternalTemplate<StateName>, 'layout' | 'settings'> | undefined;
6
- buildFrontendLayout<StateName extends string>(settings: StrictWorkflowLayoutSettings<StateName>, sort?: StateName[]): FrontendLayout<StateName>;
5
+ translateTemplateToFrontendLayout<StateName extends string>(template: InternalTemplate<StateName>): FrontendLayout;
6
+ translateFrontendLayoutToTemplate<StateName extends string>(frontendLayout: FrontendLayout): Pick<InternalTemplate<StateName>, 'layout' | 'settings'> | undefined;
7
+ translateFrontendLayoutToBackendLayout(frontendLayout: StrictFrontendStep[]): {
8
+ layout: WorkflowLayout;
9
+ settings: WorkflowLayoutStepSettingsList;
10
+ } | undefined;
11
+ buildFrontendLayout<StateName extends string>(settings: StrictWorkflowLayoutSettings<StateName>, sort?: StateName[]): FrontendLayout;
7
12
  getStepSortFromLayout(layout: WorkflowLayout): string[];
8
13
  buildWorkflowMetadata({ settings, }: Pick<InternalTemplate<string>, 'settings'>): WorkflowMetadata;
9
14
  getTriggerSchedulerExpression(settings: WorkflowLayoutStepSettingsList): string | undefined;
10
15
  getTriggerSchedulerStartDate(settings: WorkflowLayoutStepSettingsList): string | undefined;
11
- getTemplateGateLevel<StateName extends string>(frontendLayout: FrontendLayout<StateName>): number | undefined;
12
- buildLayoutSettings<StateName extends string>(frontendLayout: FrontendLayout<StateName>): StrictWorkflowLayoutSettings<StateName>;
13
- findTemplate<StateName extends string>(frontendLayout: FrontendLayout<StateName>): Template<StateName> | undefined;
16
+ getTemplateGateLevel(frontendLayout: FrontendLayout): number | undefined;
17
+ buildStrictLayoutSettings<StateName extends string>(frontendLayout: FrontendLayout): StrictWorkflowLayoutSettings<StateName>;
18
+ buildCustomLayoutSettings(frontendLayout: StrictFrontendStep[]): Record<string, import("zod").objectOutputType<{
19
+ stepType: import("zod").ZodString;
20
+ }, import("zod").ZodTypeAny, "passthrough">>;
21
+ findTemplate<StateName extends string>(frontendLayout: FrontendLayout): Template<StateName> | undefined;
22
+ buildInternalStep(stepType: StepType, nextStep?: StrictFrontendStep): WorkflowLayoutStep | undefined;
14
23
  }
@@ -1,5 +1,6 @@
1
1
  import { areDeepEqual } from '@lokalise/universal-ts-utils/node';
2
2
  import { TEMPLATES } from '../templates/schemas.js';
3
+ import { FRONTEND_TO_BACKEND_STEPS_MAP, } from './steps.js';
3
4
  export class LayoutTranslator {
4
5
  translateTemplateToFrontendLayout(template) {
5
6
  return this.buildFrontendLayout(template.settings, template.sort);
@@ -9,12 +10,30 @@ export class LayoutTranslator {
9
10
  if (!template) {
10
11
  return undefined;
11
12
  }
12
- const layoutSettings = this.buildLayoutSettings(frontendLayout);
13
+ const layoutSettings = this.buildStrictLayoutSettings(frontendLayout);
13
14
  return {
14
15
  layout: template.layout,
15
16
  settings: layoutSettings,
16
17
  };
17
18
  }
19
+ translateFrontendLayoutToBackendLayout(frontendLayout) {
20
+ const internalLayout = { initial: 'TriggerStep', states: {} };
21
+ for (const idx in frontendLayout) {
22
+ if (frontendLayout[idx] === undefined) {
23
+ return undefined;
24
+ }
25
+ const backendStep = this.buildInternalStep(frontendLayout[idx].type, frontendLayout[Number.parseInt(idx) + 1] ?? undefined);
26
+ if (backendStep === undefined) {
27
+ return undefined;
28
+ }
29
+ internalLayout.states[frontendLayout[idx].id] = backendStep;
30
+ }
31
+ const layoutSettings = this.buildCustomLayoutSettings(frontendLayout);
32
+ return {
33
+ layout: internalLayout,
34
+ settings: layoutSettings,
35
+ };
36
+ }
18
37
  buildFrontendLayout(settings, sort = []) {
19
38
  return Object.keys(settings)
20
39
  .sort((a, b) => sort.indexOf(a) - sort.indexOf(b))
@@ -89,7 +108,23 @@ export class LayoutTranslator {
89
108
  }
90
109
  return template.gateLevel;
91
110
  }
92
- buildLayoutSettings(frontendLayout) {
111
+ buildStrictLayoutSettings(frontendLayout) {
112
+ return frontendLayout.reduce((acc, frontendStep) => {
113
+ const step = {
114
+ ...frontendStep.values,
115
+ stepType: frontendStep.type,
116
+ triggerType: frontendStep.type === 'trigger_step' ? frontendStep.triggerType : undefined,
117
+ taskType: frontendStep.type === 'translate_task_step' ||
118
+ frontendStep.type === 'review_task_step' ||
119
+ frontendStep.type === 'ai_mt_translation_step'
120
+ ? frontendStep.taskType
121
+ : undefined,
122
+ };
123
+ acc[frontendStep.id] = Object.fromEntries(Object.entries(step).filter(([_, value]) => value !== undefined));
124
+ return acc;
125
+ }, {});
126
+ }
127
+ buildCustomLayoutSettings(frontendLayout) {
93
128
  return frontendLayout.reduce((acc, frontendStep) => {
94
129
  const step = {
95
130
  ...frontendStep.values,
@@ -117,5 +152,17 @@ export class LayoutTranslator {
117
152
  const [_, template] = result;
118
153
  return template;
119
154
  }
155
+ buildInternalStep(stepType, nextStep) {
156
+ const targetId = nextStep?.id;
157
+ if (stepType !== 'end_step' && !targetId) {
158
+ // We can't have anything after the END step
159
+ return undefined;
160
+ }
161
+ const stepBuilder = FRONTEND_TO_BACKEND_STEPS_MAP[stepType];
162
+ if (!stepBuilder) {
163
+ return undefined;
164
+ }
165
+ return stepBuilder(targetId);
166
+ }
120
167
  }
121
168
  //# sourceMappingURL=LayoutTranslator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutTranslator.js","sourceRoot":"","sources":["../../src/workflow/LayoutTranslator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LayoutTranslator.js","sourceRoot":"","sources":["../../src/workflow/LayoutTranslator.ts"],"names":[],"mappings":"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"}
@@ -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 { areStringArraysEqual } from '@lokalise/universal-ts-utils/array/areStringArraysEqual';
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 (areStringArraysEqual(layoutSteps, settingsSteps)) {
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":"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"}
1
+ {"version":3,"file":"LayoutValidator.js","sourceRoot":"","sources":["../../src/workflow/LayoutValidator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { FrontendStep, WorkflowLayoutStep } from '@lokalise/maestro-common';
1
2
  export { SCHEDULED_TRIGGER_STEP_FORM_SCHEMA, SCHEDULED_TRIGGER_STEP_SETTINGS_SCHEMA, DEFAULT_SCHEDULED_TRIGGER_STEP_SETTINGS, } from './steps/scheduledTriggerStep.js';
2
3
  export type { ScheduledTriggerStepForm, ScheduledTriggerStepSettings, } from './steps/scheduledTriggerStep.js';
3
4
  export { AI_MT_TRANSLATION_STEP_FORM_SCHEMA, AI_MT_TRANSLATION_STEP_SETTINGS_SCHEMA, DEFAULT_AI_MT_TRANSLATION_STEP_SETTINGS, } from './steps/aiMtTranslationStep.js';
@@ -13,3 +14,7 @@ export type { EndStepForm, EndStepSettings } from './steps/endStep.js';
13
14
  export declare const STEP_TYPES: readonly ["trigger_step", "review_task_step", "translate_task_step", "clear_translations_step", "apply_tm_step", "end_step", "ai_mt_translation_step"];
14
15
  export type StepType = (typeof STEP_TYPES)[number];
15
16
  export { AVAILABLE_STEPS, MAX_STEPS } from './stepRegistry.js';
17
+ export type StrictFrontendStep = FrontendStep & {
18
+ type: StepType;
19
+ };
20
+ export declare const FRONTEND_TO_BACKEND_STEPS_MAP: Record<StepType, (targetId: FrontendStep['id'] | undefined) => WorkflowLayoutStep>;
@@ -15,4 +15,98 @@ export const STEP_TYPES = [
15
15
  'ai_mt_translation_step',
16
16
  ];
17
17
  export { AVAILABLE_STEPS, MAX_STEPS } from './stepRegistry.js';
18
+ export const FRONTEND_TO_BACKEND_STEPS_MAP = {
19
+ trigger_step: (targetId) => ({
20
+ on: {
21
+ WorkflowTriggerEvent: {
22
+ target: targetId,
23
+ actions: [{ type: 'storeWorkflowTriggerEventScope' }],
24
+ },
25
+ },
26
+ }),
27
+ clear_translations_step: (targetId) => ({
28
+ entry: [
29
+ {
30
+ type: 'clearTranslationsAction',
31
+ },
32
+ ],
33
+ on: {
34
+ TranslationsClearedEvent: {
35
+ target: targetId,
36
+ },
37
+ },
38
+ }),
39
+ translate_task_step: (targetId) => ({
40
+ entry: [
41
+ {
42
+ type: 'createTaskAction',
43
+ params: {
44
+ type: 'translation',
45
+ },
46
+ },
47
+ ],
48
+ on: {
49
+ TaskCreatedEvent: {
50
+ actions: [{ type: 'storeCreatedTaskId' }],
51
+ },
52
+ TaskClosedEvent: {
53
+ target: targetId,
54
+ },
55
+ },
56
+ }),
57
+ review_task_step: (targetId) => ({
58
+ entry: [
59
+ {
60
+ type: 'createTaskAction',
61
+ params: {
62
+ type: 'review',
63
+ },
64
+ },
65
+ ],
66
+ on: {
67
+ TaskCreatedEvent: {
68
+ actions: [{ type: 'storeCreatedTaskId' }],
69
+ },
70
+ TaskClosedEvent: {
71
+ target: targetId,
72
+ },
73
+ },
74
+ }),
75
+ ai_mt_translation_step: (targetId) => ({
76
+ entry: [
77
+ {
78
+ type: 'createTaskAction',
79
+ params: {
80
+ type: 'ai_mt_translation',
81
+ },
82
+ },
83
+ ],
84
+ on: {
85
+ TaskCreatedEvent: {
86
+ actions: [{ type: 'storeCreatedTaskId' }],
87
+ },
88
+ TaskSkippedEvent: {
89
+ target: targetId,
90
+ },
91
+ TaskClosedEvent: {
92
+ target: targetId,
93
+ },
94
+ },
95
+ }),
96
+ apply_tm_step: (targetId) => ({
97
+ entry: [
98
+ {
99
+ type: 'applyTmAction',
100
+ },
101
+ ],
102
+ on: {
103
+ TmAppliedEvent: {
104
+ target: targetId,
105
+ },
106
+ },
107
+ }),
108
+ end_step: () => ({
109
+ type: 'final',
110
+ }),
111
+ };
18
112
  //# sourceMappingURL=steps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/workflow/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,sCAAsC,EACtC,uCAAuC,GACxC,MAAM,iCAAiC,CAAA;AAMxC,OAAO,EACL,kCAAkC,EAClC,sCAAsC,EACtC,uCAAuC,GACxC,MAAM,gCAAgC,CAAA;AAMvC,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,EACnC,oCAAoC,GACrC,MAAM,8BAA8B,CAAA;AAKrC,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,iCAAiC,EACjC,6CAA6C,GAC9C,MAAM,2BAA2B,CAAA;AAKlC,OAAO,EACL,mCAAmC,EACnC,uCAAuC,EACvC,wCAAwC,GAGzC,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,GAG/B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAA;AAG3B,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc;IACd,kBAAkB;IAClB,qBAAqB;IACrB,yBAAyB;IACzB,eAAe;IACf,UAAU;IACV,wBAAwB;CAChB,CAAA;AAGV,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/workflow/steps.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lokalise/maestro-expert-tenant-lib",
3
- "version": "4.0.0",
3
+ "version": "4.1.1",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://github.com/lokalise/maestro",
6
6
  "description": "This library provides shared objects, types and zod schemas for Maestro",