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
@@ -1,5 +1,4 @@
|
||||
/* eslint-disable no-restricted-syntax */
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
/* eslint-disable @typescript-eslint/restrict-template-expressions */
|
||||
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
@@ -9,9 +8,9 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
import express from 'express';
|
||||
import { validate as jsonSchemaValidate } from 'jsonschema';
|
||||
import _, { cloneDeep } from 'lodash';
|
||||
import { BinaryDataManager } from 'n8n-core';
|
||||
import {
|
||||
deepCopy,
|
||||
IDataObject,
|
||||
IWorkflowBase,
|
||||
JsonObject,
|
||||
@@ -259,7 +258,7 @@ executionsController.get(
|
||||
query = query.andWhere(filter);
|
||||
}
|
||||
|
||||
const countFilter = cloneDeep(filter ?? {});
|
||||
const countFilter = deepCopy(filter ?? {});
|
||||
countFilter.id = Not(In(executingWorkflowIds));
|
||||
|
||||
const executions = await query.getMany();
|
||||
|
||||
@@ -1,15 +1,8 @@
|
||||
/* eslint-disable import/no-extraneous-dependencies */
|
||||
import express from 'express';
|
||||
import { readFile } from 'fs/promises';
|
||||
import _ from 'lodash';
|
||||
import get from 'lodash.get';
|
||||
|
||||
import {
|
||||
ICredentialType,
|
||||
INodeType,
|
||||
INodeTypeDescription,
|
||||
INodeTypeNameVersion,
|
||||
NodeHelpers,
|
||||
} from 'n8n-workflow';
|
||||
import type { ICredentialType, INodeTypeDescription, INodeTypeNameVersion } from 'n8n-workflow';
|
||||
|
||||
import { CredentialTypes } from '@/CredentialTypes';
|
||||
import config from '@/config';
|
||||
@@ -74,50 +67,11 @@ function injectCustomApiCallOption(description: INodeTypeDescription) {
|
||||
|
||||
export const nodeTypesController = express.Router();
|
||||
|
||||
// Returns all the node-types
|
||||
nodeTypesController.get(
|
||||
'/',
|
||||
ResponseHelper.send(async (req: express.Request): Promise<INodeTypeDescription[]> => {
|
||||
const returnData: INodeTypeDescription[] = [];
|
||||
const onlyLatest = req.query.onlyLatest === 'true';
|
||||
|
||||
const nodeTypes = NodeTypes();
|
||||
const allNodes = nodeTypes.getAll();
|
||||
|
||||
const getNodeDescription = (nodeType: INodeType): INodeTypeDescription => {
|
||||
const nodeInfo: INodeTypeDescription = { ...nodeType.description };
|
||||
if (req.query.includeProperties !== 'true') {
|
||||
// @ts-ignore
|
||||
delete nodeInfo.properties;
|
||||
}
|
||||
return nodeInfo;
|
||||
};
|
||||
|
||||
if (onlyLatest) {
|
||||
allNodes.forEach((nodeData) => {
|
||||
const nodeType = NodeHelpers.getVersionedNodeType(nodeData);
|
||||
const nodeInfo: INodeTypeDescription = getNodeDescription(nodeType);
|
||||
returnData.push(nodeInfo);
|
||||
});
|
||||
} else {
|
||||
allNodes.forEach((nodeData) => {
|
||||
const allNodeTypes = NodeHelpers.getVersionedNodeTypeAll(nodeData);
|
||||
allNodeTypes.forEach((element) => {
|
||||
const nodeInfo: INodeTypeDescription = getNodeDescription(element);
|
||||
returnData.push(nodeInfo);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return returnData;
|
||||
}),
|
||||
);
|
||||
|
||||
// Returns node information based on node names and versions
|
||||
nodeTypesController.post(
|
||||
'/',
|
||||
ResponseHelper.send(async (req: express.Request): Promise<INodeTypeDescription[]> => {
|
||||
const nodeInfos = _.get(req, 'body.nodeInfos', []) as INodeTypeNameVersion[];
|
||||
const nodeInfos = get(req, 'body.nodeInfos', []) as INodeTypeNameVersion[];
|
||||
|
||||
const defaultLocale = config.getEnv('defaultLocale');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user