refactor: Enable import/order for design-system, workflow and @n8n packages (#10847)

This commit is contained in:
Tomi Turtiainen
2024-09-18 10:19:33 +03:00
committed by GitHub
parent 5a1db6db1a
commit 4f0a1a953f
305 changed files with 746 additions and 507 deletions

View File

@@ -12,7 +12,6 @@ module.exports = {
complexity: 'error',
// TODO: remove these
'import/order': 'off',
'@typescript-eslint/no-base-to-string': 'warn',
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-redundant-type-constituents': 'warn',

View File

@@ -1,5 +1,5 @@
import * as Logger from './LoggerProxy';
import { ApplicationError, type ReportingOptions } from './errors/application.error';
import * as Logger from './LoggerProxy';
interface ErrorReporter {
report: (error: Error | string, options?: ReportingOptions) => void;

View File

@@ -1,6 +1,15 @@
import { DateTime, Duration, Interval } from 'luxon';
import * as tmpl from '@n8n_io/riot-tmpl';
import { DateTime, Duration, Interval } from 'luxon';
import { ApplicationError } from './errors/application.error';
import { ExpressionExtensionError } from './errors/expression-extension.error';
import { ExpressionError } from './errors/expression.error';
import { evaluateExpression, setErrorHandler } from './ExpressionEvaluatorProxy';
import { sanitizer, sanitizerName } from './ExpressionSandboxing';
import { extend, extendOptional } from './Extensions';
import { extendSyntax } from './Extensions/ExpressionExtension';
import { extendedFunctions } from './Extensions/ExtendedFunctions';
import { getGlobalState } from './GlobalState';
import type {
IDataObject,
IExecuteData,
@@ -15,18 +24,8 @@ import type {
NodeParameterValueType,
WorkflowExecuteMode,
} from './Interfaces';
import { ExpressionError } from './errors/expression.error';
import { ExpressionExtensionError } from './errors/expression-extension.error';
import { WorkflowDataProxy } from './WorkflowDataProxy';
import type { Workflow } from './Workflow';
import { extend, extendOptional } from './Extensions';
import { extendedFunctions } from './Extensions/ExtendedFunctions';
import { extendSyntax } from './Extensions/ExpressionExtension';
import { evaluateExpression, setErrorHandler } from './ExpressionEvaluatorProxy';
import { getGlobalState } from './GlobalState';
import { ApplicationError } from './errors/application.error';
import { sanitizer, sanitizerName } from './ExpressionSandboxing';
import { WorkflowDataProxy } from './WorkflowDataProxy';
const IS_FRONTEND_IN_DEV_MODE =
typeof process === 'object' &&

View File

@@ -1,9 +1,10 @@
import * as tmpl from '@n8n_io/riot-tmpl';
import type { ReturnValue, TmplDifference } from '@n8n/tournament';
import { Tournament } from '@n8n/tournament';
import * as tmpl from '@n8n_io/riot-tmpl';
import { PrototypeSanitizer } from './ExpressionSandboxing';
import type { ExpressionEvaluatorType } from './Interfaces';
import * as LoggerProxy from './LoggerProxy';
import { PrototypeSanitizer } from './ExpressionSandboxing';
type Evaluator = (expr: string, data: unknown) => tmpl.ReturnValue;
type ErrorHandler = (error: Error) => void;

View File

@@ -1,4 +1,5 @@
import { type ASTAfterHook, astBuilders as b, astVisit } from '@n8n/tournament';
import { ExpressionError } from './errors';
const forbiddenMembers = ['__proto__', 'prototype', 'constructor', 'getPrototypeOf'];

View File

@@ -1,10 +1,10 @@
import deepEqual from 'deep-equal';
import uniqWith from 'lodash/uniqWith';
import { ExpressionError } from '../errors/expression.error';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import type { Extension, ExtensionMap } from './Extensions';
import { compact as oCompact } from './ObjectExtensions';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import { ExpressionError } from '../errors/expression.error';
import { randomInt } from '../utils';
function first(value: unknown[]): unknown {

View File

@@ -1,5 +1,3 @@
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import { DateTime } from 'luxon';
import type {
DateTimeUnit,
@@ -8,9 +6,11 @@ import type {
LocaleOptions,
WeekdayNumbers,
} from 'luxon';
import type { ExtensionMap } from './Extensions';
import { convertToDateTime } from './utils';
import { toDateTime as stringToDateTime } from './StringExtensions';
import { convertToDateTime } from './utils';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
const durationUnits = [
'milliseconds',

View File

@@ -1,23 +1,22 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
import { DateTime } from 'luxon';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import { parse, visit, types, print } from 'recast';
import { getOption } from 'recast/lib/util';
import type { ExpressionKind } from 'ast-types/gen/kinds';
import type { Config as EsprimaConfig } from 'esprima-next';
import { parse as esprimaParse } from 'esprima-next';
import { DateTime } from 'luxon';
import { parse, visit, types, print } from 'recast';
import { getOption } from 'recast/lib/util';
import { arrayExtensions } from './ArrayExtensions';
import { dateExtensions } from './DateExtensions';
import { numberExtensions } from './NumberExtensions';
import { stringExtensions } from './StringExtensions';
import { objectExtensions } from './ObjectExtensions';
import type { ExpressionKind } from 'ast-types/gen/kinds';
import type { ExpressionChunk, ExpressionCode } from './ExpressionParser';
import { joinExpression, splitExpression } from './ExpressionParser';
import { booleanExtensions } from './BooleanExtensions';
import { dateExtensions } from './DateExtensions';
import { joinExpression, splitExpression } from './ExpressionParser';
import type { ExpressionChunk, ExpressionCode } from './ExpressionParser';
import type { ExtensionMap } from './Extensions';
import { numberExtensions } from './NumberExtensions';
import { objectExtensions } from './ObjectExtensions';
import { stringExtensions } from './StringExtensions';
import { checkIfValueDefinedOrThrow } from './utils';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
const EXPRESSION_EXTENDER = 'extend';
const EXPRESSION_EXTENDER_OPTIONAL = 'extendOptional';

View File

@@ -1,6 +1,6 @@
import { ExpressionError } from '../errors/expression.error';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import { average as aAverage } from './ArrayExtensions';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import { ExpressionError } from '../errors/expression.error';
const min = Math.min;
const max = Math.max;

View File

@@ -2,8 +2,9 @@
* @jest-environment jsdom
*/
import { DateTime } from 'luxon';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import type { ExtensionMap } from './Extensions';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
function format(value: number, extraArgs: unknown[]): string {
const [locales = 'en-US', config = {}] = extraArgs as [

View File

@@ -1,5 +1,5 @@
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import type { ExtensionMap } from './Extensions';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
function isEmpty(value: object): boolean {
return Object.keys(value).length === 0;

View File

@@ -1,13 +1,14 @@
import SHA from 'jssha';
import MD5 from 'md5';
import { toBase64, fromBase64 } from 'js-base64';
import { titleCase } from 'title-case';
import type { Extension, ExtensionMap } from './Extensions';
import { transliterate } from 'transliteration';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import SHA from 'jssha';
import { DateTime } from 'luxon';
import { tryToParseDateTime } from '../TypeValidation';
import MD5 from 'md5';
import { titleCase } from 'title-case';
import { transliterate } from 'transliteration';
import type { Extension, ExtensionMap } from './Extensions';
import { toDateTime as numberToDateTime } from './NumberExtensions';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
import { tryToParseDateTime } from '../TypeValidation';
export const SupportedHashAlgorithms = [
'md5',

View File

@@ -1,4 +1,5 @@
import { DateTime } from 'luxon';
import { ExpressionExtensionError } from '../errors/expression-extension.error';
// Utility functions and type guards for expression extensions

View File

@@ -1,28 +1,28 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { CallbackManager as CallbackManagerLC } from '@langchain/core/callbacks/manager';
import type { AxiosProxyConfig } from 'axios';
import type * as express from 'express';
import type FormData from 'form-data';
import type { PathLike } from 'fs';
import type { IncomingHttpHeaders } from 'http';
import type { SecureContextOptions } from 'tls';
import type { Readable } from 'stream';
import type { URLSearchParams } from 'url';
import type { RequestBodyMatcher } from 'nock';
import type { Client as SSHClient } from 'ssh2';
import type { Readable } from 'stream';
import type { SecureContextOptions } from 'tls';
import type { URLSearchParams } from 'url';
import type { CODE_EXECUTION_MODES, CODE_LANGUAGES, LOG_LEVELS } from './Constants';
import type { IDeferredPromise } from './DeferredPromise';
import type { ExecutionStatus } from './ExecutionStatus';
import type { ExecutionCancelledError } from './errors';
import type { ExpressionError } from './errors/expression.error';
import type { Workflow } from './Workflow';
import type { NodeApiError } from './errors/node-api.error';
import type { NodeOperationError } from './errors/node-operation.error';
import type { WorkflowActivationError } from './errors/workflow-activation.error';
import type { WorkflowOperationError } from './errors/workflow-operation.error';
import type { ExecutionStatus } from './ExecutionStatus';
import type { Workflow } from './Workflow';
import type { WorkflowHooks } from './WorkflowHooks';
import type { ExecutionCancelledError } from './errors';
import type { NodeOperationError } from './errors/node-operation.error';
import type { NodeApiError } from './errors/node-api.error';
import type { AxiosProxyConfig } from 'axios';
import type { CallbackManager as CallbackManagerLC } from '@langchain/core/callbacks/manager';
export interface IAdditionalCredentialOptions {
oauth2?: IOAuth2Options;

View File

@@ -1,4 +1,5 @@
import type { DateTime } from 'luxon';
import type { INodeCredentials } from './Interfaces';
// ===============================

View File

@@ -1,9 +1,9 @@
import { stringMethods } from './String.methods';
import { arrayMethods } from './Array.methods';
import { booleanMethods } from './Boolean.methods';
import { numberMethods } from './Number.methods';
import { objectMethods } from './Object.Methods';
import { stringMethods } from './String.methods';
import type { NativeDoc } from '../Extensions/Extensions';
import { booleanMethods } from './Boolean.methods';
const NATIVE_METHODS: NativeDoc[] = [
stringMethods,

View File

@@ -10,6 +10,8 @@ import get from 'lodash/get';
import isEqual from 'lodash/isEqual';
import uniqBy from 'lodash/uniqBy';
import { SINGLE_EXECUTION_NODES } from './Constants';
import { ApplicationError } from './errors/application.error';
import { NodeConnectionType } from './Interfaces';
import type {
FieldType,
@@ -44,18 +46,15 @@ import type {
NodeHint,
INodeExecutionData,
} from './Interfaces';
import { validateFilterParameter } from './NodeParameters/FilterParameter';
import {
isFilterValue,
isResourceMapperValue,
isValidResourceLocatorParameterValue,
} from './type-guards';
import { deepCopy } from './utils';
import type { Workflow } from './Workflow';
import { validateFilterParameter } from './NodeParameters/FilterParameter';
import { validateFieldType } from './TypeValidation';
import { ApplicationError } from './errors/application.error';
import { SINGLE_EXECUTION_NODES } from './Constants';
import { deepCopy } from './utils';
import type { Workflow } from './Workflow';
export const cronNodeOptions: INodePropertyCollection[] = [
{

View File

@@ -1,4 +1,6 @@
import type { DateTime } from 'luxon';
import { ApplicationError } from '../errors/application.error';
import type {
FilterConditionValue,
FilterOperatorType,
@@ -8,9 +10,8 @@ import type {
Result,
ValidationResult,
} from '../Interfaces';
import { validateFieldType } from '../TypeValidation';
import * as LoggerProxy from '../LoggerProxy';
import { ApplicationError } from '../errors/application.error';
import { validateFieldType } from '../TypeValidation';
type FilterConditionMetadata = {
index: number;

View File

@@ -11,6 +11,8 @@ import merge from 'lodash/merge';
import set from 'lodash/set';
import url from 'node:url';
import { NodeApiError } from './errors/node-api.error';
import { NodeOperationError } from './errors/node-operation.error';
import type {
ICredentialDataDecryptedObject,
ICredentialsDecrypted,
@@ -40,14 +42,9 @@ import type {
JsonObject,
CloseFunction,
} from './Interfaces';
import * as NodeHelpers from './NodeHelpers';
import type { Workflow } from './Workflow';
import { NodeOperationError } from './errors/node-operation.error';
import { NodeApiError } from './errors/node-api.error';
import { sleep } from './utils';
import type { Workflow } from './Workflow';
export class RoutingNode {
additionalData: IWorkflowExecuteAdditionalData;

View File

@@ -1,16 +1,3 @@
import { getNodeParameters } from './NodeHelpers';
import type {
IConnection,
INode,
INodeNameIndex,
INodesGraph,
INodeGraphItem,
INodesGraphResult,
IWorkflowBase,
INodeTypes,
IDataObject,
} from './Interfaces';
import { ApplicationError } from './errors/application.error';
import {
AGENT_LANGCHAIN_NODE_TYPE,
AI_TRANSFORM_NODE_TYPE,
@@ -26,6 +13,19 @@ import {
WEBHOOK_NODE_TYPE,
WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE,
} from './Constants';
import { ApplicationError } from './errors/application.error';
import type {
IConnection,
INode,
INodeNameIndex,
INodesGraph,
INodeGraphItem,
INodesGraphResult,
IWorkflowBase,
INodeTypes,
IDataObject,
} from './Interfaces';
import { getNodeParameters } from './NodeHelpers';
export function getNodeTypeForName(workflow: IWorkflowBase, nodeName: string): INode | undefined {
return workflow.nodes.find((node) => node.name === nodeName);

View File

@@ -1,7 +1,8 @@
import { DateTime } from 'luxon';
import type { FieldType, INodePropertyOptions, ValidationResult } from './Interfaces';
import isObject from 'lodash/isObject';
import { DateTime } from 'luxon';
import { ApplicationError } from './errors';
import type { FieldType, INodePropertyOptions, ValidationResult } from './Interfaces';
import { jsonParse } from './utils';
export const tryToParseNumber = (value: unknown): number => {

View File

@@ -7,6 +7,15 @@
/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
import {
MANUAL_CHAT_TRIGGER_LANGCHAIN_NODE_TYPE,
NODES_WITH_RENAMABLE_CONTENT,
STARTING_NODE_TYPES,
} from './Constants';
import type { IDeferredPromise } from './DeferredPromise';
import { ApplicationError } from './errors/application.error';
import { Expression } from './Expression';
import { getGlobalState } from './GlobalState';
import type {
IConnections,
IExecuteResponsePromiseData,
@@ -45,19 +54,9 @@ import type {
INodeOutputConfiguration,
} from './Interfaces';
import { Node, NodeConnectionType } from './Interfaces';
import type { IDeferredPromise } from './DeferredPromise';
import * as NodeHelpers from './NodeHelpers';
import * as ObservableObject from './ObservableObject';
import { RoutingNode } from './RoutingNode';
import { Expression } from './Expression';
import {
MANUAL_CHAT_TRIGGER_LANGCHAIN_NODE_TYPE,
NODES_WITH_RENAMABLE_CONTENT,
STARTING_NODE_TYPES,
} from './Constants';
import { ApplicationError } from './errors/application.error';
import { getGlobalState } from './GlobalState';
function dedupe<T>(arr: T[]): T[] {
return [...new Set(arr)];

View File

@@ -2,9 +2,14 @@
/* eslint-disable @typescript-eslint/no-this-alias */
/* eslint-disable @typescript-eslint/no-unsafe-return */
import { DateTime, Duration, Interval, Settings } from 'luxon';
import * as jmespath from 'jmespath';
import { DateTime, Duration, Interval, Settings } from 'luxon';
import { augmentArray, augmentObject } from './AugmentObject';
import { SCRIPTING_NODE_TYPES } from './Constants';
import { ApplicationError } from './errors/application.error';
import { ExpressionError, type ExpressionErrorOptions } from './errors/expression.error';
import { getGlobalState } from './GlobalState';
import {
type IDataObject,
type IExecuteData,
@@ -23,13 +28,8 @@ import {
NodeConnectionType,
} from './Interfaces';
import * as NodeHelpers from './NodeHelpers';
import { ExpressionError, type ExpressionErrorOptions } from './errors/expression.error';
import type { Workflow } from './Workflow';
import { augmentArray, augmentObject } from './AugmentObject';
import { deepCopy } from './utils';
import { getGlobalState } from './GlobalState';
import { ApplicationError } from './errors/application.error';
import { SCRIPTING_NODE_TYPES } from './Constants';
import type { Workflow } from './Workflow';
import { getPinDataIfManualExecution } from './WorkflowDataProxyHelpers';
export function isResourceLocatorValue(value: unknown): value is INodeParameterResourceLocator {

View File

@@ -1,6 +1,6 @@
import { isTraversableObject, jsonParse } from '../../utils';
import type { IDataObject, INode, JsonObject } from '../../Interfaces';
import { ExecutionBaseError } from './execution-base.error';
import type { IDataObject, INode, JsonObject } from '../../Interfaces';
import { isTraversableObject, jsonParse } from '../../utils';
/**
* Descriptive messages for common errors.

View File

@@ -1,5 +1,5 @@
import callsites from 'callsites';
import type { Event } from '@sentry/node';
import callsites from 'callsites';
export type Level = 'warning' | 'error' | 'fatal' | 'info';

View File

@@ -1,5 +1,5 @@
import type { INode } from '../Interfaces';
import { ExecutionBaseError } from './abstract/execution-base.error';
import type { INode } from '../Interfaces';
export class CredentialAccessError extends ExecutionBaseError {
override readonly description =

View File

@@ -1,5 +1,5 @@
import type { IDataObject } from '../Interfaces';
import { ExecutionBaseError } from './abstract/execution-base.error';
import type { IDataObject } from '../Interfaces';
export interface ExpressionErrorOptions {
cause?: Error;

View File

@@ -1,7 +1,17 @@
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
import { AxiosError } from 'axios';
import { parseString } from 'xml2js';
import { NodeError } from './abstract/node.error';
import type { ReportingOptions } from './application.error';
import {
NO_OP_NODE_TYPE,
UNKNOWN_ERROR_DESCRIPTION,
UNKNOWN_ERROR_MESSAGE,
UNKNOWN_ERROR_MESSAGE_CRED,
} from '../Constants';
import type {
INode,
JsonObject,
@@ -9,16 +19,7 @@ import type {
IStatusCodeMessages,
Functionality,
} from '../Interfaces';
import { NodeError } from './abstract/node.error';
import { removeCircularRefs } from '../utils';
import type { ReportingOptions } from './application.error';
import { AxiosError } from 'axios';
import {
NO_OP_NODE_TYPE,
UNKNOWN_ERROR_DESCRIPTION,
UNKNOWN_ERROR_MESSAGE,
UNKNOWN_ERROR_MESSAGE_CRED,
} from '../Constants';
export interface NodeOperationErrorOptions {
message?: string;

View File

@@ -1,7 +1,7 @@
import type { INode, JsonObject } from '../Interfaces';
import type { NodeOperationErrorOptions } from './node-api.error';
import { NodeError } from './abstract/node.error';
import { ApplicationError } from './application.error';
import type { NodeOperationErrorOptions } from './node-api.error';
import type { INode, JsonObject } from '../Interfaces';
/**
* Class for instantiating an operational error, e.g. an invalid credentials error.

View File

@@ -1,5 +1,5 @@
import type { INode } from '../Interfaces';
import { ApplicationError, type Level } from './application.error';
import type { INode } from '../Interfaces';
interface TriggerCloseErrorOptions extends ErrorOptions {
level: Level;

View File

@@ -1,6 +1,6 @@
import type { INode } from '../Interfaces';
import { ExecutionBaseError } from './abstract/execution-base.error';
import type { ApplicationError } from './application.error';
import type { INode } from '../Interfaces';
interface WorkflowActivationErrorOptions {
cause?: Error;

View File

@@ -1,5 +1,5 @@
import type { INode } from '../Interfaces';
import { ExecutionBaseError } from './abstract/execution-base.error';
import type { INode } from '../Interfaces';
/**
* Class for instantiating an operational error, e.g. a timeout error.

View File

@@ -1,16 +1,15 @@
import FormData from 'form-data';
import { merge } from 'lodash';
import { ALPHABET } from './Constants';
import type { BinaryFileType, IDisplayOptions, INodeProperties, JsonObject } from './Interfaces';
import { ApplicationError } from './errors/application.error';
import {
parse as esprimaParse,
Syntax,
type Node as SyntaxNode,
type ExpressionStatement,
} from 'esprima-next';
import FormData from 'form-data';
import { merge } from 'lodash';
import { ALPHABET } from './Constants';
import { ApplicationError } from './errors/application.error';
import type { BinaryFileType, IDisplayOptions, INodeProperties, JsonObject } from './Interfaces';
const readStreamClasses = new Set(['ReadStream', 'Readable', 'ReadableStream']);

View File

@@ -1,5 +1,5 @@
import type { IDataObject } from '@/Interfaces';
import { augmentArray, augmentObject } from '@/AugmentObject';
import type { IDataObject } from '@/Interfaces';
import { deepCopy } from '@/utils';
describe('AugmentObject', () => {

View File

@@ -3,15 +3,17 @@
*/
import { DateTime, Duration, Interval } from 'luxon';
import { Workflow } from '@/Workflow';
import * as Helpers from './Helpers';
import type { ExpressionTestEvaluation, ExpressionTestTransform } from './ExpressionFixtures/base';
import { baseFixtures } from './ExpressionFixtures/base';
import type { INodeExecutionData } from '@/Interfaces';
import { extendSyntax } from '@/Extensions/ExpressionExtension';
import { ExpressionError } from '@/errors/expression.error';
import { setDifferEnabled, setEvaluator } from '@/ExpressionEvaluatorProxy';
import { extendSyntax } from '@/Extensions/ExpressionExtension';
import type { INodeExecutionData } from '@/Interfaces';
import { Workflow } from '@/Workflow';
import { workflow } from './ExpressionExtensions/Helpers';
import { baseFixtures } from './ExpressionFixtures/base';
import type { ExpressionTestEvaluation, ExpressionTestTransform } from './ExpressionFixtures/base';
import * as Helpers from './Helpers';
setDifferEnabled(true);

View File

@@ -2,8 +2,8 @@
* @jest-environment jsdom
*/
import { arrayExtensions } from '../../src/Extensions/ArrayExtensions';
import { evaluate } from './Helpers';
import { arrayExtensions } from '../../src/Extensions/ArrayExtensions';
describe('Data Transformation Functions', () => {
describe('Array Data Transformation Functions', () => {

View File

@@ -2,8 +2,8 @@
* @jest-environment jsdom
*/
import { booleanExtensions } from '../../src/Extensions/BooleanExtensions';
import { evaluate } from './Helpers';
import { booleanExtensions } from '../../src/Extensions/BooleanExtensions';
describe('Data Transformation Functions', () => {
describe('Boolean Data Transformation Functions', () => {

View File

@@ -3,7 +3,9 @@
*/
import { DateTime } from 'luxon';
import { getGlobalState } from '@/GlobalState';
import { evaluate, getLocalISOString } from './Helpers';
import { dateExtensions } from '../../src/Extensions/DateExtensions';

View File

@@ -6,6 +6,7 @@
import { extendTransform, extend } from '@/Extensions';
import { joinExpression, splitExpression } from '@/Extensions/ExpressionParser';
import { evaluate } from './Helpers';
import { ExpressionExtensionError } from '../../src/errors/expression-extension.error';

View File

@@ -1,5 +1,6 @@
import type { IDataObject } from '@/Interfaces';
import { Workflow } from '@/Workflow';
import * as Helpers from '../Helpers';
export const nodeTypes = Helpers.NodeTypes();

View File

@@ -3,6 +3,7 @@
*/
import { numberExtensions } from '@/Extensions/NumberExtensions';
import { evaluate } from './Helpers';
describe('Data Transformation Functions', () => {

View File

@@ -1,5 +1,5 @@
import { objectExtensions } from '../../src/Extensions/ObjectExtensions';
import { evaluate } from './Helpers';
import { objectExtensions } from '../../src/Extensions/ObjectExtensions';
describe('Data Transformation Functions', () => {
describe('Object Data Transformation Functions', () => {

View File

@@ -2,6 +2,7 @@
* @jest-environment jsdom
*/
import { DateTime } from 'luxon';
import { evaluate } from './Helpers';
import { ExpressionExtensionError } from '../../src/errors';

View File

@@ -1,5 +1,5 @@
import type { GenericValue, IDataObject } from '@/Interfaces';
import { ExpressionError } from '@/errors/expression.error';
import type { GenericValue, IDataObject } from '@/Interfaces';
interface ExpressionTestBase {
type: 'evaluation' | 'transform';

View File

@@ -1,6 +1,7 @@
import { PrototypeSanitizer, sanitizer } from '@/ExpressionSandboxing';
import { Tournament } from '@n8n/tournament';
import { PrototypeSanitizer, sanitizer } from '@/ExpressionSandboxing';
const tournament = new Tournament(
(e) => {
throw e;

View File

@@ -1,8 +1,9 @@
import { arrayContainsValue, executeFilter } from '@/NodeParameters/FilterParameter';
import type { FilterConditionValue, FilterValue } from '@/Interfaces';
import merge from 'lodash/merge';
import { DateTime } from 'luxon';
import type { FilterConditionValue, FilterValue } from '@/Interfaces';
import { arrayContainsValue, executeFilter } from '@/NodeParameters/FilterParameter';
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};

View File

@@ -1,7 +1,7 @@
import { readFileSync } from 'fs';
import path from 'path';
import { mock } from 'jest-mock-extended';
import get from 'lodash/get';
import path from 'path';
import type {
IExecuteSingleFunctions,
@@ -13,6 +13,7 @@ import type {
IRunExecutionData,
} from '@/Interfaces';
import type { Workflow } from '@/Workflow';
import { NodeTypes as NodeTypesClass } from './NodeTypes';
export function getExecuteSingleFunctions(

View File

@@ -1,6 +1,7 @@
import type { INode, JsonObject } from '@/Interfaces';
import { NodeOperationError } from '@/errors';
import { NodeApiError } from '@/errors/node-api.error';
import type { INode, JsonObject } from '@/Interfaces';
import { UNKNOWN_ERROR_DESCRIPTION, UNKNOWN_ERROR_MESSAGE } from '../src/Constants';
const node: INode = {

View File

@@ -6,7 +6,6 @@ import {
type INodeType,
type INodeTypeDescription,
} from '@/Interfaces';
import type { Workflow } from '@/Workflow';
import {
getNodeParameters,
getNodeHints,
@@ -15,6 +14,7 @@ import {
applyDeclarativeNodeOptionParameters,
convertNodeToAiTool,
} from '@/NodeHelpers';
import type { Workflow } from '@/Workflow';
describe('NodeHelpers', () => {
describe('getNodeParameters', () => {

View File

@@ -1,4 +1,5 @@
import { mock } from 'jest-mock-extended';
import {
NodeConnectionType,
type IDataObject,

View File

@@ -1,3 +1,5 @@
import { mock } from 'jest-mock-extended';
import type {
INode,
INodeExecutionData,
@@ -16,14 +18,12 @@ import type {
IWorkflowExecuteAdditionalData,
IExecuteFunctions,
} from '@/Interfaces';
import { applyDeclarativeNodeOptionParameters } from '@/NodeHelpers';
import { RoutingNode } from '@/RoutingNode';
import * as utilsModule from '@/utils';
import { Workflow } from '@/Workflow';
import * as utilsModule from '@/utils';
import * as Helpers from './Helpers';
import { applyDeclarativeNodeOptionParameters } from '@/NodeHelpers';
import { mock } from 'jest-mock-extended';
const postReceiveFunction1 = async function (
this: IExecuteSingleFunctions,

View File

@@ -1,19 +1,20 @@
import { v5 as uuidv5, v3 as uuidv3, v4 as uuidv4, v1 as uuidv1 } from 'uuid';
import { mock } from 'jest-mock-extended';
import { v5 as uuidv5, v3 as uuidv3, v4 as uuidv4, v1 as uuidv1 } from 'uuid';
import { STICKY_NODE_TYPE } from '@/Constants';
import { ApplicationError } from '@/errors';
import { NodeConnectionType, type IWorkflowBase } from '@/Interfaces';
import * as nodeHelpers from '@/NodeHelpers';
import {
ANONYMIZATION_CHARACTER as CHAR,
generateNodesGraph,
getDomainBase,
getDomainPath,
} from '@/TelemetryHelpers';
import { nodeTypes } from './ExpressionExtensions/Helpers';
import * as nodeHelpers from '@/NodeHelpers';
import { NodeConnectionType, type IWorkflowBase } from '@/Interfaces';
import { STICKY_NODE_TYPE } from '@/Constants';
import { ApplicationError } from '@/errors';
import { randomInt } from '@/utils';
import { nodeTypes } from './ExpressionExtensions/Helpers';
describe('getDomainBase should return protocol plus domain', () => {
test('in valid URLs', () => {
for (const url of validUrls(numericId)) {

View File

@@ -1,4 +1,5 @@
import { DateTime } from 'luxon';
import { getValueDescription, validateFieldType } from '@/TypeValidation';
describe('Type Validation', () => {

View File

@@ -1,4 +1,5 @@
import { mock } from 'jest-mock-extended';
import { NodeConnectionType } from '@/Interfaces';
import type {
IBinaryKeyData,
@@ -18,8 +19,8 @@ import type {
IWorkflowExecuteAdditionalData,
NodeParameterValueType,
} from '@/Interfaces';
import { Workflow, type WorkflowParameters } from '@/Workflow';
import * as NodeHelpers from '@/NodeHelpers';
import { Workflow, type WorkflowParameters } from '@/Workflow';
process.env.TEST_VARIABLE_1 = 'valueEnvVariable1';

View File

@@ -1,3 +1,4 @@
import { ExpressionError } from '@/errors/expression.error';
import type {
IExecuteData,
INode,
@@ -8,7 +9,7 @@ import type {
} from '@/Interfaces';
import { Workflow } from '@/Workflow';
import { WorkflowDataProxy } from '@/WorkflowDataProxy';
import { ExpressionError } from '@/errors/expression.error';
import * as Helpers from './Helpers';
const loadFixture = (fixture: string) => {

View File

@@ -1,7 +1,8 @@
import { mock } from 'jest-mock-extended';
import type { INode } from '@/Interfaces';
import { NodeApiError } from '@/errors/node-api.error';
import { NodeOperationError } from '@/errors/node-operation.error';
import type { INode } from '@/Interfaces';
describe('NodeError', () => {
const node = mock<INode>();