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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cjs/builder/builder-webpack/index.js +1 -1
  2. package/dist/cjs/commands/build.js +3 -0
  3. package/dist/cjs/commands/dev.js +16 -16
  4. package/dist/cjs/commands/serve.js +14 -22
  5. package/dist/cjs/index.js +3 -1
  6. package/dist/cjs/plugins/deploy/dependencies.js +257 -0
  7. package/dist/cjs/plugins/deploy/entrys/netlify.js +95 -0
  8. package/dist/cjs/plugins/deploy/entrys/node.js +88 -0
  9. package/dist/cjs/plugins/deploy/entrys/vercel.js +95 -0
  10. package/dist/cjs/plugins/deploy/index.js +140 -0
  11. package/dist/cjs/plugins/deploy/utils.js +150 -0
  12. package/dist/cjs/utils/createServer.js +5 -27
  13. package/dist/cjs/utils/env.js +2 -2
  14. package/dist/cjs/utils/register.js +103 -0
  15. package/dist/esm/builder/builder-webpack/index.js +1 -1
  16. package/dist/esm/commands/build.js +16 -9
  17. package/dist/esm/commands/dev.js +34 -38
  18. package/dist/esm/commands/serve.js +28 -32
  19. package/dist/esm/index.js +3 -1
  20. package/dist/esm/plugins/deploy/dependencies.js +726 -0
  21. package/dist/esm/plugins/deploy/entrys/netlify.js +41 -0
  22. package/dist/esm/plugins/deploy/entrys/node.js +39 -0
  23. package/dist/esm/plugins/deploy/entrys/vercel.js +41 -0
  24. package/dist/esm/plugins/deploy/index.js +219 -0
  25. package/dist/esm/plugins/deploy/utils.js +244 -0
  26. package/dist/esm/utils/createServer.js +14 -50
  27. package/dist/esm/utils/env.js +1 -1
  28. package/dist/esm/utils/register.js +129 -0
  29. package/dist/esm-node/builder/builder-webpack/index.js +1 -1
  30. package/dist/esm-node/commands/build.js +3 -0
  31. package/dist/esm-node/commands/dev.js +17 -17
  32. package/dist/esm-node/commands/serve.js +14 -12
  33. package/dist/esm-node/index.js +3 -1
  34. package/dist/esm-node/plugins/deploy/dependencies.js +223 -0
  35. package/dist/esm-node/plugins/deploy/entrys/netlify.js +71 -0
  36. package/dist/esm-node/plugins/deploy/entrys/node.js +64 -0
  37. package/dist/esm-node/plugins/deploy/entrys/vercel.js +71 -0
  38. package/dist/esm-node/plugins/deploy/index.js +110 -0
  39. package/dist/esm-node/plugins/deploy/utils.js +109 -0
  40. package/dist/esm-node/utils/createServer.js +6 -17
  41. package/dist/esm-node/utils/env.js +1 -1
  42. package/dist/esm-node/utils/register.js +69 -0
  43. package/dist/types/plugins/deploy/dependencies.d.ts +1 -0
  44. package/dist/types/plugins/deploy/entrys/netlify.d.ts +5 -0
  45. package/dist/types/plugins/deploy/entrys/node.d.ts +5 -0
  46. package/dist/types/plugins/deploy/entrys/vercel.d.ts +5 -0
  47. package/dist/types/plugins/deploy/index.d.ts +4 -0
  48. package/dist/types/plugins/deploy/utils.d.ts +27 -0
  49. package/dist/types/types/config/tools.d.ts +1 -1
  50. package/dist/types/utils/createServer.d.ts +4 -9
  51. package/dist/types/utils/register.d.ts +3 -0
  52. package/package.json +28 -22
@@ -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
  ]);
@@ -25,13 +25,16 @@ var import_core = require("@modern-js/core");
25
25
  var import_utils = require("@modern-js/utils");
26
26
  var import_routes = require("../utils/routes");
27
27
  var import_config = require("../utils/config");
28
+ var import_register = require("../utils/register");
28
29
  const build = async (api, options) => {
30
+ var _resolvedConfig_source;
29
31
  if (options === null || options === void 0 ? void 0 : options.analyze) {
30
32
  process.env.BUNDLE_ANALYZE = "true";
31
33
  }
32
34
  let resolvedConfig = api.useResolvedConfigContext();
33
35
  const appContext = api.useAppContext();
34
36
  const hookRunners = api.useHookRunners();
37
+ await (0, import_register.registerCompiler)(appContext.appDirectory, appContext.distDirectory, resolvedConfig === null || resolvedConfig === void 0 ? void 0 : (_resolvedConfig_source = resolvedConfig.source) === null || _resolvedConfig_source === void 0 ? void 0 : _resolvedConfig_source.alias);
35
38
  const { apiOnly } = appContext;
36
39
  if (apiOnly) {
37
40
  const { appDirectory: appDirectory2, distDirectory: distDirectory2, serverConfigFile: serverConfigFile2 } = appContext;
@@ -23,25 +23,29 @@ __export(dev_exports, {
23
23
  module.exports = __toCommonJS(dev_exports);
24
24
  var import_core = require("@modern-js/core");
25
25
  var import_utils = require("@modern-js/utils");
26
+ var import_server = require("@modern-js/server");
27
+ var import_prod_server = require("@modern-js/prod-server");
28
+ var import_register = require("../utils/register");
26
29
  var import_printInstructions = require("../utils/printInstructions");
27
30
  var import_createServer = require("../utils/createServer");
28
31
  var import_routes = require("../utils/routes");
29
32
  var import_config = require("../utils/config");
30
33
  var import_getServerInternalPlugins = require("../utils/getServerInternalPlugins");
31
34
  const dev = async (api, options, devServerOptions = {}) => {
32
- var _normalizedConfig_tools;
35
+ var _normalizedConfig_source, _normalizedConfig_tools;
33
36
  if (options.analyze) {
34
37
  process.env.BUNDLE_ANALYZE = "true";
35
38
  }
36
39
  let normalizedConfig = api.useResolvedConfigContext();
37
40
  const appContext = api.useAppContext();
38
41
  const hookRunners = api.useHookRunners();
42
+ await (0, import_register.registerCompiler)(appContext.appDirectory, appContext.distDirectory, normalizedConfig === null || normalizedConfig === void 0 ? void 0 : (_normalizedConfig_source = normalizedConfig.source) === null || _normalizedConfig_source === void 0 ? void 0 : _normalizedConfig_source.alias);
39
43
  normalizedConfig = {
40
44
  ...normalizedConfig,
41
45
  cliOptions: options
42
46
  };
43
47
  import_core.ResolvedConfigContext.set(normalizedConfig);
44
- const { appDirectory, distDirectory, port, apiOnly, serverConfigFile, metaName } = appContext;
48
+ const { appDirectory, distDirectory, port, apiOnly, serverConfigFile, metaName, serverRoutes } = appContext;
45
49
  await (0, import_config.buildServerConfig)({
46
50
  appDirectory,
47
51
  distDirectory,
@@ -55,6 +59,7 @@ const dev = async (api, options, devServerOptions = {}) => {
55
59
  await (0, import_routes.generateRoutes)(appContext);
56
60
  const serverInternalPlugins = await (0, import_getServerInternalPlugins.getServerInternalPlugins)(api);
57
61
  const serverOptions = {
62
+ metaName,
58
63
  dev: {
59
64
  port,
60
65
  https: normalizedConfig.dev.https,
@@ -62,37 +67,32 @@ const dev = async (api, options, devServerOptions = {}) => {
62
67
  ...(_normalizedConfig_tools = normalizedConfig.tools) === null || _normalizedConfig_tools === void 0 ? void 0 : _normalizedConfig_tools.devServer
63
68
  },
64
69
  appContext: {
65
- metaName,
66
- appDirectory: appContext.appDirectory,
67
- sharedDirectory: appContext.sharedDirectory,
70
+ appDirectory,
68
71
  apiDirectory: appContext.apiDirectory,
69
- lambdaDirectory: appContext.lambdaDirectory
72
+ lambdaDirectory: appContext.lambdaDirectory,
73
+ sharedDirectory: appContext.sharedDirectory
70
74
  },
75
+ routes: serverRoutes,
71
76
  pwd: appDirectory,
72
77
  config: normalizedConfig,
73
78
  serverConfigFile,
74
- internalPlugins: (0, import_createServer.injectDataLoaderPlugin)(serverInternalPlugins),
79
+ internalPlugins: serverInternalPlugins,
75
80
  ...devServerOptions
76
81
  };
77
82
  if (apiOnly) {
78
83
  var _normalizedConfig_dev;
79
- const app = await (0, import_createServer.createServer)({
80
- ...serverOptions,
81
- compiler: null
82
- });
84
+ const app = await (0, import_server.createDevServer)(serverOptions, import_prod_server.initProdMiddlewares);
83
85
  const host = ((_normalizedConfig_dev = normalizedConfig.dev) === null || _normalizedConfig_dev === void 0 ? void 0 : _normalizedConfig_dev.host) || import_utils.DEFAULT_DEV_HOST;
84
86
  app.listen({
85
87
  port,
86
88
  host
87
- }, async (err) => {
88
- if (err) {
89
- throw err;
90
- }
89
+ }, () => {
91
90
  (0, import_printInstructions.printInstructions)(hookRunners, appContext, normalizedConfig);
92
91
  });
93
92
  } else {
94
93
  const { server } = await appContext.builder.startDevServer({
95
- serverOptions
94
+ serverOptions,
95
+ initProdMiddlewares: import_prod_server.initProdMiddlewares
96
96
  });
97
97
  (0, import_createServer.setServer)(server);
98
98
  }
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
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
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var serve_exports = {};
30
20
  __export(serve_exports, {
@@ -32,21 +22,25 @@ __export(serve_exports, {
32
22
  });
33
23
  module.exports = __toCommonJS(serve_exports);
34
24
  var import_utils = require("@modern-js/utils");
35
- var import_prod_server = __toESM(require("@modern-js/prod-server"));
25
+ var import_prod_server = require("@modern-js/prod-server");
36
26
  var import_printInstructions = require("../utils/printInstructions");
37
- var import_createServer = require("../utils/createServer");
38
27
  var import_getServerInternalPlugins = require("../utils/getServerInternalPlugins");
39
28
  const start = async (api) => {
40
29
  var _userConfig_source, _userConfig_output_distPath;
41
30
  const appContext = api.useAppContext();
42
31
  const userConfig = api.useResolvedConfigContext();
43
32
  const hookRunners = api.useHookRunners();
44
- const { appDirectory, port, serverConfigFile, metaName } = appContext;
33
+ const { distDirectory, appDirectory, port, serverConfigFile, metaName, serverRoutes } = appContext;
45
34
  import_utils.logger.info(`Starting production server...`);
46
35
  const apiOnly = await (0, import_utils.isApiOnly)(appContext.appDirectory, userConfig === null || userConfig === void 0 ? void 0 : (_userConfig_source = userConfig.source) === null || _userConfig_source === void 0 ? void 0 : _userConfig_source.entriesDir, appContext.apiDirectory);
36
+ let runMode;
37
+ if (apiOnly) {
38
+ runMode = "apiOnly";
39
+ }
47
40
  const serverInternalPlugins = await (0, import_getServerInternalPlugins.getServerInternalPlugins)(api);
48
- const app = await (0, import_prod_server.default)({
49
- pwd: appDirectory,
41
+ const app = await (0, import_prod_server.createProdServer)({
42
+ metaName,
43
+ pwd: distDirectory,
50
44
  config: {
51
45
  ...userConfig,
52
46
  dev: userConfig.dev,
@@ -55,20 +49,18 @@ const start = async (api) => {
55
49
  ...userConfig.output || {}
56
50
  }
57
51
  },
52
+ routes: serverRoutes,
58
53
  appContext: {
59
- metaName,
54
+ appDirectory,
60
55
  sharedDirectory: (0, import_utils.getTargetDir)(appContext.sharedDirectory, appContext.appDirectory, appContext.distDirectory),
61
56
  apiDirectory: (0, import_utils.getTargetDir)(appContext.apiDirectory, appContext.appDirectory, appContext.distDirectory),
62
57
  lambdaDirectory: (0, import_utils.getTargetDir)(appContext.lambdaDirectory, appContext.appDirectory, appContext.distDirectory)
63
58
  },
64
59
  serverConfigFile,
65
- internalPlugins: (0, import_createServer.injectDataLoaderPlugin)(serverInternalPlugins),
66
- apiOnly
60
+ internalPlugins: serverInternalPlugins,
61
+ runMode
67
62
  });
68
- app.listen(port, async (err) => {
69
- if (err) {
70
- throw err;
71
- }
63
+ app.listen(port, async () => {
72
64
  await (0, import_printInstructions.printInstructions)(hookRunners, appContext, userConfig);
73
65
  });
74
66
  };
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
+ });