diff --git a/.github/workflows/e2e-tests-pr.yml b/.github/workflows/e2e-tests-pr.yml index 0b92e187bd..1d9ead6db8 100644 --- a/.github/workflows/e2e-tests-pr.yml +++ b/.github/workflows/e2e-tests-pr.yml @@ -47,5 +47,5 @@ jobs: run: exit 0 - name: Fail job if run-e2e-tests failed - if: ${{ github.event.review.state != 'approved' || needs.run-e2e-tests.result == 'failure' }} + if: ${{ (github.event.review.state != 'approved' && github.event.review.state != 'commented') || needs.run-e2e-tests.result == 'failure' }} run: exit 1 diff --git a/cypress/e2e/5-ndv.cy.ts b/cypress/e2e/5-ndv.cy.ts index a375330cf7..93198a2391 100644 --- a/cypress/e2e/5-ndv.cy.ts +++ b/cypress/e2e/5-ndv.cy.ts @@ -50,7 +50,7 @@ describe('NDV', () => { workflowPage.getters.canvasNodes().last().dblclick(); ndv.getters.inputSelect().click(); ndv.getters.inputOption().last().click(); - ndv.getters.inputDataContainer().find('[class*=schema_]').should('exist') + ndv.getters.inputDataContainer().find('[class*=schema_]').should('exist'); ndv.getters.inputDataContainer().should('contain', 'start'); }); @@ -96,10 +96,20 @@ describe('NDV', () => { ndv.getters.container().should('be.visible'); workflowPage.actions.saveWorkflowUsingKeyboardShortcut(); workflowPage.getters.isWorkflowSaved(); - }) + }); describe('test output schema view', () => { - const schemaKeys = ['id', 'name', 'email', 'notes', 'country', 'created', 'objectValue', 'prop1', 'prop2']; + const schemaKeys = [ + 'id', + 'name', + 'email', + 'notes', + 'country', + 'created', + 'objectValue', + 'prop1', + 'prop2', + ]; function setupSchemaWorkflow() { cy.createFixtureWorkflow('Test_workflow_schema_test.json', `NDV test schema view ${uuid()}`); workflowPage.actions.zoomToFit(); @@ -108,41 +118,62 @@ describe('NDV', () => { } it('should switch to output schema view and validate it', () => { - setupSchemaWorkflow() + setupSchemaWorkflow(); ndv.getters.outputDisplayMode().children().should('have.length', 3); ndv.getters.outputDisplayMode().find('[class*=active]').should('contain', 'Table'); ndv.getters.outputDisplayMode().contains('Schema').click(); ndv.getters.outputDisplayMode().find('[class*=active]').should('contain', 'Schema'); schemaKeys.forEach((key) => { - ndv.getters.outputPanel().find('[data-test-id=run-data-schema-item]').contains(key).should('exist'); + ndv.getters + .outputPanel() + .find('[data-test-id=run-data-schema-item]') + .contains(key) + .should('exist'); }); }); it('should preserve schema view after execution', () => { - setupSchemaWorkflow() + setupSchemaWorkflow(); ndv.getters.outputDisplayMode().contains('Schema').click(); ndv.actions.execute(); ndv.getters.outputDisplayMode().find('[class*=active]').should('contain', 'Schema'); - }) + }); it('should collapse and expand nested schema object', () => { - setupSchemaWorkflow() - const expandedObjectProps = ['prop1', 'prop2'];; - const getObjectValueItem = () => ndv.getters.outputPanel().find('[data-test-id=run-data-schema-item]').filter(':contains("objectValue")'); + setupSchemaWorkflow(); + const expandedObjectProps = ['prop1', 'prop2']; + const getObjectValueItem = () => + ndv.getters + .outputPanel() + .find('[data-test-id=run-data-schema-item]') + .filter(':contains("objectValue")'); ndv.getters.outputDisplayMode().contains('Schema').click(); expandedObjectProps.forEach((key) => { - ndv.getters.outputPanel().find('[data-test-id=run-data-schema-item]').contains(key).should('be.visible'); + ndv.getters + .outputPanel() + .find('[data-test-id=run-data-schema-item]') + .contains(key) + .should('be.visible'); }); getObjectValueItem().find('label').click(); expandedObjectProps.forEach((key) => { - ndv.getters.outputPanel().find('[data-test-id=run-data-schema-item]').contains(key).should('not.be.visible'); + ndv.getters + .outputPanel() + .find('[data-test-id=run-data-schema-item]') + .contains(key) + .should('not.be.visible'); }); - }) + }); it('should not display pagination for schema', () => { - setupSchemaWorkflow() + setupSchemaWorkflow(); ndv.getters.backToCanvas().click(); workflowPage.getters.canvasNodeByName('Set').click(); - workflowPage.actions.addNodeToCanvas('Customer Datastore (n8n training)', true, true, 'Get All People'); + workflowPage.actions.addNodeToCanvas( + 'Customer Datastore (n8n training)', + true, + true, + 'Get All People', + ); ndv.actions.execute(); ndv.getters.outputPanel().contains('25 items').should('exist'); ndv.getters.outputPanel().find('[class*=_pagination]').should('exist'); @@ -150,9 +181,12 @@ describe('NDV', () => { ndv.getters.outputPanel().find('[class*=_pagination]').should('not.exist'); ndv.getters.outputDisplayMode().contains('JSON').click(); ndv.getters.outputPanel().find('[class*=_pagination]').should('exist'); - }) + }); it('should display large schema', () => { - cy.createFixtureWorkflow('Test_workflow_schema_test_pinned_data.json', `NDV test schema view ${uuid()}`); + cy.createFixtureWorkflow( + 'Test_workflow_schema_test_pinned_data.json', + `NDV test schema view ${uuid()}`, + ); workflowPage.actions.zoomToFit(); workflowPage.actions.openNode('Set'); @@ -160,8 +194,11 @@ describe('NDV', () => { ndv.getters.outputPanel().find('[class*=_pagination]').should('exist'); ndv.getters.outputDisplayMode().contains('Schema').click(); ndv.getters.outputPanel().find('[class*=_pagination]').should('not.exist'); - ndv.getters.outputPanel().find('[data-test-id=run-data-schema-item] [data-test-id=run-data-schema-item]').should('have.length', 20); - }) + ndv.getters + .outputPanel() + .find('[data-test-id=run-data-schema-item] [data-test-id=run-data-schema-item]') + .should('have.length', 20); + }); }); it('can link and unlink run selectors between input and output', () => { @@ -170,11 +207,13 @@ describe('NDV', () => { workflowPage.actions.executeWorkflow(); workflowPage.actions.openNode('Set3'); - ndv.getters.inputRunSelector() + ndv.getters + .inputRunSelector() .should('exist') .find('input') .should('include.value', '2 of 2 (6 items)'); - ndv.getters.outputRunSelector() + ndv.getters + .outputRunSelector() .should('exist') .find('input') .should('include.value', '2 of 2 (6 items)'); @@ -183,23 +222,20 @@ describe('NDV', () => { ndv.actions.switchOutputMode('Table'); ndv.actions.changeOutputRunSelector('1 of 2 (6 items)'); - ndv.getters.inputRunSelector() - .find('input') - .should('include.value', '1 of 2 (6 items)'); + ndv.getters.inputRunSelector().find('input').should('include.value', '1 of 2 (6 items)'); ndv.getters.inputTbodyCell(1, 0).should('have.text', '1111'); ndv.getters.outputTbodyCell(1, 0).should('have.text', '1111'); ndv.getters.inputTbodyCell(1, 0).click(); // remove tooltip ndv.actions.changeInputRunSelector('2 of 2 (6 items)'); - ndv.getters.outputRunSelector() - .find('input') - .should('include.value', '2 of 2 (6 items)'); + ndv.getters.outputRunSelector().find('input').should('include.value', '2 of 2 (6 items)'); // unlink ndv.actions.toggleOutputRunLinking(); ndv.getters.inputTbodyCell(1, 0).click(); // remove tooltip ndv.actions.changeOutputRunSelector('1 of 2 (6 items)'); - ndv.getters.inputRunSelector() + ndv.getters + .inputRunSelector() .should('exist') .find('input') .should('include.value', '2 of 2 (6 items)'); @@ -207,24 +243,18 @@ describe('NDV', () => { // link again ndv.actions.toggleOutputRunLinking(); ndv.getters.inputTbodyCell(1, 0).click(); // remove tooltip - ndv.getters.inputRunSelector() - .find('input') - .should('include.value', '1 of 2 (6 items)'); - + ndv.getters.inputRunSelector().find('input').should('include.value', '1 of 2 (6 items)'); + // unlink again ndv.actions.toggleInputRunLinking(); ndv.getters.inputTbodyCell(1, 0).click(); // remove tooltip ndv.actions.changeInputRunSelector('2 of 2 (6 items)'); - ndv.getters.outputRunSelector() - .find('input') - .should('include.value', '1 of 2 (6 items)'); + ndv.getters.outputRunSelector().find('input').should('include.value', '1 of 2 (6 items)'); // link again ndv.actions.toggleInputRunLinking(); ndv.getters.inputTbodyCell(1, 0).click(); // remove tooltip - ndv.getters.outputRunSelector() - .find('input') - .should('include.value', '2 of 2 (6 items)'); + ndv.getters.outputRunSelector().find('input').should('include.value', '2 of 2 (6 items)'); }); it('should display parameter hints correctly', () => { @@ -247,21 +277,19 @@ describe('NDV', () => { input: ' test', }, { - input: ' ' + input: ' ', }, { - input: '
' + input: '', }, ].forEach(({ input, output }) => { + if (input) { + ndv.actions.typeIntoParameterInput('value', input); + } + ndv.getters.parameterInput('name').click(); // remove focus from input, hide expression preview - - if (input) { - ndv.actions.typeIntoParameterInput('value', input); - } - ndv.getters.parameterInput('name').click(); // remove focus from input, hide expression preview - - ndv.actions.validateExpressionPreview('value', output || input); - ndv.getters.parameterInput('value').clear(); - }); + ndv.actions.validateExpressionPreview('value', output || input); + ndv.getters.parameterInput('value').clear(); + }); }); }); diff --git a/packages/cli/package.json b/packages/cli/package.json index a64f9a6747..1eb626456d 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -77,22 +77,7 @@ "@types/json-diff": "^0.5.1", "@types/jsonwebtoken": "^9.0.1", "@types/localtunnel": "^1.9.0", - "@types/lodash.debounce": "^4.0.7", - "@types/lodash.difference": "^4", - "@types/lodash.get": "^4.4.6", - "@types/lodash.intersection": "^4.4.7", - "@types/lodash.iteratee": "^4.7.7", - "@types/lodash.merge": "^4.6.6", - "@types/lodash.omit": "^4.5.7", - "@types/lodash.pick": "^4.4.7", - "@types/lodash.remove": "^4.7.7", - "@types/lodash.set": "^4.3.6", - "@types/lodash.split": "^4.4.7", - "@types/lodash.unionby": "^4.8.7", - "@types/lodash.uniq": "^4.5.7", - "@types/lodash.uniqby": "^4.7.7", - "@types/lodash.unset": "^4.5.7", - "@types/lodash.without": "^4.4.7", + "@types/lodash": "^4.14.195", "@types/parseurl": "^1.3.1", "@types/passport-jwt": "^3.0.6", "@types/psl": "^1.1.0", @@ -109,7 +94,6 @@ "@types/yamljs": "^0.2.31", "chokidar": "^3.5.2", "concurrently": "^5.1.0", - "lodash.debounce": "^4.0.8", "mock-jwks": "^1.0.9", "nodemon": "^2.0.2", "run-script-os": "^1.0.7", @@ -161,21 +145,7 @@ "jwks-rsa": "^3.0.1", "ldapts": "^4.2.6", "localtunnel": "^2.0.0", - "lodash.difference": "^4", - "lodash.get": "^4.4.2", - "lodash.intersection": "^4.4.0", - "lodash.iteratee": "^4.7.0", - "lodash.merge": "^4.6.2", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "lodash.remove": "^4.7.0", - "lodash.set": "^4.3.2", - "lodash.split": "^4.4.2", - "lodash.unionby": "^4.8.0", - "lodash.uniq": "^4.5.0", - "lodash.uniqby": "^4.7.0", - "lodash.unset": "^4.5.2", - "lodash.without": "^4.4.0", + "lodash": "^4.17.21", "luxon": "^3.3.0", "mysql2": "~2.3.3", "n8n-core": "workspace:*", diff --git a/packages/cli/src/CredentialsHelper.ts b/packages/cli/src/CredentialsHelper.ts index 5b20ff91b2..03cbf74b68 100644 --- a/packages/cli/src/CredentialsHelper.ts +++ b/packages/cli/src/CredentialsHelper.ts @@ -7,7 +7,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ import { Credentials, NodeExecuteFunctions } from 'n8n-core'; -import get from 'lodash.get'; +import get from 'lodash/get'; import type { ICredentialDataDecryptedObject, diff --git a/packages/cli/src/CurlConverterHelper.ts b/packages/cli/src/CurlConverterHelper.ts index 06da059030..04ee444f25 100644 --- a/packages/cli/src/CurlConverterHelper.ts +++ b/packages/cli/src/CurlConverterHelper.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import curlconverter from 'curlconverter'; -import get from 'lodash.get'; +import get from 'lodash/get'; import type { IDataObject } from 'n8n-workflow'; import { jsonParse } from 'n8n-workflow'; diff --git a/packages/cli/src/LoadNodesAndCredentials.ts b/packages/cli/src/LoadNodesAndCredentials.ts index 47623076c4..d62dc464d7 100644 --- a/packages/cli/src/LoadNodesAndCredentials.ts +++ b/packages/cli/src/LoadNodesAndCredentials.ts @@ -1,4 +1,4 @@ -import uniq from 'lodash.uniq'; +import uniq from 'lodash/uniq'; import glob from 'fast-glob'; import type { DirectoryLoader, Types } from 'n8n-core'; import { diff --git a/packages/cli/src/PublicApi/v1/handlers/workflows/workflows.service.ts b/packages/cli/src/PublicApi/v1/handlers/workflows/workflows.service.ts index 8ed5031628..cc55ba547b 100644 --- a/packages/cli/src/PublicApi/v1/handlers/workflows/workflows.service.ts +++ b/packages/cli/src/PublicApi/v1/handlers/workflows/workflows.service.ts @@ -1,6 +1,6 @@ import type { FindManyOptions, UpdateResult } from 'typeorm'; import { In } from 'typeorm'; -import intersection from 'lodash.intersection'; +import intersection from 'lodash/intersection'; import type { INode } from 'n8n-workflow'; import { v4 as uuid } from 'uuid'; diff --git a/packages/cli/src/ReloadNodesAndCredentials.ts b/packages/cli/src/ReloadNodesAndCredentials.ts index 9abc08c7f4..8bb28f450b 100644 --- a/packages/cli/src/ReloadNodesAndCredentials.ts +++ b/packages/cli/src/ReloadNodesAndCredentials.ts @@ -11,7 +11,7 @@ export const reloadNodesAndCredentials = async ( push: Push, ) => { // eslint-disable-next-line import/no-extraneous-dependencies - const { default: debounce } = await import('lodash.debounce'); + const { default: debounce } = await import('lodash/debounce'); // eslint-disable-next-line import/no-extraneous-dependencies const { watch } = await import('chokidar'); diff --git a/packages/cli/src/WebhookHelpers.ts b/packages/cli/src/WebhookHelpers.ts index 4ac4dbd1fa..eac808d678 100644 --- a/packages/cli/src/WebhookHelpers.ts +++ b/packages/cli/src/WebhookHelpers.ts @@ -14,7 +14,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable prefer-destructuring */ import type express from 'express'; -import get from 'lodash.get'; +import get from 'lodash/get'; import stream from 'stream'; import { promisify } from 'util'; @@ -426,7 +426,7 @@ export async function executeWebhook( const binaryData = (response.body as IDataObject)?.binaryData as IBinaryData; if (binaryData?.id) { res.header(response.headers); - const stream = NodeExecuteFunctions.getBinaryStream(binaryData.id); + const stream = BinaryDataManager.getInstance().getBinaryStream(binaryData.id); void pipeline(stream, res).then(() => responseCallback(null, { noWebhookResponse: true }), ); @@ -643,10 +643,12 @@ export async function executeWebhook( if (!didSendResponse) { // Send the webhook response manually res.setHeader('Content-Type', binaryData.mimeType); - const binaryDataBuffer = await BinaryDataManager.getInstance().retrieveBinaryData( - binaryData, - ); - res.end(binaryDataBuffer); + if (binaryData.id) { + const stream = BinaryDataManager.getInstance().getBinaryStream(binaryData.id); + await pipeline(stream, res); + } else { + res.end(Buffer.from(binaryData.data, BINARY_ENCODING)); + } responseCallback(null, { noWebhookResponse: true, diff --git a/packages/cli/src/WorkflowExecuteAdditionalData.ts b/packages/cli/src/WorkflowExecuteAdditionalData.ts index cdfd6cb657..ca3c2acb1a 100644 --- a/packages/cli/src/WorkflowExecuteAdditionalData.ts +++ b/packages/cli/src/WorkflowExecuteAdditionalData.ts @@ -42,7 +42,7 @@ import { WorkflowHooks, } from 'n8n-workflow'; -import pick from 'lodash.pick'; +import pick from 'lodash/pick'; import type { FindOptionsWhere } from 'typeorm'; import { LessThanOrEqual, In } from 'typeorm'; import { DateUtils } from 'typeorm/util/DateUtils'; diff --git a/packages/cli/src/WorkflowHelpers.ts b/packages/cli/src/WorkflowHelpers.ts index c6a40455fe..abdc2b011e 100644 --- a/packages/cli/src/WorkflowHelpers.ts +++ b/packages/cli/src/WorkflowHelpers.ts @@ -31,7 +31,7 @@ import config from '@/config'; import type { WorkflowEntity } from '@db/entities/WorkflowEntity'; import type { User } from '@db/entities/User'; import { RoleRepository } from '@db/repositories'; -import omit from 'lodash.omit'; +import omit from 'lodash/omit'; import { PermissionChecker } from './UserManagement/PermissionChecker'; import { isWorkflowIdValid } from './utils'; import { UserService } from './user/user.service'; diff --git a/packages/cli/src/commands/executeBatch.ts b/packages/cli/src/commands/executeBatch.ts index 413a4894da..a71f9d2d2e 100644 --- a/packages/cli/src/commands/executeBatch.ts +++ b/packages/cli/src/commands/executeBatch.ts @@ -6,7 +6,7 @@ import type { ITaskData } from 'n8n-workflow'; import { sleep } from 'n8n-workflow'; import { sep } from 'path'; import { diff } from 'json-diff'; -import pick from 'lodash.pick'; +import pick from 'lodash/pick'; import { ActiveExecutions } from '@/ActiveExecutions'; import * as Db from '@/Db'; diff --git a/packages/cli/src/controllers/ldap.controller.ts b/packages/cli/src/controllers/ldap.controller.ts index b354ef6600..25c19d5d21 100644 --- a/packages/cli/src/controllers/ldap.controller.ts +++ b/packages/cli/src/controllers/ldap.controller.ts @@ -1,4 +1,4 @@ -import pick from 'lodash.pick'; +import pick from 'lodash/pick'; import { Authorized, Get, Post, Put, RestController } from '@/decorators'; import { getLdapConfig, getLdapSynchronizations, updateLdapConfig } from '@/Ldap/helpers'; import { LdapService } from '@/Ldap/LdapService.ee'; diff --git a/packages/cli/src/controllers/nodeTypes.controller.ts b/packages/cli/src/controllers/nodeTypes.controller.ts index 63002c7c12..49dec0b674 100644 --- a/packages/cli/src/controllers/nodeTypes.controller.ts +++ b/packages/cli/src/controllers/nodeTypes.controller.ts @@ -1,5 +1,5 @@ import { readFile } from 'fs/promises'; -import get from 'lodash.get'; +import get from 'lodash/get'; import { Request } from 'express'; import type { INodeTypeDescription, INodeTypeNameVersion } from 'n8n-workflow'; import { Authorized, Post, RestController } from '@/decorators'; diff --git a/packages/cli/src/controllers/passwordReset.controller.ts b/packages/cli/src/controllers/passwordReset.controller.ts index f316fe2da9..aaaf72896d 100644 --- a/packages/cli/src/controllers/passwordReset.controller.ts +++ b/packages/cli/src/controllers/passwordReset.controller.ts @@ -131,14 +131,14 @@ export class PasswordResetController { const baseUrl = getInstanceBaseUrl(); const { id, firstName, lastName } = user; - const url = UserService.generatePasswordResetUrl(user); + const url = await UserService.generatePasswordResetUrl(user); try { await this.mailer.passwordReset({ email, firstName, lastName, - passwordResetUrl: url.toString(), + passwordResetUrl: url, domain: baseUrl, }); } catch (error) { diff --git a/packages/cli/src/credentials/oauth2Credential.api.ts b/packages/cli/src/credentials/oauth2Credential.api.ts index b394dfefb5..f0e74b53fe 100644 --- a/packages/cli/src/credentials/oauth2Credential.api.ts +++ b/packages/cli/src/credentials/oauth2Credential.api.ts @@ -2,11 +2,11 @@ import type { ClientOAuth2Options } from '@n8n/client-oauth2'; import { ClientOAuth2 } from '@n8n/client-oauth2'; import Csrf from 'csrf'; import express from 'express'; -import get from 'lodash.get'; -import omit from 'lodash.omit'; -import set from 'lodash.set'; -import split from 'lodash.split'; -import unset from 'lodash.unset'; +import get from 'lodash/get'; +import omit from 'lodash/omit'; +import set from 'lodash/set'; +import split from 'lodash/split'; +import unset from 'lodash/unset'; import { Credentials, UserSettings } from 'n8n-core'; import type { WorkflowExecuteMode, diff --git a/packages/cli/src/environments/versionControl/versionControlExport.service.ee.ts b/packages/cli/src/environments/versionControl/versionControlExport.service.ee.ts index 413c4009e6..37544035f7 100644 --- a/packages/cli/src/environments/versionControl/versionControlExport.service.ee.ts +++ b/packages/cli/src/environments/versionControl/versionControlExport.service.ee.ts @@ -29,7 +29,7 @@ import { WorkflowEntity } from '@/databases/entities/WorkflowEntity'; import { WorkflowTagMapping } from '@/databases/entities/WorkflowTagMapping'; import { TagEntity } from '@/databases/entities/TagEntity'; import { ActiveWorkflowRunner } from '../../ActiveWorkflowRunner'; -import without from 'lodash.without'; +import without from 'lodash/without'; import type { VersionControllPullOptions } from './types/versionControlPullWorkFolder'; import { versionControlFoldersExistCheck } from './versionControlHelper.ee'; import { In } from 'typeorm'; diff --git a/packages/cli/src/eventbus/MessageEventBus/MessageEventBus.ts b/packages/cli/src/eventbus/MessageEventBus/MessageEventBus.ts index 5d63f57b26..ea476fea38 100644 --- a/packages/cli/src/eventbus/MessageEventBus/MessageEventBus.ts +++ b/packages/cli/src/eventbus/MessageEventBus/MessageEventBus.ts @@ -15,7 +15,7 @@ import { messageEventBusDestinationFromDb, incrementPrometheusMetric, } from '../MessageEventBusDestination/Helpers.ee'; -import uniqby from 'lodash.uniqby'; +import uniqby from 'lodash/uniqBy'; import type { EventMessageConfirmSource } from '../EventMessageClasses/EventMessageConfirm'; import type { EventMessageAuditOptions } from '../EventMessageClasses/EventMessageAudit'; import { EventMessageAudit } from '../EventMessageClasses/EventMessageAudit'; diff --git a/packages/cli/src/eventbus/MessageEventBusWriter/MessageEventBusLogWriter.ts b/packages/cli/src/eventbus/MessageEventBusWriter/MessageEventBusLogWriter.ts index 87293f6149..efc0de1e21 100644 --- a/packages/cli/src/eventbus/MessageEventBusWriter/MessageEventBusLogWriter.ts +++ b/packages/cli/src/eventbus/MessageEventBusWriter/MessageEventBusLogWriter.ts @@ -7,7 +7,7 @@ import { Worker } from 'worker_threads'; import { createReadStream, existsSync, rmSync } from 'fs'; import readline from 'readline'; import { jsonParse, LoggerProxy } from 'n8n-workflow'; -import remove from 'lodash.remove'; +import remove from 'lodash/remove'; import config from '@/config'; import { getEventMessageObjectByType } from '../EventMessageClasses/Helpers'; import type { EventMessageReturnMode } from '../MessageEventBus/MessageEventBus'; diff --git a/packages/cli/src/workflows/workflows.services.ts b/packages/cli/src/workflows/workflows.services.ts index 747cede32c..74d31f1a64 100644 --- a/packages/cli/src/workflows/workflows.services.ts +++ b/packages/cli/src/workflows/workflows.services.ts @@ -4,7 +4,7 @@ import type { INode, IPinData, JsonObject } from 'n8n-workflow'; import { NodeApiError, jsonParse, LoggerProxy, Workflow } from 'n8n-workflow'; import type { FindOptionsSelect, FindOptionsWhere, UpdateResult } from 'typeorm'; import { In } from 'typeorm'; -import pick from 'lodash.pick'; +import pick from 'lodash/pick'; import { v4 as uuid } from 'uuid'; import { ActiveWorkflowRunner } from '@/ActiveWorkflowRunner'; import * as Db from '@/Db'; diff --git a/packages/cli/test/integration/shared/utils.ts b/packages/cli/test/integration/shared/utils.ts index 19ccee37d4..359b46b2f1 100644 --- a/packages/cli/test/integration/shared/utils.ts +++ b/packages/cli/test/integration/shared/utils.ts @@ -5,7 +5,7 @@ import { existsSync } from 'fs'; import bodyParser from 'body-parser'; import { CronJob } from 'cron'; import express from 'express'; -import set from 'lodash.set'; +import set from 'lodash/set'; import { BinaryDataManager, UserSettings } from 'n8n-core'; import type { ICredentialType, diff --git a/packages/core/package.json b/packages/core/package.json index 60e865a21b..99571fcfd9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,8 +38,7 @@ "@types/cron": "~1.7.1", "@types/crypto-js": "^4.0.1", "@types/express": "^4.17.6", - "@types/lodash.get": "^4.4.6", - "@types/lodash.pick": "^4.4.7", + "@types/lodash": "^4.14.195", "@types/mime-types": "^2.1.0", "@types/request-promise-native": "~1.0.15", "@types/uuid": "^8.3.2" @@ -54,8 +53,7 @@ "file-type": "^16.5.4", "flatted": "^3.2.4", "form-data": "^4.0.0", - "lodash.get": "^4.4.2", - "lodash.pick": "^4.4.0", + "lodash": "^4.17.21", "mime-types": "^2.1.27", "n8n-workflow": "workspace:*", "oauth-1.0a": "^2.2.6", diff --git a/packages/core/src/BinaryDataManager/index.ts b/packages/core/src/BinaryDataManager/index.ts index bed5a08b10..54ab8bc110 100644 --- a/packages/core/src/BinaryDataManager/index.ts +++ b/packages/core/src/BinaryDataManager/index.ts @@ -121,7 +121,7 @@ export class BinaryDataManager { throw new Error('Storage mode used to store binary data not available'); } - async retrieveBinaryData(binaryData: IBinaryData): Promise