Skip to content

Commit 5b91861

Browse files
authored
Apply workflow function transformation in "step" mode (#420)
1 parent 0cacb99 commit 5b91861

File tree

18 files changed

+492
-244
lines changed

18 files changed

+492
-244
lines changed

.changeset/long-guests-enter.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@workflow/swc-plugin": patch
3+
---
4+
5+
Apply workflow function transformation in "step" mode

packages/swc-plugin-workflow/transform/src/lib.rs

Lines changed: 430 additions & 129 deletions
Large diffs are not rendered by default.

packages/swc-plugin-workflow/transform/tests/errors/non-async-functions/output-step.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export async function validStep() {
2222
return 42;
2323
}
2424
export const validWorkflow = async ()=>{
25-
'use workflow';
26-
return 'test';
25+
throw new Error("You attempted to execute workflow validWorkflow function directly. To start a workflow, use start(validWorkflow) from workflow/api");
2726
};
27+
validWorkflow.workflowId = "workflow//input.js//validWorkflow";
2828
registerStepFunction("step//input.js//validStep", validStep);
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Test anonymous default export workflow
22
/**__internal_workflows{"workflows":{"input.js":{"default":{"workflowId":"workflow//input.js//__default"}}}}*/;
3-
export default async function() {
4-
'use workflow';
5-
const result = await someStep();
6-
return result;
7-
}
3+
const __default = async function() {
4+
throw new Error("You attempted to execute workflow __default function directly. To start a workflow, use start(__default) from workflow/api");
5+
};
6+
__default.workflowId = "workflow//input.js//__default";
7+
export default __default;
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Test default export arrow workflow
22
/**__internal_workflows{"workflows":{"input.js":{"default":{"workflowId":"workflow//input.js//__default"}}}}*/;
3-
export default (async (data)=>{
4-
'use workflow';
5-
const processed = await processData(data);
6-
return processed;
7-
});
3+
const __default = async (data)=>{
4+
throw new Error("You attempted to execute workflow __default function directly. To start a workflow, use start(__default) from workflow/api");
5+
};
6+
__default.workflowId = "workflow//input.js//__default";
7+
export default __default;

packages/swc-plugin-workflow/transform/tests/fixture/default-parameter-usage/output-step.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ async function convertToLanguageModelPrompt({ prompt, supportedUrls, download =
1515
};
1616
}
1717
export async function myWorkflow(input) {
18-
'use workflow';
19-
const result = await convertToLanguageModelPrompt({
20-
prompt: input.prompt,
21-
supportedUrls: {},
22-
download: undefined
23-
});
24-
return result;
18+
throw new Error("You attempted to execute workflow myWorkflow function directly. To start a workflow, use start(myWorkflow) from workflow/api");
2519
}
20+
myWorkflow.workflowId = "workflow//input.js//myWorkflow";

packages/swc-plugin-workflow/transform/tests/fixture/default-workflow-collision/output-step.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
const __default = "existing variable";
44
// Use it to avoid unused variable
55
console.log(__default);
6-
// Anonymous default export should get unique name (__default$1)
7-
export default async function() {
8-
'use workflow';
9-
const result = await someStep();
10-
return result;
11-
}
6+
const __default$1 = async function() {
7+
throw new Error("You attempted to execute workflow __default$1 function directly. To start a workflow, use start(__default$1) from workflow/api");
8+
};
9+
__default$1.workflowId = "workflow//input.js//__default$1";
10+
export default __default$1;
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**__internal_workflows{"workflows":{"input.js":{"default":{"workflowId":"workflow//input.js//__default"}}}}*/;
2-
export default async function() {
3-
'use workflow';
4-
const result = await someStep();
5-
return result;
6-
}
2+
const __default = async function() {
3+
throw new Error("You attempted to execute workflow __default function directly. To start a workflow, use start(__default) from workflow/api");
4+
};
5+
__default.workflowId = "workflow//input.js//__default";
6+
export default __default;

packages/swc-plugin-workflow/transform/tests/fixture/mixed-functions/output-step.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@ async function stepFunctionWithoutExport(a, b) {
77
return a - b;
88
}
99
export async function workflowFunction(a, b) {
10-
'use workflow';
11-
const result = await stepFunction(a, b);
12-
const result2 = await stepFunctionWithoutExport(a, b);
13-
return result + result2;
10+
throw new Error("You attempted to execute workflow workflowFunction function directly. To start a workflow, use start(workflowFunction) from workflow/api");
1411
}
12+
workflowFunction.workflowId = "workflow//input.js//workflowFunction";
1513
export async function normalFunction(a, b) {
1614
return a * b;
1715
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
/**__internal_workflows{"workflows":{"input.js":{"arrowWorkflow":{"workflowId":"workflow//input.js//arrowWorkflow"},"workflow":{"workflowId":"workflow//input.js//workflow"}}}}*/;
2-
'use workflow';
32
async function local(input) {
43
return input.foo;
54
}
65
const localArrow = async (input)=>{
76
return input.bar;
87
};
98
export async function workflow(input) {
10-
return input.foo;
9+
throw new Error("You attempted to execute workflow workflow function directly. To start a workflow, use start(workflow) from workflow/api");
1110
}
11+
workflow.workflowId = "workflow//input.js//workflow";
1212
export const arrowWorkflow = async (input)=>{
13-
return input.bar;
13+
throw new Error("You attempted to execute workflow arrowWorkflow function directly. To start a workflow, use start(arrowWorkflow) from workflow/api");
1414
};
15+
arrowWorkflow.workflowId = "workflow//input.js//arrowWorkflow";

0 commit comments

Comments
 (0)