feat: Implement initial logic of exporting flow
This commit is contained in:
46
packages/backend/src/helpers/export-flow.js
Normal file
46
packages/backend/src/helpers/export-flow.js
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import Crypto from 'crypto';
|
||||||
|
|
||||||
|
const exportFlow = async (flow) => {
|
||||||
|
const steps = await flow.$relatedQuery('steps');
|
||||||
|
|
||||||
|
const newFlowId = Crypto.randomUUID();
|
||||||
|
const stepIdMap = Object.fromEntries(
|
||||||
|
steps.map((step) => [step.id, Crypto.randomUUID()])
|
||||||
|
);
|
||||||
|
|
||||||
|
const exportedFlow = {
|
||||||
|
id: newFlowId,
|
||||||
|
name: flow.name,
|
||||||
|
steps: steps.map((step) => ({
|
||||||
|
id: stepIdMap[step.id],
|
||||||
|
key: step.key,
|
||||||
|
name: step.name,
|
||||||
|
appKey: step.appKey,
|
||||||
|
type: step.type,
|
||||||
|
parameters: updateParameters(step.parameters, stepIdMap),
|
||||||
|
position: step.position,
|
||||||
|
webhookPath: step.webhookPath?.replace(flow.id, newFlowId),
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(JSON.stringify(exportedFlow, null, 2));
|
||||||
|
return exportedFlow;
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateParameters = (parameters, stepIdMap) => {
|
||||||
|
if (!parameters) return parameters;
|
||||||
|
|
||||||
|
const stringifiedParameters = JSON.stringify(parameters);
|
||||||
|
let updatedParameters = stringifiedParameters;
|
||||||
|
|
||||||
|
Object.entries(stepIdMap).forEach(([oldStepId, newStepId]) => {
|
||||||
|
updatedParameters = updatedParameters.replace(
|
||||||
|
`{{step.${oldStepId}.`,
|
||||||
|
`{{step.${newStepId}.`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return JSON.parse(updatedParameters);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default exportFlow;
|
||||||
Reference in New Issue
Block a user