From 812f94e254ae01dadc9c34effc664b4ba0125bf1 Mon Sep 17 00:00:00 2001 From: Innei Date: Wed, 23 Mar 2022 00:26:04 +0800 Subject: [PATCH] fix: test error --- src/modules/serverless/serverless.service.ts | 11 +++++--- src/utils/safe-eval.util.ts | 2 +- .../serverless/serverless.service.spec.ts | 26 +++++++++++++++++++ test/src/utils/safe-eval.spec.ts | 2 +- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/modules/serverless/serverless.service.ts b/src/modules/serverless/serverless.service.ts index 0fb1b871..4398c2eb 100644 --- a/src/modules/serverless/serverless.service.ts +++ b/src/modules/serverless/serverless.service.ts @@ -12,7 +12,6 @@ import { import { Interval } from '@nestjs/schedule' import { isURL } from 'class-validator' import { cloneDeep } from 'lodash' -import xss from 'xss' import PKG from '../../../package.json' import { SnippetModel } from '../snippet/snippet.model' import { @@ -191,9 +190,13 @@ export class ServerlessService { } return await safeEval( - `${await this.convertTypescriptCode( - functionString, - )}; return handler(context, require)`, + `async function func() { + ${await this.convertTypescriptCode( + functionString, + )}; return handler(context, require) + } + return func() + `, { ...globalContext, global: globalContext, diff --git a/src/utils/safe-eval.util.ts b/src/utils/safe-eval.util.ts index 068c563d..6a0696db 100644 --- a/src/utils/safe-eval.util.ts +++ b/src/utils/safe-eval.util.ts @@ -4,7 +4,7 @@ export function safeEval(code: string, context = {}) { global: {}, } - code = `((async () => { ${code} })())` + code = `((() => { ${code} })())` if (context) { Object.keys(context).forEach((key) => { sandbox[key] = context[key] diff --git a/test/src/modules/serverless/serverless.service.spec.ts b/test/src/modules/serverless/serverless.service.spec.ts index c038a2d7..93e47511 100644 --- a/test/src/modules/serverless/serverless.service.spec.ts +++ b/test/src/modules/serverless/serverless.service.spec.ts @@ -140,4 +140,30 @@ describe('test serverless function service', () => { ).rejects.toThrow() }) }) + + test('case-7: esm default import', async () => { + const model = new SnippetModel() + Object.assign>(model, { + type: SnippetType.Function, + raw: `import axios from 'axios';async function handler(context, require) { return axios }`, + }) + const data = await service.injectContextIntoServerlessFunctionAndCall( + model, + { req: {} as any, res: {} as any }, + ) + expect(typeof data.get).toBe('function') + }) + + test('case-7: esm named import', async () => { + const model = new SnippetModel() + Object.assign>(model, { + type: SnippetType.Function, + raw: `import {get} from 'axios';async function handler(context, require) { return get }`, + }) + const data = await service.injectContextIntoServerlessFunctionAndCall( + model, + { req: {} as any, res: {} as any }, + ) + expect(typeof data).toBe('function') + }) }) diff --git a/test/src/utils/safe-eval.spec.ts b/test/src/utils/safe-eval.spec.ts index ce92537a..24653c86 100644 --- a/test/src/utils/safe-eval.spec.ts +++ b/test/src/utils/safe-eval.spec.ts @@ -1,6 +1,6 @@ import { safeEval } from '~/utils/safe-eval.util' -describe.only('test safe-eval', () => { +describe('test safe-eval', () => { it('should eval', () => { const res = safeEval(`return 1 + 2`) expect(res).toBe(3)