UNPKG

n8n

Version:

n8n Workflow Automation Tool

103 lines 5.82 kB
"use strict"; 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