@modern-js/plugin-bff 3.4.0 → 3.6.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.
- package/dist/cjs/runtime/hono/adapter.js +2 -78
- package/dist/cjs/server.js +3 -18
- package/dist/esm/runtime/hono/adapter.mjs +2 -78
- package/dist/esm/server.mjs +3 -18
- package/dist/esm-node/cli.mjs +2 -2
- package/dist/esm-node/runtime/hono/adapter.mjs +2 -78
- package/dist/esm-node/server.mjs +3 -18
- package/dist/esm-node/utils/pluginGenerator.mjs +2 -2
- package/dist/types/runtime/hono/adapter.d.ts +11 -11
- package/package.json +16 -16
|
@@ -39,8 +39,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
39
39
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
40
|
HonoAdapter: ()=>HonoAdapter
|
|
41
41
|
});
|
|
42
|
-
const server_core_namespaceObject = require("@modern-js/server-core");
|
|
43
|
-
const utils_namespaceObject = require("@modern-js/utils");
|
|
44
42
|
const createHonoRoutes_js_namespaceObject = require("../../utils/createHonoRoutes.js");
|
|
45
43
|
var createHonoRoutes_js_default = /*#__PURE__*/ __webpack_require__.n(createHonoRoutes_js_namespaceObject);
|
|
46
44
|
const before = [
|
|
@@ -48,17 +46,9 @@ const before = [
|
|
|
48
46
|
'custom-server-middleware',
|
|
49
47
|
'render'
|
|
50
48
|
];
|
|
51
|
-
const kParentHonoVars = Symbol.for('modernjs.hono.parentVars');
|
|
52
49
|
class HonoAdapter {
|
|
53
|
-
wrapInArray(handler) {
|
|
54
|
-
if (Array.isArray(handler)) return handler;
|
|
55
|
-
return [
|
|
56
|
-
handler
|
|
57
|
-
];
|
|
58
|
-
}
|
|
59
50
|
constructor(api){
|
|
60
51
|
this.apiMiddleware = [];
|
|
61
|
-
this.apiServer = null;
|
|
62
52
|
this.isHono = true;
|
|
63
53
|
this.setHandlers = async ()=>{
|
|
64
54
|
if (!this.isHono) return;
|
|
@@ -73,48 +63,7 @@ class HonoAdapter {
|
|
|
73
63
|
before
|
|
74
64
|
}));
|
|
75
65
|
};
|
|
76
|
-
this.
|
|
77
|
-
if (!this.isHono) return;
|
|
78
|
-
this.apiServer = new server_core_namespaceObject.Hono();
|
|
79
|
-
this.apiServer.use('*', server_core_namespaceObject.run);
|
|
80
|
-
this.apiServer.use('*', async (c, next)=>{
|
|
81
|
-
const nodeReq = c.env?.node?.req;
|
|
82
|
-
const parentVars = nodeReq?.[kParentHonoVars];
|
|
83
|
-
if (parentVars && 'object' == typeof parentVars) {
|
|
84
|
-
delete nodeReq[kParentHonoVars];
|
|
85
|
-
for (const [key, value] of Object.entries(parentVars))if (void 0 === c.get(key)) c.set(key, value);
|
|
86
|
-
}
|
|
87
|
-
await next();
|
|
88
|
-
});
|
|
89
|
-
this.apiMiddleware.forEach(({ path = '*', method = 'all', handler })=>{
|
|
90
|
-
const handlers = this.wrapInArray(handler);
|
|
91
|
-
if (0 === handlers.length) return;
|
|
92
|
-
const firstHandler = handlers[0];
|
|
93
|
-
const restHandlers = handlers.slice(1);
|
|
94
|
-
const m = method;
|
|
95
|
-
const server = this.apiServer;
|
|
96
|
-
if (!server) return;
|
|
97
|
-
const register = server[m];
|
|
98
|
-
register.call(server, path, firstHandler, ...restHandlers);
|
|
99
|
-
});
|
|
100
|
-
this.apiServer.onError(async (err, c)=>{
|
|
101
|
-
try {
|
|
102
|
-
const serverConfig = this.api.getServerConfig();
|
|
103
|
-
const onErrorHandler = serverConfig?.onError;
|
|
104
|
-
if (onErrorHandler) {
|
|
105
|
-
const result = await onErrorHandler(err, c);
|
|
106
|
-
if (result instanceof Response) return result;
|
|
107
|
-
} else utils_namespaceObject.logger.error(err);
|
|
108
|
-
} catch (configError) {
|
|
109
|
-
utils_namespaceObject.logger.error(`Error in serverConfig.onError handler: ${configError}`);
|
|
110
|
-
}
|
|
111
|
-
return c.json({
|
|
112
|
-
message: err?.message || '[BFF] Internal Server Error'
|
|
113
|
-
}, err?.status || 500);
|
|
114
|
-
});
|
|
115
|
-
};
|
|
116
|
-
this.registerMiddleware = async (options)=>{
|
|
117
|
-
const { prefix } = options;
|
|
66
|
+
this.registerMiddleware = async ()=>{
|
|
118
67
|
const { bffRuntimeFramework } = this.api.getServerContext();
|
|
119
68
|
if ('hono' !== bffRuntimeFramework) {
|
|
120
69
|
this.isHono = false;
|
|
@@ -122,32 +71,7 @@ class HonoAdapter {
|
|
|
122
71
|
}
|
|
123
72
|
const { middlewares: globalMiddlewares } = this.api.getServerContext();
|
|
124
73
|
await this.setHandlers();
|
|
125
|
-
|
|
126
|
-
else {
|
|
127
|
-
await this.registerApiRoutes();
|
|
128
|
-
const dynamicApiMiddleware = {
|
|
129
|
-
name: 'dynamic-bff-handler',
|
|
130
|
-
path: `${prefix}/*`,
|
|
131
|
-
method: 'all',
|
|
132
|
-
order: 'post',
|
|
133
|
-
before,
|
|
134
|
-
handler: async (c, next)=>{
|
|
135
|
-
if (this.apiServer) {
|
|
136
|
-
const nodeReq = c.env?.node?.req;
|
|
137
|
-
if (nodeReq) {
|
|
138
|
-
const parentVars = c?.var;
|
|
139
|
-
nodeReq[kParentHonoVars] = parentVars && 'object' == typeof parentVars ? {
|
|
140
|
-
...parentVars
|
|
141
|
-
} : parentVars;
|
|
142
|
-
}
|
|
143
|
-
const response = await this.apiServer.fetch(c.req.raw, c.env);
|
|
144
|
-
if (404 !== response.status) return new Response(response.body, response);
|
|
145
|
-
}
|
|
146
|
-
await next();
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
globalMiddlewares.push(dynamicApiMiddleware);
|
|
150
|
-
}
|
|
74
|
+
globalMiddlewares.push(...this.apiMiddleware);
|
|
151
75
|
};
|
|
152
76
|
this.api = api;
|
|
153
77
|
}
|
package/dist/cjs/server.js
CHANGED
|
@@ -45,9 +45,6 @@ const bff_core_namespaceObject = require("@modern-js/bff-core");
|
|
|
45
45
|
const utils_namespaceObject = require("@modern-js/utils");
|
|
46
46
|
const adapter_js_namespaceObject = require("./runtime/hono/adapter.js");
|
|
47
47
|
class Storage {
|
|
48
|
-
reset() {
|
|
49
|
-
this.middlewares = [];
|
|
50
|
-
}
|
|
51
48
|
constructor(){
|
|
52
49
|
this.middlewares = [];
|
|
53
50
|
}
|
|
@@ -100,28 +97,16 @@ const server = ()=>({
|
|
|
100
97
|
'render'
|
|
101
98
|
]
|
|
102
99
|
});
|
|
103
|
-
honoAdapter.registerMiddleware(
|
|
104
|
-
prefix,
|
|
105
|
-
enableHandleWeb
|
|
106
|
-
});
|
|
100
|
+
await honoAdapter.registerMiddleware();
|
|
107
101
|
});
|
|
108
102
|
api.onReset(async ({ event })=>{
|
|
109
|
-
|
|
110
|
-
const appContext = api.getServerContext();
|
|
111
|
-
const { middlewares } = storage;
|
|
112
|
-
api.updateServerContext({
|
|
113
|
-
...appContext,
|
|
114
|
-
apiMiddlewares: middlewares
|
|
115
|
-
});
|
|
116
|
-
if ('file-change' === event.type) {
|
|
117
|
-
const apiHandlerInfos = await apiRouter.getApiHandlers();
|
|
103
|
+
if ('file-change' === event.type && apiRouter) {
|
|
118
104
|
const appContext = api.getServerContext();
|
|
105
|
+
const apiHandlerInfos = await apiRouter.getApiHandlers();
|
|
119
106
|
api.updateServerContext({
|
|
120
107
|
...appContext,
|
|
121
108
|
apiHandlerInfos
|
|
122
109
|
});
|
|
123
|
-
await honoAdapter.setHandlers();
|
|
124
|
-
await honoAdapter.registerApiRoutes();
|
|
125
110
|
}
|
|
126
111
|
});
|
|
127
112
|
api.prepareApiServer(async (input, next)=>{
|
|
@@ -1,22 +1,12 @@
|
|
|
1
|
-
import { Hono, run } from "@modern-js/server-core";
|
|
2
|
-
import { isProd, logger } from "@modern-js/utils";
|
|
3
1
|
import createHonoRoutes from "../../utils/createHonoRoutes.mjs";
|
|
4
2
|
const before = [
|
|
5
3
|
'custom-server-hook',
|
|
6
4
|
'custom-server-middleware',
|
|
7
5
|
'render'
|
|
8
6
|
];
|
|
9
|
-
const kParentHonoVars = Symbol.for('modernjs.hono.parentVars');
|
|
10
7
|
class HonoAdapter {
|
|
11
|
-
wrapInArray(handler) {
|
|
12
|
-
if (Array.isArray(handler)) return handler;
|
|
13
|
-
return [
|
|
14
|
-
handler
|
|
15
|
-
];
|
|
16
|
-
}
|
|
17
8
|
constructor(api){
|
|
18
9
|
this.apiMiddleware = [];
|
|
19
|
-
this.apiServer = null;
|
|
20
10
|
this.isHono = true;
|
|
21
11
|
this.setHandlers = async ()=>{
|
|
22
12
|
if (!this.isHono) return;
|
|
@@ -31,48 +21,7 @@ class HonoAdapter {
|
|
|
31
21
|
before: before
|
|
32
22
|
}));
|
|
33
23
|
};
|
|
34
|
-
this.
|
|
35
|
-
if (!this.isHono) return;
|
|
36
|
-
this.apiServer = new Hono();
|
|
37
|
-
this.apiServer.use('*', run);
|
|
38
|
-
this.apiServer.use('*', async (c, next)=>{
|
|
39
|
-
const nodeReq = c.env?.node?.req;
|
|
40
|
-
const parentVars = nodeReq?.[kParentHonoVars];
|
|
41
|
-
if (parentVars && 'object' == typeof parentVars) {
|
|
42
|
-
delete nodeReq[kParentHonoVars];
|
|
43
|
-
for (const [key, value] of Object.entries(parentVars))if (void 0 === c.get(key)) c.set(key, value);
|
|
44
|
-
}
|
|
45
|
-
await next();
|
|
46
|
-
});
|
|
47
|
-
this.apiMiddleware.forEach(({ path = '*', method = 'all', handler })=>{
|
|
48
|
-
const handlers = this.wrapInArray(handler);
|
|
49
|
-
if (0 === handlers.length) return;
|
|
50
|
-
const firstHandler = handlers[0];
|
|
51
|
-
const restHandlers = handlers.slice(1);
|
|
52
|
-
const m = method;
|
|
53
|
-
const server = this.apiServer;
|
|
54
|
-
if (!server) return;
|
|
55
|
-
const register = server[m];
|
|
56
|
-
register.call(server, path, firstHandler, ...restHandlers);
|
|
57
|
-
});
|
|
58
|
-
this.apiServer.onError(async (err, c)=>{
|
|
59
|
-
try {
|
|
60
|
-
const serverConfig = this.api.getServerConfig();
|
|
61
|
-
const onErrorHandler = serverConfig?.onError;
|
|
62
|
-
if (onErrorHandler) {
|
|
63
|
-
const result = await onErrorHandler(err, c);
|
|
64
|
-
if (result instanceof Response) return result;
|
|
65
|
-
} else logger.error(err);
|
|
66
|
-
} catch (configError) {
|
|
67
|
-
logger.error(`Error in serverConfig.onError handler: ${configError}`);
|
|
68
|
-
}
|
|
69
|
-
return c.json({
|
|
70
|
-
message: err?.message || '[BFF] Internal Server Error'
|
|
71
|
-
}, err?.status || 500);
|
|
72
|
-
});
|
|
73
|
-
};
|
|
74
|
-
this.registerMiddleware = async (options)=>{
|
|
75
|
-
const { prefix } = options;
|
|
24
|
+
this.registerMiddleware = async ()=>{
|
|
76
25
|
const { bffRuntimeFramework } = this.api.getServerContext();
|
|
77
26
|
if ('hono' !== bffRuntimeFramework) {
|
|
78
27
|
this.isHono = false;
|
|
@@ -80,32 +29,7 @@ class HonoAdapter {
|
|
|
80
29
|
}
|
|
81
30
|
const { middlewares: globalMiddlewares } = this.api.getServerContext();
|
|
82
31
|
await this.setHandlers();
|
|
83
|
-
|
|
84
|
-
else {
|
|
85
|
-
await this.registerApiRoutes();
|
|
86
|
-
const dynamicApiMiddleware = {
|
|
87
|
-
name: 'dynamic-bff-handler',
|
|
88
|
-
path: `${prefix}/*`,
|
|
89
|
-
method: 'all',
|
|
90
|
-
order: 'post',
|
|
91
|
-
before: before,
|
|
92
|
-
handler: async (c, next)=>{
|
|
93
|
-
if (this.apiServer) {
|
|
94
|
-
const nodeReq = c.env?.node?.req;
|
|
95
|
-
if (nodeReq) {
|
|
96
|
-
const parentVars = c?.var;
|
|
97
|
-
nodeReq[kParentHonoVars] = parentVars && 'object' == typeof parentVars ? {
|
|
98
|
-
...parentVars
|
|
99
|
-
} : parentVars;
|
|
100
|
-
}
|
|
101
|
-
const response = await this.apiServer.fetch(c.req.raw, c.env);
|
|
102
|
-
if (404 !== response.status) return new Response(response.body, response);
|
|
103
|
-
}
|
|
104
|
-
await next();
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
globalMiddlewares.push(dynamicApiMiddleware);
|
|
108
|
-
}
|
|
32
|
+
globalMiddlewares.push(...this.apiMiddleware);
|
|
109
33
|
};
|
|
110
34
|
this.api = api;
|
|
111
35
|
}
|
package/dist/esm/server.mjs
CHANGED
|
@@ -3,9 +3,6 @@ import { ApiRouter } from "@modern-js/bff-core";
|
|
|
3
3
|
import { API_DIR, isFunction, isWebOnly } from "@modern-js/utils";
|
|
4
4
|
import { HonoAdapter } from "./runtime/hono/adapter.mjs";
|
|
5
5
|
class Storage {
|
|
6
|
-
reset() {
|
|
7
|
-
this.middlewares = [];
|
|
8
|
-
}
|
|
9
6
|
constructor(){
|
|
10
7
|
this.middlewares = [];
|
|
11
8
|
}
|
|
@@ -58,28 +55,16 @@ const server = ()=>({
|
|
|
58
55
|
'render'
|
|
59
56
|
]
|
|
60
57
|
});
|
|
61
|
-
honoAdapter.registerMiddleware(
|
|
62
|
-
prefix,
|
|
63
|
-
enableHandleWeb
|
|
64
|
-
});
|
|
58
|
+
await honoAdapter.registerMiddleware();
|
|
65
59
|
});
|
|
66
60
|
api.onReset(async ({ event })=>{
|
|
67
|
-
|
|
68
|
-
const appContext = api.getServerContext();
|
|
69
|
-
const { middlewares } = storage;
|
|
70
|
-
api.updateServerContext({
|
|
71
|
-
...appContext,
|
|
72
|
-
apiMiddlewares: middlewares
|
|
73
|
-
});
|
|
74
|
-
if ('file-change' === event.type) {
|
|
75
|
-
const apiHandlerInfos = await apiRouter.getApiHandlers();
|
|
61
|
+
if ('file-change' === event.type && apiRouter) {
|
|
76
62
|
const appContext = api.getServerContext();
|
|
63
|
+
const apiHandlerInfos = await apiRouter.getApiHandlers();
|
|
77
64
|
api.updateServerContext({
|
|
78
65
|
...appContext,
|
|
79
66
|
apiHandlerInfos
|
|
80
67
|
});
|
|
81
|
-
await honoAdapter.setHandlers();
|
|
82
|
-
await honoAdapter.registerApiRoutes();
|
|
83
68
|
}
|
|
84
69
|
});
|
|
85
70
|
api.prepareApiServer(async (input, next)=>{
|
package/dist/esm-node/cli.mjs
CHANGED
|
@@ -8,7 +8,7 @@ import pluginGenerator from "./utils/pluginGenerator.mjs";
|
|
|
8
8
|
import runtimeGenerator from "./utils/runtimeGenerator.mjs";
|
|
9
9
|
import { fileURLToPath as __rspack_fileURLToPath } from "node:url";
|
|
10
10
|
import { dirname as __rspack_dirname } from "node:path";
|
|
11
|
-
var
|
|
11
|
+
var __rspack_import_meta_dirname__ = __rspack_dirname(__rspack_fileURLToPath(import.meta.url));
|
|
12
12
|
const RUNTIME_CREATE_REQUEST = '@modern-js/plugin-bff/client';
|
|
13
13
|
const bffPlugin = ()=>({
|
|
14
14
|
name: '@modern-js/plugin-bff',
|
|
@@ -133,7 +133,7 @@ const bffPlugin = ()=>({
|
|
|
133
133
|
const apiRegexp = new RegExp(normalizeOutputPath(`${apiDirectory}${path.sep}.*(.[tj]s)$`));
|
|
134
134
|
const name = isServer ? 'server' : 'client';
|
|
135
135
|
const sourceExt = 'mjs';
|
|
136
|
-
const loaderPath = path.join(
|
|
136
|
+
const loaderPath = path.join(__rspack_import_meta_dirname__, `loader.${sourceExt}`);
|
|
137
137
|
chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(apiRegexp);
|
|
138
138
|
chain.module.rule('js-bff-api').test(apiRegexp).use('custom-loader').loader(loaderPath.replace(/\\/g, '/')).options({
|
|
139
139
|
prefix,
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import "node:module";
|
|
2
|
-
import { Hono, run } from "@modern-js/server-core";
|
|
3
|
-
import { isProd, logger } from "@modern-js/utils";
|
|
4
2
|
import createHonoRoutes from "../../utils/createHonoRoutes.mjs";
|
|
5
3
|
const before = [
|
|
6
4
|
'custom-server-hook',
|
|
7
5
|
'custom-server-middleware',
|
|
8
6
|
'render'
|
|
9
7
|
];
|
|
10
|
-
const kParentHonoVars = Symbol.for('modernjs.hono.parentVars');
|
|
11
8
|
class HonoAdapter {
|
|
12
|
-
wrapInArray(handler) {
|
|
13
|
-
if (Array.isArray(handler)) return handler;
|
|
14
|
-
return [
|
|
15
|
-
handler
|
|
16
|
-
];
|
|
17
|
-
}
|
|
18
9
|
constructor(api){
|
|
19
10
|
this.apiMiddleware = [];
|
|
20
|
-
this.apiServer = null;
|
|
21
11
|
this.isHono = true;
|
|
22
12
|
this.setHandlers = async ()=>{
|
|
23
13
|
if (!this.isHono) return;
|
|
@@ -32,48 +22,7 @@ class HonoAdapter {
|
|
|
32
22
|
before: before
|
|
33
23
|
}));
|
|
34
24
|
};
|
|
35
|
-
this.
|
|
36
|
-
if (!this.isHono) return;
|
|
37
|
-
this.apiServer = new Hono();
|
|
38
|
-
this.apiServer.use('*', run);
|
|
39
|
-
this.apiServer.use('*', async (c, next)=>{
|
|
40
|
-
const nodeReq = c.env?.node?.req;
|
|
41
|
-
const parentVars = nodeReq?.[kParentHonoVars];
|
|
42
|
-
if (parentVars && 'object' == typeof parentVars) {
|
|
43
|
-
delete nodeReq[kParentHonoVars];
|
|
44
|
-
for (const [key, value] of Object.entries(parentVars))if (void 0 === c.get(key)) c.set(key, value);
|
|
45
|
-
}
|
|
46
|
-
await next();
|
|
47
|
-
});
|
|
48
|
-
this.apiMiddleware.forEach(({ path = '*', method = 'all', handler })=>{
|
|
49
|
-
const handlers = this.wrapInArray(handler);
|
|
50
|
-
if (0 === handlers.length) return;
|
|
51
|
-
const firstHandler = handlers[0];
|
|
52
|
-
const restHandlers = handlers.slice(1);
|
|
53
|
-
const m = method;
|
|
54
|
-
const server = this.apiServer;
|
|
55
|
-
if (!server) return;
|
|
56
|
-
const register = server[m];
|
|
57
|
-
register.call(server, path, firstHandler, ...restHandlers);
|
|
58
|
-
});
|
|
59
|
-
this.apiServer.onError(async (err, c)=>{
|
|
60
|
-
try {
|
|
61
|
-
const serverConfig = this.api.getServerConfig();
|
|
62
|
-
const onErrorHandler = serverConfig?.onError;
|
|
63
|
-
if (onErrorHandler) {
|
|
64
|
-
const result = await onErrorHandler(err, c);
|
|
65
|
-
if (result instanceof Response) return result;
|
|
66
|
-
} else logger.error(err);
|
|
67
|
-
} catch (configError) {
|
|
68
|
-
logger.error(`Error in serverConfig.onError handler: ${configError}`);
|
|
69
|
-
}
|
|
70
|
-
return c.json({
|
|
71
|
-
message: err?.message || '[BFF] Internal Server Error'
|
|
72
|
-
}, err?.status || 500);
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
this.registerMiddleware = async (options)=>{
|
|
76
|
-
const { prefix } = options;
|
|
25
|
+
this.registerMiddleware = async ()=>{
|
|
77
26
|
const { bffRuntimeFramework } = this.api.getServerContext();
|
|
78
27
|
if ('hono' !== bffRuntimeFramework) {
|
|
79
28
|
this.isHono = false;
|
|
@@ -81,32 +30,7 @@ class HonoAdapter {
|
|
|
81
30
|
}
|
|
82
31
|
const { middlewares: globalMiddlewares } = this.api.getServerContext();
|
|
83
32
|
await this.setHandlers();
|
|
84
|
-
|
|
85
|
-
else {
|
|
86
|
-
await this.registerApiRoutes();
|
|
87
|
-
const dynamicApiMiddleware = {
|
|
88
|
-
name: 'dynamic-bff-handler',
|
|
89
|
-
path: `${prefix}/*`,
|
|
90
|
-
method: 'all',
|
|
91
|
-
order: 'post',
|
|
92
|
-
before: before,
|
|
93
|
-
handler: async (c, next)=>{
|
|
94
|
-
if (this.apiServer) {
|
|
95
|
-
const nodeReq = c.env?.node?.req;
|
|
96
|
-
if (nodeReq) {
|
|
97
|
-
const parentVars = c?.var;
|
|
98
|
-
nodeReq[kParentHonoVars] = parentVars && 'object' == typeof parentVars ? {
|
|
99
|
-
...parentVars
|
|
100
|
-
} : parentVars;
|
|
101
|
-
}
|
|
102
|
-
const response = await this.apiServer.fetch(c.req.raw, c.env);
|
|
103
|
-
if (404 !== response.status) return new Response(response.body, response);
|
|
104
|
-
}
|
|
105
|
-
await next();
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
globalMiddlewares.push(dynamicApiMiddleware);
|
|
109
|
-
}
|
|
33
|
+
globalMiddlewares.push(...this.apiMiddleware);
|
|
110
34
|
};
|
|
111
35
|
this.api = api;
|
|
112
36
|
}
|
package/dist/esm-node/server.mjs
CHANGED
|
@@ -4,9 +4,6 @@ import { ApiRouter } from "@modern-js/bff-core";
|
|
|
4
4
|
import { API_DIR, isFunction, isWebOnly } from "@modern-js/utils";
|
|
5
5
|
import { HonoAdapter } from "./runtime/hono/adapter.mjs";
|
|
6
6
|
class Storage {
|
|
7
|
-
reset() {
|
|
8
|
-
this.middlewares = [];
|
|
9
|
-
}
|
|
10
7
|
constructor(){
|
|
11
8
|
this.middlewares = [];
|
|
12
9
|
}
|
|
@@ -59,28 +56,16 @@ const server = ()=>({
|
|
|
59
56
|
'render'
|
|
60
57
|
]
|
|
61
58
|
});
|
|
62
|
-
honoAdapter.registerMiddleware(
|
|
63
|
-
prefix,
|
|
64
|
-
enableHandleWeb
|
|
65
|
-
});
|
|
59
|
+
await honoAdapter.registerMiddleware();
|
|
66
60
|
});
|
|
67
61
|
api.onReset(async ({ event })=>{
|
|
68
|
-
|
|
69
|
-
const appContext = api.getServerContext();
|
|
70
|
-
const { middlewares } = storage;
|
|
71
|
-
api.updateServerContext({
|
|
72
|
-
...appContext,
|
|
73
|
-
apiMiddlewares: middlewares
|
|
74
|
-
});
|
|
75
|
-
if ('file-change' === event.type) {
|
|
76
|
-
const apiHandlerInfos = await apiRouter.getApiHandlers();
|
|
62
|
+
if ('file-change' === event.type && apiRouter) {
|
|
77
63
|
const appContext = api.getServerContext();
|
|
64
|
+
const apiHandlerInfos = await apiRouter.getApiHandlers();
|
|
78
65
|
api.updateServerContext({
|
|
79
66
|
...appContext,
|
|
80
67
|
apiHandlerInfos
|
|
81
68
|
});
|
|
82
|
-
await honoAdapter.setHandlers();
|
|
83
|
-
await honoAdapter.registerApiRoutes();
|
|
84
69
|
}
|
|
85
70
|
});
|
|
86
71
|
api.prepareApiServer(async (input, next)=>{
|
|
@@ -4,7 +4,7 @@ import { fs, logger, normalizeToPosixPath } from "@modern-js/utils";
|
|
|
4
4
|
import { API_DIR, DIST_DIR, LAMBDA_DIR, PACKAGE_NAME, PREFIX } from "./crossProjectApiPlugin.mjs";
|
|
5
5
|
import { fileURLToPath as __rspack_fileURLToPath } from "node:url";
|
|
6
6
|
import { dirname as __rspack_dirname } from "node:path";
|
|
7
|
-
var
|
|
7
|
+
var __rspack_import_meta_dirname__ = __rspack_dirname(__rspack_fileURLToPath(import.meta.url));
|
|
8
8
|
function replaceContent(source, packageName, prefix, relativeDistPath, relativeApiPath, relativeLambdaPath) {
|
|
9
9
|
const updatedSource = source.replace(new RegExp(PACKAGE_NAME, 'g'), packageName).replace(new RegExp(PREFIX, 'g'), prefix).replace(new RegExp(DIST_DIR, 'g'), normalizeToPosixPath(relativeDistPath)).replace(new RegExp(API_DIR, 'g'), normalizeToPosixPath(relativeApiPath)).replace(new RegExp(LAMBDA_DIR, 'g'), normalizeToPosixPath(relativeLambdaPath));
|
|
10
10
|
return updatedSource;
|
|
@@ -15,7 +15,7 @@ async function pluginGenerator({ prefix, appDirectory, relativeDistPath, relativ
|
|
|
15
15
|
const packageJson = JSON.parse(packageContent);
|
|
16
16
|
const pluginDir = path.resolve(appDirectory, `./${relativeDistPath}`, 'plugin');
|
|
17
17
|
const pluginPath = path.join(pluginDir, 'index.js');
|
|
18
|
-
const pluginTemplate = await fs.readFile(path.resolve(
|
|
18
|
+
const pluginTemplate = await fs.readFile(path.resolve(__rspack_import_meta_dirname__, 'crossProjectApiPlugin.js'), 'utf8');
|
|
19
19
|
const updatedPlugin = replaceContent(pluginTemplate, packageJson.name, prefix, relativeDistPath, relativeApiPath, relativeLambdaPath);
|
|
20
20
|
await fs.ensureFile(pluginPath);
|
|
21
21
|
await fs.writeFile(pluginPath, updatedPlugin);
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { Hono } from '@modern-js/server-core';
|
|
3
|
-
interface MiddlewareOptions {
|
|
4
|
-
prefix: string;
|
|
5
|
-
enableHandleWeb?: boolean;
|
|
6
|
-
}
|
|
1
|
+
import type { ServerMiddleware, ServerPluginAPI } from '@modern-js/server-core';
|
|
7
2
|
export declare class HonoAdapter {
|
|
8
3
|
apiMiddleware: ServerMiddleware[];
|
|
9
|
-
apiServer: Hono | null;
|
|
10
4
|
api: ServerPluginAPI;
|
|
11
5
|
isHono: boolean;
|
|
12
6
|
constructor(api: ServerPluginAPI);
|
|
13
7
|
setHandlers: () => Promise<void>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Register the BFF API routes as ordinary server middlewares.
|
|
10
|
+
*
|
|
11
|
+
* Dev and prod now share this single path: the routes are pushed straight
|
|
12
|
+
* into the server's middleware list. In dev, hot updates are handled by the
|
|
13
|
+
* unified `@modern-js/server` runtime reload (which rebuilds the whole
|
|
14
|
+
* runtime — including this plugin — from scratch), so BFF no longer needs its
|
|
15
|
+
* own swappable Hono sub-app / dynamic dispatch middleware.
|
|
16
|
+
*/
|
|
17
|
+
registerMiddleware: () => Promise<void>;
|
|
17
18
|
}
|
|
18
|
-
export {};
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "3.
|
|
18
|
+
"version": "3.6.0",
|
|
19
19
|
"types": "./dist/types/cli.d.ts",
|
|
20
20
|
"main": "./dist/cjs/cli.js",
|
|
21
21
|
"exports": {
|
|
@@ -77,31 +77,31 @@
|
|
|
77
77
|
},
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@swc/helpers": "^0.5.17",
|
|
80
|
-
"qs": "^6.15.
|
|
80
|
+
"qs": "^6.15.3",
|
|
81
81
|
"type-is": "^1.6.18",
|
|
82
|
-
"@modern-js/bff-core": "3.
|
|
83
|
-
"@modern-js/builder": "3.
|
|
84
|
-
"@modern-js/create-request": "3.
|
|
85
|
-
"@modern-js/server-core": "3.
|
|
86
|
-
"@modern-js/server-utils": "3.
|
|
87
|
-
"@modern-js/utils": "3.
|
|
82
|
+
"@modern-js/bff-core": "3.6.0",
|
|
83
|
+
"@modern-js/builder": "3.6.0",
|
|
84
|
+
"@modern-js/create-request": "3.6.0",
|
|
85
|
+
"@modern-js/server-core": "3.6.0",
|
|
86
|
+
"@modern-js/server-utils": "3.6.0",
|
|
87
|
+
"@modern-js/utils": "3.6.0"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
|
-
"@rsbuild/core": "2.0
|
|
91
|
-
"@rslib/core": "0.
|
|
90
|
+
"@rsbuild/core": "2.1.0",
|
|
91
|
+
"@rslib/core": "0.23.2",
|
|
92
92
|
"@types/node": "^20",
|
|
93
93
|
"@types/qs": "^6.15.1",
|
|
94
94
|
"@types/type-is": "^1.6.7",
|
|
95
95
|
"memfs": "^3.5.3",
|
|
96
96
|
"typescript": "^5",
|
|
97
97
|
"zod": "^3.25.76",
|
|
98
|
-
"@modern-js/app-tools": "3.
|
|
99
|
-
"@modern-js/bff-runtime": "3.
|
|
100
|
-
"@modern-js/plugin": "3.
|
|
98
|
+
"@modern-js/app-tools": "3.6.0",
|
|
99
|
+
"@modern-js/bff-runtime": "3.6.0",
|
|
100
|
+
"@modern-js/plugin": "3.6.0",
|
|
101
101
|
"@modern-js/rslib": "2.68.10",
|
|
102
|
-
"@modern-js/runtime": "3.
|
|
103
|
-
"@
|
|
104
|
-
"@
|
|
102
|
+
"@modern-js/runtime": "3.6.0",
|
|
103
|
+
"@scripts/rstest-config": "2.66.0",
|
|
104
|
+
"@modern-js/types": "3.6.0"
|
|
105
105
|
},
|
|
106
106
|
"sideEffects": false,
|
|
107
107
|
"publishConfig": {
|