mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 17:46:45 +00:00
refactor(core): Move third batch of repositories to @n8n/db (#15166)
This commit is contained in:
@@ -19,3 +19,12 @@ export { LicenseMetricsRepository } from './license-metrics.repository';
|
||||
export { ProjectRelationRepository } from './project-relation.repository';
|
||||
export { ProjectRepository } from './project.repository';
|
||||
export { ProcessedDataRepository } from './processed-data.repository';
|
||||
export { TagRepository } from './tag.repository';
|
||||
export { TestCaseExecutionRepository } from './test-case-execution.repository.ee';
|
||||
export { TestDefinitionRepository } from './test-definition.repository.ee';
|
||||
export { TestMetricRepository } from './test-metric.repository.ee';
|
||||
export { TestRunRepository } from './test-run.repository.ee';
|
||||
export { VariablesRepository } from './variables.repository';
|
||||
export { WorkflowHistoryRepository } from './workflow-history.repository';
|
||||
export { WorkflowStatisticsRepository } from './workflow-statistics.repository';
|
||||
export { WorkflowTagMappingRepository } from './workflow-tag-mapping.repository';
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import type { IWorkflowDb } from '@n8n/db';
|
||||
import { TagEntity } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import type { EntityManager } from '@n8n/typeorm';
|
||||
import { DataSource, In, Repository } from '@n8n/typeorm';
|
||||
import intersection from 'lodash/intersection';
|
||||
|
||||
import { TagEntity } from '../entities';
|
||||
import type { IWorkflowDb } from '../entities/types-db';
|
||||
|
||||
@Service()
|
||||
export class TagRepository extends Repository<TagEntity> {
|
||||
constructor(dataSource: DataSource) {
|
||||
@@ -1,11 +1,12 @@
|
||||
import { TestCaseExecution } from '@n8n/db';
|
||||
import type { TestCaseExecutionErrorCode } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import type { EntityManager } from '@n8n/typeorm';
|
||||
import { DataSource, In, Not, Repository } from '@n8n/typeorm';
|
||||
import type { DeepPartial } from '@n8n/typeorm/common/DeepPartial';
|
||||
import type { IDataObject } from 'n8n-workflow';
|
||||
|
||||
import { TestCaseExecution } from '../entities';
|
||||
import type { TestCaseExecutionErrorCode } from '../entities/types-db';
|
||||
|
||||
type StatusUpdateOptions = {
|
||||
testRunId: string;
|
||||
pastExecutionId: string;
|
||||
@@ -1,10 +1,10 @@
|
||||
import { TestDefinition } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import type { FindManyOptions, FindOptionsWhere } from '@n8n/typeorm';
|
||||
import { DataSource, In, Repository } from '@n8n/typeorm';
|
||||
import { UserError } from 'n8n-workflow';
|
||||
|
||||
import { ForbiddenError } from '@/errors/response-errors/forbidden.error';
|
||||
import type { ListQuery } from '@/requests';
|
||||
import { TestDefinition } from '../entities';
|
||||
import type { ListQuery } from '../entities/types-db';
|
||||
|
||||
@Service()
|
||||
export class TestDefinitionRepository extends Repository<TestDefinition> {
|
||||
@@ -19,7 +19,7 @@ export class TestDefinitionRepository extends Repository<TestDefinition> {
|
||||
|
||||
if (options?.filter?.workflowId) {
|
||||
if (!accessibleWorkflowIds.includes(options.filter.workflowId as string)) {
|
||||
throw new ForbiddenError('User does not have access to the workflow');
|
||||
throw new UserError('User does not have access to the workflow');
|
||||
}
|
||||
|
||||
where.workflow = {
|
||||
@@ -1,7 +1,8 @@
|
||||
import { TestMetric } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { DataSource, Repository } from '@n8n/typeorm';
|
||||
|
||||
import { TestMetric } from '../entities';
|
||||
|
||||
@Service()
|
||||
export class TestMetricRepository extends Repository<TestMetric> {
|
||||
constructor(dataSource: DataSource) {
|
||||
@@ -1,13 +1,16 @@
|
||||
import type { AggregatedTestRunMetrics, TestRunErrorCode, TestRunFinalResult } from '@n8n/db';
|
||||
import { TestRun } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import type { EntityManager, FindManyOptions } from '@n8n/typeorm';
|
||||
import { DataSource, In, Repository } from '@n8n/typeorm';
|
||||
import type { IDataObject } from 'n8n-workflow';
|
||||
import { UnexpectedError, type IDataObject } from 'n8n-workflow';
|
||||
|
||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||
import { getTestRunFinalResult } from '@/evaluation.ee/test-runner/utils.ee';
|
||||
import type { ListQuery } from '@/requests';
|
||||
import { TestRun } from '../entities';
|
||||
import type {
|
||||
AggregatedTestRunMetrics,
|
||||
TestRunErrorCode,
|
||||
TestRunFinalResult,
|
||||
ListQuery,
|
||||
} from '../entities/types-db';
|
||||
import { getTestRunFinalResult } from '../utils/get-final-test-result';
|
||||
|
||||
export type TestRunSummary = TestRun & {
|
||||
finalResult: TestRunFinalResult | null;
|
||||
@@ -110,7 +113,7 @@ export class TestRunRepository extends Repository<TestRun> {
|
||||
});
|
||||
|
||||
if (!testRun) {
|
||||
throw new NotFoundError('Test run not found');
|
||||
throw new UnexpectedError('Test run not found');
|
||||
}
|
||||
|
||||
testRun.finalResult =
|
||||
@@ -1,7 +1,8 @@
|
||||
import { Variables } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { DataSource, Repository } from '@n8n/typeorm';
|
||||
|
||||
import { Variables } from '../entities';
|
||||
|
||||
@Service()
|
||||
export class VariablesRepository extends Repository<Variables> {
|
||||
constructor(dataSource: DataSource) {
|
||||
@@ -1,7 +1,8 @@
|
||||
import { WorkflowHistory } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { DataSource, LessThan, Repository } from '@n8n/typeorm';
|
||||
|
||||
import { WorkflowHistory } from '../entities';
|
||||
|
||||
@Service()
|
||||
export class WorkflowHistoryRepository extends Repository<WorkflowHistory> {
|
||||
constructor(dataSource: DataSource) {
|
||||
@@ -1,9 +1,11 @@
|
||||
import { GlobalConfig } from '@n8n/config';
|
||||
import type { User } from '@n8n/db';
|
||||
import { StatisticsNames, WorkflowStatistics } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { DataSource, MoreThanOrEqual, QueryFailedError, Repository } from '@n8n/typeorm';
|
||||
|
||||
import { WorkflowStatistics } from '../entities';
|
||||
import type { User } from '../entities';
|
||||
import { StatisticsNames } from '../entities/types-db';
|
||||
|
||||
type StatisticsInsertResult = 'insert' | 'failed' | 'alreadyExists';
|
||||
type StatisticsUpsertResult = StatisticsInsertResult | 'update';
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { WorkflowTagMapping } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { DataSource, Repository } from '@n8n/typeorm';
|
||||
|
||||
import { WorkflowTagMapping } from '../entities';
|
||||
|
||||
@Service()
|
||||
export class WorkflowTagMappingRepository extends Repository<WorkflowTagMapping> {
|
||||
constructor(dataSource: DataSource) {
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { TestCaseExecution } from '@n8n/db';
|
||||
import { mock } from 'jest-mock-extended';
|
||||
|
||||
import { getTestRunFinalResult } from '@/evaluation.ee/test-runner/utils.ee';
|
||||
import type { TestCaseExecution } from '../../entities';
|
||||
import { getTestRunFinalResult } from '../get-final-test-result';
|
||||
|
||||
function mockTestCaseExecutions(statuses: Array<TestCaseExecution['status']>) {
|
||||
return statuses.map((status) => mock<TestCaseExecution>({ status }));
|
||||
30
packages/@n8n/db/src/utils/get-final-test-result.ts
Normal file
30
packages/@n8n/db/src/utils/get-final-test-result.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import type { TestCaseExecution } from '../entities';
|
||||
import type { TestRunFinalResult } from '../entities/types-db';
|
||||
|
||||
/**
|
||||
* Returns the final result of the test run based on the test case executions.
|
||||
* The final result is the most severe status among all test case executions' statuses.
|
||||
*/
|
||||
export function getTestRunFinalResult(testCaseExecutions: TestCaseExecution[]): TestRunFinalResult {
|
||||
// Priority of statuses: error > warning > success
|
||||
const severityMap: Record<TestRunFinalResult, number> = {
|
||||
error: 3,
|
||||
warning: 2,
|
||||
success: 1,
|
||||
};
|
||||
|
||||
let finalResult: TestRunFinalResult = 'success';
|
||||
|
||||
for (const testCaseExecution of testCaseExecutions) {
|
||||
if (['error', 'warning'].includes(testCaseExecution.status)) {
|
||||
if (
|
||||
testCaseExecution.status in severityMap &&
|
||||
severityMap[testCaseExecution.status as TestRunFinalResult] > severityMap[finalResult]
|
||||
) {
|
||||
finalResult = testCaseExecution.status as TestRunFinalResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return finalResult;
|
||||
}
|
||||
@@ -1,10 +1,9 @@
|
||||
import type { WorkflowStatistics } from '@n8n/db';
|
||||
import { StatisticsNames } from '@n8n/db';
|
||||
import { StatisticsNames, WorkflowStatisticsRepository } from '@n8n/db';
|
||||
import { Get, Middleware, RestController } from '@n8n/decorators';
|
||||
import { Response, NextFunction } from 'express';
|
||||
import { Logger } from 'n8n-core';
|
||||
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
|
||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||
import type { IWorkflowStatisticsDataLoaded } from '@/interfaces';
|
||||
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { StatisticsNames, WorkflowStatistics } from '@n8n/db';
|
||||
import { WorkflowStatisticsRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { type InsertResult, QueryFailedError } from '@n8n/typeorm';
|
||||
import { mock, mockClear } from 'jest-mock-extended';
|
||||
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
|
||||
import { mockEntityManager } from '@test/mocking';
|
||||
import { createWorkflow } from '@test-integration/db/workflows';
|
||||
import * as testDb from '@test-integration/test-db';
|
||||
|
||||
@@ -2,6 +2,8 @@ import type { SourceControlledFile } from '@n8n/api-types';
|
||||
import type { SharedCredentials } from '@n8n/db';
|
||||
import type { SharedWorkflow } from '@n8n/db';
|
||||
import type { FolderRepository } from '@n8n/db';
|
||||
import type { TagRepository } from '@n8n/db';
|
||||
import type { WorkflowTagMappingRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { mock, captor } from 'jest-mock-extended';
|
||||
import { Cipher, type InstanceSettings } from 'n8n-core';
|
||||
@@ -9,8 +11,6 @@ import fsp from 'node:fs/promises';
|
||||
|
||||
import type { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
||||
import type { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import type { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import type { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
||||
import type { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
|
||||
import type { VariablesService } from '../../variables/variables.service.ee';
|
||||
|
||||
@@ -4,11 +4,11 @@ import type { FolderWithWorkflowAndSubFolderCount } from '@n8n/db';
|
||||
import type { TagEntity } from '@n8n/db';
|
||||
import type { User } from '@n8n/db';
|
||||
import type { FolderRepository } from '@n8n/db';
|
||||
import type { TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { mock } from 'jest-mock-extended';
|
||||
import { InstanceSettings } from 'n8n-core';
|
||||
|
||||
import type { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { SourceControlPreferencesService } from '@/environments.ee/source-control/source-control-preferences.service.ee';
|
||||
import { SourceControlService } from '@/environments.ee/source-control/source-control.service.ee';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { SourceControlledFile } from '@n8n/api-types';
|
||||
import type { IWorkflowDb } from '@n8n/db';
|
||||
import { FolderRepository } from '@n8n/db';
|
||||
import { FolderRepository, TagRepository, WorkflowTagMappingRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
import { In } from '@n8n/typeorm';
|
||||
@@ -12,8 +12,6 @@ import path from 'path';
|
||||
|
||||
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import { formatWorkflow } from '@/workflows/workflow.formatter';
|
||||
|
||||
|
||||
@@ -5,6 +5,9 @@ import {
|
||||
CredentialsRepository,
|
||||
FolderRepository,
|
||||
ProjectRepository,
|
||||
TagRepository,
|
||||
VariablesRepository,
|
||||
WorkflowTagMappingRepository,
|
||||
} from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
@@ -19,10 +22,7 @@ import { ActiveWorkflowManager } from '@/active-workflow-manager';
|
||||
import { CredentialsService } from '@/credentials/credentials.service';
|
||||
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { UserRepository } from '@/databases/repositories/user.repository';
|
||||
import { VariablesRepository } from '@/databases/repositories/variables.repository';
|
||||
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import type { IWorkflowToImport } from '@/interfaces';
|
||||
import { isUniqueConstraintError } from '@/response-helper';
|
||||
|
||||
@@ -4,7 +4,7 @@ import type {
|
||||
SourceControlledFile,
|
||||
} from '@n8n/api-types';
|
||||
import type { Variables, TagEntity, User } from '@n8n/db';
|
||||
import { FolderRepository } from '@n8n/db';
|
||||
import { FolderRepository, TagRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { writeFileSync } from 'fs';
|
||||
import { Logger } from 'n8n-core';
|
||||
@@ -12,7 +12,6 @@ import { UnexpectedError, UserError } from 'n8n-workflow';
|
||||
import path from 'path';
|
||||
import type { PushResult } from 'simple-git';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||
import { EventService } from '@/events/event.service';
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { generateNanoId } from '@n8n/db';
|
||||
import type { Variables } from '@n8n/db';
|
||||
import { generateNanoId, VariablesRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
|
||||
import { VariablesRepository } from '@/databases/repositories/variables.repository';
|
||||
import { VariableCountLimitReachedError } from '@/errors/variable-count-limit-reached.error';
|
||||
import { VariableValidationError } from '@/errors/variable-validation.error';
|
||||
import { EventService } from '@/events/event.service';
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import type { MockedNodeItem, TestDefinition } from '@n8n/db';
|
||||
import { AnnotationTagRepository } from '@n8n/db';
|
||||
import { AnnotationTagRepository, TestDefinitionRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
|
||||
import { TestDefinitionRepository } from '@/databases/repositories/test-definition.repository.ee';
|
||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||
import { validateEntity } from '@/generic-helpers';
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Get, Post, Patch, RestController, Delete } from '@n8n/decorators';
|
||||
import express from 'express';
|
||||
import { UserError } from 'n8n-workflow';
|
||||
import assert from 'node:assert';
|
||||
|
||||
import { ForbiddenError } from '@/errors/response-errors/forbidden.error';
|
||||
@@ -26,10 +27,15 @@ export class TestDefinitionsController {
|
||||
async getMany(req: TestDefinitionsRequest.GetMany) {
|
||||
const userAccessibleWorkflowIds = await getSharedWorkflowIds(req.user, ['workflow:read']);
|
||||
|
||||
return await this.testDefinitionService.getMany(
|
||||
req.listQueryOptions,
|
||||
userAccessibleWorkflowIds,
|
||||
);
|
||||
try {
|
||||
return await this.testDefinitionService.getMany(
|
||||
req.listQueryOptions,
|
||||
userAccessibleWorkflowIds,
|
||||
);
|
||||
} catch (error) {
|
||||
if (error instanceof UserError) throw new ForbiddenError(error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
@Get('/:id')
|
||||
|
||||
@@ -4,6 +4,9 @@ import type { TestDefinition } from '@n8n/db';
|
||||
import type { TestMetric } from '@n8n/db';
|
||||
import type { TestRun } from '@n8n/db';
|
||||
import type { ExecutionRepository } from '@n8n/db';
|
||||
import type { TestCaseExecutionRepository } from '@n8n/db';
|
||||
import type { TestMetricRepository } from '@n8n/db';
|
||||
import type { TestRunRepository } from '@n8n/db';
|
||||
import type { SelectQueryBuilder } from '@n8n/typeorm';
|
||||
import { stringify } from 'flatted';
|
||||
import { readFileSync } from 'fs';
|
||||
@@ -15,9 +18,6 @@ import path from 'path';
|
||||
|
||||
import type { ActiveExecutions } from '@/active-executions';
|
||||
import config from '@/config';
|
||||
import type { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee';
|
||||
import type { TestMetricRepository } from '@/databases/repositories/test-metric.repository.ee';
|
||||
import type { TestRunRepository } from '@/databases/repositories/test-run.repository.ee';
|
||||
import type { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
|
||||
import { NodeTypes } from '@/node-types';
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
import type { User, ExecutionEntity, MockedNodeItem, TestDefinition, TestRun } from '@n8n/db';
|
||||
import { ExecutionRepository } from '@n8n/db';
|
||||
import {
|
||||
ExecutionRepository,
|
||||
TestCaseExecutionRepository,
|
||||
TestMetricRepository,
|
||||
TestRunRepository,
|
||||
} from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { parse } from 'flatted';
|
||||
import difference from 'lodash/difference';
|
||||
@@ -18,9 +23,6 @@ import assert from 'node:assert';
|
||||
import { ActiveExecutions } from '@/active-executions';
|
||||
import config from '@/config';
|
||||
import { EVALUATION_METRICS_NODE } from '@/constants';
|
||||
import { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee';
|
||||
import { TestMetricRepository } from '@/databases/repositories/test-metric.repository.ee';
|
||||
import { TestRunRepository } from '@/databases/repositories/test-run.repository.ee';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import * as Db from '@/db';
|
||||
import { TestCaseExecutionError, TestRunError } from '@/evaluation.ee/test-runner/errors.ee';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { TestCaseExecution, MockedNodeItem, TestRunFinalResult } from '@n8n/db';
|
||||
import type { MockedNodeItem } from '@n8n/db';
|
||||
import assert from 'assert';
|
||||
import { mapValues, pick } from 'lodash';
|
||||
import type {
|
||||
@@ -70,34 +70,6 @@ export function getPastExecutionTriggerNode(executionData: IRunExecutionData) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the final result of the test run based on the test case executions.
|
||||
* The final result is the most severe status among all test case executions' statuses.
|
||||
*/
|
||||
export function getTestRunFinalResult(testCaseExecutions: TestCaseExecution[]): TestRunFinalResult {
|
||||
// Priority of statuses: error > warning > success
|
||||
const severityMap: Record<TestRunFinalResult, number> = {
|
||||
error: 3,
|
||||
warning: 2,
|
||||
success: 1,
|
||||
};
|
||||
|
||||
let finalResult: TestRunFinalResult = 'success';
|
||||
|
||||
for (const testCaseExecution of testCaseExecutions) {
|
||||
if (['error', 'warning'].includes(testCaseExecution.status)) {
|
||||
if (
|
||||
testCaseExecution.status in severityMap &&
|
||||
severityMap[testCaseExecution.status as TestRunFinalResult] > severityMap[finalResult]
|
||||
) {
|
||||
finalResult = testCaseExecution.status as TestRunFinalResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return finalResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to check if the node is root node or sub-node.
|
||||
* Sub-node is a node which does not have the main output (the only exception is Stop and Error node)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { TestCaseExecutionRepository, TestRunRepository } from '@n8n/db';
|
||||
import { Delete, Get, Post, RestController } from '@n8n/decorators';
|
||||
import express from 'express';
|
||||
import { InstanceSettings } from 'n8n-core';
|
||||
import { UnexpectedError } from 'n8n-workflow';
|
||||
|
||||
import { TestCaseExecutionRepository } from '@/databases/repositories/test-case-execution.repository.ee';
|
||||
import { TestRunRepository } from '@/databases/repositories/test-run.repository.ee';
|
||||
import { ConflictError } from '@/errors/response-errors/conflict.error';
|
||||
import { NotFoundError } from '@/errors/response-errors/not-found.error';
|
||||
import { NotImplementedError } from '@/errors/response-errors/not-implemented.error';
|
||||
@@ -79,7 +79,12 @@ export class TestRunsController {
|
||||
|
||||
await this.getTestDefinition(req);
|
||||
|
||||
return await this.testRunRepository.getTestRunSummaryById(testDefinitionId, id);
|
||||
try {
|
||||
return await this.testRunRepository.getTestRunSummaryById(testDefinitionId, id);
|
||||
} catch (error) {
|
||||
if (error instanceof UnexpectedError) throw new NotFoundError(error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
@Get('/:testDefinitionId/runs/:id/cases')
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import type { TagEntity } from '@n8n/db';
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
import type { FindManyOptions } from '@n8n/typeorm';
|
||||
import type express from 'express';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { TagService } from '@/services/tag.service';
|
||||
|
||||
import type { TagRequest } from '../../../types';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { VariablesRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import type { Response } from 'express';
|
||||
|
||||
import { VariablesRepository } from '@/databases/repositories/variables.repository';
|
||||
import { VariablesController } from '@/environments.ee/variables/variables.controller.ee';
|
||||
import type { PaginatedRequest } from '@/public-api/types';
|
||||
import type { VariablesRequest } from '@/requests';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { GlobalConfig } from '@n8n/config';
|
||||
import { WorkflowEntity, ProjectRepository } from '@n8n/db';
|
||||
import { WorkflowEntity, ProjectRepository, TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
import { In, Like, QueryFailedError } from '@n8n/typeorm';
|
||||
@@ -10,7 +10,6 @@ import { v4 as uuid } from 'uuid';
|
||||
import { z } from 'zod';
|
||||
|
||||
import { ActiveWorkflowManager } from '@/active-workflow-manager';
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import { EventService } from '@/events/event.service';
|
||||
import { ExternalHooks } from '@/external-hooks';
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import { GlobalConfig } from '@n8n/config';
|
||||
import type { Project, User } from '@n8n/db';
|
||||
import { WorkflowEntity, WorkflowTagMapping, SharedWorkflow } from '@n8n/db';
|
||||
import { WorkflowEntity, WorkflowTagMapping, SharedWorkflow, TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import type { Scope, WorkflowSharingRole } from '@n8n/permissions';
|
||||
import type { WorkflowId } from 'n8n-workflow';
|
||||
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import * as Db from '@/db';
|
||||
import { License } from '@/license';
|
||||
|
||||
@@ -2,6 +2,7 @@ import { GlobalConfig } from '@n8n/config';
|
||||
import type { Project } from '@n8n/db';
|
||||
import type { User } from '@n8n/db';
|
||||
import type { WorkflowStatistics } from '@n8n/db';
|
||||
import { WorkflowStatisticsRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import {
|
||||
QueryFailedError,
|
||||
@@ -20,7 +21,6 @@ import {
|
||||
} from 'n8n-workflow';
|
||||
|
||||
import config from '@/config';
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
|
||||
import type { EventService } from '@/events/event.service';
|
||||
import { OwnershipService } from '@/services/ownership.service';
|
||||
import { UserService } from '@/services/user.service';
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import type { User } from '@n8n/db';
|
||||
import { WorkflowStatisticsRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
|
||||
|
||||
@Service()
|
||||
export class CtaService {
|
||||
constructor(private readonly workflowStatisticsRepository: WorkflowStatisticsRepository) {}
|
||||
|
||||
@@ -5,13 +5,13 @@ import {
|
||||
SharedWorkflow,
|
||||
WorkflowTagMapping,
|
||||
CredentialsRepository,
|
||||
TagRepository,
|
||||
} from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { Logger } from 'n8n-core';
|
||||
import { type INode, type INodeCredentialsDetails, type IWorkflowBase } from 'n8n-workflow';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import * as Db from '@/db';
|
||||
import { replaceInvalidCredentials } from '@/workflow-helpers';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { TagEntity, ITagWithCountDb } from '@n8n/db';
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { ExternalHooks } from '@/external-hooks';
|
||||
import { validateEntity } from '@/generic-helpers';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { StatisticsNames } from '@n8n/db';
|
||||
import { StatisticsNames, WorkflowStatisticsRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { Logger } from 'n8n-core';
|
||||
import type {
|
||||
@@ -9,7 +9,6 @@ import type {
|
||||
WorkflowExecuteMode,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
|
||||
import { EventService } from '@/events/event.service';
|
||||
import { UserService } from '@/services/user.service';
|
||||
import { TypedEmitter } from '@/typed-emitter';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { User } from '@n8n/db';
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { mockClear } from 'jest-mock-extended';
|
||||
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
import { WorkflowFinderService } from '@/workflows/workflow-finder.service';
|
||||
import { WorkflowHistoryService } from '@/workflows/workflow-history.ee/workflow-history.service.ee';
|
||||
import { mockInstance, mockLogger } from '@test/mocking';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { DateTime } from 'luxon';
|
||||
|
||||
import { Time } from '@/constants';
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
|
||||
import {
|
||||
getWorkflowHistoryPruneTime,
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import type { User, WorkflowHistory } from '@n8n/db';
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import { Logger } from 'n8n-core';
|
||||
import type { IWorkflowBase } from 'n8n-workflow';
|
||||
import { ensureError } from 'n8n-workflow';
|
||||
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
import { SharedWorkflowNotFoundError } from '@/errors/shared-workflow-not-found.error';
|
||||
import { WorkflowHistoryVersionNotFoundError } from '@/errors/workflow-history-version-not-found.error';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { GlobalConfig } from '@n8n/config';
|
||||
import type { User, WorkflowEntity, ListQueryDb } from '@n8n/db';
|
||||
import { SharedWorkflow, ExecutionRepository } from '@n8n/db';
|
||||
import { SharedWorkflow, ExecutionRepository, WorkflowTagMappingRepository } from '@n8n/db';
|
||||
import { Service } from '@n8n/di';
|
||||
import type { Scope } from '@n8n/permissions';
|
||||
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
|
||||
@@ -17,7 +17,6 @@ import { v4 as uuid } from 'uuid';
|
||||
import { ActiveWorkflowManager } from '@/active-workflow-manager';
|
||||
import config from '@/config';
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
||||
import type { WorkflowFolderUnionFull } from '@/databases/repositories/workflow.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
WorkflowEntity,
|
||||
ProjectRelationRepository,
|
||||
ProjectRepository,
|
||||
TagRepository,
|
||||
} from '@n8n/db';
|
||||
import {
|
||||
Body,
|
||||
@@ -33,7 +34,6 @@ import { UnexpectedError } from 'n8n-workflow';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import * as Db from '@/db';
|
||||
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import type { User } from '@n8n/db';
|
||||
import type { AnnotationTagEntity } from '@n8n/db';
|
||||
import { TestDefinitionRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { mockInstance } from 'n8n-core/test/utils';
|
||||
import type { IWorkflowBase } from 'n8n-workflow';
|
||||
|
||||
import { TestDefinitionRepository } from '@/databases/repositories/test-definition.repository.ee';
|
||||
import { TestRunnerService } from '@/evaluation.ee/test-runner/test-runner.service.ee';
|
||||
import { createAnnotationTags } from '@test-integration/db/executions';
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import type { User } from '@n8n/db';
|
||||
import type { TestDefinition } from '@n8n/db';
|
||||
import { ProjectRepository } from '@n8n/db';
|
||||
import { TestDefinitionRepository } from '@n8n/db';
|
||||
import { TestRunRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { mockInstance } from 'n8n-core/test/utils';
|
||||
import type { IWorkflowBase } from 'n8n-workflow';
|
||||
|
||||
import { TestDefinitionRepository } from '@/databases/repositories/test-definition.repository.ee';
|
||||
import { TestRunRepository } from '@/databases/repositories/test-run.repository.ee';
|
||||
import { TestRunnerService } from '@/evaluation.ee/test-runner/test-runner.service.ee';
|
||||
import { createUserShell } from '@test-integration/db/users';
|
||||
import { createWorkflow } from '@test-integration/db/workflows';
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { Project } from '@n8n/db';
|
||||
import type { User } from '@n8n/db';
|
||||
import { TagEntity } from '@n8n/db';
|
||||
import { CredentialsRepository } from '@n8n/db';
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { mock } from 'jest-mock-extended';
|
||||
import type { INode } from 'n8n-workflow';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import { ImportService } from '@/services/import.service';
|
||||
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import { StatisticsNames } from '@n8n/db';
|
||||
import { LicenseMetricsRepository } from '@n8n/db';
|
||||
import { WorkflowStatisticsRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
|
||||
|
||||
import { createManyCredentials } from './shared/db/credentials';
|
||||
import { createAdmin, createMember, createOwner, createUser } from './shared/db/users';
|
||||
import { createManyWorkflows } from './shared/db/workflows';
|
||||
|
||||
@@ -2,13 +2,13 @@ import type { TagEntity } from '@n8n/db';
|
||||
import { ApiKeyRepository } from '@n8n/db';
|
||||
import { CredentialsRepository } from '@n8n/db';
|
||||
import { ProjectRepository } from '@n8n/db';
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { randomString } from 'n8n-workflow';
|
||||
import validator from 'validator';
|
||||
|
||||
import { SharedCredentialsRepository } from '@/databases/repositories/shared-credentials.repository';
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { getOwnerOnlyApiKeyScopes } from '@/public-api/permissions.ee';
|
||||
import { affixRoleToSaveCredential, createCredentials } from '@test-integration/db/credentials';
|
||||
import { createErrorExecution, createSuccessfulExecution } from '@test-integration/db/executions';
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import type { User } from '@n8n/db';
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
|
||||
import { createTag } from '../shared/db/tags';
|
||||
import { createMemberWithApiKey, createOwnerWithApiKey } from '../shared/db/users';
|
||||
import * as testDb from '../shared/test-db';
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { Project } from '@n8n/db';
|
||||
import type { TagEntity } from '@n8n/db';
|
||||
import type { User } from '@n8n/db';
|
||||
import { ProjectRepository } from '@n8n/db';
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { InstanceSettings } from 'n8n-core';
|
||||
import type { INode } from 'n8n-workflow';
|
||||
@@ -10,7 +11,6 @@ import type { INode } from 'n8n-workflow';
|
||||
import { ActiveWorkflowManager } from '@/active-workflow-manager';
|
||||
import { STARTING_NODES } from '@/constants';
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
import { ExecutionService } from '@/executions/execution.service';
|
||||
import { ProjectService } from '@/services/project.service.ee';
|
||||
import { Telemetry } from '@/telemetry';
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import { generateNanoId } from '@n8n/db';
|
||||
import type { TagEntity } from '@n8n/db';
|
||||
import type { WorkflowEntity } from '@n8n/db';
|
||||
import { generateNanoId } from '@n8n/db';
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { WorkflowTagMappingRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import type { IWorkflowBase } from 'n8n-workflow';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
||||
|
||||
import { randomName } from '../random';
|
||||
|
||||
export async function createTag(attributes: Partial<TagEntity> = {}, workflow?: IWorkflowBase) {
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import { generateNanoId } from '@n8n/db';
|
||||
import { VariablesRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { randomString } from 'n8n-workflow';
|
||||
|
||||
import { VariablesRepository } from '@/databases/repositories/variables.repository';
|
||||
|
||||
export async function createVariable(key = randomString(5), value = randomString(5)) {
|
||||
return await Container.get(VariablesRepository).save({ id: generateNanoId(), key, value });
|
||||
}
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import type { WorkflowHistory } from '@n8n/db';
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
|
||||
export async function createWorkflowHistoryItem(
|
||||
workflowId: string,
|
||||
data?: Partial<WorkflowHistory>,
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import { StatisticsNames, type WorkflowStatistics } from '@n8n/db';
|
||||
import { WorkflowStatisticsRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import type { Workflow } from 'n8n-workflow';
|
||||
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflow-statistics.repository';
|
||||
|
||||
export async function createWorkflowStatisticsItem(
|
||||
workflowId: Workflow['id'],
|
||||
data?: Partial<WorkflowStatistics>,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
|
||||
import { createUserShell } from './shared/db/users';
|
||||
import * as testDb from './shared/test-db';
|
||||
import type { SuperAgentTest } from './shared/types';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { generateNanoId } from '@n8n/db';
|
||||
import type { Variables } from '@n8n/db';
|
||||
import { generateNanoId } from '@n8n/db';
|
||||
import { VariablesRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
|
||||
import { VariablesRepository } from '@/databases/repositories/variables.repository';
|
||||
import { VariablesService } from '@/environments.ee/variables/variables.service.ee';
|
||||
import { CacheService } from '@/services/cache/cache.service';
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { GlobalConfig } from '@n8n/config';
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import { In } from '@n8n/typeorm';
|
||||
import { DateTime } from 'luxon';
|
||||
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
import { License } from '@/license';
|
||||
import { WorkflowHistoryManager } from '@/workflows/workflow-history.ee/workflow-history-manager.ee';
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { TagRepository } from '@n8n/db';
|
||||
import { WorkflowTagMappingRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
|
||||
import { TagRepository } from '@/databases/repositories/tag.repository';
|
||||
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflow-tag-mapping.repository';
|
||||
|
||||
import { createWorkflow } from './shared/db/workflows';
|
||||
import * as testDb from './shared/test-db';
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import type { Project } from '@n8n/db';
|
||||
import type { User } from '@n8n/db';
|
||||
import type { WorkflowWithSharingsMetaDataAndCredentials } from '@n8n/db';
|
||||
import { ProjectRepository } from '@n8n/db';
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import type { ProjectRole } from '@n8n/permissions';
|
||||
import { ApplicationError, WorkflowActivationError, type INode } from 'n8n-workflow';
|
||||
@@ -10,7 +11,6 @@ import { v4 as uuid } from 'uuid';
|
||||
import { ActiveWorkflowManager } from '@/active-workflow-manager';
|
||||
import config from '@/config';
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import { UserManagementMailer } from '@/user-management/email';
|
||||
import { mockInstance } from '@test/mocking';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { User } from '@n8n/db';
|
||||
import type { ListQueryDb } from '@n8n/db';
|
||||
import { ProjectRepository } from '@n8n/db';
|
||||
import { WorkflowHistoryRepository } from '@n8n/db';
|
||||
import { Container } from '@n8n/di';
|
||||
import type { Scope } from '@n8n/permissions';
|
||||
import { DateTime } from 'luxon';
|
||||
@@ -9,7 +10,6 @@ import { v4 as uuid } from 'uuid';
|
||||
|
||||
import { ActiveWorkflowManager } from '@/active-workflow-manager';
|
||||
import { SharedWorkflowRepository } from '@/databases/repositories/shared-workflow.repository';
|
||||
import { WorkflowHistoryRepository } from '@/databases/repositories/workflow-history.repository';
|
||||
import type { WorkflowFolderUnionFull } from '@/databases/repositories/workflow.repository';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
import { License } from '@/license';
|
||||
|
||||
12
pnpm-lock.yaml
generated
12
pnpm-lock.yaml
generated
@@ -21982,7 +21982,7 @@ snapshots:
|
||||
|
||||
eslint-import-resolver-node@0.3.9:
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
is-core-module: 2.13.1
|
||||
resolve: 1.22.8
|
||||
transitivePeerDependencies:
|
||||
@@ -22007,7 +22007,7 @@ snapshots:
|
||||
|
||||
eslint-module-utils@2.8.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.8.2)
|
||||
eslint: 8.57.0
|
||||
@@ -22027,7 +22027,7 @@ snapshots:
|
||||
array.prototype.findlastindex: 1.2.3
|
||||
array.prototype.flat: 1.3.2
|
||||
array.prototype.flatmap: 1.3.2
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
doctrine: 2.1.0
|
||||
eslint: 8.57.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
@@ -22846,7 +22846,7 @@ snapshots:
|
||||
array-parallel: 0.1.3
|
||||
array-series: 0.1.5
|
||||
cross-spawn: 7.0.6
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -25707,7 +25707,7 @@ snapshots:
|
||||
|
||||
pdf-parse@1.1.1:
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
node-ensure: 0.0.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -26546,7 +26546,7 @@ snapshots:
|
||||
|
||||
rhea@1.0.24:
|
||||
dependencies:
|
||||
debug: 3.2.7(supports-color@5.5.0)
|
||||
debug: 3.2.7(supports-color@8.1.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
|
||||
Reference in New Issue
Block a user