From ca02ab53320c6fe8e55a56c5d49ce3686b060675 Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Fri, 10 Mar 2023 11:41:27 +0800 Subject: [PATCH] fix: wrong handler name with decorator --- .../core/src/service/slsFunctionService.ts | 12 ++- packages/core/src/service/webRouterService.ts | 4 +- .../src/function/hello.ts | 20 +++- .../slsFunctionService.test.ts.snap | 92 +++++++++++++++++++ 4 files changed, 124 insertions(+), 4 deletions(-) diff --git a/packages/core/src/service/slsFunctionService.ts b/packages/core/src/service/slsFunctionService.ts index 06c5d013f8c3..b116c74c9ab3 100644 --- a/packages/core/src/service/slsFunctionService.ts +++ b/packages/core/src/service/slsFunctionService.ts @@ -133,7 +133,12 @@ export class MidwayServerlessFunctionService extends MidwayWebRouterService { functionMeta['functionName'] ?? webRouter?.['metadata']?.['functionName'] ?? createFunctionName(module, webRouter['methodName']); + const funcHandlerName = + functionMeta['handlerName'] ?? + webRouter?.['metadata']?.['handlerName'] ?? + data.funcHandlerName; data.functionName = functionName; + data.funcHandlerName = funcHandlerName; data.functionTriggerName = webRouter['type']; data.functionTriggerMetadata = webRouter['metadata']; data.functionMetadata = { @@ -152,6 +157,11 @@ export class MidwayServerlessFunctionService extends MidwayWebRouterService { functionMeta['functionName'] ?? webRouter?.['metadata']?.['functionName'] ?? createFunctionName(module, webRouter['methodName']); + + const funcHandlerName = + functionMeta['handlerName'] ?? + webRouter?.['metadata']?.['handlerName'] ?? + `${controllerId}.${webRouter['methodName']}`; // 其他类型的函数 this.checkDuplicateAndPush(prefix, { id, @@ -163,7 +173,7 @@ export class MidwayServerlessFunctionService extends MidwayWebRouterService { description: '', summary: '', handlerName: `${controllerId}.${webRouter['methodName']}`, - funcHandlerName: `${controllerId}.${webRouter['methodName']}`, + funcHandlerName: funcHandlerName, controllerId, middleware: webRouter['metadata']?.['middleware'] || [], controllerMiddleware: [], diff --git a/packages/core/src/service/webRouterService.ts b/packages/core/src/service/webRouterService.ts index 6bdced326c91..98dbf738adfd 100644 --- a/packages/core/src/service/webRouterService.ts +++ b/packages/core/src/service/webRouterService.ts @@ -65,7 +65,7 @@ export interface RouterInfo { */ handlerName?: string; /** - * serverless func load key + * serverless func load key, will be override by @ServerlessTrigger and @ServerlessFunction */ funcHandlerName?: string; /** @@ -93,7 +93,7 @@ export interface RouterInfo { */ responseMetadata?: any[]; /** - * serverless function name + * serverless function name, will be override by @ServerlessTrigger and @ServerlessFunction */ functionName?: string; /** diff --git a/packages/core/test/fixtures/base-app-func-router/src/function/hello.ts b/packages/core/test/fixtures/base-app-func-router/src/function/hello.ts index 71b919200f7c..fd9bd4bbdc6d 100644 --- a/packages/core/test/fixtures/base-app-func-router/src/function/hello.ts +++ b/packages/core/test/fixtures/base-app-func-router/src/function/hello.ts @@ -1,4 +1,12 @@ -import { Inject, Provide, ServerlessTriggerType, Query, Body, ServerlessTrigger } from '../../../../../src'; +import { + Inject, + Provide, + ServerlessTriggerType, + Query, + Body, + ServerlessTrigger, + ServerlessFunction +} from '../../../../../src'; @Provide() export class HelloHttpService { @@ -18,4 +26,14 @@ export class HelloHttpService { } + @ServerlessTrigger(ServerlessTriggerType.HTTP, { path: '/invoke2', functionName: 'invoke2', handlerName: 'index.invoke2'}) + invoke2() {} + + @ServerlessFunction({ functionName: 'invoke3', handlerName: 'index.invoke3'}) + @ServerlessTrigger(ServerlessTriggerType.EVENT) + invoke3(){} + + @ServerlessFunction({ functionName: 'invoke4', handlerName: 'index.invoke4'}) + @ServerlessTrigger(ServerlessTriggerType.EVENT, { handlerName: 'index.invoke44'}) + invoke4() {} } diff --git a/packages/core/test/service/__snapshots__/slsFunctionService.test.ts.snap b/packages/core/test/service/__snapshots__/slsFunctionService.test.ts.snap index 364dac79cb48..c50bfb597e62 100644 --- a/packages/core/test/service/__snapshots__/slsFunctionService.test.ts.snap +++ b/packages/core/test/service/__snapshots__/slsFunctionService.test.ts.snap @@ -95,6 +95,40 @@ exports[`/test/service/slsFunction.test.ts should test with function router 1`] "summary": "", "url": "/", }, + { + "_category": 2, + "_level": 1, + "_paramString": "", + "_pureRouter": "/invoke2", + "_weight": 1, + "controllerId": "helloHttpService", + "controllerMiddleware": [], + "description": "", + "fullUrl": "/invoke2", + "fullUrlFlattenString": "/invoke2", + "funcHandlerName": "index.invoke2", + "functionMetadata": { + "functionName": "invoke2", + }, + "functionName": "invoke2", + "functionTriggerMetadata": { + "functionName": "invoke2", + "handlerName": "index.invoke2", + "method": "get", + "path": "/invoke2", + }, + "functionTriggerName": "http", + "handlerName": "helloHttpService.invoke2", + "method": "invoke2", + "middleware": [], + "prefix": "/", + "requestMetadata": [], + "requestMethod": "get", + "responseMetadata": [], + "routerName": "", + "summary": "", + "url": "/invoke2", + }, { "_category": 2, "_level": 1, @@ -259,5 +293,63 @@ exports[`/test/service/slsFunction.test.ts should test with function router 1`] "summary": "", "url": "", }, + { + "_category": 2, + "_level": 0, + "_paramString": "", + "_pureRouter": "", + "_weight": 0, + "controllerId": "helloHttpService", + "controllerMiddleware": [], + "description": "", + "funcHandlerName": "index.invoke3", + "functionMetadata": { + "functionName": "invoke3", + "handlerName": "index.invoke3", + }, + "functionName": "invoke3", + "functionTriggerMetadata": {}, + "functionTriggerName": "event", + "handlerName": "helloHttpService.invoke3", + "method": "invoke3", + "middleware": [], + "prefix": "/", + "requestMetadata": [], + "requestMethod": "", + "responseMetadata": [], + "routerName": "", + "summary": "", + "url": "", + }, + { + "_category": 2, + "_level": 0, + "_paramString": "", + "_pureRouter": "", + "_weight": 0, + "controllerId": "helloHttpService", + "controllerMiddleware": [], + "description": "", + "funcHandlerName": "index.invoke4", + "functionMetadata": { + "functionName": "invoke4", + "handlerName": "index.invoke4", + }, + "functionName": "invoke4", + "functionTriggerMetadata": { + "handlerName": "index.invoke44", + }, + "functionTriggerName": "event", + "handlerName": "helloHttpService.invoke4", + "method": "invoke4", + "middleware": [], + "prefix": "/", + "requestMetadata": [], + "requestMethod": "", + "responseMetadata": [], + "routerName": "", + "summary": "", + "url": "", + }, ] `;