@modern-js/bff-core 1.0.1-beta.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -38,19 +38,40 @@ const clearRouteName = routeName => {
38
38
 
39
39
  export const isHandler = input => input && typeof input === 'function';
40
40
 
41
- const isFunction = input => input && {}.toString.call(input) === '[object Function]';
41
+ const enableRegister = requireFn => {
42
+ // esbuild-register 做 unRegister 时,不会删除 register 添加的 require.extensions,导致第二次调用时 require.extensions['.ts'] 是 nodejs 默认 loader
43
+ // 所以这里根据第一次调用时,require.extensions 有没有,来判断是否需要使用 esbuild-register
44
+ let existTsLoader = false;
45
+ let firstCall = true;
46
+ return modulePath => {
47
+ if (firstCall) {
48
+ // eslint-disable-next-line node/no-deprecated-api
49
+ existTsLoader = Boolean(require.extensions['.ts']);
50
+ firstCall = false;
51
+ }
52
+
53
+ if (!existTsLoader) {
54
+ const {
55
+ register
56
+ } = require('esbuild-register/dist/node');
57
+
58
+ const {
59
+ unregister
60
+ } = register({});
61
+ const requiredModule = requireFn(modulePath);
62
+ unregister();
63
+ return requiredModule;
64
+ }
42
65
 
43
- export const requireHandlerModule = modulePath => {
44
- const {
45
- register
46
- } = require('esbuild-register/dist/node');
66
+ const requiredModule = requireFn(modulePath);
67
+ return requiredModule;
68
+ };
69
+ };
47
70
 
48
- const {
49
- unregister
50
- } = register({}); // 测试环境不走缓存,因为缓存的 handler 文件,会被 mockAPI 函数进行 mock,升级 jest28,setupFilesAfterEnv 能做异步操作的话,可解此问题
71
+ const isFunction = input => input && {}.toString.call(input) === '[object Function]';
51
72
 
52
- const originRequire = process.env.NODE_ENV === 'test' ? jest.requireActual : require;
53
- const module = originRequire(modulePath);
73
+ export const requireHandlerModule = enableRegister(modulePath => {
74
+ const module = require(modulePath);
54
75
 
55
76
  if (isFunction(module)) {
56
77
  return {
@@ -58,9 +79,8 @@ export const requireHandlerModule = modulePath => {
58
79
  };
59
80
  }
60
81
 
61
- unregister();
62
82
  return module;
63
- };
83
+ });
64
84
 
65
85
  const routeValue = routePath => {
66
86
  if (routePath.includes(':')) {
@@ -57,19 +57,40 @@ const isHandler = input => input && typeof input === 'function';
57
57
 
58
58
  exports.isHandler = isHandler;
59
59
 
60
- const isFunction = input => input && {}.toString.call(input) === '[object Function]';
60
+ const enableRegister = requireFn => {
61
+ // esbuild-register 做 unRegister 时,不会删除 register 添加的 require.extensions,导致第二次调用时 require.extensions['.ts'] 是 nodejs 默认 loader
62
+ // 所以这里根据第一次调用时,require.extensions 有没有,来判断是否需要使用 esbuild-register
63
+ let existTsLoader = false;
64
+ let firstCall = true;
65
+ return modulePath => {
66
+ if (firstCall) {
67
+ // eslint-disable-next-line node/no-deprecated-api
68
+ existTsLoader = Boolean(require.extensions['.ts']);
69
+ firstCall = false;
70
+ }
61
71
 
62
- const requireHandlerModule = modulePath => {
63
- const {
64
- register
65
- } = require('esbuild-register/dist/node');
72
+ if (!existTsLoader) {
73
+ const {
74
+ register
75
+ } = require('esbuild-register/dist/node');
76
+
77
+ const {
78
+ unregister
79
+ } = register({});
80
+ const requiredModule = requireFn(modulePath);
81
+ unregister();
82
+ return requiredModule;
83
+ }
66
84
 
67
- const {
68
- unregister
69
- } = register({}); // 测试环境不走缓存,因为缓存的 handler 文件,会被 mockAPI 函数进行 mock,升级 jest28,setupFilesAfterEnv 能做异步操作的话,可解此问题
85
+ const requiredModule = requireFn(modulePath);
86
+ return requiredModule;
87
+ };
88
+ };
70
89
 
71
- const originRequire = process.env.NODE_ENV === 'test' ? jest.requireActual : require;
72
- const module = originRequire(modulePath);
90
+ const isFunction = input => input && {}.toString.call(input) === '[object Function]';
91
+
92
+ const requireHandlerModule = enableRegister(modulePath => {
93
+ const module = require(modulePath);
73
94
 
74
95
  if (isFunction(module)) {
75
96
  return {
@@ -77,10 +98,8 @@ const requireHandlerModule = modulePath => {
77
98
  };
78
99
  }
79
100
 
80
- unregister();
81
101
  return module;
82
- };
83
-
102
+ });
84
103
  exports.requireHandlerModule = requireHandlerModule;
85
104
 
86
105
  const routeValue = routePath => {
@@ -1,10 +1,10 @@
1
- import { APIHandlerInfo } from './types';
1
+ import { APIHandlerInfo, HandlerModule } from './types';
2
2
  declare type MaybeAsync<I> = I | Promise<I>;
3
3
  export declare type NormalHandler = (...args: any[]) => any;
4
4
  export declare type Handler<I, O> = (input: I) => MaybeAsync<O>;
5
5
  export declare const getFiles: (lambdaDir: string, rules: string | string[]) => string[];
6
6
  export declare const getPathFromFilename: (baseDir: string, filename: string) => string;
7
7
  export declare const isHandler: (input: any) => input is Handler<any, any>;
8
- export declare const requireHandlerModule: (modulePath: string) => any;
8
+ export declare const requireHandlerModule: (modulePath: string) => HandlerModule;
9
9
  export declare const sortRoutes: (apiHandlers: APIHandlerInfo[]) => APIHandlerInfo[];
10
10
  export {};
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "1.0.1-beta.6",
14
+ "version": "1.1.0",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",
@@ -24,9 +24,9 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
- "@babel/runtime": "^7.15.4",
28
- "@modern-js/bff-runtime": "^1.2.3",
29
- "@modern-js/utils": "^1.7.6",
27
+ "@babel/runtime": "^7.18.0",
28
+ "@modern-js/bff-runtime": "^1.3.0",
29
+ "@modern-js/utils": "^1.7.9",
30
30
  "esbuild": "^0.14.38",
31
31
  "esbuild-register": "^3.3.3",
32
32
  "koa-compose": "^4.1.0",
@@ -58,8 +58,7 @@
58
58
  },
59
59
  "publishConfig": {
60
60
  "registry": "https://registry.npmjs.org/",
61
- "access": "public",
62
- "types": "./dist/types/index.d.ts"
61
+ "access": "public"
63
62
  },
64
63
  "wireit": {
65
64
  "build": {