forest-cli
Version:
The Lumberjacks' toolbelt is the Forest CLI which makes easy to manage your back office application directly from the terminal.
83 lines • 7.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.planWorkflowBpmn = exports.stepWorkflows = exports.diffAllDomains = exports.domainsInFile = void 0;
const uuid_1 = require("uuid");
const diff_1 = require("./diff");
const errors_1 = require("./errors");
const types_1 = require("./types");
const workflow_bpmn_1 = require("./workflow-bpmn");
/** Domains actually present in a parsed file — we only touch what it declares. */
function domainsInFile(local) {
return types_1.LAYOUT_DOMAINS.filter(domain => local[domain] !== undefined);
}
exports.domainsInFile = domainsInFile;
/** Diff every domain present in `local` against `remote`, combined into one plan. */
function diffAllDomains(remote, local) {
const ops = [];
const warnings = [];
domainsInFile(local).forEach(domain => {
const result = (0, diff_1.diffDomain)(domain, remote[domain], local[domain]);
ops.push(...result.ops);
warnings.push(...result.warnings);
});
return { ops, warnings };
}
exports.diffAllDomains = diffAllDomains;
/**
* Workflows in the file that carry an authored `steps` graph. Assigns a uuid id
* to any such workflow that lacks one (mutates the doc) so the shell `add` and
* the subsequent BPMN link target the same id.
*/
function stepWorkflows(local) {
return (local.workflows ?? [])
.filter(workflow => Array.isArray(workflow.steps) && workflow.steps.length > 0)
.map(workflow => {
if (workflow.id === undefined || workflow.id === null)
workflow.id = (0, uuid_1.v4)();
return {
collectionId: String(workflow.collectionId),
id: String(workflow.id),
name: String(workflow.name),
segmentIds: workflow.segmentIds,
start: typeof workflow.start === 'string' ? workflow.start : undefined,
steps: workflow.steps,
};
});
}
exports.stepWorkflows = stepWorkflows;
/**
* Compile each step-workflow's BPMN and decide whether it needs uploading, by
* byte-comparing against the version currently stored on the remote workflow.
* Unchanged graphs are skipped — so re-applying a file is a true no-op (the S3
* object is stored verbatim and the compiler is deterministic).
*/
async function planWorkflowBpmn(manager, scope, workflows, remoteWorkflows, renderingId) {
return Promise.all(workflows.map(async (workflow) => {
const bpmn = (0, workflow_bpmn_1.compileWorkflowToBpmn)({
collection: workflow.collectionId,
name: workflow.name,
segments: workflow.segmentIds,
start: workflow.start,
steps: workflow.steps,
});
const current = remoteWorkflows.find(remote => String(remote.id) === workflow.id);
const version = current?.bpmnAwsS3Identifier;
if (typeof version !== 'string' || !version)
return { bpmn, changed: true, workflow };
try {
const stored = await manager.getWorkflowBpmn(scope, workflow.id, workflow.collectionId, version, renderingId);
return { bpmn, changed: stored !== bpmn, workflow };
}
catch (error) {
// Auth/permission failures must surface, not be reframed as "changed".
if (error instanceof errors_1.LayoutApiError && (error.status === 401 || error.status === 403)) {
throw error;
}
// Otherwise (no stored BPMN yet, transient read failure…) re-upload
// rather than risk a stale skip.
return { bpmn, changed: true, workflow };
}
}));
}
exports.planWorkflowBpmn = planWorkflowBpmn;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9sYXlvdXQvc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSwrQkFBb0M7QUFFcEMsaUNBQW9DO0FBQ3BDLHFDQUEwQztBQUMxQyxtQ0FBeUM7QUFDekMsbURBQXdEO0FBRXhELGtGQUFrRjtBQUNsRixTQUFnQixhQUFhLENBQUMsS0FBb0I7SUFDaEQsT0FBTyxzQkFBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRkQsc0NBRUM7QUFFRCxxRkFBcUY7QUFDckYsU0FBZ0IsY0FBYyxDQUFDLE1BQXFCLEVBQUUsS0FBb0I7SUFDeEUsTUFBTSxHQUFHLEdBQWdCLEVBQUUsQ0FBQztJQUM1QixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFFOUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNqRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFYRCx3Q0FXQztBQWFEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBb0I7SUFDaEQsT0FBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFvQztTQUMv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