feat(core): Lazy-load nodes and credentials to reduce baseline memory usage (#4577)
This commit is contained in:
committed by
GitHub
parent
f63cd3b89e
commit
b6c57e19fc
@@ -7,8 +7,7 @@
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
||||
|
||||
import { Credentials, NodeExecuteFunctions } from 'n8n-core';
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||
import { get } from 'lodash';
|
||||
import get from 'lodash.get';
|
||||
|
||||
import {
|
||||
ICredentialDataDecryptedObject,
|
||||
@@ -25,8 +24,6 @@ import {
|
||||
INodeParameters,
|
||||
INodeProperties,
|
||||
INodeType,
|
||||
INodeTypeData,
|
||||
INodeTypes,
|
||||
IVersionedNodeType,
|
||||
VersionedNodeType,
|
||||
IRequestOptionsSimplified,
|
||||
@@ -40,6 +37,8 @@ import {
|
||||
LoggerProxy as Logger,
|
||||
ErrorReporterProxy as ErrorReporter,
|
||||
IHttpRequestHelper,
|
||||
INodeTypeData,
|
||||
INodeTypes,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
import * as Db from '@/Db';
|
||||
@@ -52,19 +51,16 @@ import { CredentialsOverwrites } from '@/CredentialsOverwrites';
|
||||
import { CredentialTypes } from '@/CredentialTypes';
|
||||
import { whereClause } from './UserManagement/UserManagementHelper';
|
||||
|
||||
const mockNodesData: INodeTypeData = {};
|
||||
const mockNodeTypes: INodeTypes = {
|
||||
nodeTypes: {} as INodeTypeData,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
init: async (nodeTypes?: INodeTypeData): Promise<void> => {},
|
||||
getAll(): Array<INodeType | IVersionedNodeType> {
|
||||
// @ts-ignore
|
||||
return Object.values(this.nodeTypes).map((data) => data.type);
|
||||
return Object.values(mockNodesData).map((data) => data.type);
|
||||
},
|
||||
getByNameAndVersion(nodeType: string, version?: number): INodeType | undefined {
|
||||
if (this.nodeTypes[nodeType] === undefined) {
|
||||
if (mockNodesData[nodeType] === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
return NodeHelpers.getVersionedNodeType(this.nodeTypes[nodeType].type, version);
|
||||
return NodeHelpers.getVersionedNodeType(mockNodesData[nodeType].type, version);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -623,21 +619,16 @@ export class CredentialsHelper extends ICredentialsHelper {
|
||||
},
|
||||
};
|
||||
|
||||
const nodeTypes: INodeTypes = {
|
||||
...mockNodeTypes,
|
||||
nodeTypes: {
|
||||
[nodeTypeCopy.description.name]: {
|
||||
sourcePath: '',
|
||||
type: nodeTypeCopy,
|
||||
},
|
||||
},
|
||||
mockNodesData[nodeTypeCopy.description.name] = {
|
||||
sourcePath: '',
|
||||
type: nodeTypeCopy,
|
||||
};
|
||||
|
||||
const workflow = new Workflow({
|
||||
nodes: workflowData.nodes,
|
||||
connections: workflowData.connections,
|
||||
active: false,
|
||||
nodeTypes,
|
||||
nodeTypes: mockNodeTypes,
|
||||
});
|
||||
|
||||
const mode = 'internal';
|
||||
@@ -719,6 +710,8 @@ export class CredentialsHelper extends ICredentialsHelper {
|
||||
status: 'Error',
|
||||
message: error.message.toString(),
|
||||
};
|
||||
} finally {
|
||||
delete mockNodesData[nodeTypeCopy.description.name];
|
||||
}
|
||||
|
||||
if (
|
||||
|
||||
Reference in New Issue
Block a user