From 04288a9072485122eb112b70fcb94b68bec687cf 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: Wed, 31 Aug 2022 16:07:51 +0200 Subject: [PATCH] reuse the same context for loading modules --- packages/cli/src/CommunityNodes/helpers.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/CommunityNodes/helpers.ts b/packages/cli/src/CommunityNodes/helpers.ts index 9fda8e0d6531b..cb634a4aa0399 100644 --- a/packages/cli/src/CommunityNodes/helpers.ts +++ b/packages/cli/src/CommunityNodes/helpers.ts @@ -4,7 +4,7 @@ import { promisify } from 'util'; import { exec } from 'child_process'; import { access as fsAccess, mkdir as fsMkdir } from 'fs/promises'; -import { Script } from 'vm'; +import { createContext, Script } from 'vm'; import axios from 'axios'; import { UserSettings } from 'n8n-core'; import { LoggerProxy, PublicInstalledPackage } from 'n8n-workflow'; @@ -236,8 +236,9 @@ export function isNpmError(error: unknown): error is { code: number; stdout: str return typeof error === 'object' && error !== null && 'code' in error && 'stdout' in error; } +const context = createContext({ require }); export const loadClassInIsolation = (filePath: string, className: string) => { const script = new Script(`new (require('${filePath}').${className})()`); // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return script.runInNewContext({ require }); + return script.runInContext(context); };