@modern-js/app-tools 2.49.3-alpha.7 → 2.49.3-alpha.9

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.
Files changed (27) hide show
  1. package/dist/cjs/plugins/deploy/index.js +12 -19
  2. package/dist/cjs/plugins/deploy/platforms/platform.js +16 -0
  3. package/dist/cjs/plugins/deploy/platforms/vercel.js +57 -0
  4. package/dist/cjs/plugins/deploy/platforms/vercelEntry.js +55 -0
  5. package/dist/esm/plugins/deploy/index.js +40 -42
  6. package/dist/esm/plugins/deploy/platforms/platform.js +0 -0
  7. package/dist/esm/plugins/deploy/platforms/vercel.js +47 -0
  8. package/dist/esm/plugins/deploy/platforms/vercelEntry.js +197 -0
  9. package/dist/esm-node/plugins/deploy/index.js +12 -19
  10. package/dist/esm-node/plugins/deploy/platforms/platform.js +0 -0
  11. package/dist/esm-node/plugins/deploy/platforms/vercel.js +23 -0
  12. package/dist/esm-node/plugins/deploy/platforms/vercelEntry.js +63 -0
  13. package/dist/types/plugins/deploy/platforms/platform.d.ts +1 -0
  14. package/dist/types/plugins/deploy/{entrys → platforms}/vercel.d.ts +1 -1
  15. package/dist/types/plugins/deploy/platforms/vercelEntry.d.ts +2 -0
  16. package/package.json +10 -10
  17. package/dist/cjs/plugins/deploy/entrys/vercel.js +0 -94
  18. package/dist/esm/plugins/deploy/entrys/vercel.js +0 -40
  19. package/dist/esm-node/plugins/deploy/entrys/vercel.js +0 -70
  20. /package/dist/cjs/plugins/deploy/{entrys → platforms}/netlify.js +0 -0
  21. /package/dist/cjs/plugins/deploy/{entrys → platforms}/node.js +0 -0
  22. /package/dist/esm/plugins/deploy/{entrys → platforms}/netlify.js +0 -0
  23. /package/dist/esm/plugins/deploy/{entrys → platforms}/node.js +0 -0
  24. /package/dist/esm-node/plugins/deploy/{entrys → platforms}/netlify.js +0 -0
  25. /package/dist/esm-node/plugins/deploy/{entrys → platforms}/node.js +0 -0
  26. /package/dist/types/plugins/deploy/{entrys → platforms}/netlify.d.ts +0 -0
  27. /package/dist/types/plugins/deploy/{entrys → platforms}/node.d.ts +0 -0
@@ -53,7 +53,6 @@ var deploy_default = () => ({
53
53
  const { appDirectory, distDirectory, serverInternalPlugins, sharedDirectory, apiDirectory, lambdaDirectory, metaName, entrypoints } = appContext;
54
54
  const { useSSR, useAPI, useWebServer } = (0, import_utils2.getProjectUsage)(appDirectory, distDirectory);
55
55
  const needModernServer = useSSR || useAPI || useWebServer;
56
- const configContext = api.useResolvedConfigContext();
57
56
  let outputDirectory = import_path.default.join(appDirectory, ".output");
58
57
  let funcsDirectory = outputDirectory;
59
58
  let staticDirectory = import_path.default.join(outputDirectory, "static");
@@ -69,7 +68,7 @@ var deploy_default = () => ({
69
68
  entrypoints.forEach((entry) => {
70
69
  const isMain = (0, import_routes.isMainEntry)(entry.entryName, mainEntryName);
71
70
  routes.push({
72
- src: `/${isMain ? "" : entry.entryName}/*`,
71
+ src: `/${isMain ? "" : `${entry.entryName}/`}*`,
73
72
  dest: `/html/${entry.entryName}/index.html`,
74
73
  status: 200
75
74
  });
@@ -80,14 +79,13 @@ var deploy_default = () => ({
80
79
  dest: `/.netlify/functions/index`,
81
80
  status: 200
82
81
  });
82
+ throw new Error("Currently on the Netlify platform, only CSR projects are supporte, Support for SSR and BFF projects will be available later");
83
83
  }
84
84
  console.log("routes", routes, needModernServer);
85
85
  const redirectContent = routes.map((route) => {
86
86
  return `${route.src} ${route.dest} ${route.status}`;
87
87
  }).join("\n");
88
88
  console.log("redirectContent", redirectContent);
89
- const redirectFilePath = import_path.default.join(distDirectory, "_redirects");
90
- await import_utils.fs.writeFile(redirectFilePath, redirectContent);
91
89
  await import_utils.fs.remove(outputDirectory);
92
90
  await import_utils.fs.ensureDir(funcsDirectory);
93
91
  await import_utils.fs.copy(distDirectory, funcsDirectory, {
@@ -96,12 +94,14 @@ var deploy_default = () => ({
96
94
  return !src.includes(distStaticDirectory);
97
95
  }
98
96
  });
97
+ const redirectFilePath = import_path.default.join(distDirectory, "_redirects");
98
+ await import_utils.fs.writeFile(redirectFilePath, redirectContent);
99
99
  }
100
100
  if (deployTarget === "vercel") {
101
101
  const vercelOutput = import_path.default.join(appDirectory, ".vercel");
102
102
  await import_utils.fs.remove(vercelOutput);
103
103
  outputDirectory = import_path.default.join(vercelOutput, "output");
104
- const config2 = {
104
+ const config = {
105
105
  version: 3,
106
106
  routes: [
107
107
  {
@@ -119,7 +119,7 @@ var deploy_default = () => ({
119
119
  if (!needModernServer) {
120
120
  entrypoints.forEach((entry) => {
121
121
  const isMain = (0, import_routes.isMainEntry)(entry.entryName, mainEntryName);
122
- config2.routes.push({
122
+ config.routes.push({
123
123
  src: `/${isMain ? "" : entry.entryName}(?:/.*)?`,
124
124
  headers: {
125
125
  "cache-control": "s-maxage=0"
@@ -128,13 +128,13 @@ var deploy_default = () => ({
128
128
  });
129
129
  });
130
130
  } else {
131
- config2.routes.push({
131
+ config.routes.push({
132
132
  src: "/(.*)",
133
133
  dest: `/index`
134
134
  });
135
135
  }
136
136
  await import_utils.fs.ensureDir(outputDirectory);
137
- await import_utils.fs.writeJSON(import_path.default.join(outputDirectory, "config.json"), config2, {
137
+ await import_utils.fs.writeJSON(import_path.default.join(outputDirectory, "config.json"), config, {
138
138
  spaces: 2
139
139
  });
140
140
  staticDirectory = import_path.default.join(outputDirectory, "static/static");
@@ -161,13 +161,6 @@ var deploy_default = () => ({
161
161
  });
162
162
  }
163
163
  }
164
- const { bff } = configContext;
165
- const config = {
166
- output: {
167
- path: "."
168
- },
169
- bff
170
- };
171
164
  const plugins = (0, import_utils.getInternalPlugins)(appDirectory, serverInternalPlugins);
172
165
  const serverAppContext = {
173
166
  sharedDirectory: `path.join(__dirname, "${import_path.default.relative(appDirectory, sharedDirectory)}")`,
@@ -179,7 +172,7 @@ var deploy_default = () => ({
179
172
  console.log("deployTarget111111111", deployTarget);
180
173
  switch (deployTarget) {
181
174
  case "node": {
182
- const { genNodeEntry } = await Promise.resolve().then(() => __toESM(require("./entrys/node")));
175
+ const { genNodeEntry } = await Promise.resolve().then(() => __toESM(require("./platforms/node")));
183
176
  code = genNodeEntry({
184
177
  plugins,
185
178
  config: modernConfig,
@@ -188,8 +181,8 @@ var deploy_default = () => ({
188
181
  break;
189
182
  }
190
183
  case "vercel": {
191
- const { genVercelEntry } = await Promise.resolve().then(() => __toESM(require("./entrys/vercel")));
192
- code = genVercelEntry({
184
+ const { genVercelEntry } = await Promise.resolve().then(() => __toESM(require("./platforms/vercel")));
185
+ code = await genVercelEntry({
193
186
  plugins,
194
187
  config: modernConfig,
195
188
  appContext: serverAppContext
@@ -197,7 +190,7 @@ var deploy_default = () => ({
197
190
  break;
198
191
  }
199
192
  case "netlify": {
200
- const { genNetlifyEntry } = await Promise.resolve().then(() => __toESM(require("./entrys/netlify")));
193
+ const { genNetlifyEntry } = await Promise.resolve().then(() => __toESM(require("./platforms/netlify")));
201
194
  code = genNetlifyEntry({
202
195
  plugins,
203
196
  config: modernConfig,
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var platform_exports = {};
16
+ module.exports = __toCommonJS(platform_exports);
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var vercel_exports = {};
30
+ __export(vercel_exports, {
31
+ genVercelEntry: () => genVercelEntry
32
+ });
33
+ module.exports = __toCommonJS(vercel_exports);
34
+ var import_node_path = __toESM(require("node:path"));
35
+ var import_utils = require("@modern-js/utils");
36
+ var import_utils2 = require("../utils");
37
+ async function genVercelEntry({ config, plugins, appContext } = {}) {
38
+ const defaultConfig = {
39
+ output: {
40
+ path: "."
41
+ }
42
+ };
43
+ const pluginImportCode = (0, import_utils2.genPluginImportsCode)(plugins || []);
44
+ const dynamicProdOptions = {
45
+ config: `${JSON.stringify(config || defaultConfig)}`,
46
+ serverConfigFile: import_utils.DEFAULT_SERVER_CONFIG,
47
+ plugins: `${(0, import_utils2.getPluginsCode)(plugins || [])}`,
48
+ appContext: `${appContext ? (0, import_utils2.severAppContextTemplate)(appContext) : "undefined"}`
49
+ };
50
+ let entryCode = (await import_utils.fs.readFile(import_node_path.default.join(__dirname, "./vercelEntry.js"))).toString();
51
+ entryCode = entryCode.replace("p_genPluginImportsCode", pluginImportCode).replace("p_ROUTE_SPEC_FILE", import_utils.ROUTE_SPEC_FILE).replace("p_dynamicProdOptions", JSON.stringify(dynamicProdOptions));
52
+ return entryCode;
53
+ }
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ genVercelEntry
57
+ });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ const fs = require("node:fs/promises");
3
+ const path = require("node:path");
4
+ const { createProdServer } = require("@modern-js/prod-server");
5
+ p_genPluginImportsCode;
6
+ if (!process.env.NODE_ENV) {
7
+ process.env.NODE_ENV = "production";
8
+ }
9
+ let requestHandler = null;
10
+ let handlerCreationPromise = null;
11
+ async function loadRoutes(routeFilepath) {
12
+ try {
13
+ await fs.access(routeFilepath);
14
+ const content = await fs.readFile(routeFilepath, "utf-8");
15
+ const routeSpec = JSON.parse(content);
16
+ return routeSpec.routes || [];
17
+ } catch (error) {
18
+ console.warn("route.json not found or invalid, continuing with empty routes.");
19
+ return [];
20
+ }
21
+ }
22
+ async function initServer() {
23
+ const routeFilepath = path.join(__dirname, p_ROUTE_SPEC_FILE);
24
+ const routes = await loadRoutes(routeFilepath);
25
+ const dynamicProdOptions = p_dynamicProdOptions;
26
+ const prodServerOptions = {
27
+ pwd: __dirname,
28
+ routes,
29
+ disableCustomHook: true,
30
+ ...dynamicProdOptions
31
+ };
32
+ const app = await createProdServer(prodServerOptions);
33
+ return app.getRequestListener();
34
+ }
35
+ async function createHandler() {
36
+ if (!handlerCreationPromise) {
37
+ handlerCreationPromise = (async () => {
38
+ try {
39
+ requestHandler = await initServer();
40
+ } catch (error) {
41
+ console.error("Error creating server:", error);
42
+ process.exit(1);
43
+ }
44
+ })();
45
+ }
46
+ await handlerCreationPromise;
47
+ return requestHandler;
48
+ }
49
+ createHandler();
50
+ module.exports = async (req, res) => {
51
+ if (!requestHandler) {
52
+ await createHandler();
53
+ }
54
+ return requestHandler(req, res);
55
+ };
@@ -18,7 +18,7 @@ function deploy_default() {
18
18
  return {
19
19
  beforeDeploy: function beforeDeploy() {
20
20
  return _async_to_generator(function() {
21
- var appContext, modernConfig, mainEntryName, appDirectory, distDirectory, serverInternalPlugins, sharedDirectory, apiDirectory, lambdaDirectory, metaName, entrypoints, _getProjectUsage, useSSR, useAPI, useWebServer, needModernServer, configContext, outputDirectory, funcsDirectory, staticDirectory, netlifyOutput, routes, redirectContent, redirectFilePath, vercelOutput, config, destHtmlDirectory, outputHtmlDirectory, bff, config1, plugins, serverAppContext, code, genNodeEntry, genVercelEntry, genNetlifyEntry, entryFilePath;
21
+ var appContext, modernConfig, mainEntryName, appDirectory, distDirectory, serverInternalPlugins, sharedDirectory, apiDirectory, lambdaDirectory, metaName, entrypoints, _getProjectUsage, useSSR, useAPI, useWebServer, needModernServer, outputDirectory, funcsDirectory, staticDirectory, netlifyOutput, routes, redirectContent, redirectFilePath, vercelOutput, config, destHtmlDirectory, outputHtmlDirectory, plugins, serverAppContext, code, genNodeEntry, genVercelEntry, genNetlifyEntry, entryFilePath;
22
22
  return _ts_generator(this, function(_state) {
23
23
  switch (_state.label) {
24
24
  case 0:
@@ -28,7 +28,6 @@ function deploy_default() {
28
28
  appDirectory = appContext.appDirectory, distDirectory = appContext.distDirectory, serverInternalPlugins = appContext.serverInternalPlugins, sharedDirectory = appContext.sharedDirectory, apiDirectory = appContext.apiDirectory, lambdaDirectory = appContext.lambdaDirectory, metaName = appContext.metaName, entrypoints = appContext.entrypoints;
29
29
  _getProjectUsage = getProjectUsage(appDirectory, distDirectory), useSSR = _getProjectUsage.useSSR, useAPI = _getProjectUsage.useAPI, useWebServer = _getProjectUsage.useWebServer;
30
30
  needModernServer = useSSR || useAPI || useWebServer;
31
- configContext = api.useResolvedConfigContext();
32
31
  outputDirectory = path.join(appDirectory, ".output");
33
32
  funcsDirectory = outputDirectory;
34
33
  staticDirectory = path.join(outputDirectory, "static");
@@ -63,7 +62,7 @@ function deploy_default() {
63
62
  entrypoints.forEach(function(entry) {
64
63
  var isMain = isMainEntry(entry.entryName, mainEntryName);
65
64
  routes.push({
66
- src: "/".concat(isMain ? "" : entry.entryName, "/*"),
65
+ src: "/".concat(isMain ? "" : "".concat(entry.entryName, "/"), "*"),
67
66
  dest: "/html/".concat(entry.entryName, "/index.html"),
68
67
  status: 200
69
68
  });
@@ -74,30 +73,24 @@ function deploy_default() {
74
73
  dest: "/.netlify/functions/index",
75
74
  status: 200
76
75
  });
76
+ throw new Error("Currently on the Netlify platform, only CSR projects are supporte, Support for SSR and BFF projects will be available later");
77
77
  }
78
78
  console.log("routes", routes, needModernServer);
79
79
  redirectContent = routes.map(function(route) {
80
80
  return "".concat(route.src, " ").concat(route.dest, " ").concat(route.status);
81
81
  }).join("\n");
82
82
  console.log("redirectContent", redirectContent);
83
- redirectFilePath = path.join(distDirectory, "_redirects");
84
- return [
85
- 4,
86
- fse.writeFile(redirectFilePath, redirectContent)
87
- ];
88
- case 4:
89
- _state.sent();
90
83
  return [
91
84
  4,
92
85
  fse.remove(outputDirectory)
93
86
  ];
94
- case 5:
87
+ case 4:
95
88
  _state.sent();
96
89
  return [
97
90
  4,
98
91
  fse.ensureDir(funcsDirectory)
99
92
  ];
100
- case 6:
93
+ case 5:
101
94
  _state.sent();
102
95
  return [
103
96
  4,
@@ -108,6 +101,13 @@ function deploy_default() {
108
101
  }
109
102
  })
110
103
  ];
104
+ case 6:
105
+ _state.sent();
106
+ redirectFilePath = path.join(distDirectory, "_redirects");
107
+ return [
108
+ 4,
109
+ fse.writeFile(redirectFilePath, redirectContent)
110
+ ];
111
111
  case 7:
112
112
  _state.sent();
113
113
  _state.label = 8;
@@ -228,13 +228,6 @@ function deploy_default() {
228
228
  _state.sent();
229
229
  _state.label = 18;
230
230
  case 18:
231
- bff = configContext.bff;
232
- config1 = {
233
- output: {
234
- path: "."
235
- },
236
- bff
237
- };
238
231
  plugins = getInternalPlugins(appDirectory, serverInternalPlugins);
239
232
  serverAppContext = {
240
233
  sharedDirectory: 'path.join(__dirname, "'.concat(path.relative(appDirectory, sharedDirectory), '")'),
@@ -258,17 +251,17 @@ function deploy_default() {
258
251
  case "netlify":
259
252
  return [
260
253
  3,
261
- 23
254
+ 24
262
255
  ];
263
256
  }
264
257
  return [
265
258
  3,
266
- 25
259
+ 26
267
260
  ];
268
261
  case 19:
269
262
  return [
270
263
  4,
271
- import("./entrys/node")
264
+ import("./platforms/node")
272
265
  ];
273
266
  case 20:
274
267
  genNodeEntry = _state.sent().genNodeEntry;
@@ -279,30 +272,35 @@ function deploy_default() {
279
272
  });
280
273
  return [
281
274
  3,
282
- 26
275
+ 27
283
276
  ];
284
277
  case 21:
285
278
  return [
286
279
  4,
287
- import("./entrys/vercel")
280
+ import("./platforms/vercel")
288
281
  ];
289
282
  case 22:
290
283
  genVercelEntry = _state.sent().genVercelEntry;
291
- code = genVercelEntry({
292
- plugins,
293
- config: modernConfig,
294
- appContext: serverAppContext
295
- });
296
284
  return [
297
- 3,
298
- 26
285
+ 4,
286
+ genVercelEntry({
287
+ plugins,
288
+ config: modernConfig,
289
+ appContext: serverAppContext
290
+ })
299
291
  ];
300
292
  case 23:
293
+ code = _state.sent();
301
294
  return [
302
- 4,
303
- import("./entrys/netlify")
295
+ 3,
296
+ 27
304
297
  ];
305
298
  case 24:
299
+ return [
300
+ 4,
301
+ import("./platforms/netlify")
302
+ ];
303
+ case 25:
306
304
  genNetlifyEntry = _state.sent().genNetlifyEntry;
307
305
  code = genNetlifyEntry({
308
306
  plugins,
@@ -311,25 +309,25 @@ function deploy_default() {
311
309
  });
312
310
  return [
313
311
  3,
314
- 26
312
+ 27
315
313
  ];
316
- case 25:
314
+ case 26:
317
315
  {
318
316
  code = 'throw new Error("unknown deploy target, MODERNJS_DEPLOY should be set");';
319
317
  }
320
- _state.label = 26;
321
- case 26:
318
+ _state.label = 27;
319
+ case 27:
322
320
  entryFilePath = path.join(funcsDirectory, "index.js");
323
321
  if (!needModernServer)
324
322
  return [
325
323
  3,
326
- 29
324
+ 30
327
325
  ];
328
326
  return [
329
327
  4,
330
328
  fse.writeFile(entryFilePath, code)
331
329
  ];
332
- case 27:
330
+ case 28:
333
331
  _state.sent();
334
332
  return [
335
333
  4,
@@ -337,10 +335,10 @@ function deploy_default() {
337
335
  "@modern-js/prod-server"
338
336
  ])
339
337
  ];
340
- case 28:
341
- _state.sent();
342
- _state.label = 29;
343
338
  case 29:
339
+ _state.sent();
340
+ _state.label = 30;
341
+ case 30:
344
342
  return [
345
343
  2
346
344
  ];
File without changes
@@ -0,0 +1,47 @@
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
+ import path from "node:path";
4
+ import { ROUTE_SPEC_FILE, DEFAULT_SERVER_CONFIG, fs as fse } from "@modern-js/utils";
5
+ import { genPluginImportsCode, getPluginsCode, severAppContextTemplate } from "../utils";
6
+ function genVercelEntry() {
7
+ return _genVercelEntry.apply(this, arguments);
8
+ }
9
+ function _genVercelEntry() {
10
+ _genVercelEntry = _async_to_generator(function() {
11
+ var _ref, config, plugins, appContext, defaultConfig, pluginImportCode, dynamicProdOptions, entryCode;
12
+ var _arguments = arguments;
13
+ return _ts_generator(this, function(_state) {
14
+ switch (_state.label) {
15
+ case 0:
16
+ _ref = _arguments.length > 0 && _arguments[0] !== void 0 ? _arguments[0] : {}, config = _ref.config, plugins = _ref.plugins, appContext = _ref.appContext;
17
+ defaultConfig = {
18
+ output: {
19
+ path: "."
20
+ }
21
+ };
22
+ pluginImportCode = genPluginImportsCode(plugins || []);
23
+ dynamicProdOptions = {
24
+ config: "".concat(JSON.stringify(config || defaultConfig)),
25
+ serverConfigFile: DEFAULT_SERVER_CONFIG,
26
+ plugins: "".concat(getPluginsCode(plugins || [])),
27
+ appContext: "".concat(appContext ? severAppContextTemplate(appContext) : "undefined")
28
+ };
29
+ return [
30
+ 4,
31
+ fse.readFile(path.join(__dirname, "./vercelEntry.js"))
32
+ ];
33
+ case 1:
34
+ entryCode = _state.sent().toString();
35
+ entryCode = entryCode.replace("p_genPluginImportsCode", pluginImportCode).replace("p_ROUTE_SPEC_FILE", ROUTE_SPEC_FILE).replace("p_dynamicProdOptions", JSON.stringify(dynamicProdOptions));
36
+ return [
37
+ 2,
38
+ entryCode
39
+ ];
40
+ }
41
+ });
42
+ });
43
+ return _genVercelEntry.apply(this, arguments);
44
+ }
45
+ export {
46
+ genVercelEntry
47
+ };
@@ -0,0 +1,197 @@
1
+ var __getOwnPropNames = Object.getOwnPropertyNames;
2
+ var __commonJS = (cb, mod) => function __require() {
3
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
4
+ };
5
+ var require_vercelEntry = __commonJS({
6
+ "src/plugins/deploy/platforms/vercelEntry.js"(exports, module) {
7
+ var _async_to_generator = require("@swc/helpers/_/_async_to_generator");
8
+ var _object_spread = require("@swc/helpers/_/_object_spread");
9
+ var _ts_generator = require("@swc/helpers/_/_ts_generator");
10
+ var fs = require("node:fs/promises");
11
+ var path = require("node:path");
12
+ var createProdServer = require("@modern-js/prod-server").createProdServer;
13
+ p_genPluginImportsCode;
14
+ if (!process.env.NODE_ENV) {
15
+ process.env.NODE_ENV = "production";
16
+ }
17
+ var requestHandler = null;
18
+ var handlerCreationPromise = null;
19
+ function loadRoutes(routeFilepath) {
20
+ return _loadRoutes.apply(this, arguments);
21
+ }
22
+ function _loadRoutes() {
23
+ _loadRoutes = _async_to_generator._(function(routeFilepath) {
24
+ var content, routeSpec, error;
25
+ return _ts_generator._(this, function(_state) {
26
+ switch (_state.label) {
27
+ case 0:
28
+ _state.trys.push([
29
+ 0,
30
+ 3,
31
+ ,
32
+ 4
33
+ ]);
34
+ return [
35
+ 4,
36
+ fs.access(routeFilepath)
37
+ ];
38
+ case 1:
39
+ _state.sent();
40
+ return [
41
+ 4,
42
+ fs.readFile(routeFilepath, "utf-8")
43
+ ];
44
+ case 2:
45
+ content = _state.sent();
46
+ routeSpec = JSON.parse(content);
47
+ return [
48
+ 2,
49
+ routeSpec.routes || []
50
+ ];
51
+ case 3:
52
+ error = _state.sent();
53
+ console.warn("route.json not found or invalid, continuing with empty routes.");
54
+ return [
55
+ 2,
56
+ []
57
+ ];
58
+ case 4:
59
+ return [
60
+ 2
61
+ ];
62
+ }
63
+ });
64
+ });
65
+ return _loadRoutes.apply(this, arguments);
66
+ }
67
+ function initServer() {
68
+ return _initServer.apply(this, arguments);
69
+ }
70
+ function _initServer() {
71
+ _initServer = _async_to_generator._(function() {
72
+ var routeFilepath, routes, dynamicProdOptions, prodServerOptions, app;
73
+ return _ts_generator._(this, function(_state) {
74
+ switch (_state.label) {
75
+ case 0:
76
+ routeFilepath = path.join(__dirname, p_ROUTE_SPEC_FILE);
77
+ return [
78
+ 4,
79
+ loadRoutes(routeFilepath)
80
+ ];
81
+ case 1:
82
+ routes = _state.sent();
83
+ dynamicProdOptions = p_dynamicProdOptions;
84
+ prodServerOptions = _object_spread._({
85
+ pwd: __dirname,
86
+ routes,
87
+ disableCustomHook: true
88
+ }, dynamicProdOptions);
89
+ return [
90
+ 4,
91
+ createProdServer(prodServerOptions)
92
+ ];
93
+ case 2:
94
+ app = _state.sent();
95
+ return [
96
+ 2,
97
+ app.getRequestListener()
98
+ ];
99
+ }
100
+ });
101
+ });
102
+ return _initServer.apply(this, arguments);
103
+ }
104
+ function createHandler() {
105
+ return _createHandler.apply(this, arguments);
106
+ }
107
+ function _createHandler() {
108
+ _createHandler = _async_to_generator._(function() {
109
+ return _ts_generator._(this, function(_state) {
110
+ switch (_state.label) {
111
+ case 0:
112
+ if (!handlerCreationPromise) {
113
+ handlerCreationPromise = _async_to_generator._(function() {
114
+ var error;
115
+ return _ts_generator._(this, function(_state2) {
116
+ switch (_state2.label) {
117
+ case 0:
118
+ _state2.trys.push([
119
+ 0,
120
+ 2,
121
+ ,
122
+ 3
123
+ ]);
124
+ return [
125
+ 4,
126
+ initServer()
127
+ ];
128
+ case 1:
129
+ requestHandler = _state2.sent();
130
+ return [
131
+ 3,
132
+ 3
133
+ ];
134
+ case 2:
135
+ error = _state2.sent();
136
+ console.error("Error creating server:", error);
137
+ process.exit(1);
138
+ return [
139
+ 3,
140
+ 3
141
+ ];
142
+ case 3:
143
+ return [
144
+ 2
145
+ ];
146
+ }
147
+ });
148
+ })();
149
+ }
150
+ return [
151
+ 4,
152
+ handlerCreationPromise
153
+ ];
154
+ case 1:
155
+ _state.sent();
156
+ return [
157
+ 2,
158
+ requestHandler
159
+ ];
160
+ }
161
+ });
162
+ });
163
+ return _createHandler.apply(this, arguments);
164
+ }
165
+ createHandler();
166
+ module.exports = function() {
167
+ var _ref = _async_to_generator._(function(req, res) {
168
+ return _ts_generator._(this, function(_state) {
169
+ switch (_state.label) {
170
+ case 0:
171
+ if (!!requestHandler)
172
+ return [
173
+ 3,
174
+ 2
175
+ ];
176
+ return [
177
+ 4,
178
+ createHandler()
179
+ ];
180
+ case 1:
181
+ _state.sent();
182
+ _state.label = 2;
183
+ case 2:
184
+ return [
185
+ 2,
186
+ requestHandler(req, res)
187
+ ];
188
+ }
189
+ });
190
+ });
191
+ return function(req, res) {
192
+ return _ref.apply(this, arguments);
193
+ };
194
+ }();
195
+ }
196
+ });
197
+ export default require_vercelEntry();
@@ -20,7 +20,6 @@ var deploy_default = () => ({
20
20
  const { appDirectory, distDirectory, serverInternalPlugins, sharedDirectory, apiDirectory, lambdaDirectory, metaName, entrypoints } = appContext;
21
21
  const { useSSR, useAPI, useWebServer } = getProjectUsage(appDirectory, distDirectory);
22
22
  const needModernServer = useSSR || useAPI || useWebServer;
23
- const configContext = api.useResolvedConfigContext();
24
23
  let outputDirectory = path.join(appDirectory, ".output");
25
24
  let funcsDirectory = outputDirectory;
26
25
  let staticDirectory = path.join(outputDirectory, "static");
@@ -36,7 +35,7 @@ var deploy_default = () => ({
36
35
  entrypoints.forEach((entry) => {
37
36
  const isMain = isMainEntry(entry.entryName, mainEntryName);
38
37
  routes.push({
39
- src: `/${isMain ? "" : entry.entryName}/*`,
38
+ src: `/${isMain ? "" : `${entry.entryName}/`}*`,
40
39
  dest: `/html/${entry.entryName}/index.html`,
41
40
  status: 200
42
41
  });
@@ -47,14 +46,13 @@ var deploy_default = () => ({
47
46
  dest: `/.netlify/functions/index`,
48
47
  status: 200
49
48
  });
49
+ throw new Error("Currently on the Netlify platform, only CSR projects are supporte, Support for SSR and BFF projects will be available later");
50
50
  }
51
51
  console.log("routes", routes, needModernServer);
52
52
  const redirectContent = routes.map((route) => {
53
53
  return `${route.src} ${route.dest} ${route.status}`;
54
54
  }).join("\n");
55
55
  console.log("redirectContent", redirectContent);
56
- const redirectFilePath = path.join(distDirectory, "_redirects");
57
- await fse.writeFile(redirectFilePath, redirectContent);
58
56
  await fse.remove(outputDirectory);
59
57
  await fse.ensureDir(funcsDirectory);
60
58
  await fse.copy(distDirectory, funcsDirectory, {
@@ -63,12 +61,14 @@ var deploy_default = () => ({
63
61
  return !src.includes(distStaticDirectory);
64
62
  }
65
63
  });
64
+ const redirectFilePath = path.join(distDirectory, "_redirects");
65
+ await fse.writeFile(redirectFilePath, redirectContent);
66
66
  }
67
67
  if (deployTarget === "vercel") {
68
68
  const vercelOutput = path.join(appDirectory, ".vercel");
69
69
  await fse.remove(vercelOutput);
70
70
  outputDirectory = path.join(vercelOutput, "output");
71
- const config2 = {
71
+ const config = {
72
72
  version: 3,
73
73
  routes: [
74
74
  {
@@ -86,7 +86,7 @@ var deploy_default = () => ({
86
86
  if (!needModernServer) {
87
87
  entrypoints.forEach((entry) => {
88
88
  const isMain = isMainEntry(entry.entryName, mainEntryName);
89
- config2.routes.push({
89
+ config.routes.push({
90
90
  src: `/${isMain ? "" : entry.entryName}(?:/.*)?`,
91
91
  headers: {
92
92
  "cache-control": "s-maxage=0"
@@ -95,13 +95,13 @@ var deploy_default = () => ({
95
95
  });
96
96
  });
97
97
  } else {
98
- config2.routes.push({
98
+ config.routes.push({
99
99
  src: "/(.*)",
100
100
  dest: `/index`
101
101
  });
102
102
  }
103
103
  await fse.ensureDir(outputDirectory);
104
- await fse.writeJSON(path.join(outputDirectory, "config.json"), config2, {
104
+ await fse.writeJSON(path.join(outputDirectory, "config.json"), config, {
105
105
  spaces: 2
106
106
  });
107
107
  staticDirectory = path.join(outputDirectory, "static/static");
@@ -128,13 +128,6 @@ var deploy_default = () => ({
128
128
  });
129
129
  }
130
130
  }
131
- const { bff } = configContext;
132
- const config = {
133
- output: {
134
- path: "."
135
- },
136
- bff
137
- };
138
131
  const plugins = getInternalPlugins(appDirectory, serverInternalPlugins);
139
132
  const serverAppContext = {
140
133
  sharedDirectory: `path.join(__dirname, "${path.relative(appDirectory, sharedDirectory)}")`,
@@ -146,7 +139,7 @@ var deploy_default = () => ({
146
139
  console.log("deployTarget111111111", deployTarget);
147
140
  switch (deployTarget) {
148
141
  case "node": {
149
- const { genNodeEntry } = await import("./entrys/node");
142
+ const { genNodeEntry } = await import("./platforms/node");
150
143
  code = genNodeEntry({
151
144
  plugins,
152
145
  config: modernConfig,
@@ -155,8 +148,8 @@ var deploy_default = () => ({
155
148
  break;
156
149
  }
157
150
  case "vercel": {
158
- const { genVercelEntry } = await import("./entrys/vercel");
159
- code = genVercelEntry({
151
+ const { genVercelEntry } = await import("./platforms/vercel");
152
+ code = await genVercelEntry({
160
153
  plugins,
161
154
  config: modernConfig,
162
155
  appContext: serverAppContext
@@ -164,7 +157,7 @@ var deploy_default = () => ({
164
157
  break;
165
158
  }
166
159
  case "netlify": {
167
- const { genNetlifyEntry } = await import("./entrys/netlify");
160
+ const { genNetlifyEntry } = await import("./platforms/netlify");
168
161
  code = genNetlifyEntry({
169
162
  plugins,
170
163
  config: modernConfig,
@@ -0,0 +1,23 @@
1
+ import path from "node:path";
2
+ import { ROUTE_SPEC_FILE, DEFAULT_SERVER_CONFIG, fs as fse } from "@modern-js/utils";
3
+ import { genPluginImportsCode, getPluginsCode, severAppContextTemplate } from "../utils";
4
+ async function genVercelEntry({ config, plugins, appContext } = {}) {
5
+ const defaultConfig = {
6
+ output: {
7
+ path: "."
8
+ }
9
+ };
10
+ const pluginImportCode = genPluginImportsCode(plugins || []);
11
+ const dynamicProdOptions = {
12
+ config: `${JSON.stringify(config || defaultConfig)}`,
13
+ serverConfigFile: DEFAULT_SERVER_CONFIG,
14
+ plugins: `${getPluginsCode(plugins || [])}`,
15
+ appContext: `${appContext ? severAppContextTemplate(appContext) : "undefined"}`
16
+ };
17
+ let entryCode = (await fse.readFile(path.join(__dirname, "./vercelEntry.js"))).toString();
18
+ entryCode = entryCode.replace("p_genPluginImportsCode", pluginImportCode).replace("p_ROUTE_SPEC_FILE", ROUTE_SPEC_FILE).replace("p_dynamicProdOptions", JSON.stringify(dynamicProdOptions));
19
+ return entryCode;
20
+ }
21
+ export {
22
+ genVercelEntry
23
+ };
@@ -0,0 +1,63 @@
1
+ var __getOwnPropNames = Object.getOwnPropertyNames;
2
+ var __commonJS = (cb, mod) => function __require() {
3
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
4
+ };
5
+ var require_vercelEntry = __commonJS({
6
+ "src/plugins/deploy/platforms/vercelEntry.js"(exports, module) {
7
+ const fs = require("node:fs/promises");
8
+ const path = require("node:path");
9
+ const { createProdServer } = require("@modern-js/prod-server");
10
+ p_genPluginImportsCode;
11
+ if (!process.env.NODE_ENV) {
12
+ process.env.NODE_ENV = "production";
13
+ }
14
+ let requestHandler = null;
15
+ let handlerCreationPromise = null;
16
+ async function loadRoutes(routeFilepath) {
17
+ try {
18
+ await fs.access(routeFilepath);
19
+ const content = await fs.readFile(routeFilepath, "utf-8");
20
+ const routeSpec = JSON.parse(content);
21
+ return routeSpec.routes || [];
22
+ } catch (error) {
23
+ console.warn("route.json not found or invalid, continuing with empty routes.");
24
+ return [];
25
+ }
26
+ }
27
+ async function initServer() {
28
+ const routeFilepath = path.join(__dirname, p_ROUTE_SPEC_FILE);
29
+ const routes = await loadRoutes(routeFilepath);
30
+ const dynamicProdOptions = p_dynamicProdOptions;
31
+ const prodServerOptions = {
32
+ pwd: __dirname,
33
+ routes,
34
+ disableCustomHook: true,
35
+ ...dynamicProdOptions
36
+ };
37
+ const app = await createProdServer(prodServerOptions);
38
+ return app.getRequestListener();
39
+ }
40
+ async function createHandler() {
41
+ if (!handlerCreationPromise) {
42
+ handlerCreationPromise = (async () => {
43
+ try {
44
+ requestHandler = await initServer();
45
+ } catch (error) {
46
+ console.error("Error creating server:", error);
47
+ process.exit(1);
48
+ }
49
+ })();
50
+ }
51
+ await handlerCreationPromise;
52
+ return requestHandler;
53
+ }
54
+ createHandler();
55
+ module.exports = async (req, res) => {
56
+ if (!requestHandler) {
57
+ await createHandler();
58
+ }
59
+ return requestHandler(req, res);
60
+ };
61
+ }
62
+ });
63
+ export default require_vercelEntry();
@@ -0,0 +1 @@
1
+ export {};
@@ -2,4 +2,4 @@ export declare function genVercelEntry({ config, plugins, appContext, }?: {
2
2
  config?: Record<string, any>;
3
3
  plugins?: string[];
4
4
  appContext?: Record<string, any>;
5
- }): string;
5
+ }): Promise<string>;
@@ -0,0 +1,2 @@
1
+ declare function _exports(req: any, res: any): Promise<any>;
2
+ export = _exports;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.49.3-alpha.7",
18
+ "version": "2.49.3-alpha.9",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -80,20 +80,20 @@
80
80
  "mlly": "^1.6.1",
81
81
  "pkg-types": "^1.1.0",
82
82
  "std-env": "^3.7.0",
83
- "@modern-js/core": "2.49.2",
84
- "@modern-js/prod-server": "2.49.2",
85
- "@modern-js/plugin": "2.49.2",
86
83
  "@modern-js/node-bundle-require": "2.49.2",
87
- "@modern-js/plugin-i18n": "2.49.2",
88
- "@modern-js/rsbuild-plugin-esbuild": "2.49.2",
84
+ "@modern-js/plugin-data-loader": "2.49.2",
85
+ "@modern-js/plugin-lint": "2.49.2",
86
+ "@modern-js/plugin": "2.49.2",
87
+ "@modern-js/core": "2.49.2",
89
88
  "@modern-js/server": "2.49.2",
90
- "@modern-js/server-core": "2.49.2",
89
+ "@modern-js/plugin-i18n": "2.49.2",
91
90
  "@modern-js/server-utils": "2.49.2",
91
+ "@modern-js/prod-server": "2.49.2",
92
+ "@modern-js/server-core": "2.49.2",
93
+ "@modern-js/rsbuild-plugin-esbuild": "2.49.2",
92
94
  "@modern-js/types": "2.49.2",
93
- "@modern-js/uni-builder": "2.49.2",
94
95
  "@modern-js/utils": "2.49.2",
95
- "@modern-js/plugin-lint": "2.49.2",
96
- "@modern-js/plugin-data-loader": "2.49.2"
96
+ "@modern-js/uni-builder": "2.49.2"
97
97
  },
98
98
  "devDependencies": {
99
99
  "@rsbuild/plugin-swc": "0.6.10",
@@ -1,94 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var vercel_exports = {};
20
- __export(vercel_exports, {
21
- genVercelEntry: () => genVercelEntry
22
- });
23
- module.exports = __toCommonJS(vercel_exports);
24
- var import_utils = require("@modern-js/utils");
25
- var import_utils2 = require("../utils");
26
- function genVercelEntry({ config, plugins, appContext } = {}) {
27
- const defaultConfig = {
28
- server: {
29
- port: 8080
30
- },
31
- output: {
32
- path: "."
33
- }
34
- };
35
- return `
36
-
37
- const fs = require('node:fs/promises');
38
- const path = require('node:path');
39
- const { createProdServer } = require('@modern-js/prod-server');
40
- ${(0, import_utils2.genPluginImportsCode)(plugins || [])}
41
-
42
- if(!process.env.NODE_ENV){
43
- process.env.NODE_ENV = 'production';
44
- }
45
-
46
- let requestHandler = null;
47
- async function createHandler() {
48
- try {
49
- let routes = [];
50
- const routeFilepath = path.join(__dirname, "${import_utils.ROUTE_SPEC_FILE}");
51
- try {
52
- await fs.access(routeFilepath);
53
- const content = await fs.readFile(routeFilepath, "utf-8");
54
- const routeSpec = JSON.parse(content);
55
- routes = routeSpec.routes;
56
- } catch (error) {
57
- console.warn('route.json not found, continuing with empty routes.');
58
- }
59
-
60
- const prodServerOptions = {
61
- pwd: __dirname,
62
- routes,
63
- config: ${JSON.stringify(config || defaultConfig)},
64
- serverConfigFile: '${import_utils.DEFAULT_SERVER_CONFIG}',
65
- plugins: ${(0, import_utils2.getPluginsCode)(plugins || [])},
66
- appContext: ${appContext ? (0, import_utils2.severAppContextTemplate)(appContext) : "undefined"},
67
- disableCustomHook: true
68
- }
69
-
70
- const app = await createProdServer(prodServerOptions)
71
-
72
- requestHandler = app.getRequestListener();
73
-
74
- return requestHandler;
75
- } catch(error) {
76
- console.error(error);
77
- process.exit(1);
78
- }
79
- }
80
-
81
- createHandler();
82
-
83
- module.exports = async(req, res) => {
84
- if(typeof requestHandler !== 'function'){
85
- await createHandler();
86
- }
87
- return requestHandler(req, res);
88
- }
89
- `;
90
- }
91
- // Annotate the CommonJS export names for ESM import in node:
92
- 0 && (module.exports = {
93
- genVercelEntry
94
- });
@@ -1,40 +0,0 @@
1
- import { ROUTE_SPEC_FILE, DEFAULT_SERVER_CONFIG } from "@modern-js/utils";
2
- import { genPluginImportsCode, getPluginsCode, severAppContextTemplate } from "../utils";
3
- function genVercelEntry() {
4
- var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, config = _ref.config, plugins = _ref.plugins, appContext = _ref.appContext;
5
- var defaultConfig = {
6
- server: {
7
- port: 8080
8
- },
9
- output: {
10
- path: "."
11
- }
12
- };
13
- return "\n\n const fs = require('node:fs/promises');\n const path = require('node:path');\n const { createProdServer } = require('@modern-js/prod-server');\n ".concat(genPluginImportsCode(plugins || []), `
14
-
15
- if(!process.env.NODE_ENV){
16
- process.env.NODE_ENV = 'production';
17
- }
18
-
19
- let requestHandler = null;
20
- async function createHandler() {
21
- try {
22
- let routes = [];
23
- const routeFilepath = path.join(__dirname, "`).concat(ROUTE_SPEC_FILE, `");
24
- try {
25
- await fs.access(routeFilepath);
26
- const content = await fs.readFile(routeFilepath, "utf-8");
27
- const routeSpec = JSON.parse(content);
28
- routes = routeSpec.routes;
29
- } catch (error) {
30
- console.warn('route.json not found, continuing with empty routes.');
31
- }
32
-
33
- const prodServerOptions = {
34
- pwd: __dirname,
35
- routes,
36
- config: `).concat(JSON.stringify(config || defaultConfig), ",\n serverConfigFile: '").concat(DEFAULT_SERVER_CONFIG, "',\n plugins: ").concat(getPluginsCode(plugins || []), ",\n appContext: ").concat(appContext ? severAppContextTemplate(appContext) : "undefined", ",\n disableCustomHook: true\n }\n\n const app = await createProdServer(prodServerOptions)\n\n requestHandler = app.getRequestListener();\n\n return requestHandler;\n } catch(error) {\n console.error(error);\n process.exit(1);\n }\n }\n\n createHandler();\n\n module.exports = async(req, res) => {\n if(typeof requestHandler !== 'function'){\n await createHandler();\n }\n return requestHandler(req, res);\n }\n ");
37
- }
38
- export {
39
- genVercelEntry
40
- };
@@ -1,70 +0,0 @@
1
- import { ROUTE_SPEC_FILE, DEFAULT_SERVER_CONFIG } from "@modern-js/utils";
2
- import { genPluginImportsCode, getPluginsCode, severAppContextTemplate } from "../utils";
3
- function genVercelEntry({ config, plugins, appContext } = {}) {
4
- const defaultConfig = {
5
- server: {
6
- port: 8080
7
- },
8
- output: {
9
- path: "."
10
- }
11
- };
12
- return `
13
-
14
- const fs = require('node:fs/promises');
15
- const path = require('node:path');
16
- const { createProdServer } = require('@modern-js/prod-server');
17
- ${genPluginImportsCode(plugins || [])}
18
-
19
- if(!process.env.NODE_ENV){
20
- process.env.NODE_ENV = 'production';
21
- }
22
-
23
- let requestHandler = null;
24
- async function createHandler() {
25
- try {
26
- let routes = [];
27
- const routeFilepath = path.join(__dirname, "${ROUTE_SPEC_FILE}");
28
- try {
29
- await fs.access(routeFilepath);
30
- const content = await fs.readFile(routeFilepath, "utf-8");
31
- const routeSpec = JSON.parse(content);
32
- routes = routeSpec.routes;
33
- } catch (error) {
34
- console.warn('route.json not found, continuing with empty routes.');
35
- }
36
-
37
- const prodServerOptions = {
38
- pwd: __dirname,
39
- routes,
40
- config: ${JSON.stringify(config || defaultConfig)},
41
- serverConfigFile: '${DEFAULT_SERVER_CONFIG}',
42
- plugins: ${getPluginsCode(plugins || [])},
43
- appContext: ${appContext ? severAppContextTemplate(appContext) : "undefined"},
44
- disableCustomHook: true
45
- }
46
-
47
- const app = await createProdServer(prodServerOptions)
48
-
49
- requestHandler = app.getRequestListener();
50
-
51
- return requestHandler;
52
- } catch(error) {
53
- console.error(error);
54
- process.exit(1);
55
- }
56
- }
57
-
58
- createHandler();
59
-
60
- module.exports = async(req, res) => {
61
- if(typeof requestHandler !== 'function'){
62
- await createHandler();
63
- }
64
- return requestHandler(req, res);
65
- }
66
- `;
67
- }
68
- export {
69
- genVercelEntry
70
- };