Skip to content

Commit

Permalink
formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
josephjclark committed Jun 3, 2024
1 parent b292efb commit 94823f9
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 33 deletions.
77 changes: 46 additions & 31 deletions packages/cli/src/util/validate-plan.ts
Original file line number Diff line number Diff line change
@@ -1,50 +1,65 @@
import { ExecutionPlan, Step, WorkflowOptions } from "@openfn/lexicon";
import { Logger } from "@openfn/logger";
import { ExecutionPlan, Step, WorkflowOptions } from '@openfn/lexicon';
import { Logger } from '@openfn/logger';

const assertWorkflowStructure = (plan: ExecutionPlan, logger: Logger) => {
const { workflow, options } = plan;
const { workflow, options } = plan;

if (!workflow || typeof workflow !== 'object') {
throw new Error(`Missing or invalid "workflow" key in execution plan`);
}
if (!workflow || typeof workflow !== 'object') {
throw new Error(`Missing or invalid "workflow" key in execution plan`);
}

if (!Array.isArray(workflow.steps)) {
throw new Error('The workflow.steps key must be an array');
}
if (!Array.isArray(workflow.steps)) {
throw new Error('The workflow.steps key must be an array');
}

if (workflow.steps.length === 0) {
logger.warn('The workflow.steps array is empty');
}
if (workflow.steps.length === 0) {
logger.warn('The workflow.steps array is empty');
}

workflow.steps.forEach((step, index) => {
assertStepStructure(step, index);
});
workflow.steps.forEach((step, index) => {
assertStepStructure(step, index);
});

assertOptionsStructure(options, logger);
assertOptionsStructure(options, logger);
};

const assertStepStructure = (step: Step, index: number) => {
const allowedKeys = ['id', 'name', 'next', 'previous', 'adaptor', 'expression', 'state', 'configuration', 'linker'];
const allowedKeys = [
'id',
'name',
'next',
'previous',
'adaptor',
'expression',
'state',
'configuration',
'linker',
];

for (const key in step) {
if (!allowedKeys.includes(key)) {
throw new Error(`Invalid key "${key}" in step ${step.id || index}`);
}
for (const key in step) {
if (!allowedKeys.includes(key)) {
throw new Error(`Invalid key "${key}" in step ${step.id || index}`);
}
}

if ('adaptor' in step && !('expression' in step)) {
throw new Error(`Step ${step.id ?? index} with an adaptor must also have an expression`);
}
if ('adaptor' in step && !('expression' in step)) {
throw new Error(
`Step ${step.id ?? index} with an adaptor must also have an expression`
);
}
};

const assertOptionsStructure = (options: WorkflowOptions = {}, logger: Logger) => {
const allowedKeys = ['timeout', 'stepTimeout', 'start', 'end', 'sanitize'];
const assertOptionsStructure = (
options: WorkflowOptions = {},
logger: Logger
) => {
const allowedKeys = ['timeout', 'stepTimeout', 'start', 'end', 'sanitize'];

for (const key in options) {
if (!allowedKeys.includes(key)) {
logger.warn(`Unrecognized option "${key}" in options object`);
}
for (const key in options) {
if (!allowedKeys.includes(key)) {
logger.warn(`Unrecognized option "${key}" in options object`);
}
}
};

export default assertWorkflowStructure;
export default assertWorkflowStructure;
2 changes: 1 addition & 1 deletion packages/runtime/src/execute/plan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,4 +91,4 @@ const executePlan = async (
return Object.values(leaves)[0];
};

export default executePlan;
export default executePlan;
2 changes: 1 addition & 1 deletion packages/runtime/src/util/validate-plan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,4 @@ const assertSingletonDependencies = (model: Model) => {
throw new ValidationError(`Multiple dependencies detected for: ${id}`);
}
}
};
};

0 comments on commit 94823f9

Please sign in to comment.