@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.
@@ -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.registerApiRoutes = async ()=>{
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
- if ((0, utils_namespaceObject.isProd)()) globalMiddlewares.push(...this.apiMiddleware);
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
  }
@@ -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
- storage.reset();
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.registerApiRoutes = async ()=>{
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
- if (isProd()) globalMiddlewares.push(...this.apiMiddleware);
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
  }
@@ -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
- storage.reset();
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)=>{
@@ -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 cli_dirname = __rspack_dirname(__rspack_fileURLToPath(import.meta.url));
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(cli_dirname, `loader.${sourceExt}`);
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.registerApiRoutes = async ()=>{
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
- if (isProd()) globalMiddlewares.push(...this.apiMiddleware);
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
  }
@@ -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
- storage.reset();
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 pluginGenerator_dirname = __rspack_dirname(__rspack_fileURLToPath(import.meta.url));
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(pluginGenerator_dirname, 'crossProjectApiPlugin.js'), 'utf8');
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 { MiddlewareHandler, ServerMiddleware, ServerPluginAPI } from '@modern-js/server-core';
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
- registerApiRoutes: () => Promise<void>;
15
- registerMiddleware: (options: MiddlewareOptions) => Promise<void>;
16
- wrapInArray(handler: MiddlewareHandler[] | MiddlewareHandler): MiddlewareHandler[];
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.4.0",
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.2",
80
+ "qs": "^6.15.3",
81
81
  "type-is": "^1.6.18",
82
- "@modern-js/bff-core": "3.4.0",
83
- "@modern-js/builder": "3.4.0",
84
- "@modern-js/create-request": "3.4.0",
85
- "@modern-js/server-core": "3.4.0",
86
- "@modern-js/server-utils": "3.4.0",
87
- "@modern-js/utils": "3.4.0"
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.10",
91
- "@rslib/core": "0.22.1",
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.4.0",
99
- "@modern-js/bff-runtime": "3.4.0",
100
- "@modern-js/plugin": "3.4.0",
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.4.0",
103
- "@modern-js/types": "3.4.0",
104
- "@scripts/rstest-config": "2.66.0"
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": {