@modern-js/app-tools 2.49.0 → 2.49.1-alpha.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. package/dist/cjs/builder/builder-webpack/index.js +1 -1
  2. package/dist/cjs/index.js +3 -1
  3. package/dist/cjs/plugins/deploy/dependencies.js +257 -0
  4. package/dist/cjs/plugins/deploy/entrys/netlify.js +95 -0
  5. package/dist/cjs/plugins/deploy/entrys/node.js +88 -0
  6. package/dist/cjs/plugins/deploy/entrys/vercel.js +95 -0
  7. package/dist/cjs/plugins/deploy/index.js +140 -0
  8. package/dist/cjs/plugins/deploy/utils.js +150 -0
  9. package/dist/esm/builder/builder-webpack/index.js +1 -1
  10. package/dist/esm/index.js +3 -1
  11. package/dist/esm/plugins/deploy/dependencies.js +726 -0
  12. package/dist/esm/plugins/deploy/entrys/netlify.js +41 -0
  13. package/dist/esm/plugins/deploy/entrys/node.js +39 -0
  14. package/dist/esm/plugins/deploy/entrys/vercel.js +41 -0
  15. package/dist/esm/plugins/deploy/index.js +219 -0
  16. package/dist/esm/plugins/deploy/utils.js +244 -0
  17. package/dist/esm-node/builder/builder-webpack/index.js +1 -1
  18. package/dist/esm-node/index.js +3 -1
  19. package/dist/esm-node/plugins/deploy/dependencies.js +223 -0
  20. package/dist/esm-node/plugins/deploy/entrys/netlify.js +71 -0
  21. package/dist/esm-node/plugins/deploy/entrys/node.js +64 -0
  22. package/dist/esm-node/plugins/deploy/entrys/vercel.js +71 -0
  23. package/dist/esm-node/plugins/deploy/index.js +110 -0
  24. package/dist/esm-node/plugins/deploy/utils.js +109 -0
  25. package/dist/types/plugins/deploy/dependencies.d.ts +1 -0
  26. package/dist/types/plugins/deploy/entrys/netlify.d.ts +5 -0
  27. package/dist/types/plugins/deploy/entrys/node.d.ts +5 -0
  28. package/dist/types/plugins/deploy/entrys/vercel.d.ts +5 -0
  29. package/dist/types/plugins/deploy/index.d.ts +4 -0
  30. package/dist/types/plugins/deploy/utils.d.ts +27 -0
  31. package/dist/types/types/config/tools.d.ts +1 -1
  32. package/package.json +16 -13
@@ -38,7 +38,7 @@ async function createWebpackBuilderForModern(options) {
38
38
  const { normalizedConfig } = options;
39
39
  if (normalizedConfig.tools.esbuild) {
40
40
  const { esbuild: esbuildOptions } = normalizedConfig.tools;
41
- const { pluginEsbuild } = await Promise.resolve().then(() => __toESM(require("@rsbuild/plugin-esbuild")));
41
+ const { pluginEsbuild } = await Promise.resolve().then(() => __toESM(require("@modern-js/rsbuild-plugin-esbuild")));
42
42
  builder.addPlugins([
43
43
  pluginEsbuild(esbuildOptions)
44
44
  ]);
package/dist/cjs/index.js CHANGED
@@ -47,6 +47,7 @@ var import_initialize = __toESM(require("./initialize"));
47
47
  var import_hooks = require("./hooks");
48
48
  var import_locale = require("./locale");
49
49
  var import_serverBuild = __toESM(require("./plugins/serverBuild"));
50
+ var import_deploy = __toESM(require("./plugins/deploy"));
50
51
  var import_restart = require("./utils/restart");
51
52
  var import_generateWatchFiles = require("./utils/generateWatchFiles");
52
53
  var import_core = require("@modern-js/core");
@@ -120,7 +121,8 @@ const appTools = (options = {
120
121
  bundler: (options === null || options === void 0 ? void 0 : options.bundler) === "experimental-rspack" ? "rspack" : "webpack"
121
122
  }),
122
123
  (0, import_serverBuild.default)(),
123
- (0, import_plugin_lint.lintPlugin)()
124
+ (0, import_plugin_lint.lintPlugin)(),
125
+ (0, import_deploy.default)()
124
126
  ],
125
127
  setup: (api) => {
126
128
  const appContext = api.useAppContext();
@@ -0,0 +1,257 @@
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 dependencies_exports = {};
30
+ __export(dependencies_exports, {
31
+ handleDependencies: () => handleDependencies
32
+ });
33
+ module.exports = __toCommonJS(dependencies_exports);
34
+ var import_node_path = __toESM(require("node:path"));
35
+ var import_nft = require("@vercel/nft");
36
+ var import_utils = require("@modern-js/utils");
37
+ var import_pkg_types = require("pkg-types");
38
+ var import_mlly = require("mlly");
39
+ var import_utils2 = require("./utils");
40
+ const readDirRecursive = async (dir) => {
41
+ const files = await import_utils.fs.readdir(dir, {
42
+ withFileTypes: true
43
+ });
44
+ const filesAndDirs = await Promise.all(files.map(async (file) => {
45
+ const resPath = import_node_path.default.resolve(dir, file.name);
46
+ return file.isDirectory() ? readDirRecursive(resPath) : resPath;
47
+ }));
48
+ return filesAndDirs.flat();
49
+ };
50
+ async function isFile(file) {
51
+ try {
52
+ const stat = await import_utils.fs.stat(file);
53
+ return stat.isFile();
54
+ } catch (error) {
55
+ if (error.code === "ENOENT") {
56
+ return false;
57
+ }
58
+ throw error;
59
+ }
60
+ }
61
+ const findEntryFiles = async (rootDir) => {
62
+ const files = await readDirRecursive(rootDir);
63
+ return files;
64
+ };
65
+ const handleDependencies = async (appDir, serverRootDir, include) => {
66
+ const base = "/";
67
+ const entryFiles = await findEntryFiles(serverRootDir);
68
+ const includeEntries = include.map((item) => {
69
+ if ((0, import_node_path.isAbsolute)(item)) {
70
+ return item;
71
+ }
72
+ try {
73
+ return require.resolve(item);
74
+ } catch (error) {
75
+ }
76
+ return item;
77
+ });
78
+ const _fileTrace = await (0, import_nft.nodeFileTrace)(entryFiles.concat(includeEntries), {
79
+ base,
80
+ processCwd: serverRootDir,
81
+ resolve: async (id, parent, job, isCjs) => {
82
+ if (id.startsWith("@modern-js/prod-server")) {
83
+ return require.resolve(id, {
84
+ paths: [
85
+ require.resolve("@modern-js/app-tools")
86
+ ]
87
+ });
88
+ } else {
89
+ return (0, import_nft.resolve)(id, parent, job, isCjs);
90
+ }
91
+ }
92
+ });
93
+ const currentProjectModules = import_node_path.default.join(appDir, "node_modules");
94
+ const _resolveTracedPath = (p) => import_utils.fs.realpath(import_node_path.default.resolve(base, p));
95
+ const tracedFiles = Object.fromEntries(await Promise.all([
96
+ ..._fileTrace.reasons.entries()
97
+ ].map(async ([_path, reasons]) => {
98
+ if (reasons.ignored) {
99
+ return;
100
+ }
101
+ const filePath = await _resolveTracedPath(_path);
102
+ if (filePath.startsWith(serverRootDir) || filePath.startsWith(appDir) && !filePath.startsWith(currentProjectModules)) {
103
+ return;
104
+ }
105
+ if (!await isFile(filePath)) {
106
+ return;
107
+ }
108
+ let baseDir;
109
+ let pkgName;
110
+ let subpath;
111
+ let pkgPath;
112
+ if (filePath.includes("node_modules")) {
113
+ const parsed = (0, import_mlly.parseNodeModulePath)(filePath);
114
+ baseDir = parsed.dir;
115
+ pkgName = parsed.name;
116
+ subpath = parsed.subpath;
117
+ pkgPath = import_node_path.default.join(baseDir, pkgName);
118
+ } else {
119
+ const MODERN_UTILS_PATH = "packages/toolkit/utils";
120
+ const MODERN_UTILS_PATH_REGEX = new RegExp(`(.*${MODERN_UTILS_PATH})`);
121
+ const match = filePath.match(MODERN_UTILS_PATH_REGEX);
122
+ const packageJsonPath = match ? import_node_path.default.join(match[0], "package.json") : await (0, import_utils.pkgUp)({
123
+ cwd: import_node_path.default.dirname(filePath)
124
+ });
125
+ if (packageJsonPath) {
126
+ const packageJson = await import_utils.fs.readJSON(packageJsonPath);
127
+ pkgPath = baseDir = import_node_path.default.dirname(packageJsonPath);
128
+ subpath = import_node_path.default.relative(baseDir, filePath);
129
+ pkgName = packageJson.name;
130
+ }
131
+ }
132
+ if (!baseDir) {
133
+ return;
134
+ }
135
+ const parents = await Promise.all([
136
+ ...reasons.parents
137
+ ].map((p) => _resolveTracedPath(p)));
138
+ const tracedFile = {
139
+ path: filePath,
140
+ parents,
141
+ subpath,
142
+ pkgName,
143
+ pkgPath
144
+ };
145
+ return [
146
+ filePath,
147
+ tracedFile
148
+ ];
149
+ })).then((r) => r.filter(Boolean)));
150
+ const tracedPackages = {};
151
+ for (const tracedFile of Object.values(tracedFiles)) {
152
+ const { pkgName } = tracedFile;
153
+ let tracedPackage = tracedPackages[pkgName];
154
+ let pkgJSON = await (0, import_pkg_types.readPackageJSON)(tracedFile.pkgPath, {
155
+ cache: true
156
+ }).catch(() => {
157
+ });
158
+ if (!pkgJSON) {
159
+ pkgJSON = {
160
+ name: pkgName,
161
+ version: "0.0.0"
162
+ };
163
+ }
164
+ if (!tracedPackage) {
165
+ tracedPackage = {
166
+ name: pkgName,
167
+ versions: {}
168
+ };
169
+ tracedPackages[pkgName] = tracedPackage;
170
+ }
171
+ let tracedPackageVersion = tracedPackage.versions[pkgJSON.version];
172
+ if (!tracedPackageVersion) {
173
+ tracedPackageVersion = {
174
+ path: tracedFile.pkgPath,
175
+ files: [],
176
+ pkgJSON
177
+ };
178
+ tracedPackage.versions[pkgJSON.version] = tracedPackageVersion;
179
+ }
180
+ tracedFile.path.startsWith(tracedFile.pkgPath) && tracedPackageVersion.path === tracedFile.pkgPath && tracedPackageVersion.files.push(tracedFile.path);
181
+ tracedFile.pkgName = pkgName;
182
+ tracedFile.pkgVersion = pkgJSON.version;
183
+ }
184
+ const findPackageParents = (pkg, version) => {
185
+ const versionFiles = pkg.versions[version].files.map((path2) => tracedFiles[path2]);
186
+ const parentPkgs = [
187
+ ...new Set(versionFiles.flatMap((file) => file.parents.map((parentPath) => {
188
+ const parentFile = tracedFiles[parentPath];
189
+ if (parentFile.pkgName === pkg.name) {
190
+ return null;
191
+ }
192
+ return `${parentFile.pkgName}@${parentFile.pkgVersion}`;
193
+ }).filter(Boolean)))
194
+ ];
195
+ return parentPkgs;
196
+ };
197
+ const multiVersionPkgs = {};
198
+ const singleVersionPackages = [];
199
+ for (const tracedPackage of Object.values(tracedPackages)) {
200
+ const versions = Object.keys(tracedPackage.versions);
201
+ if (versions.length === 1) {
202
+ singleVersionPackages.push(tracedPackage.name);
203
+ continue;
204
+ }
205
+ multiVersionPkgs[tracedPackage.name] = {};
206
+ for (const version of versions) {
207
+ multiVersionPkgs[tracedPackage.name][version] = findPackageParents(tracedPackage, version);
208
+ }
209
+ }
210
+ await Promise.all(singleVersionPackages.map((pkgName) => {
211
+ const pkg = tracedPackages[pkgName];
212
+ const version = Object.keys(pkg.versions)[0];
213
+ return (0, import_utils2.writePackage)(pkg, version, serverRootDir);
214
+ }));
215
+ console.log("multiVersionPkgs111111111", multiVersionPkgs);
216
+ for (const [pkgName, pkgVersions] of Object.entries(multiVersionPkgs)) {
217
+ const versionEntires = Object.entries(pkgVersions).sort(
218
+ // TODO: remove ts-ignore
219
+ // @ts-expect-error
220
+ ([v1, p1], [v2, p2]) => {
221
+ if (p1.length === 0) {
222
+ return -1;
223
+ }
224
+ if (p2.length === 0) {
225
+ return 1;
226
+ }
227
+ }
228
+ );
229
+ for (const [version, parentPkgs] of versionEntires) {
230
+ const pkg = tracedPackages[pkgName];
231
+ const pkgDestPath = `.modernjs/${pkgName}@${version}/node_modules/${pkgName}`;
232
+ await (0, import_utils2.writePackage)(pkg, version, serverRootDir, pkgDestPath);
233
+ await (0, import_utils2.linkPackage)(pkgDestPath, `${pkgName}`, serverRootDir);
234
+ for (const parentPkg of parentPkgs) {
235
+ const parentPkgName = parentPkg.replace(/@[^@]+$/, "");
236
+ await (multiVersionPkgs[parentPkgName] ? (0, import_utils2.linkPackage)(pkgDestPath, `.modernjs/${parentPkg}/node_modules/${pkgName}@${version}`, import_node_path.default.join(serverRootDir, "node_modules")) : (0, import_utils2.linkPackage)(pkgDestPath, `${parentPkgName}/node_modules/${pkgName}@${version}`, import_node_path.default.join(serverRootDir, "node_modules")));
237
+ }
238
+ }
239
+ }
240
+ const projectPkg = await (0, import_pkg_types.readPackageJSON)(serverRootDir).catch(() => ({}));
241
+ const outputPkgPath = import_node_path.default.join(serverRootDir, "package.json");
242
+ await import_utils.fs.writeJSON(outputPkgPath, {
243
+ name: `${projectPkg.name || "modernjs-project"}-prod`,
244
+ version: projectPkg.version || "0.0.0",
245
+ private: true,
246
+ dependencies: Object.fromEntries([
247
+ ...Object.values(tracedPackages).map((pkg) => [
248
+ pkg.name,
249
+ Object.keys(pkg.versions)[0]
250
+ ])
251
+ ].sort(([a], [b]) => a.localeCompare(b)))
252
+ });
253
+ };
254
+ // Annotate the CommonJS export names for ESM import in node:
255
+ 0 && (module.exports = {
256
+ handleDependencies
257
+ });
@@ -0,0 +1,95 @@
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 netlify_exports = {};
20
+ __export(netlify_exports, {
21
+ genNetlifyEntry: () => genNetlifyEntry
22
+ });
23
+ module.exports = __toCommonJS(netlify_exports);
24
+ var import_utils = require("@modern-js/utils");
25
+ var import_utils2 = require("../utils");
26
+ function genNetlifyEntry({ 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 { createNetlifyFunction } = require('@modern-js/prod-server/netlify');
40
+ ${(0, import_utils2.genPluginImportsCode)(plugins || [])}
41
+
42
+ let requestHandler = null;
43
+
44
+ if(!process.env.NODE_ENV){
45
+ process.env.NODE_ENV = 'production';
46
+ }
47
+
48
+ async function createHandler() {
49
+ try {
50
+ let routes = [];
51
+ const routeFilepath = path.join(__dirname, "${import_utils.ROUTE_SPEC_FILE}");
52
+ try {
53
+ await fs.access(routeFilepath);
54
+ const content = await fs.readFile(routeFilepath, "utf-8");
55
+ const routeSpec = JSON.parse(content);
56
+ routes = routeSpec.routes;
57
+ } catch (error) {
58
+ console.warn('route.json not found, continuing with empty routes.');
59
+ }
60
+
61
+ const prodServerOptions = {
62
+ pwd: __dirname,
63
+ routes,
64
+ config: ${JSON.stringify(config || defaultConfig)},
65
+ serverConfigFile: '${import_utils.DEFAULT_SERVER_CONFIG}',
66
+ plugins: ${(0, import_utils2.getPluginsCode)(plugins || [])},
67
+ appContext: ${appContext ? (0, import_utils2.severAppContextTemplate)(appContext) : "undefined"},
68
+ disableCustomHook: true
69
+ }
70
+
71
+ requestHandler = await createNetlifyFunction(prodServerOptions)
72
+
73
+ return requestHandler
74
+ } catch(error) {
75
+ console.error(error);
76
+ process.exit(1);
77
+ }
78
+ }
79
+
80
+ createHandler();
81
+
82
+ const handleRequest = async(request, context) => {
83
+ if(typeof requestHandler !== 'function'){
84
+ await createHandler();
85
+ }
86
+ return requestHandler(request, context);
87
+ }
88
+
89
+ export default handleRequest;
90
+ `;
91
+ }
92
+ // Annotate the CommonJS export names for ESM import in node:
93
+ 0 && (module.exports = {
94
+ genNetlifyEntry
95
+ });
@@ -0,0 +1,88 @@
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 node_exports = {};
20
+ __export(node_exports, {
21
+ genNodeEntry: () => genNodeEntry
22
+ });
23
+ module.exports = __toCommonJS(node_exports);
24
+ var import_utils = require("@modern-js/utils");
25
+ var import_utils2 = require("../utils");
26
+ function genNodeEntry({ 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
+ async function main() {
47
+ try {
48
+ let routes = [];
49
+ const routeFilepath = path.join(__dirname, "${import_utils.ROUTE_SPEC_FILE}");
50
+ try {
51
+ await fs.access(routeFilepath);
52
+ const content = await fs.readFile(routeFilepath, "utf-8");
53
+ const routeSpec = JSON.parse(content);
54
+ routes = routeSpec.routes;
55
+ } catch (error) {
56
+ console.warn('route.json not found, continuing with empty routes.');
57
+ }
58
+
59
+ const prodServerOptions = {
60
+ pwd: __dirname,
61
+ routes,
62
+ config: ${JSON.stringify(config || defaultConfig)},
63
+ serverConfigFile: '${import_utils.DEFAULT_SERVER_CONFIG}',
64
+ plugins: ${(0, import_utils2.getPluginsCode)(plugins || [])},
65
+ appContext: ${appContext ? (0, import_utils2.severAppContextTemplate)(appContext) : "undefined"},
66
+ disableCustomHook: true
67
+ }
68
+
69
+ const app = await createProdServer(prodServerOptions)
70
+
71
+ const port = process.env.PORT || 3000;
72
+
73
+ app.listen(port, () => {
74
+ console.log('\\x1b[32mServer is listening on port', port, '\\x1b[0m');
75
+ });
76
+ } catch(error) {
77
+ console.error(error);
78
+ process.exit(1);
79
+ }
80
+ }
81
+
82
+ main();
83
+ `;
84
+ }
85
+ // Annotate the CommonJS export names for ESM import in node:
86
+ 0 && (module.exports = {
87
+ genNodeEntry
88
+ });
@@ -0,0 +1,95 @@
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 { createNetlifyFunction } = require('@modern-js/prod-server/netlify');
40
+ ${(0, import_utils2.genPluginImportsCode)(plugins || [])}
41
+
42
+ let requestHandler = null;
43
+
44
+ if(!process.env.NODE_ENV){
45
+ process.env.NODE_ENV = 'production';
46
+ }
47
+
48
+ async function createHandler() {
49
+ try {
50
+ let routes = [];
51
+ const routeFilepath = path.join(__dirname, "${import_utils.ROUTE_SPEC_FILE}");
52
+ try {
53
+ await fs.access(routeFilepath);
54
+ const content = await fs.readFile(routeFilepath, "utf-8");
55
+ const routeSpec = JSON.parse(content);
56
+ routes = routeSpec.routes;
57
+ } catch (error) {
58
+ console.warn('route.json not found, continuing with empty routes.');
59
+ }
60
+
61
+ const prodServerOptions = {
62
+ pwd: __dirname,
63
+ routes,
64
+ config: ${JSON.stringify(config || defaultConfig)},
65
+ serverConfigFile: '${import_utils.DEFAULT_SERVER_CONFIG}',
66
+ plugins: ${(0, import_utils2.getPluginsCode)(plugins || [])},
67
+ appContext: ${appContext ? (0, import_utils2.severAppContextTemplate)(appContext) : "undefined"},
68
+ disableCustomHook: true
69
+ }
70
+
71
+ requestHandler = await createNetlifyFunction(prodServerOptions)
72
+
73
+ return requestHandler
74
+ } catch(error) {
75
+ console.error(error);
76
+ process.exit(1);
77
+ }
78
+ }
79
+
80
+ createHandler();
81
+
82
+ const handleRequest = async(request, context) => {
83
+ if(typeof requestHandler !== 'function'){
84
+ await createHandler();
85
+ }
86
+ return requestHandler(request, context);
87
+ }
88
+
89
+ export default handleRequest;
90
+ `;
91
+ }
92
+ // Annotate the CommonJS export names for ESM import in node:
93
+ 0 && (module.exports = {
94
+ genVercelEntry
95
+ });