feat: Implement initial logic of exporting flow

This commit is contained in:
Faruk AYDIN
2025-01-08 11:43:37 +03:00
parent 72116d9727
commit 169c86a748

View 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;