refactor(core): Move leaf entities to @n8n/db (#15010)

This commit is contained in:
Iván Ovejero
2025-04-30 10:31:28 +02:00
committed by GitHub
parent a88b889309
commit 1de95ead0d
49 changed files with 110 additions and 89 deletions

View File

@@ -1,7 +1,8 @@
import { JsonColumn, WithTimestamps } from '@n8n/db';
import { Entity, PrimaryColumn } from '@n8n/typeorm';
import { MessageEventBusDestinationOptions } from 'n8n-workflow';
import { JsonColumn, WithTimestamps } from './abstract-entity';
@Entity({ name: 'event_destinations' })
export class EventDestinations extends WithTimestamps {
@PrimaryColumn('uuid')

View File

@@ -0,0 +1,19 @@
import { EventDestinations } from './event-destinations';
import { InstalledNodes } from './installed-nodes';
import { InstalledPackages } from './installed-packages';
import { InvalidAuthToken } from './invalid-auth-token';
import { ProcessedData } from './processed-data';
import { Settings } from './settings';
import { Variables } from './variables';
import { WebhookEntity } from './webhook-entity';
export {
EventDestinations,
InstalledNodes,
InstalledPackages,
InvalidAuthToken,
ProcessedData,
Settings,
Variables,
WebhookEntity,
};

View File

@@ -1,6 +1,6 @@
import { WithTimestamps } from '@n8n/db';
import { Column, Entity, JoinColumn, OneToMany, PrimaryColumn } from '@n8n/typeorm';
import { WithTimestamps } from './abstract-entity';
import type { InstalledNodes } from './installed-nodes';
@Entity()

View File

@@ -1,6 +1,7 @@
import { DateTimeColumn } from '@n8n/db';
import { Entity, PrimaryColumn } from '@n8n/typeorm';
import { DateTimeColumn } from './abstract-entity';
@Entity()
export class InvalidAuthToken {
@PrimaryColumn()

View File

@@ -1,8 +1,7 @@
import { JsonColumn, WithTimestamps } from '@n8n/db';
import { Entity, PrimaryColumn } from '@n8n/typeorm';
import type { IProcessedDataEntries, IProcessedDataLatest } from 'n8n-workflow';
import type { IProcessedDataEntries, IProcessedDataLatest } from '@/types-db';
import { JsonColumn, WithTimestamps } from './abstract-entity';
import { objectRetriever } from '../utils/transformers';
@Entity()

View File

@@ -1,6 +1,7 @@
import { WithStringId } from '@n8n/db';
import { Column, Entity } from '@n8n/typeorm';
import { WithStringId } from './abstract-entity';
@Entity()
export class Variables extends WithStringId {
@Column('text')

View File

@@ -12,3 +12,15 @@ export {
export { generateNanoId } from './utils/generators';
export { isStringArray } from './utils/is-string-array';
export { separate } from './utils/separate';
export { idStringifier, lowerCaser, objectRetriever, sqlite } from './utils/transformers';
export {
EventDestinations,
InstalledNodes,
InstalledPackages,
InvalidAuthToken,
ProcessedData,
Settings,
Variables,
WebhookEntity,
} from './entities';

View File

@@ -1,8 +1,8 @@
import { type InstalledNodes } from '@n8n/db';
import { type Config } from '@oclif/core';
import { mock } from 'jest-mock-extended';
import { type CredentialsEntity } from '@/databases/entities/credentials-entity';
import { type InstalledNodes } from '@/databases/entities/installed-nodes';
import { type User } from '@/databases/entities/user';
import { CommunityNode } from '../community-node';

View File

@@ -1,9 +1,8 @@
import { type InstalledNodes, type InstalledPackages } from '@n8n/db';
import { Container } from '@n8n/di';
import { Flags } from '@oclif/core';
import { CredentialsService } from '@/credentials/credentials.service';
import { type InstalledNodes } from '@/databases/entities/installed-nodes';
import { type InstalledPackages } from '@/databases/entities/installed-packages';
import { type User } from '@/databases/entities/user';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository';

View File

@@ -1,3 +1,4 @@
import type { InstalledPackages } from '@n8n/db';
import { Delete, Get, Patch, Post, RestController, GlobalScope } from '@n8n/decorators';
import {
@@ -5,7 +6,6 @@ import {
STARTER_TEMPLATE_NAME,
UNKNOWN_FAILURE_REASON,
} from '@/constants';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';
import { InternalServerError } from '@/errors/response-errors/internal-server.error';
import { EventService } from '@/events/event.service';

View File

@@ -1,9 +1,8 @@
import { JsonColumn } from '@n8n/db';
import { JsonColumn, idStringifier } from '@n8n/db';
import { Column, Entity, ManyToOne, PrimaryColumn } from '@n8n/typeorm';
import { IWorkflowBase } from 'n8n-workflow';
import { ExecutionEntity } from './execution-entity';
import { idStringifier } from '../utils/transformers';
@Entity()
export class ExecutionData {

View File

@@ -1,4 +1,4 @@
import { DateTimeColumn, datetimeColumnType } from '@n8n/db';
import { DateTimeColumn, datetimeColumnType, idStringifier } from '@n8n/db';
import {
Column,
Entity,
@@ -19,7 +19,6 @@ import type { ExecutionAnnotation } from '@/databases/entities/execution-annotat
import type { ExecutionData } from './execution-data';
import type { ExecutionMetadata } from './execution-metadata';
import { WorkflowEntity } from './workflow-entity';
import { idStringifier } from '../utils/transformers';
@Entity()
@Index(['workflowId', 'id'])

View File

@@ -1,3 +1,14 @@
import {
EventDestinations,
InstalledNodes,
InstalledPackages,
InvalidAuthToken,
ProcessedData,
Settings,
Variables,
WebhookEntity,
} from '@n8n/db';
import { AnnotationTagEntity } from './annotation-tag-entity.ee';
import { AnnotationTagMapping } from './annotation-tag-mapping.ee';
import { ApiKey } from './api-key';
@@ -5,20 +16,14 @@ import { AuthIdentity } from './auth-identity';
import { AuthProviderSyncHistory } from './auth-provider-sync-history';
import { AuthUser } from './auth-user';
import { CredentialsEntity } from './credentials-entity';
import { EventDestinations } from './event-destinations';
import { ExecutionAnnotation } from './execution-annotation.ee';
import { ExecutionData } from './execution-data';
import { ExecutionEntity } from './execution-entity';
import { ExecutionMetadata } from './execution-metadata';
import { Folder } from './folder';
import { FolderTagMapping } from './folder-tag-mapping';
import { InstalledNodes } from './installed-nodes';
import { InstalledPackages } from './installed-packages';
import { InvalidAuthToken } from './invalid-auth-token';
import { ProcessedData } from './processed-data';
import { Project } from './project';
import { ProjectRelation } from './project-relation';
import { Settings } from './settings';
import { SharedCredentials } from './shared-credentials';
import { SharedWorkflow } from './shared-workflow';
import { TagEntity } from './tag-entity';
@@ -27,8 +32,6 @@ import { TestDefinition } from './test-definition.ee';
import { TestMetric } from './test-metric.ee';
import { TestRun } from './test-run.ee';
import { User } from './user';
import { Variables } from './variables';
import { WebhookEntity } from './webhook-entity';
import { WorkflowEntity } from './workflow-entity';
import { WorkflowHistory } from './workflow-history';
import { WorkflowStatistics } from './workflow-statistics';

View File

@@ -1,4 +1,4 @@
import { JsonColumn, WithTimestamps } from '@n8n/db';
import { JsonColumn, WithTimestamps, objectRetriever, lowerCaser } from '@n8n/db';
import { hasScope, type ScopeOptions, type Scope, GlobalRole } from '@n8n/permissions';
import {
AfterLoad,
@@ -28,7 +28,6 @@ import type { AuthIdentity } from './auth-identity';
import type { ProjectRelation } from './project-relation';
import type { SharedCredentials } from './shared-credentials';
import type { SharedWorkflow } from './shared-workflow';
import { objectRetriever, lowerCaser } from '../utils/transformers';
const STATIC_SCOPE_MAP: Record<GlobalRole, Scope[]> = {
'global:owner': GLOBAL_OWNER_SCOPES,

View File

@@ -1,4 +1,4 @@
import { JsonColumn, WithTimestampsAndStringId, dbType } from '@n8n/db';
import { JsonColumn, WithTimestampsAndStringId, dbType, objectRetriever, sqlite } from '@n8n/db';
import {
Column,
Entity,
@@ -20,7 +20,6 @@ import type { SharedWorkflow } from './shared-workflow';
import type { TagEntity } from './tag-entity';
import type { WorkflowStatistics } from './workflow-statistics';
import type { WorkflowTagMapping } from './workflow-tag-mapping';
import { objectRetriever, sqlite } from '../utils/transformers';
@Entity()
export class WorkflowEntity extends WithTimestampsAndStringId implements IWorkflowDb {

View File

@@ -1,8 +1,7 @@
import { EventDestinations } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import { EventDestinations } from '../entities/event-destinations';
@Service()
export class EventDestinationsRepository extends Repository<EventDestinations> {
constructor(dataSource: DataSource) {

View File

@@ -1,8 +1,7 @@
import { InstalledNodes } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import { InstalledNodes } from '../entities/installed-nodes';
@Service()
export class InstalledNodesRepository extends Repository<InstalledNodes> {
constructor(dataSource: DataSource) {

View File

@@ -1,9 +1,9 @@
import { InstalledPackages } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import type { PackageDirectoryLoader } from 'n8n-core';
import { InstalledNodesRepository } from './installed-nodes.repository';
import { InstalledPackages } from '../entities/installed-packages';
@Service()
export class InstalledPackagesRepository extends Repository<InstalledPackages> {

View File

@@ -1,8 +1,7 @@
import { InvalidAuthToken } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import { InvalidAuthToken } from '../entities/invalid-auth-token';
@Service()
export class InvalidAuthTokenRepository extends Repository<InvalidAuthToken> {
constructor(dataSource: DataSource) {

View File

@@ -1,8 +1,7 @@
import { ProcessedData } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import { ProcessedData } from '../entities/processed-data';
@Service()
export class ProcessedDataRepository extends Repository<ProcessedData> {
constructor(dataSource: DataSource) {

View File

@@ -1,3 +1,4 @@
import { Settings } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import { ErrorReporter } from 'n8n-core';
@@ -5,8 +6,6 @@ import { ErrorReporter } from 'n8n-core';
import config from '@/config';
import { EXTERNAL_SECRETS_DB_KEY } from '@/external-secrets.ee/constants';
import { Settings } from '../entities/settings';
@Service()
export class SettingsRepository extends Repository<Settings> {
constructor(

View File

@@ -1,8 +1,7 @@
import { Variables } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import { Variables } from '../entities/variables';
@Service()
export class VariablesRepository extends Repository<Variables> {
constructor(dataSource: DataSource) {

View File

@@ -1,8 +1,7 @@
import { WebhookEntity } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository } from '@n8n/typeorm';
import { WebhookEntity } from '../entities/webhook-entity';
@Service()
export class WebhookRepository extends Repository<WebhookEntity> {
constructor(dataSource: DataSource) {

View File

@@ -1,5 +1,5 @@
import { GlobalConfig } from '@n8n/config';
import { isStringArray } from '@n8n/db';
import { isStringArray, WebhookEntity } from '@n8n/db';
import { Service } from '@n8n/di';
import { DataSource, Repository, In, Like } from '@n8n/typeorm';
import type {
@@ -18,7 +18,6 @@ import type { ListQuery } from '@/types-db';
import { FolderRepository } from './folder.repository';
import type { Folder, FolderWithWorkflowAndSubFolderCount } from '../entities/folder';
import { TagEntity } from '../entities/tag-entity';
import { WebhookEntity } from '../entities/webhook-entity';
import { WorkflowEntity } from '../entities/workflow-entity';
import { WorkflowTagMapping } from '../entities/workflow-tag-mapping';

View File

@@ -1,21 +1,22 @@
import type { ProcessedData } from '@n8n/db';
import { Container } from '@n8n/di';
import { createHash } from 'crypto';
import {
type ICheckProcessedContextData,
type IDataDeduplicator,
type ICheckProcessedOptions,
type IDeduplicationOutput,
type DeduplicationScope,
type DeduplicationItemTypes,
type DeduplicationMode,
tryToParseDateTime,
import { tryToParseDateTime } from 'n8n-workflow';
import type {
IProcessedDataEntries,
IProcessedDataLatest,
ICheckProcessedContextData,
IDataDeduplicator,
ICheckProcessedOptions,
IDeduplicationOutput,
DeduplicationScope,
DeduplicationItemTypes,
DeduplicationMode,
} from 'n8n-workflow';
import * as assert from 'node:assert/strict';
import type { ProcessedData } from '@/databases/entities/processed-data';
import { ProcessedDataRepository } from '@/databases/repositories/processed-data.repository';
import { DeduplicationError } from '@/errors/deduplication.error';
import type { IProcessedDataEntries, IProcessedDataLatest } from '@/types-db';
export class DeduplicationHelper implements IDataDeduplicator {
private static sortEntries(

View File

@@ -1,4 +1,5 @@
import type { SourceControlledFile } from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import { Container } from '@n8n/di';
import { mock } from 'jest-mock-extended';
import { InstanceSettings } from 'n8n-core';
@@ -6,7 +7,6 @@ import { InstanceSettings } from 'n8n-core';
import type { FolderWithWorkflowAndSubFolderCount } from '@/databases/entities/folder';
import type { TagEntity } from '@/databases/entities/tag-entity';
import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import type { FolderRepository } from '@/databases/repositories/folder.repository';
import type { TagRepository } from '@/databases/repositories/tag.repository';
import { SourceControlPreferencesService } from '@/environments.ee/source-control/source-control-preferences.service.ee';

View File

@@ -1,4 +1,5 @@
import type { SourceControlledFile } from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import { Service } from '@n8n/di';
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
import { In } from '@n8n/typeorm';
@@ -14,7 +15,6 @@ import type { Project } from '@/databases/entities/project';
import { SharedCredentials } from '@/databases/entities/shared-credentials';
import type { TagEntity } from '@/databases/entities/tag-entity';
import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import type { WorkflowTagMapping } from '@/databases/entities/workflow-tag-mapping';
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
import { FolderRepository } from '@/databases/repositories/folder.repository';

View File

@@ -3,6 +3,7 @@ import type {
PushWorkFolderRequestDto,
SourceControlledFile,
} from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import { Service } from '@n8n/di';
import { writeFileSync } from 'fs';
import { Logger } from 'n8n-core';
@@ -12,7 +13,6 @@ import type { PushResult } from 'simple-git';
import type { TagEntity } from '@/databases/entities/tag-entity';
import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import { FolderRepository } from '@/databases/repositories/folder.repository';
import { TagRepository } from '@/databases/repositories/tag.repository';
import { BadRequestError } from '@/errors/response-errors/bad-request.error';

View File

@@ -1,7 +1,7 @@
import { generateNanoId } from '@n8n/db';
import type { Variables } from '@n8n/db';
import { Service } from '@n8n/di';
import type { Variables } from '@/databases/entities/variables';
import { VariablesRepository } from '@/databases/repositories/variables.repository';
import { VariableCountLimitReachedError } from '@/errors/variable-count-limit-reached.error';
import { VariableValidationError } from '@/errors/variable-validation.error';

View File

@@ -1,9 +1,8 @@
import type { EventDestinations } from '@n8n/db';
import { Container } from '@n8n/di';
import { Logger } from 'n8n-core';
import { MessageEventBusDestinationTypeNames } from 'n8n-workflow';
import type { EventDestinations } from '@/databases/entities/event-destinations';
import { MessageEventBusDestinationSentry } from './message-event-bus-destination-sentry.ee';
import { MessageEventBusDestinationSyslog } from './message-event-bus-destination-syslog.ee';
import { MessageEventBusDestinationWebhook } from './message-event-bus-destination-webhook.ee';

View File

@@ -1,3 +1,4 @@
import type { Settings } from '@n8n/db';
import { QueryFailedError } from '@n8n/typeorm';
import { mock } from 'jest-mock-extended';
import { Client } from 'ldapts';
@@ -5,7 +6,6 @@ import type { Cipher } from 'n8n-core';
import { randomString } from 'n8n-workflow';
import config from '@/config';
import type { Settings } from '@/databases/entities/settings';
import { AuthIdentityRepository } from '@/databases/repositories/auth-identity.repository';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import type { EventService } from '@/events/event.service';

View File

@@ -1,4 +1,5 @@
import type { ProjectIcon, ProjectRole, ProjectType } from '@n8n/api-types';
import type { Variables } from '@n8n/db';
import type { AssignableRole, GlobalRole, Scope } from '@n8n/permissions';
import type express from 'express';
import type {
@@ -9,7 +10,6 @@ import type {
import type { Project } from '@/databases/entities/project';
import type { User } from '@/databases/entities/user';
import type { Variables } from '@/databases/entities/variables';
import type { WorkflowHistory } from '@/databases/entities/workflow-history';
import type { ListQuery } from '@/types-db';

View File

@@ -1,4 +1,6 @@
import type { GlobalConfig } from '@n8n/config';
import { InstalledNodes } from '@n8n/db';
import { InstalledPackages } from '@n8n/db';
import axios from 'axios';
import { exec } from 'child_process';
import { access as fsAccess, mkdir as fsMkdir } from 'fs/promises';
@@ -13,8 +15,6 @@ import {
NPM_PACKAGE_STATUS_GOOD,
RESPONSE_ERROR_MESSAGES,
} from '@/constants';
import { InstalledNodes } from '@/databases/entities/installed-nodes';
import { InstalledPackages } from '@/databases/entities/installed-packages';
import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository';
import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository';
import type { CommunityPackages } from '@/interfaces';

View File

@@ -1,5 +1,6 @@
import { GlobalConfig } from '@n8n/config';
import { LICENSE_FEATURES } from '@n8n/constants';
import type { InstalledPackages } from '@n8n/db';
import { Service } from '@n8n/di';
import axios from 'axios';
import { exec } from 'child_process';
@@ -16,7 +17,6 @@ import {
RESPONSE_ERROR_MESSAGES,
UNKNOWN_FAILURE_REASON,
} from '@/constants';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository';
import { FeatureNotLicensedError } from '@/errors/feature-not-licensed.error';
import type { CommunityPackages } from '@/interfaces';

View File

@@ -1,3 +1,4 @@
import type { Settings } from '@n8n/db';
import { Service } from '@n8n/di';
// eslint-disable-next-line n8n-local-rules/misplaced-n8n-typeorm-import
import type { FindManyOptions, FindOneOptions, FindOptionsWhere } from '@n8n/typeorm';
@@ -8,7 +9,6 @@ import type { NextFunction, Response } from 'express';
import { AuthService } from '@/auth/auth.service';
import type { AuthUser } from '@/databases/entities/auth-user';
import type { CredentialsEntity } from '@/databases/entities/credentials-entity';
import type { Settings } from '@/databases/entities/settings';
import type { User } from '@/databases/entities/user';
import type { WorkflowEntity } from '@/databases/entities/workflow-entity';
import { AuthUserRepository } from '@/databases/repositories/auth-user.repository';

View File

@@ -1,4 +1,5 @@
import type { SamlPreferences } from '@n8n/api-types';
import type { Settings } from '@n8n/db';
import { Service } from '@n8n/di';
import axios from 'axios';
import type express from 'express';
@@ -8,7 +9,6 @@ import { jsonParse, UnexpectedError } from 'n8n-workflow';
import type { IdentityProviderInstance, ServiceProviderInstance } from 'samlify';
import type { BindingContext, PostBindingContext } from 'samlify/types/src/entity';
import type { Settings } from '@/databases/entities/settings';
import type { User } from '@/databases/entities/user';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { UserRepository } from '@/databases/repositories/user.repository';

View File

@@ -8,8 +8,6 @@ import type {
ExecutionStatus,
FeatureFlags,
IUserSettings,
DeduplicationMode,
DeduplicationItemTypes,
AnnotationVote,
ExecutionSummary,
IUser,
@@ -148,16 +146,6 @@ export interface WorkflowWithSharingsMetaDataAndCredentials extends Omit<Workflo
usedCredentials?: CredentialUsedByWorkflow[];
}
export interface IProcessedDataLatest {
mode: DeduplicationMode;
data: DeduplicationItemTypes;
}
export interface IProcessedDataEntries {
mode: DeduplicationMode;
data: DeduplicationItemTypes[];
}
/** Payload for creating an execution. */
export type CreateExecutionPayload = Omit<IExecutionDb, 'id' | 'createdAt' | 'startedAt'>;

View File

@@ -1,10 +1,10 @@
import { WebhookEntity } from '@n8n/db';
import { mock } from 'jest-mock-extended';
import type { INode, INodeType, IWebhookData, IWorkflowExecuteAdditionalData } from 'n8n-workflow';
import { Workflow } from 'n8n-workflow';
import { v4 as uuid } from 'uuid';
import config from '@/config';
import { WebhookEntity } from '@/databases/entities/webhook-entity';
import type { WebhookRepository } from '@/databases/repositories/webhook.repository';
import type { NodeTypes } from '@/node-types';
import type { CacheService } from '@/services/cache/cache.service';

View File

@@ -1,3 +1,4 @@
import type { WebhookEntity } from '@n8n/db';
import { Service } from '@n8n/di';
import { HookContext, WebhookContext, Logger } from 'n8n-core';
import { Node, NodeHelpers, UnexpectedError } from 'n8n-workflow';
@@ -14,7 +15,6 @@ import type {
WorkflowExecuteMode,
} from 'n8n-workflow';
import type { WebhookEntity } from '@/databases/entities/webhook-entity';
import { WebhookRepository } from '@/databases/repositories/webhook.repository';
import { NodeTypes } from '@/node-types';
import { CacheService } from '@/services/cache/cache.service';

View File

@@ -1,3 +1,4 @@
import type { WebhookEntity } from '@n8n/db';
import { Container } from '@n8n/di';
import { mock } from 'jest-mock-extended';
import { Logger } from 'n8n-core';
@@ -13,7 +14,6 @@ import type {
import { ActiveExecutions } from '@/active-executions';
import { ActiveWorkflowManager } from '@/active-workflow-manager';
import type { WebhookEntity } from '@/databases/entities/webhook-entity';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import { ExecutionService } from '@/executions/execution.service';
import { ExternalHooks } from '@/external-hooks';

View File

@@ -1,7 +1,7 @@
import type { InstalledNodes } from '@n8n/db';
import type { InstalledPackages } from '@n8n/db';
import path from 'path';
import type { InstalledNodes } from '@/databases/entities/installed-nodes';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { CommunityPackagesService } from '@/services/community-packages.service';

View File

@@ -1,11 +1,11 @@
import { GlobalConfig } from '@n8n/config';
import type { InstalledNodes } from '@n8n/db';
import type { InstalledPackages } from '@n8n/db';
import { Container } from '@n8n/di';
import nock from 'nock';
import { v4 as uuid } from 'uuid';
import * as constants from '@/constants';
import type { InstalledNodes } from '@/databases/entities/installed-nodes';
import type { InstalledPackages } from '@/databases/entities/installed-packages';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
import type { Risk } from '@/security-audit/types';
import { toReportTitle } from '@/security-audit/utils';

View File

@@ -1,7 +1,7 @@
import { InstalledPackages } from '@n8n/db';
import { Container } from '@n8n/di';
import { NODE_PACKAGE_PREFIX } from '@/constants';
import { InstalledPackages } from '@/databases/entities/installed-packages';
import { InstalledNodesRepository } from '@/databases/repositories/installed-nodes.repository';
import { InstalledPackagesRepository } from '@/databases/repositories/installed-packages.repository';

View File

@@ -1,7 +1,7 @@
import { generateNanoId } from '@n8n/db';
import type { Variables } from '@n8n/db';
import { Container } from '@n8n/di';
import type { Variables } from '@/databases/entities/variables';
import { VariablesRepository } from '@/databases/repositories/variables.repository';
import { VariablesService } from '@/environments.ee/variables/variables.service.ee';
import { CacheService } from '@/services/cache/cache.service';

View File

@@ -704,6 +704,16 @@ export type DeduplicationScope = 'node' | 'workflow';
export type DeduplicationItemTypes = string | number;
export type DeduplicationMode = 'entries' | 'latestIncrementalKey' | 'latestDate';
export interface IProcessedDataLatest {
mode: DeduplicationMode;
data: DeduplicationItemTypes;
}
export interface IProcessedDataEntries {
mode: DeduplicationMode;
data: DeduplicationItemTypes[];
}
export interface IDeduplicationOutput {
new: DeduplicationItemTypes[];
processed: DeduplicationItemTypes[];