From 7c806ff5329ba7eb8b7e0ecde43c9a260d717cf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Tue, 3 Jun 2025 11:23:44 +0200 Subject: [PATCH] refactor(core): Refactor some imports to reduce baseline memory usage (#15916) --- cypress/utils/executions.ts | 2 +- packages/@n8n/eslint-config/base.js | 1 + .../Agent/agents/ToolsAgent/V1/execute.ts | 2 +- .../Agent/agents/ToolsAgent/V2/execute.ts | 2 +- .../nodes/llms/N8nLlmTracing.ts | 2 +- .../v2/utils/WorkflowToolService.ts | 3 +- .../trigger/ChatTrigger/ChatTrigger.node.ts | 2 +- .../OpenAi/test/OpenAI.workflow.test.ts | 2 +- .../src/js-task-runner/js-task-runner.ts | 2 +- packages/cli/src/active-workflow-manager.ts | 2 +- .../concurrency-control.service.ts | 2 +- packages/cli/src/push/index.ts | 2 +- packages/cli/src/server.ts | 2 +- .../__tests__/task-manager.test.ts | 3 +- .../src/user-management/email/node-mailer.ts | 2 +- .../core/nodes-testing/node-test-harness.ts | 2 +- .../__tests__/routing-node.test.ts | 2 +- .../__tests__/workflow-execute.test.ts | 2 +- .../base-execute-context.ts | 2 +- .../load-options-context.ts | 2 +- .../local-load-options-context.ts | 6 +- .../node-execution-context.ts | 2 +- packages/frontend/@n8n/chat/vite.config.mts | 1 - .../frontend/@n8n/design-system/package.json | 2 + .../N8nDataTableServer/N8nDataTableServer.vue | 2 +- .../@n8n/design-system/vite.config.mts | 1 - packages/frontend/editor-ui/package.json | 4 +- .../editor-ui/src/__tests__/render.ts | 2 +- .../AssignmentCollection/Assignment.test.ts | 2 +- .../components/AssignmentCollection/utils.ts | 2 +- .../src/components/BannersStack.test.ts | 2 +- .../future/components/LogsOverviewRow.vue | 2 +- .../components/LogsViewExecutionSummary.vue | 2 +- .../src/components/CanvasChat/utils.ts | 3 +- .../components/CodeNodeEditor/AskAI/AskAI.vue | 2 +- .../src/components/CollectionParameter.vue | 2 +- .../src/components/CopyInput.test.ts | 2 +- .../Evaluations.ee/shared/TestTableBase.vue | 2 +- .../FilterConditions/FilterConditions.test.ts | 2 +- .../FilterConditions/FilterConditions.vue | 3 +- .../components/FixedCollectionParameter.vue | 2 +- .../editor-ui/src/components/InputPanel.vue | 2 +- .../MainSidebarSourceControl.test.ts | 2 +- .../src/components/MultipleParameter.vue | 2 +- .../NodeCreator/ItemTypes/SubcategoryItem.vue | 2 +- .../Node/NodeCreator/Modes/NodesMode.vue | 2 +- .../composables/useActionsGeneration.ts | 3 +- .../NodeCreator/composables/useViewStacks.ts | 2 +- .../src/components/Node/NodeCreator/utils.ts | 2 +- .../components/Node/NodeCreator/viewsData.ts | 2 +- .../editor-ui/src/components/NodeSettings.vue | 4 +- .../src/components/ParameterInput.vue | 2 +- .../src/components/ParameterInputList.vue | 3 +- .../ResourceMapper/ResourceMapper.vue | 2 +- .../editor-ui/src/components/RunData.vue | 3 +- .../RunDataAi/AiRunContentBlock.vue | 2 +- .../editor-ui/src/components/SSOLogin.test.ts | 2 +- .../EventDestinationSettingsModal.ee.vue | 4 +- .../components/SourceControlPullModal.ee.vue | 3 +- .../components/SourceControlPushModal.ee.vue | 3 +- .../src/components/TagsContainer.vue | 2 +- .../src/components/VirtualSchema.vue | 2 +- .../WorkflowExtractionNameModal.test.ts | 2 +- .../useWorkflowResourcesLocator.ts | 2 +- .../__tests__/utils/ResourceMapper.utils.ts | 2 +- .../canvas/elements/nodes/CanvasNode.vue | 2 +- .../executions/ExecutionsFilter.test.ts | 2 +- .../global/GlobalExecutionsList.test.ts | 2 +- .../WorkflowExecutionsSidebar.test.ts | 2 +- .../composables/useAutocompleteTelemetry.ts | 2 +- .../src/composables/useCanvasOperations.ts | 2 +- .../src/composables/useCodeEditor.ts | 2 +- .../src/composables/useDataSchema.ts | 2 +- .../editor-ui/src/composables/useDebounce.ts | 3 +- .../src/composables/useExpressionEditor.ts | 3 +- .../src/composables/useNodeHelpers.ts | 2 +- .../usePageRedirectionHelper.test.ts | 2 +- .../src/composables/useResolvedExpression.ts | 2 +- .../src/composables/useRunWorkflow.ts | 2 +- .../src/composables/useWorkflowExtraction.ts | 2 +- .../src/composables/useWorkflowHelpers.ts | 2 +- .../src/features/insights/chartjs.utils.ts | 2 +- .../completions/base.completions.test.ts | 2 +- .../completions/completions.test.ts | 3 +- .../completions/datatype.completions.ts | 2 +- .../editor-ui/src/plugins/telemetry.test.ts | 2 +- .../src/stores/assistant.store.test.ts | 2 +- .../src/stores/builder.store.test.ts | 2 +- .../frontend/editor-ui/src/stores/sso.test.ts | 2 +- .../frontend/editor-ui/src/stores/ui.test.ts | 2 +- .../editor-ui/src/stores/workflows.store.ts | 4 +- .../editor-ui/src/utils/nodeSettingsUtils.ts | 2 +- .../editor-ui/src/utils/sourceControlUtils.ts | 2 +- .../editor-ui/src/views/CredentialsView.vue | 2 +- .../views/Evaluations.ee/EvaluationsView.vue | 2 +- .../Evaluations.ee/TestRunDetailView.vue | 2 +- .../src/views/SamlOnboarding.test.ts | 2 +- .../src/views/SettingsExternalSecrets.test.ts | 2 +- .../src/views/SettingsUsersView.test.ts | 2 +- .../useCredentialSetupState.ts | 2 +- .../editor-ui/src/views/VariablesView.vue | 2 +- .../editor-ui/src/views/WorkflowsView.vue | 2 +- packages/frontend/editor-ui/vite.config.mts | 4 +- .../test/v2/node/base/getSchema.test.ts | 2 +- .../nodes/Airtable/test/v2/node/helpers.ts | 2 +- .../nodes/Airtop/test/node/helpers.ts | 2 +- .../nodes/CompareDatasets/GenericFunctions.ts | 2 +- .../nodes/Cron/test/Cron.node.test.ts | 2 +- .../nodes/Discord/v2/helpers/utils.ts | 2 +- .../nodes/EmailReadImap/v2/utils.ts | 2 +- .../ExecuteWorkflowTrigger.node.ts | 4 +- .../nodes/Freshservice/GenericFunctions.ts | 2 +- .../Google/Drive/test/v2/node/helpers.ts | 2 +- .../HttpRequest/shared/optimizeResponse.ts | 4 +- .../nodes/If/test/v2/IfV2.node.test.ts | 2 +- .../Entra/descriptions/GroupDescription.ts | 2 +- .../Entra/descriptions/UserDescription.ts | 2 +- .../Excel/test/v2/utils/utils.test.ts | 2 +- .../nodes/Postgres/test/v2/operations.test.ts | 2 +- .../nodes-base/nodes/Set/test/v2/raw.test.ts | 2 +- .../Supabase/tests/Supabase.node.test.ts | 2 +- .../nodes/Telegram/tests/Helpers.ts | 2 +- .../nodes/Transform/RemoveDuplicates/utils.ts | 4 +- packages/nodes-base/test/nodes/Helpers.ts | 2 +- packages/nodes-base/utils/utilities.ts | 7 +- .../GenericFunctions.ts | 4 +- packages/workflow/package.json | 5 +- .../workflow/src/errors/node-api.error.ts | 11 +- .../src/extensions/array-extensions.ts | 14 +- .../src/node-reference-parser-utils.ts | 5 +- packages/workflow/src/utils.ts | 2 +- pnpm-lock.yaml | 148 +++++++----------- pnpm-workspace.yaml | 2 +- 133 files changed, 237 insertions(+), 238 deletions(-) diff --git a/cypress/utils/executions.ts b/cypress/utils/executions.ts index 5ccbab5538..76f7b20bb7 100644 --- a/cypress/utils/executions.ts +++ b/cypress/utils/executions.ts @@ -1,5 +1,5 @@ import { stringify } from 'flatted'; -import { pick } from 'lodash'; +import pick from 'lodash/pick'; import type { IDataObject, IRunData, diff --git a/packages/@n8n/eslint-config/base.js b/packages/@n8n/eslint-config/base.js index 053094fb3a..69b46c1934 100644 --- a/packages/@n8n/eslint-config/base.js +++ b/packages/@n8n/eslint-config/base.js @@ -453,6 +453,7 @@ const config = (module.exports = { 'unicorn/no-useless-promise-resolve-reject': 'error', 'lodash/path-style': ['error', 'as-needed'], + 'lodash/import-scope': ['error', 'method'], }, overrides: [ diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V1/execute.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V1/execute.ts index a86f464f65..2cefa4ed4b 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V1/execute.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V1/execute.ts @@ -1,6 +1,6 @@ import { RunnableSequence } from '@langchain/core/runnables'; import { AgentExecutor, createToolCallingAgent } from 'langchain/agents'; -import { omit } from 'lodash'; +import omit from 'lodash/omit'; import { jsonParse, NodeOperationError } from 'n8n-workflow'; import type { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow'; diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V2/execute.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V2/execute.ts index 1fc5aeefa7..b0fe988d7d 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V2/execute.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/agents/ToolsAgent/V2/execute.ts @@ -1,7 +1,7 @@ import type { ChatPromptTemplate } from '@langchain/core/prompts'; import { RunnableSequence } from '@langchain/core/runnables'; import { AgentExecutor, createToolCallingAgent } from 'langchain/agents'; -import { omit } from 'lodash'; +import omit from 'lodash/omit'; import { jsonParse, NodeOperationError, sleep } from 'n8n-workflow'; import type { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow'; diff --git a/packages/@n8n/nodes-langchain/nodes/llms/N8nLlmTracing.ts b/packages/@n8n/nodes-langchain/nodes/llms/N8nLlmTracing.ts index 4ba3571f33..5be11a4c22 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/N8nLlmTracing.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/N8nLlmTracing.ts @@ -9,7 +9,7 @@ import type { import type { BaseMessage } from '@langchain/core/messages'; import type { LLMResult } from '@langchain/core/outputs'; import { encodingForModel } from '@langchain/core/utils/tiktoken'; -import { pick } from 'lodash'; +import pick from 'lodash/pick'; import type { IDataObject, ISupplyDataFunctions, JsonObject } from 'n8n-workflow'; import { NodeConnectionTypes, NodeError, NodeOperationError } from 'n8n-workflow'; diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts index 52e784bd28..8d95731b3c 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.ts @@ -1,6 +1,7 @@ import type { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager'; import { DynamicStructuredTool, DynamicTool } from '@langchain/core/tools'; -import { isArray, isObject } from 'lodash'; +import isArray from 'lodash/isArray'; +import isObject from 'lodash/isObject'; import type { SetField, SetNodeOptions } from 'n8n-nodes-base/dist/nodes/Set/v2/helpers/interfaces'; import * as manual from 'n8n-nodes-base/dist/nodes/Set/v2/manual.mode'; import { getCurrentWorkflowInputData } from 'n8n-nodes-base/dist/utils/workflowInputsResourceMapping/GenericFunctions'; diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts index f12f9b9764..948a6b714b 100644 --- a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts @@ -1,5 +1,5 @@ import type { BaseChatMemory } from '@langchain/community/memory/chat_memory'; -import { pick } from 'lodash'; +import pick from 'lodash/pick'; import { Node, NodeConnectionTypes } from 'n8n-workflow'; import type { IDataObject, diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/test/OpenAI.workflow.test.ts b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/test/OpenAI.workflow.test.ts index 0c8c22fe7d..569b4f9781 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/test/OpenAI.workflow.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/test/OpenAI.workflow.test.ts @@ -1,5 +1,5 @@ import { NodeTestHarness } from '@nodes-testing/node-test-harness'; -import { pick } from 'lodash'; +import pick from 'lodash/pick'; import type { WorkflowTestData } from 'n8n-workflow'; import path from 'node:path'; diff --git a/packages/@n8n/task-runner/src/js-task-runner/js-task-runner.ts b/packages/@n8n/task-runner/src/js-task-runner/js-task-runner.ts index ddf7ba07bf..03592dab50 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/js-task-runner.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/js-task-runner.ts @@ -1,4 +1,4 @@ -import { isObject } from 'lodash'; +import isObject from 'lodash/isObject'; import set from 'lodash/set'; import { DateTime, Duration, Interval } from 'luxon'; import { getAdditionalKeys } from 'n8n-core'; diff --git a/packages/cli/src/active-workflow-manager.ts b/packages/cli/src/active-workflow-manager.ts index e710c828c8..9c1d079815 100644 --- a/packages/cli/src/active-workflow-manager.ts +++ b/packages/cli/src/active-workflow-manager.ts @@ -5,7 +5,7 @@ import type { WorkflowEntity, IWorkflowDb } from '@n8n/db'; import { WorkflowRepository } from '@n8n/db'; import { OnLeaderStepdown, OnLeaderTakeover, OnShutdown } from '@n8n/decorators'; import { Service } from '@n8n/di'; -import { chunk } from 'lodash'; +import chunk from 'lodash/chunk'; import { ActiveWorkflows, ErrorReporter, diff --git a/packages/cli/src/concurrency/concurrency-control.service.ts b/packages/cli/src/concurrency/concurrency-control.service.ts index 73aaad2bd2..2939f83a02 100644 --- a/packages/cli/src/concurrency/concurrency-control.service.ts +++ b/packages/cli/src/concurrency/concurrency-control.service.ts @@ -1,7 +1,7 @@ import { Logger } from '@n8n/backend-common'; import { ExecutionRepository } from '@n8n/db'; import { Service } from '@n8n/di'; -import { capitalize } from 'lodash'; +import capitalize from 'lodash/capitalize'; import type { WorkflowExecuteMode as ExecutionMode } from 'n8n-workflow'; import config from '@/config'; diff --git a/packages/cli/src/push/index.ts b/packages/cli/src/push/index.ts index 4784d77a3f..671b579076 100644 --- a/packages/cli/src/push/index.ts +++ b/packages/cli/src/push/index.ts @@ -6,7 +6,7 @@ import { Container, Service } from '@n8n/di'; import type { Application } from 'express'; import { ServerResponse } from 'http'; import type { Server } from 'http'; -import { pick } from 'lodash'; +import pick from 'lodash/pick'; import { InstanceSettings } from 'n8n-core'; import { deepCopy } from 'n8n-workflow'; import { parse as parseUrl } from 'url'; diff --git a/packages/cli/src/server.ts b/packages/cli/src/server.ts index 1db05aca79..09064d7ce5 100644 --- a/packages/cli/src/server.ts +++ b/packages/cli/src/server.ts @@ -5,7 +5,7 @@ import cookieParser from 'cookie-parser'; import express from 'express'; import { access as fsAccess } from 'fs/promises'; import helmet from 'helmet'; -import { isEmpty } from 'lodash'; +import isEmpty from 'lodash/isEmpty'; import { InstanceSettings } from 'n8n-core'; import { jsonParse } from 'n8n-workflow'; import { resolve } from 'path'; diff --git a/packages/cli/src/task-runners/task-managers/__tests__/task-manager.test.ts b/packages/cli/src/task-runners/task-managers/__tests__/task-manager.test.ts index 226f491908..1b12ba7caf 100644 --- a/packages/cli/src/task-runners/task-managers/__tests__/task-manager.test.ts +++ b/packages/cli/src/task-runners/task-managers/__tests__/task-manager.test.ts @@ -1,5 +1,6 @@ import { mock } from 'jest-mock-extended'; -import { get, set } from 'lodash'; +import get from 'lodash/get'; +import set from 'lodash/set'; import type { NodeTypes } from '@/node-types'; import type { Task } from '@/task-runners/task-managers/task-requester'; diff --git a/packages/cli/src/user-management/email/node-mailer.ts b/packages/cli/src/user-management/email/node-mailer.ts index 16ab41546e..d15f42ff6e 100644 --- a/packages/cli/src/user-management/email/node-mailer.ts +++ b/packages/cli/src/user-management/email/node-mailer.ts @@ -1,7 +1,7 @@ import { Logger } from '@n8n/backend-common'; import { GlobalConfig } from '@n8n/config'; import { Service } from '@n8n/di'; -import { pick } from 'lodash'; +import pick from 'lodash/pick'; import { ErrorReporter } from 'n8n-core'; import path from 'node:path'; import type { Transporter } from 'nodemailer'; diff --git a/packages/core/nodes-testing/node-test-harness.ts b/packages/core/nodes-testing/node-test-harness.ts index 43100c2e7c..b2a5515ff8 100644 --- a/packages/core/nodes-testing/node-test-harness.ts +++ b/packages/core/nodes-testing/node-test-harness.ts @@ -3,7 +3,7 @@ import { Container } from '@n8n/di'; import callsites from 'callsites'; import glob from 'fast-glob'; import { mock } from 'jest-mock-extended'; -import { isEmpty } from 'lodash'; +import isEmpty from 'lodash/isEmpty'; import type { ICredentialDataDecryptedObject, IRun, diff --git a/packages/core/src/execution-engine/__tests__/routing-node.test.ts b/packages/core/src/execution-engine/__tests__/routing-node.test.ts index f2b7da53d8..55d6fe32b3 100644 --- a/packages/core/src/execution-engine/__tests__/routing-node.test.ts +++ b/packages/core/src/execution-engine/__tests__/routing-node.test.ts @@ -1,5 +1,5 @@ import { mock } from 'jest-mock-extended'; -import { get } from 'lodash'; +import get from 'lodash/get'; import type { DeclarativeRestApiSettings, IExecuteData, diff --git a/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts b/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts index 9f0daa01a4..3ab697aa3d 100644 --- a/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts +++ b/packages/core/src/execution-engine/__tests__/workflow-execute.test.ts @@ -15,7 +15,7 @@ process.env.N8N_RUNNERS_ENABLED = 'false'; // PD denotes that the node has pinned data import { mock } from 'jest-mock-extended'; -import { pick } from 'lodash'; +import pick from 'lodash/pick'; import type { ExecutionBaseError, IConnection, diff --git a/packages/core/src/execution-engine/node-execution-context/base-execute-context.ts b/packages/core/src/execution-engine/node-execution-context/base-execute-context.ts index d413fb4db2..c3d22faed3 100644 --- a/packages/core/src/execution-engine/node-execution-context/base-execute-context.ts +++ b/packages/core/src/execution-engine/node-execution-context/base-execute-context.ts @@ -1,5 +1,5 @@ import { Container } from '@n8n/di'; -import { get } from 'lodash'; +import get from 'lodash/get'; import type { Workflow, INode, diff --git a/packages/core/src/execution-engine/node-execution-context/load-options-context.ts b/packages/core/src/execution-engine/node-execution-context/load-options-context.ts index e39566edd3..ac0ab46f67 100644 --- a/packages/core/src/execution-engine/node-execution-context/load-options-context.ts +++ b/packages/core/src/execution-engine/node-execution-context/load-options-context.ts @@ -1,4 +1,4 @@ -import { get } from 'lodash'; +import get from 'lodash/get'; import type { ICredentialDataDecryptedObject, IGetNodeParameterOptions, diff --git a/packages/core/src/execution-engine/node-execution-context/local-load-options-context.ts b/packages/core/src/execution-engine/node-execution-context/local-load-options-context.ts index dd96ab5f74..caf90a7739 100644 --- a/packages/core/src/execution-engine/node-execution-context/local-load-options-context.ts +++ b/packages/core/src/execution-engine/node-execution-context/local-load-options-context.ts @@ -1,4 +1,4 @@ -import lodash from 'lodash'; +import get from 'lodash/get'; import { ApplicationError, Workflow } from 'n8n-workflow'; import type { INodeParameterResourceLocator, @@ -65,8 +65,6 @@ export class LocalLoadOptionsContext implements ILocalLoadOptionsFunctions { parameterPath = `${this.path.split('.').slice(1, -1).join('.')}.${parameterPath.slice(1)}`; } - const returnData = lodash.get(nodeParameters, parameterPath); - - return returnData; + return get(nodeParameters, parameterPath); } } diff --git a/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts b/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts index 328856e8b0..1c154d254a 100644 --- a/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts +++ b/packages/core/src/execution-engine/node-execution-context/node-execution-context.ts @@ -1,7 +1,7 @@ import { Logger } from '@n8n/backend-common'; import { Memoized } from '@n8n/decorators'; import { Container } from '@n8n/di'; -import { get } from 'lodash'; +import get from 'lodash/get'; import type { FunctionsBase, ICredentialDataDecryptedObject, diff --git a/packages/frontend/@n8n/chat/vite.config.mts b/packages/frontend/@n8n/chat/vite.config.mts index 38722cbea7..e009419f5e 100644 --- a/packages/frontend/@n8n/chat/vite.config.mts +++ b/packages/frontend/@n8n/chat/vite.config.mts @@ -23,7 +23,6 @@ export default mergeConfig( alias: { '@': srcPath, '@n8n/chat': srcPath, - lodash: 'lodash-es', }, }, define: { diff --git a/packages/frontend/@n8n/design-system/package.json b/packages/frontend/@n8n/design-system/package.json index 145c0087e1..38a0789570 100644 --- a/packages/frontend/@n8n/design-system/package.json +++ b/packages/frontend/@n8n/design-system/package.json @@ -26,6 +26,7 @@ "@testing-library/jest-dom": "catalog:frontend", "@testing-library/user-event": "catalog:frontend", "@testing-library/vue": "catalog:frontend", + "@types/lodash": "catalog:", "@types/markdown-it": "^13.0.9", "@types/markdown-it-emoji": "^2.0.2", "@types/markdown-it-link-attributes": "^3.0.5", @@ -52,6 +53,7 @@ "@tanstack/vue-table": "^8.21.2", "element-plus": "catalog:frontend", "is-emoji-supported": "^0.0.5", + "lodash": "catalog:", "markdown-it": "^13.0.2", "markdown-it-emoji": "^2.0.2", "markdown-it-link-attributes": "^4.0.1", diff --git a/packages/frontend/@n8n/design-system/src/components/N8nDataTableServer/N8nDataTableServer.vue b/packages/frontend/@n8n/design-system/src/components/N8nDataTableServer/N8nDataTableServer.vue index 2acc55ef7f..2d58c70185 100644 --- a/packages/frontend/@n8n/design-system/src/components/N8nDataTableServer/N8nDataTableServer.vue +++ b/packages/frontend/@n8n/design-system/src/components/N8nDataTableServer/N8nDataTableServer.vue @@ -33,7 +33,7 @@ import type { } from '@tanstack/vue-table'; import { createColumnHelper, FlexRender, getCoreRowModel, useVueTable } from '@tanstack/vue-table'; import { ElCheckbox } from 'element-plus'; -import { get } from 'lodash-es'; +import get from 'lodash/get'; import { computed, h, ref, shallowRef, useSlots, watch } from 'vue'; import N8nPagination from '../N8nPagination'; diff --git a/packages/frontend/@n8n/design-system/vite.config.mts b/packages/frontend/@n8n/design-system/vite.config.mts index 022a04cbf8..d05987b6a3 100644 --- a/packages/frontend/@n8n/design-system/vite.config.mts +++ b/packages/frontend/@n8n/design-system/vite.config.mts @@ -32,7 +32,6 @@ export default mergeConfig( '@n8n/design-system': resolve(__dirname, 'src'), '@n8n/composables(.*)': resolve(packagesDir, 'frontend', '@n8n', 'composables', 'src$1'), '@n8n/utils(.*)': resolve(packagesDir, '@n8n', 'utils', 'src$1'), - lodash: 'lodash-es', }, }, build: { diff --git a/packages/frontend/editor-ui/package.json b/packages/frontend/editor-ui/package.json index e382cb6d24..82bd6594b6 100644 --- a/packages/frontend/editor-ui/package.json +++ b/packages/frontend/editor-ui/package.json @@ -70,7 +70,7 @@ "highlight.js": "catalog:frontend", "humanize-duration": "^3.27.2", "jsonpath": "^1.1.1", - "lodash-es": "^4.17.21", + "lodash": "catalog:", "luxon": "catalog:", "n8n-workflow": "workspace:*", "pinia": "catalog:frontend", @@ -107,7 +107,7 @@ "@types/humanize-duration": "^3.27.1", "@types/json-schema": "^7.0.15", "@types/jsonpath": "^0.2.0", - "@types/lodash-es": "^4.17.6", + "@types/lodash": "catalog:", "@types/uuid": "catalog:", "@vitejs/plugin-legacy": "^6.0.2", "@vitejs/plugin-vue": "catalog:frontend", diff --git a/packages/frontend/editor-ui/src/__tests__/render.ts b/packages/frontend/editor-ui/src/__tests__/render.ts index c295a12cdc..8c42cf5529 100644 --- a/packages/frontend/editor-ui/src/__tests__/render.ts +++ b/packages/frontend/editor-ui/src/__tests__/render.ts @@ -8,7 +8,7 @@ import type { Pinia } from 'pinia'; import { PiniaVuePlugin } from 'pinia'; import type { Telemetry } from '@/plugins/telemetry'; import vueJsonPretty from 'vue-json-pretty'; -import { merge } from 'lodash-es'; +import merge from 'lodash/merge'; import type { TestingPinia } from '@pinia/testing'; export type RenderComponent = Parameters[0]; diff --git a/packages/frontend/editor-ui/src/components/AssignmentCollection/Assignment.test.ts b/packages/frontend/editor-ui/src/components/AssignmentCollection/Assignment.test.ts index 5ebe92d8fb..6290aaad37 100644 --- a/packages/frontend/editor-ui/src/components/AssignmentCollection/Assignment.test.ts +++ b/packages/frontend/editor-ui/src/components/AssignmentCollection/Assignment.test.ts @@ -4,7 +4,7 @@ import userEvent from '@testing-library/user-event'; import Assignment from './Assignment.vue'; import { defaultSettings } from '@/__tests__/defaults'; import { STORES } from '@n8n/stores'; -import { merge } from 'lodash-es'; +import merge from 'lodash/merge'; import { cleanupAppModals, createAppModals } from '@/__tests__/utils'; const DEFAULT_SETUP = { diff --git a/packages/frontend/editor-ui/src/components/AssignmentCollection/utils.ts b/packages/frontend/editor-ui/src/components/AssignmentCollection/utils.ts index ef6cdd3b94..6bd2504a3e 100644 --- a/packages/frontend/editor-ui/src/components/AssignmentCollection/utils.ts +++ b/packages/frontend/editor-ui/src/components/AssignmentCollection/utils.ts @@ -1,4 +1,4 @@ -import { isObject } from 'lodash-es'; +import isObject from 'lodash/isObject'; import type { AssignmentValue, IDataObject } from 'n8n-workflow'; import { resolveParameter } from '@/composables/useWorkflowHelpers'; import { v4 as uuid } from 'uuid'; diff --git a/packages/frontend/editor-ui/src/components/BannersStack.test.ts b/packages/frontend/editor-ui/src/components/BannersStack.test.ts index 0de42f5dcc..26744843f4 100644 --- a/packages/frontend/editor-ui/src/components/BannersStack.test.ts +++ b/packages/frontend/editor-ui/src/components/BannersStack.test.ts @@ -1,4 +1,4 @@ -import { merge } from 'lodash-es'; +import merge from 'lodash/merge'; import userEvent from '@testing-library/user-event'; import { SETTINGS_STORE_DEFAULT_STATE } from '@/__tests__/utils'; diff --git a/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsOverviewRow.vue b/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsOverviewRow.vue index eaa9ed104c..3b2e903c66 100644 --- a/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsOverviewRow.vue +++ b/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsOverviewRow.vue @@ -2,7 +2,7 @@ import { computed, nextTick, useTemplateRef, watch } from 'vue'; import { N8nButton, N8nIcon, N8nIconButton, N8nText } from '@n8n/design-system'; import { useNodeTypesStore } from '@/stores/nodeTypes.store'; -import { upperFirst } from 'lodash-es'; +import upperFirst from 'lodash/upperFirst'; import { useI18n } from '@n8n/i18n'; import LogsViewConsumedTokenCountText from '@/components/CanvasChat/future/components/LogsViewConsumedTokenCountText.vue'; import { I18nT } from 'vue-i18n'; diff --git a/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsViewExecutionSummary.vue b/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsViewExecutionSummary.vue index 703b96e121..de269aeccb 100644 --- a/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsViewExecutionSummary.vue +++ b/packages/frontend/editor-ui/src/components/CanvasChat/future/components/LogsViewExecutionSummary.vue @@ -4,7 +4,7 @@ import { useI18n } from '@n8n/i18n'; import { type LlmTokenUsageData } from '@/Interface'; import { N8nText } from '@n8n/design-system'; import { useTimestamp } from '@vueuse/core'; -import { upperFirst } from 'lodash-es'; +import upperFirst from 'lodash/upperFirst'; import { type ExecutionStatus } from 'n8n-workflow'; import { computed } from 'vue'; diff --git a/packages/frontend/editor-ui/src/components/CanvasChat/utils.ts b/packages/frontend/editor-ui/src/components/CanvasChat/utils.ts index 5bf8e9cb5c..61ecca3925 100644 --- a/packages/frontend/editor-ui/src/components/CanvasChat/utils.ts +++ b/packages/frontend/editor-ui/src/components/CanvasChat/utils.ts @@ -1,7 +1,8 @@ import { CHAT_TRIGGER_NODE_TYPE, MANUAL_CHAT_TRIGGER_NODE_TYPE } from '@/constants'; import { type IExecutionResponse, type INodeUi, type IWorkflowDb } from '@/Interface'; import { type ChatMessage } from '@n8n/chat/types'; -import { get, isEmpty } from 'lodash-es'; +import get from 'lodash/get'; +import isEmpty from 'lodash/isEmpty'; import { NodeConnectionTypes, type IDataObject, type IRunExecutionData } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; diff --git a/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue b/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue index c0844d9aeb..d0eecee057 100644 --- a/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue +++ b/packages/frontend/editor-ui/src/components/CodeNodeEditor/AskAI/AskAI.vue @@ -1,6 +1,6 @@