@modern-js/app-tools 2.63.1-alpha.0 → 2.63.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -28,7 +28,12 @@ function createDefaultConfig(appContext) {
28
28
  const dev = {
29
29
  // `dev.port` should not have a default value
30
30
  // because we will use `server.port` by default
31
- port: void 0
31
+ port: void 0,
32
+ cliShortcuts: {
33
+ help: false,
34
+ // does not support restart server and print urls yet
35
+ custom: (shortcuts = []) => shortcuts.filter(({ key }) => key !== "r" && key !== "u")
36
+ }
32
37
  };
33
38
  const output = {
34
39
  distPath: {
@@ -45,7 +45,6 @@ function transformNormalizedConfig(config) {
45
45
  server,
46
46
  cliOptions,
47
47
  testing,
48
- devtools: {},
49
48
  builderPlugins: [],
50
49
  plugins,
51
50
  security: {},
@@ -28,10 +28,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var getServerRoutes_exports = {};
30
30
  __export(getServerRoutes_exports, {
31
+ getProdServerRoutes: () => getProdServerRoutes,
31
32
  getServerRoutes: () => getServerRoutes
32
33
  });
33
34
  module.exports = __toCommonJS(getServerRoutes_exports);
34
- var import_fs = __toESM(require("fs"));
35
35
  var import_path = __toESM(require("path"));
36
36
  var import_utils = require("@modern-js/utils");
37
37
  var import_routes = require("../../utils/routes");
@@ -148,7 +148,7 @@ const collectStaticRoutes = (appContext, config) => {
148
148
  const ignoreFiles = [
149
149
  ".gitkeep"
150
150
  ];
151
- return import_fs.default.existsSync(publicFolder) ? (0, import_utils2.walkDirectory)(publicFolder).filter((filePath) => !ignoreFiles.includes(import_path.default.basename(filePath))).map((filePath) => {
151
+ return import_utils.fs.existsSync(publicFolder) ? (0, import_utils2.walkDirectory)(publicFolder).filter((filePath) => !ignoreFiles.includes(import_path.default.basename(filePath))).map((filePath) => {
152
152
  const urlPath = `${(0, import_utils.urlJoin)(toPosix(filePath).slice(toPosix(publicFolder).length))}`;
153
153
  return {
154
154
  urlPath: publicRoutes[(0, import_utils.removeLeadingSlash)(urlPath)] || urlPath,
@@ -163,7 +163,17 @@ const getServerRoutes = (entrypoints, { appContext, config }) => [
163
163
  ...collectStaticRoutes(appContext, config)
164
164
  ];
165
165
  const toPosix = (pathStr) => pathStr.split(import_path.default.sep).join(import_path.default.posix.sep);
166
+ const getProdServerRoutes = (distDirectory) => {
167
+ const routeJSON = import_path.default.join(distDirectory, import_utils.ROUTE_SPEC_FILE);
168
+ try {
169
+ const { routes } = import_utils.fs.readJSONSync(routeJSON);
170
+ return routes;
171
+ } catch (e) {
172
+ throw new Error(`Failed to read routes from ${routeJSON}, please check if the file exists.`);
173
+ }
174
+ };
166
175
  // Annotate the CommonJS export names for ESM import in node:
167
176
  0 && (module.exports = {
177
+ getProdServerRoutes,
168
178
  getServerRoutes
169
179
  });
@@ -62,10 +62,19 @@ var analyze_default = ({ bundler }) => ({
62
62
  }
63
63
  const apiOnly = await (0, import_utils.isApiOnly)(appContext.appDirectory, (_resolvedConfig_source = resolvedConfig.source) === null || _resolvedConfig_source === void 0 ? void 0 : _resolvedConfig_source.entriesDir, appContext.apiDirectory);
64
64
  await hooks.addRuntimeExports.call();
65
+ const [{ getProdServerRoutes }] = await Promise.all([
66
+ import("./getServerRoutes.js")
67
+ ]);
65
68
  if (apiOnly) {
66
- const { routes: routes2 } = await hooks.modifyServerRoutes.call({
67
- routes: []
68
- });
69
+ const routes2 = [];
70
+ if ((0, import_utils2.checkIsServeCommand)()) {
71
+ routes2.push(...getProdServerRoutes(appContext.distDirectory));
72
+ } else {
73
+ const { routes: modifiedRoutes } = await hooks.modifyServerRoutes.call({
74
+ routes: []
75
+ });
76
+ routes2.push(...modifiedRoutes);
77
+ }
69
78
  debug(`server routes: %o`, routes2);
70
79
  api.updateAppContext({
71
80
  apiOnly,
@@ -82,13 +91,19 @@ var analyze_default = ({ bundler }) => ({
82
91
  entrypoints: await getBundleEntry(hooks, appContext, resolvedConfig)
83
92
  });
84
93
  debug(`entrypoints: %o`, entrypoints);
85
- const initialRoutes = getServerRoutes(entrypoints, {
86
- appContext,
87
- config: resolvedConfig
88
- });
89
- const { routes } = await hooks.modifyServerRoutes.call({
90
- routes: initialRoutes
91
- });
94
+ const routes = [];
95
+ if ((0, import_utils2.checkIsServeCommand)()) {
96
+ routes.push(...getProdServerRoutes(appContext.distDirectory));
97
+ } else {
98
+ const initialRoutes = getServerRoutes(entrypoints, {
99
+ appContext,
100
+ config: resolvedConfig
101
+ });
102
+ const { routes: modifiedRoutes } = await hooks.modifyServerRoutes.call({
103
+ routes: initialRoutes
104
+ });
105
+ routes.push(...modifiedRoutes);
106
+ }
92
107
  debug(`server routes: %o`, routes);
93
108
  appContext = {
94
109
  ...api.getAppContext(),
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var utils_exports = {};
30
30
  __export(utils_exports, {
31
31
  checkIsBuildCommands: () => checkIsBuildCommands,
32
+ checkIsServeCommand: () => checkIsServeCommand,
32
33
  getServerCombinedModueFile: () => getServerCombinedModueFile,
33
34
  isSubDirOrEqual: () => isSubDirOrEqual,
34
35
  parseModule: () => parseModule,
@@ -88,6 +89,10 @@ const checkIsBuildCommands = () => {
88
89
  const command = (0, import_utils.getCommand)();
89
90
  return buildCommands.includes(command);
90
91
  };
92
+ const checkIsServeCommand = () => {
93
+ const command = (0, import_utils.getCommand)();
94
+ return command === "serve";
95
+ };
91
96
  const isSubDirOrEqual = (parent, child) => {
92
97
  if (parent === child) {
93
98
  return true;
@@ -99,6 +104,7 @@ const isSubDirOrEqual = (parent, child) => {
99
104
  // Annotate the CommonJS export names for ESM import in node:
100
105
  0 && (module.exports = {
101
106
  checkIsBuildCommands,
107
+ checkIsServeCommand,
102
108
  getServerCombinedModueFile,
103
109
  isSubDirOrEqual,
104
110
  parseModule,
@@ -5,7 +5,18 @@ function createDefaultConfig(appContext) {
5
5
  var dev = {
6
6
  // `dev.port` should not have a default value
7
7
  // because we will use `server.port` by default
8
- port: void 0
8
+ port: void 0,
9
+ cliShortcuts: {
10
+ help: false,
11
+ // does not support restart server and print urls yet
12
+ custom: function() {
13
+ var shortcuts = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
14
+ return shortcuts.filter(function(param) {
15
+ var key = param.key;
16
+ return key !== "r" && key !== "u";
17
+ });
18
+ }
19
+ }
9
20
  };
10
21
  var output = {
11
22
  distPath: {
@@ -21,7 +21,6 @@ function transformNormalizedConfig(config) {
21
21
  server,
22
22
  cliOptions,
23
23
  testing,
24
- devtools: {},
25
24
  builderPlugins: [],
26
25
  plugins,
27
26
  security: {},
@@ -3,9 +3,8 @@ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
3
3
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
4
4
  import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
5
5
  import { _ as _type_of } from "@swc/helpers/_/_type_of";
6
- import fs from "fs";
7
6
  import path from "path";
8
- import { SERVER_BUNDLE_DIRECTORY, SERVER_WORKER_BUNDLE_DIRECTORY, getEntryOptions, isPlainObject, removeLeadingSlash, removeTailSlash, urlJoin } from "@modern-js/utils";
7
+ import { fs, ROUTE_SPEC_FILE, SERVER_BUNDLE_DIRECTORY, SERVER_WORKER_BUNDLE_DIRECTORY, getEntryOptions, isPlainObject, removeLeadingSlash, removeTailSlash, urlJoin } from "@modern-js/utils";
9
8
  import { isMainEntry } from "../../utils/routes";
10
9
  import { walkDirectory } from "./utils";
11
10
  var applyBaseUrl = function(baseUrl, routes) {
@@ -132,6 +131,16 @@ var getServerRoutes = function(entrypoints, param) {
132
131
  var toPosix = function(pathStr) {
133
132
  return pathStr.split(path.sep).join(path.posix.sep);
134
133
  };
134
+ var getProdServerRoutes = function(distDirectory) {
135
+ var routeJSON = path.join(distDirectory, ROUTE_SPEC_FILE);
136
+ try {
137
+ var routes = fs.readJSONSync(routeJSON).routes;
138
+ return routes;
139
+ } catch (e) {
140
+ throw new Error("Failed to read routes from ".concat(routeJSON, ", please check if the file exists."));
141
+ }
142
+ };
135
143
  export {
144
+ getProdServerRoutes,
136
145
  getServerRoutes
137
146
  };
@@ -2,6 +2,7 @@ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
3
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
4
  import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
5
+ import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
5
6
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
6
7
  import * as path from "path";
7
8
  import { fs, createDebugger, getArgv, isApiOnly, isDevCommand, minimist } from "@modern-js/utils";
@@ -11,7 +12,7 @@ import { emitResolvedConfig } from "../../utils/config";
11
12
  import { getSelectedEntries } from "../../utils/getSelectedEntries";
12
13
  import { printInstructions } from "../../utils/printInstructions";
13
14
  import { generateRoutes } from "../../utils/routes";
14
- import { checkIsBuildCommands } from "./utils";
15
+ import { checkIsBuildCommands, checkIsServeCommand } from "./utils";
15
16
  var debug = createDebugger("plugin-analyze");
16
17
  function analyze_default(param) {
17
18
  var bundler = param.bundler;
@@ -24,7 +25,7 @@ function analyze_default(param) {
24
25
  var pagesDir = [];
25
26
  var nestedRouteEntries = [];
26
27
  api.onPrepare(/* @__PURE__ */ _async_to_generator(function() {
27
- var _resolvedConfig_source, appContext, resolvedConfig, hooks, apiOnly, routes, _ref, getBundleEntry, getServerRoutes, getHtmlTemplate, entrypoints, _, _1, _tmp, initialRoutes, routes1, _ref1, partialsByEntrypoint, htmlTemplates, checkedEntries, entry, normalizedConfig, createBuilderForModern, builder;
28
+ var _resolvedConfig_source, appContext, resolvedConfig, hooks, apiOnly, _ref, getProdServerRoutes, routes, _routes, _routes1, _ref1, modifiedRoutes, _ref2, getBundleEntry, getServerRoutes, getHtmlTemplate, entrypoints, _, _1, _tmp, routes1, _routes2, _routes3, initialRoutes, _ref3, modifiedRoutes1, _ref4, partialsByEntrypoint, htmlTemplates, checkedEntries, entry, normalizedConfig, createBuilderForModern, builder;
28
29
  return _ts_generator(this, function(_state) {
29
30
  switch (_state.label) {
30
31
  case 0:
@@ -49,19 +50,45 @@ function analyze_default(param) {
49
50
  ];
50
51
  case 2:
51
52
  _state.sent();
53
+ return [
54
+ 4,
55
+ Promise.all([
56
+ import("./getServerRoutes.js")
57
+ ])
58
+ ];
59
+ case 3:
60
+ _ref = _sliced_to_array.apply(void 0, [
61
+ _state.sent(),
62
+ 1
63
+ ]), getProdServerRoutes = _ref[0].getProdServerRoutes;
52
64
  if (!apiOnly)
65
+ return [
66
+ 3,
67
+ 7
68
+ ];
69
+ routes = [];
70
+ if (!checkIsServeCommand())
53
71
  return [
54
72
  3,
55
73
  4
56
74
  ];
75
+ (_routes = routes).push.apply(_routes, _to_consumable_array(getProdServerRoutes(appContext.distDirectory)));
76
+ return [
77
+ 3,
78
+ 6
79
+ ];
80
+ case 4:
57
81
  return [
58
82
  4,
59
83
  hooks.modifyServerRoutes.call({
60
84
  routes: []
61
85
  })
62
86
  ];
63
- case 3:
64
- routes = _state.sent().routes;
87
+ case 5:
88
+ _ref1 = _state.sent(), modifiedRoutes = _ref1.routes;
89
+ (_routes1 = routes).push.apply(_routes1, _to_consumable_array(modifiedRoutes));
90
+ _state.label = 6;
91
+ case 6:
65
92
  debug("server routes: %o", routes);
66
93
  api.updateAppContext({
67
94
  apiOnly,
@@ -70,7 +97,7 @@ function analyze_default(param) {
70
97
  return [
71
98
  2
72
99
  ];
73
- case 4:
100
+ case 7:
74
101
  return [
75
102
  4,
76
103
  Promise.all([
@@ -79,27 +106,39 @@ function analyze_default(param) {
79
106
  import("./getHtmlTemplate.js")
80
107
  ])
81
108
  ];
82
- case 5:
83
- _ref = _sliced_to_array.apply(void 0, [
109
+ case 8:
110
+ _ref2 = _sliced_to_array.apply(void 0, [
84
111
  _state.sent(),
85
112
  3
86
- ]), getBundleEntry = _ref[0].getBundleEntry, getServerRoutes = _ref[1].getServerRoutes, getHtmlTemplate = _ref[2].getHtmlTemplate;
113
+ ]), getBundleEntry = _ref2[0].getBundleEntry, getServerRoutes = _ref2[1].getServerRoutes, getHtmlTemplate = _ref2[2].getHtmlTemplate;
87
114
  _1 = (_ = hooks.modifyEntrypoints).call;
88
115
  _tmp = {};
89
116
  return [
90
117
  4,
91
118
  getBundleEntry(hooks, appContext, resolvedConfig)
92
119
  ];
93
- case 6:
120
+ case 9:
94
121
  return [
95
122
  4,
96
123
  _1.apply(_, [
97
124
  (_tmp.entrypoints = _state.sent(), _tmp)
98
125
  ])
99
126
  ];
100
- case 7:
127
+ case 10:
101
128
  entrypoints = _state.sent().entrypoints;
102
129
  debug("entrypoints: %o", entrypoints);
130
+ routes1 = [];
131
+ if (!checkIsServeCommand())
132
+ return [
133
+ 3,
134
+ 11
135
+ ];
136
+ (_routes2 = routes1).push.apply(_routes2, _to_consumable_array(getProdServerRoutes(appContext.distDirectory)));
137
+ return [
138
+ 3,
139
+ 13
140
+ ];
141
+ case 11:
103
142
  initialRoutes = getServerRoutes(entrypoints, {
104
143
  appContext,
105
144
  config: resolvedConfig
@@ -110,8 +149,11 @@ function analyze_default(param) {
110
149
  routes: initialRoutes
111
150
  })
112
151
  ];
113
- case 8:
114
- routes1 = _state.sent().routes;
152
+ case 12:
153
+ _ref3 = _state.sent(), modifiedRoutes1 = _ref3.routes;
154
+ (_routes3 = routes1).push.apply(_routes3, _to_consumable_array(modifiedRoutes1));
155
+ _state.label = 13;
156
+ case 13:
115
157
  debug("server routes: %o", routes1);
116
158
  appContext = _object_spread_props(_object_spread({}, api.getAppContext()), {
117
159
  entrypoints,
@@ -133,8 +175,8 @@ function analyze_default(param) {
133
175
  config: resolvedConfig
134
176
  })
135
177
  ];
136
- case 9:
137
- _ref1 = _state.sent(), partialsByEntrypoint = _ref1.partialsByEntrypoint, htmlTemplates = _ref1.htmlTemplates;
178
+ case 14:
179
+ _ref4 = _state.sent(), partialsByEntrypoint = _ref4.partialsByEntrypoint, htmlTemplates = _ref4.htmlTemplates;
138
180
  debug("html templates: %o", htmlTemplates);
139
181
  api.updateAppContext({
140
182
  partialsByEntrypoint
@@ -145,17 +187,17 @@ function analyze_default(param) {
145
187
  if (!isDevCommand())
146
188
  return [
147
189
  3,
148
- 11
190
+ 16
149
191
  ];
150
192
  entry = minimist(getArgv()).entry;
151
193
  return [
152
194
  4,
153
195
  getSelectedEntries(typeof entry === "string" ? entry.split(",") : entry, entrypoints)
154
196
  ];
155
- case 10:
197
+ case 15:
156
198
  checkedEntries = _state.sent();
157
- _state.label = 11;
158
- case 11:
199
+ _state.label = 16;
200
+ case 16:
159
201
  appContext = _object_spread_props(_object_spread({}, api.getAppContext()), {
160
202
  entrypoints,
161
203
  checkedEntries,
@@ -167,7 +209,7 @@ function analyze_default(param) {
167
209
  if (!checkIsBuildCommands())
168
210
  return [
169
211
  3,
170
- 15
212
+ 20
171
213
  ];
172
214
  return [
173
215
  4,
@@ -175,14 +217,14 @@ function analyze_default(param) {
175
217
  entrypoints
176
218
  })
177
219
  ];
178
- case 12:
220
+ case 17:
179
221
  _state.sent();
180
222
  normalizedConfig = api.getNormalizedConfig();
181
223
  return [
182
224
  4,
183
225
  createBuilderGenerator(bundler)
184
226
  ];
185
- case 13:
227
+ case 18:
186
228
  createBuilderForModern = _state.sent();
187
229
  return [
188
230
  4,
@@ -191,10 +233,10 @@ function analyze_default(param) {
191
233
  appContext
192
234
  })
193
235
  ];
194
- case 14:
236
+ case 19:
195
237
  builder = _state.sent();
196
238
  builder.onBeforeBuild(function() {
197
- var _ref2 = _async_to_generator(function(param2) {
239
+ var _ref5 = _async_to_generator(function(param2) {
198
240
  var bundlerConfigs, isFirstCompile, environments, isWatch;
199
241
  return _ts_generator(this, function(_state2) {
200
242
  switch (_state2.label) {
@@ -229,11 +271,11 @@ function analyze_default(param) {
229
271
  });
230
272
  });
231
273
  return function(_2) {
232
- return _ref2.apply(this, arguments);
274
+ return _ref5.apply(this, arguments);
233
275
  };
234
276
  }());
235
277
  builder.onAfterBuild(function() {
236
- var _ref2 = _async_to_generator(function(param2) {
278
+ var _ref5 = _async_to_generator(function(param2) {
237
279
  var stats, environments, isFirstCompile, isWatch;
238
280
  return _ts_generator(this, function(_state2) {
239
281
  switch (_state2.label) {
@@ -263,11 +305,11 @@ function analyze_default(param) {
263
305
  });
264
306
  });
265
307
  return function(_2) {
266
- return _ref2.apply(this, arguments);
308
+ return _ref5.apply(this, arguments);
267
309
  };
268
310
  }());
269
311
  builder.onDevCompileDone(function() {
270
- var _ref2 = _async_to_generator(function(param2) {
312
+ var _ref5 = _async_to_generator(function(param2) {
271
313
  var isFirstCompile;
272
314
  return _ts_generator(this, function(_state2) {
273
315
  isFirstCompile = param2.isFirstCompile;
@@ -283,11 +325,11 @@ function analyze_default(param) {
283
325
  });
284
326
  });
285
327
  return function(_2) {
286
- return _ref2.apply(this, arguments);
328
+ return _ref5.apply(this, arguments);
287
329
  };
288
330
  }());
289
331
  builder.onBeforeCreateCompiler(function() {
290
- var _ref2 = _async_to_generator(function(param2) {
332
+ var _ref5 = _async_to_generator(function(param2) {
291
333
  var bundlerConfigs, environments;
292
334
  return _ts_generator(this, function(_state2) {
293
335
  switch (_state2.label) {
@@ -309,11 +351,11 @@ function analyze_default(param) {
309
351
  });
310
352
  });
311
353
  return function(_2) {
312
- return _ref2.apply(this, arguments);
354
+ return _ref5.apply(this, arguments);
313
355
  };
314
356
  }());
315
357
  builder.onAfterCreateCompiler(function() {
316
- var _ref2 = _async_to_generator(function(param2) {
358
+ var _ref5 = _async_to_generator(function(param2) {
317
359
  var compiler, environments;
318
360
  return _ts_generator(this, function(_state2) {
319
361
  switch (_state2.label) {
@@ -335,15 +377,15 @@ function analyze_default(param) {
335
377
  });
336
378
  });
337
379
  return function(_2) {
338
- return _ref2.apply(this, arguments);
380
+ return _ref5.apply(this, arguments);
339
381
  };
340
382
  }());
341
383
  builder.addPlugins(resolvedConfig.builderPlugins);
342
384
  api.updateAppContext({
343
385
  builder
344
386
  });
345
- _state.label = 15;
346
- case 15:
387
+ _state.label = 20;
388
+ case 20:
347
389
  return [
348
390
  2
349
391
  ];
@@ -83,6 +83,10 @@ var checkIsBuildCommands = function() {
83
83
  var command = getCommand();
84
84
  return buildCommands.includes(command);
85
85
  };
86
+ var checkIsServeCommand = function() {
87
+ var command = getCommand();
88
+ return command === "serve";
89
+ };
86
90
  var isSubDirOrEqual = function(parent, child) {
87
91
  if (parent === child) {
88
92
  return true;
@@ -93,6 +97,7 @@ var isSubDirOrEqual = function(parent, child) {
93
97
  };
94
98
  export {
95
99
  checkIsBuildCommands,
100
+ checkIsServeCommand,
96
101
  getServerCombinedModueFile,
97
102
  isSubDirOrEqual,
98
103
  parseModule,
@@ -4,7 +4,12 @@ function createDefaultConfig(appContext) {
4
4
  const dev = {
5
5
  // `dev.port` should not have a default value
6
6
  // because we will use `server.port` by default
7
- port: void 0
7
+ port: void 0,
8
+ cliShortcuts: {
9
+ help: false,
10
+ // does not support restart server and print urls yet
11
+ custom: (shortcuts = []) => shortcuts.filter(({ key }) => key !== "r" && key !== "u")
12
+ }
8
13
  };
9
14
  const output = {
10
15
  distPath: {
@@ -21,7 +21,6 @@ function transformNormalizedConfig(config) {
21
21
  server,
22
22
  cliOptions,
23
23
  testing,
24
- devtools: {},
25
24
  builderPlugins: [],
26
25
  plugins,
27
26
  security: {},
@@ -1,6 +1,5 @@
1
- import fs from "fs";
2
1
  import path from "path";
3
- import { SERVER_BUNDLE_DIRECTORY, SERVER_WORKER_BUNDLE_DIRECTORY, getEntryOptions, isPlainObject, removeLeadingSlash, removeTailSlash, urlJoin } from "@modern-js/utils";
2
+ import { fs, ROUTE_SPEC_FILE, SERVER_BUNDLE_DIRECTORY, SERVER_WORKER_BUNDLE_DIRECTORY, getEntryOptions, isPlainObject, removeLeadingSlash, removeTailSlash, urlJoin } from "@modern-js/utils";
4
3
  import { isMainEntry } from "../../utils/routes";
5
4
  import { walkDirectory } from "./utils";
6
5
  const applyBaseUrl = (baseUrl, routes) => {
@@ -130,6 +129,16 @@ const getServerRoutes = (entrypoints, { appContext, config }) => [
130
129
  ...collectStaticRoutes(appContext, config)
131
130
  ];
132
131
  const toPosix = (pathStr) => pathStr.split(path.sep).join(path.posix.sep);
132
+ const getProdServerRoutes = (distDirectory) => {
133
+ const routeJSON = path.join(distDirectory, ROUTE_SPEC_FILE);
134
+ try {
135
+ const { routes } = fs.readJSONSync(routeJSON);
136
+ return routes;
137
+ } catch (e) {
138
+ throw new Error(`Failed to read routes from ${routeJSON}, please check if the file exists.`);
139
+ }
140
+ };
133
141
  export {
142
+ getProdServerRoutes,
134
143
  getServerRoutes
135
144
  };
@@ -6,7 +6,7 @@ import { emitResolvedConfig } from "../../utils/config";
6
6
  import { getSelectedEntries } from "../../utils/getSelectedEntries";
7
7
  import { printInstructions } from "../../utils/printInstructions";
8
8
  import { generateRoutes } from "../../utils/routes";
9
- import { checkIsBuildCommands } from "./utils";
9
+ import { checkIsBuildCommands, checkIsServeCommand } from "./utils";
10
10
  const debug = createDebugger("plugin-analyze");
11
11
  var analyze_default = ({ bundler }) => ({
12
12
  name: "@modern-js/plugin-analyze",
@@ -29,10 +29,19 @@ var analyze_default = ({ bundler }) => ({
29
29
  }
30
30
  const apiOnly = await isApiOnly(appContext.appDirectory, (_resolvedConfig_source = resolvedConfig.source) === null || _resolvedConfig_source === void 0 ? void 0 : _resolvedConfig_source.entriesDir, appContext.apiDirectory);
31
31
  await hooks.addRuntimeExports.call();
32
+ const [{ getProdServerRoutes }] = await Promise.all([
33
+ import("./getServerRoutes.js")
34
+ ]);
32
35
  if (apiOnly) {
33
- const { routes: routes2 } = await hooks.modifyServerRoutes.call({
34
- routes: []
35
- });
36
+ const routes2 = [];
37
+ if (checkIsServeCommand()) {
38
+ routes2.push(...getProdServerRoutes(appContext.distDirectory));
39
+ } else {
40
+ const { routes: modifiedRoutes } = await hooks.modifyServerRoutes.call({
41
+ routes: []
42
+ });
43
+ routes2.push(...modifiedRoutes);
44
+ }
36
45
  debug(`server routes: %o`, routes2);
37
46
  api.updateAppContext({
38
47
  apiOnly,
@@ -49,13 +58,19 @@ var analyze_default = ({ bundler }) => ({
49
58
  entrypoints: await getBundleEntry(hooks, appContext, resolvedConfig)
50
59
  });
51
60
  debug(`entrypoints: %o`, entrypoints);
52
- const initialRoutes = getServerRoutes(entrypoints, {
53
- appContext,
54
- config: resolvedConfig
55
- });
56
- const { routes } = await hooks.modifyServerRoutes.call({
57
- routes: initialRoutes
58
- });
61
+ const routes = [];
62
+ if (checkIsServeCommand()) {
63
+ routes.push(...getProdServerRoutes(appContext.distDirectory));
64
+ } else {
65
+ const initialRoutes = getServerRoutes(entrypoints, {
66
+ appContext,
67
+ config: resolvedConfig
68
+ });
69
+ const { routes: modifiedRoutes } = await hooks.modifyServerRoutes.call({
70
+ routes: initialRoutes
71
+ });
72
+ routes.push(...modifiedRoutes);
73
+ }
59
74
  debug(`server routes: %o`, routes);
60
75
  appContext = {
61
76
  ...api.getAppContext(),
@@ -50,6 +50,10 @@ const checkIsBuildCommands = () => {
50
50
  const command = getCommand();
51
51
  return buildCommands.includes(command);
52
52
  };
53
+ const checkIsServeCommand = () => {
54
+ const command = getCommand();
55
+ return command === "serve";
56
+ };
53
57
  const isSubDirOrEqual = (parent, child) => {
54
58
  if (parent === child) {
55
59
  return true;
@@ -60,6 +64,7 @@ const isSubDirOrEqual = (parent, child) => {
60
64
  };
61
65
  export {
62
66
  checkIsBuildCommands,
67
+ checkIsServeCommand,
63
68
  getServerCombinedModueFile,
64
69
  isSubDirOrEqual,
65
70
  parseModule,
@@ -5,3 +5,4 @@ export declare const getServerRoutes: (entrypoints: Entrypoint[], { appContext,
5
5
  appContext: AppToolsContext<'shared'>;
6
6
  config: AppNormalizedConfig<'shared'>;
7
7
  }) => ServerRoute[];
8
+ export declare const getProdServerRoutes: (distDirectory: string) => any;
@@ -6,4 +6,5 @@ export declare const parseModule: ({ source, filename, }: {
6
6
  }) => Promise<readonly [imports: readonly import("es-module-lexer").ImportSpecifier[], exports: readonly import("es-module-lexer").ExportSpecifier[], facade: boolean]>;
7
7
  export declare const getServerCombinedModueFile: (internalDirectory: string, entryName: string) => string;
8
8
  export declare const checkIsBuildCommands: () => boolean;
9
+ export declare const checkIsServeCommand: () => boolean;
9
10
  export declare const isSubDirOrEqual: (parent: string, child: string) => boolean;
@@ -40,7 +40,6 @@ export interface AppToolsUserConfig<B extends Bundler> {
40
40
  testing?: TestingUserConfig;
41
41
  builderPlugins?: Array<LooseRsbuildPlugin | UniBuilderPlugin>;
42
42
  performance?: PerformanceUserConfig;
43
- devtools?: any;
44
43
  environments?: RsbuildConfig['environments'];
45
44
  }
46
45
  interface SharedNormalizedConfig<RawConfig> {
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.63.1-alpha.0",
18
+ "version": "2.63.2",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -85,7 +85,7 @@
85
85
  "@babel/parser": "^7.22.15",
86
86
  "@babel/traverse": "^7.23.2",
87
87
  "@babel/types": "^7.26.0",
88
- "@rsbuild/core": "1.1.8",
88
+ "@rsbuild/core": "1.1.9",
89
89
  "@rsbuild/plugin-node-polyfill": "1.2.0",
90
90
  "@swc/helpers": "0.5.13",
91
91
  "@vercel/nft": "^0.26.4",
@@ -96,20 +96,20 @@
96
96
  "mlly": "^1.6.1",
97
97
  "pkg-types": "^1.1.0",
98
98
  "std-env": "^3.7.0",
99
- "@modern-js/core": "2.63.0",
100
- "@modern-js/node-bundle-require": "2.63.0",
101
- "@modern-js/plugin": "2.63.0",
102
- "@modern-js/plugin-i18n": "2.63.0",
103
- "@modern-js/plugin-v2": "2.63.0",
104
- "@modern-js/prod-server": "2.63.0",
105
- "@modern-js/rsbuild-plugin-esbuild": "2.63.0",
106
- "@modern-js/server": "2.63.0",
107
- "@modern-js/server-core": "2.63.0",
108
- "@modern-js/server-utils": "2.63.0",
109
- "@modern-js/types": "2.63.0",
110
- "@modern-js/uni-builder": "2.63.0",
111
- "@modern-js/utils": "2.63.0",
112
- "@modern-js/plugin-data-loader": "2.63.0"
99
+ "@modern-js/core": "2.63.2",
100
+ "@modern-js/plugin": "2.63.2",
101
+ "@modern-js/node-bundle-require": "2.63.2",
102
+ "@modern-js/plugin-data-loader": "2.63.2",
103
+ "@modern-js/prod-server": "2.63.2",
104
+ "@modern-js/plugin-i18n": "2.63.2",
105
+ "@modern-js/rsbuild-plugin-esbuild": "2.63.2",
106
+ "@modern-js/plugin-v2": "2.63.2",
107
+ "@modern-js/server-core": "2.63.2",
108
+ "@modern-js/server": "2.63.2",
109
+ "@modern-js/server-utils": "2.63.2",
110
+ "@modern-js/types": "2.63.2",
111
+ "@modern-js/uni-builder": "2.63.2",
112
+ "@modern-js/utils": "2.63.2"
113
113
  },
114
114
  "devDependencies": {
115
115
  "@rsbuild/plugin-webpack-swc": "1.0.9",
@@ -120,9 +120,9 @@
120
120
  "ts-node": "^10.9.1",
121
121
  "tsconfig-paths": "^4.2.0",
122
122
  "typescript": "^5",
123
- "webpack": "^5.96.1",
124
- "@scripts/build": "2.63.0",
125
- "@scripts/jest-config": "2.63.0"
123
+ "webpack": "^5.97.1",
124
+ "@scripts/build": "2.63.2",
125
+ "@scripts/jest-config": "2.63.2"
126
126
  },
127
127
  "peerDependencies": {
128
128
  "ts-node": "^10.7.0",
@@ -139,7 +139,8 @@
139
139
  "sideEffects": false,
140
140
  "publishConfig": {
141
141
  "registry": "https://registry.npmjs.org/",
142
- "access": "public"
142
+ "access": "public",
143
+ "provenance": true
143
144
  },
144
145
  "scripts": {
145
146
  "new": "modern-lib new",