n8n
Version:
n8n Workflow Automation Tool
103 lines • 5.82 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProjectExporter = void 0;
const di_1 = require("@n8n/di");
const folder_finder_service_1 = require("../../../../services/folder-finder.service");
const project_service_ee_1 = require("../../../../services/project.service.ee");
const workflow_finder_service_1 = require("../../../../workflows/workflow-finder.service");
const project_serializer_1 = require("./project.serializer");
const unique_filename_allocator_1 = require("../../io/unique-filename-allocator");
const folder_exporter_1 = require("../folder/folder.exporter");
const package_export_errors_1 = require("../package-export.errors");
const requirements_types_1 = require("../requirements.types");
const workflow_exporter_1 = require("../workflow/workflow.exporter");
let ProjectExporter = class ProjectExporter {
constructor(projectService, projectSerializer, folderFinder, workflowFinder, folderExporter, workflowExporter) {
this.projectService = projectService;
this.projectSerializer = projectSerializer;
this.folderFinder = folderFinder;
this.workflowFinder = workflowFinder;
this.folderExporter = folderExporter;
this.workflowExporter = workflowExporter;
}
async export(request) {
const projects = await this.projectService.findProjectsByIdsForUser(request.user, request.projectIds, ['project:export']);
await (0, package_export_errors_1.assertEveryRequestedEntityAccessible)('project', request.projectIds, projects, async (ids) => await this.projectService.findExistingProjectIds(ids));
const allocator = new unique_filename_allocator_1.UniqueFilenameAllocator('projects', 'project');
const results = [];
for (const project of projects) {
const target = allocator.allocate(project.name);
results.push(await this.exportProject(project, target, request));
}
return this.mergeProjectExportResults(results);
}
async exportProject(project, target, request) {
this.exportProjectShell(project, target, request.writer);
const folders = await this.exportProjectFolders(project.id, target, request);
const rootWorkflows = await this.exportProjectRootWorkflows(project.id, target, request);
return {
entries: [{ id: project.id, name: project.name, target }],
folderEntries: folders.entries,
workflowEntries: [...folders.workflowEntries, ...rootWorkflows.entries],
requirements: (0, requirements_types_1.mergeRequirements)(folders.requirements, rootWorkflows.requirements),
projectTargetsById: new Map([[project.id, target]]),
};
}
exportProjectShell(project, target, writer) {
const serialized = this.projectSerializer.serialize(project);
writer.writeDirectory(target);
writer.writeFile(`${target}/project.json`, JSON.stringify(serialized, null, '\t'));
}
async exportProjectFolders(projectId, target, request) {
const folderIds = await this.folderFinder.findFolderIdsInProject(projectId);
if (folderIds.length === 0) {
return {
entries: [],
workflowEntries: [],
requirements: (0, requirements_types_1.mergeRequirements)(),
};
}
return await this.folderExporter.export({
user: request.user,
folderIds,
writer: request.writer,
basePrefix: target,
});
}
async exportProjectRootWorkflows(projectId, target, request) {
const rootWorkflowIds = await this.workflowFinder.findRootWorkflowIdsInProject(projectId);
if (rootWorkflowIds.length === 0) {
return { entries: [], requirements: (0, requirements_types_1.mergeRequirements)() };
}
return await this.workflowExporter.export({
user: request.user,
workflowIds: rootWorkflowIds,
writer: request.writer,
basePrefix: target,
});
}
mergeProjectExportResults(results) {
return {
entries: results.flatMap((result) => result.entries),
folderEntries: results.flatMap((result) => result.folderEntries),
workflowEntries: results.flatMap((result) => result.workflowEntries),
requirements: (0, requirements_types_1.mergeRequirements)(...results.map((result) => result.requirements)),
projectTargetsById: new Map(results.flatMap((result) => [...result.projectTargetsById])),
};
}
};
exports.ProjectExporter = ProjectExporter;
exports.ProjectExporter = ProjectExporter = __decorate([
(0, di_1.Service)(),
__metadata("design:paramtypes", [project_service_ee_1.ProjectService, project_serializer_1.ProjectSerializer, folder_finder_service_1.FolderFinderService, workflow_finder_service_1.WorkflowFinderService, folder_exporter_1.FolderExporter, workflow_exporter_1.WorkflowExporter])
], ProjectExporter);
//# sourceMappingURL=project.exporter.js.map