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