refactor(core): Lint for cyclomatic complexity in BE packages (no-changelog) (#9111)

This commit is contained in:
Iván Ovejero 2024-04-10 14:02:02 +02:00 committed by GitHub
parent 9eab357b75
commit a3b59843d5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 40 additions and 1 deletions

View file

@ -20,6 +20,7 @@ module.exports = {
rules: {
'n8n-local-rules/no-dynamic-import-template': 'error',
complexity: 'error',
// TODO: Remove this
'import/no-cycle': 'warn',

View file

@ -262,6 +262,7 @@ const mapCookies = (cookies: CurlJson['cookies']): { cookie: string } | {} => {
};
};
// eslint-disable-next-line complexity
export const toHttpNodeParameters = (curlCommand: string): HttpNodeParameters => {
const curlJson = curlToJson(curlCommand);

View file

@ -339,6 +339,7 @@ export class InternalHooks {
]);
}
// eslint-disable-next-line complexity
async onWorkflowPostExecute(
executionId: string,
workflow: IWorkflowBase,

View file

@ -158,6 +158,7 @@ export function toJsonSchema(properties: INodeProperties[]): IDataObject {
// object in the JSON Schema definition. This allows us
// to later validate that only this properties are set in
// the credentials sent in the API call.
// eslint-disable-next-line complexity
properties.forEach((property) => {
if (property.required) {
requiredFields.push(property.name);

View file

@ -217,6 +217,7 @@ const normalizeFormData = <T>(values: Record<string, T | T[]>) => {
/**
* Executes a webhook
*/
// eslint-disable-next-line complexity
export async function executeWebhook(
workflow: Workflow,
webhookData: IWebhookData,
@ -625,6 +626,7 @@ export async function executeWebhook(
executionId,
) as Promise<IExecutionDb | undefined>;
executePromise
// eslint-disable-next-line complexity
.then(async (data) => {
if (data === undefined) {
if (!didSendResponse) {

View file

@ -166,6 +166,7 @@ export class ExecuteBatch extends BaseCommand {
await this.initExternalHooks();
}
// eslint-disable-next-line complexity
async run() {
const { flags } = await this.parse(ExecuteBatch);
ExecuteBatch.debug = flags.debug;

View file

@ -48,6 +48,7 @@ export class ExportCredentialsCommand extends BaseCommand {
}),
};
// eslint-disable-next-line complexity
async run() {
const { flags } = await this.parse(ExportCredentialsCommand);

View file

@ -41,6 +41,7 @@ export class ExportWorkflowsCommand extends BaseCommand {
}),
};
// eslint-disable-next-line complexity
async run() {
const { flags } = await this.parse(ExportWorkflowsCommand);

View file

@ -72,6 +72,7 @@ export class Column {
return this;
}
// eslint-disable-next-line complexity
toOptions(driver: Driver): TableColumnOptions {
const { name, type, isNullable, isPrimary, isGenerated, length } = this;
const isMysql = 'mysql' in driver;

View file

@ -85,6 +85,7 @@ export class MessageEventBus extends EventEmitter {
*
* Sets `isInitialized` to `true` once finished.
*/
// eslint-disable-next-line complexity
async initialize(options?: MessageEventBusInitializeOptions): Promise<void> {
if (this.isInitialized) {
return;

View file

@ -250,6 +250,7 @@ export class MessageEventBusDestinationWebhook
return null;
}
// eslint-disable-next-line complexity
async receiveFromEventBus(emitterPayload: MessageWithCallback): Promise<boolean> {
const { msg, confirmCallback } = emitterPayload;
let sendResult = false;

View file

@ -16,6 +16,7 @@ export class ExecutionDataRecoveryService {
private readonly executionRepository: ExecutionRepository,
) {}
// eslint-disable-next-line complexity
async recoverExecutionData(
executionId: string,
messages: EventMessageTypes[],

View file

@ -166,6 +166,7 @@ export class CredentialsTester {
return undefined;
}
// eslint-disable-next-line complexity
async testCredentials(
user: User,
credentialType: string,

View file

@ -11,6 +11,7 @@ import { TestWebhooks } from '@/TestWebhooks';
import { OrchestrationService } from '@/services/orchestration.service';
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
// eslint-disable-next-line complexity
export async function handleCommandMessageMain(messageString: string) {
const queueModeId = config.getEnv('redis.queueModeId');
const isMainInstance = config.getEnv('generic.instanceType') === 'main';

View file

@ -12,6 +12,7 @@ import { Logger } from '@/Logger';
import { N8N_VERSION } from '@/constants';
export function getWorkerCommandReceivedHandler(options: WorkerCommandReceivedHandlerOptions) {
// eslint-disable-next-line complexity
return async (channel: string, messageString: string) => {
if (channel === COMMAND_REDIS_CHANNEL) {
if (!messageString) return;

View file

@ -55,6 +55,7 @@ export class WorkflowService {
: { workflows, count };
}
// eslint-disable-next-line complexity
async update(
user: User,
workflow: WorkflowEntity,

View file

@ -95,6 +95,7 @@ export const setupTestServer = ({
license: new LicenseMocker(),
};
// eslint-disable-next-line complexity
beforeAll(async () => {
await testDb.init();

View file

@ -15,6 +15,8 @@ module.exports = {
ignorePatterns: ['bin/*.js'],
rules: {
complexity: 'error',
// TODO: Remove this
'import/order': 'off',
'@typescript-eslint/ban-ts-comment': ['error', { 'ts-ignore': true }],

View file

@ -274,6 +274,7 @@ const getBeforeRedirectFn =
}
};
// eslint-disable-next-line complexity
export async function parseRequestObject(requestObject: IRequestOptions) {
// This function is a temporary implementation
// That translates all http requests done via
@ -866,6 +867,7 @@ export async function proxyRequestToAxios(
}
}
// eslint-disable-next-line complexity
function convertN8nRequestToAxios(n8nRequest: IHttpRequestOptions): AxiosRequestConfig {
// Destructure properties with the same name first.
const { headers, method, timeout, auth, proxy, url } = n8nRequest;
@ -1175,6 +1177,7 @@ export async function copyBinaryFile(
* Takes a buffer and converts it into the format n8n uses. It encodes the binary data as
* base64 and adds metadata.
*/
// eslint-disable-next-line complexity
async function prepareBinaryData(
binaryData: Buffer | Readable,
executionId: string,
@ -2894,6 +2897,7 @@ const getRequestHelperFunctions = (
return {
httpRequest,
// eslint-disable-next-line complexity
async requestWithAuthenticationPaginated(
this: IExecuteFunctions,
requestOptions: IRequestOptions,

View file

@ -154,7 +154,7 @@ export class WorkflowExecute {
// IMPORTANT: Do not add "async" to this function, it will then convert the
// PCancelable to a regular Promise and does so not allow canceling
// active executions anymore
// eslint-disable-next-line @typescript-eslint/promise-function-async
// eslint-disable-next-line @typescript-eslint/promise-function-async, complexity
runPartialWorkflow(
workflow: Workflow,
runData: IRunData,
@ -371,6 +371,7 @@ export class WorkflowExecute {
}
}
// eslint-disable-next-line complexity
addNodeToBeExecuted(
workflow: Workflow,
connectionData: IConnection,
@ -836,6 +837,7 @@ export class WorkflowExecute {
setTimeout(() => resolve(fullRunData), 10);
});
// eslint-disable-next-line complexity
const returnPromise = (async () => {
try {
if (!this.additionalData.restartExecutionId) {

View file

@ -9,6 +9,8 @@ module.exports = {
...sharedOptions(__dirname),
rules: {
complexity: 'error',
// TODO: remove these
'import/order': 'off',
'@typescript-eslint/no-base-to-string': 'warn',

View file

@ -104,6 +104,7 @@ export class Expression {
* @param {boolean} [returnObjectAsString=false]
*/
// TODO: Clean that up at some point and move all the options into an options object
// eslint-disable-next-line complexity
resolveSimpleParameterValue(
parameterValue: NodeParameterValue,
siblingParameters: INodeParameters,

View file

@ -127,6 +127,7 @@ export const extendTransform = (expression: string): { code: string } | undefine
// Polyfill optional chaining
visit(ast, {
// eslint-disable-next-line complexity
visitChainExpression(path) {
this.traverse(path);
const chainNumber = currentChain;

View file

@ -607,6 +607,7 @@ export function getParameterResolveOrder(
* @param {boolean} [dataIsResolved=false] If nodeValues are already fully resolved (so that all default values got added already)
* @param {INodeParameters} [nodeValuesRoot] The root node-parameter-data
*/
// eslint-disable-next-line complexity
export function getNodeParameters(
nodePropertiesArray: INodeProperties[],
nodeValues: INodeParameters | null,
@ -1388,6 +1389,7 @@ function isINodeParameterResourceLocator(value: unknown): value is INodeParamete
* @param {INodeParameters} nodeValues The values of the node
* @param {string} path The path to the properties
*/
// eslint-disable-next-line complexity
export function getParameterIssues(
nodeProperties: INodeProperties,
nodeValues: INodeParameters,

View file

@ -121,6 +121,7 @@ function parseRegexPattern(pattern: string): RegExp {
return regex;
}
// eslint-disable-next-line complexity
export function executeFilterCondition(
condition: FilterConditionValue,
filterOptions: FilterOptionsValue,

View file

@ -743,6 +743,7 @@ export class RoutingNode {
return parameterValue;
}
// eslint-disable-next-line complexity
getRequestOptionsFromParameters(
executeSingleFunctions: IExecuteSingleFunctions,
nodeProperties: INodeProperties | INodePropertyOptions,

View file

@ -151,6 +151,7 @@ export function generateNodesGraph(
};
});
// eslint-disable-next-line complexity
otherNodes.forEach((node: INode, index: number) => {
nodeGraph.node_types.push(node.type);
const nodeItem: INodeGraphItem = {

View file

@ -178,6 +178,7 @@ type ValidateFieldTypeOptions = Partial<{
parseStrings: boolean;
}>;
// Validates field against the schema and tries to parse it to the correct type
// eslint-disable-next-line complexity
export const validateFieldType = (
fieldName: string,
value: unknown,

View file

@ -1264,6 +1264,7 @@ export class Workflow {
* Executes the given node.
*
*/
// eslint-disable-next-line complexity
async runNode(
executionData: IExecuteData,
runExecutionData: IRunExecutionData,

View file

@ -738,6 +738,7 @@ export class WorkflowDataProxy {
});
};
// eslint-disable-next-line complexity
const getPairedItem = (
destinationNodeName: string,
incomingSourceData: ISourceData | null,

View file

@ -115,6 +115,7 @@ const STATUS_CODE_MESSAGES: IStatusCodeMessages = {
export class NodeApiError extends NodeError {
httpCode: string | null;
// eslint-disable-next-line complexity
constructor(
node: INode,
errorResponse: JsonObject,