@modern-js/app-tools 2.57.0 → 2.57.1-alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. package/dist/cjs/builder/builder-webpack/index.js +1 -1
  2. package/dist/cjs/builder/generator/index.js +2 -2
  3. package/dist/cjs/builder/index.js +2 -2
  4. package/dist/cjs/commands/build.js +19 -0
  5. package/dist/cjs/commands/dev.js +9 -0
  6. package/dist/cjs/commands/index.js +8 -8
  7. package/dist/cjs/esm/esbuild-loader.mjs +20 -0
  8. package/dist/cjs/esm/register-esm.mjs +65 -0
  9. package/dist/cjs/esm/ts-node-loader.mjs +21 -0
  10. package/dist/cjs/esm/utils.mjs +28 -0
  11. package/dist/cjs/index.js +1 -1
  12. package/dist/cjs/plugins/analyze/index.js +3 -3
  13. package/dist/cjs/plugins/deploy/dependencies/index.js +1 -0
  14. package/dist/cjs/plugins/deploy/dependencies/utils.js +12 -1
  15. package/dist/cjs/plugins/deploy/platforms/netlify-entry-cjs.js +1 -0
  16. package/dist/cjs/plugins/deploy/platforms/netlify-entry-mjs.js +10 -0
  17. package/dist/cjs/plugins/deploy/platforms/netlify.js +9 -2
  18. package/dist/cjs/plugins/deploy/platforms/netlifyEntry.js +26 -0
  19. package/dist/cjs/plugins/deploy/platforms/node.js +9 -2
  20. package/dist/cjs/utils/loadPlugins.js +1 -1
  21. package/dist/cjs/utils/register.js +38 -22
  22. package/dist/esm/builder/generator/getBuilderEnvironments.js +0 -2
  23. package/dist/esm/builder/generator/index.js +1 -1
  24. package/dist/esm/builder/index.js +2 -2
  25. package/dist/esm/builder/shared/builderPlugins/adapterBasic.js +1 -1
  26. package/dist/esm/commands/build.js +9 -16
  27. package/dist/esm/commands/dev.js +37 -55
  28. package/dist/esm/commands/index.js +6 -6
  29. package/dist/esm/custom-loader.mjs +41 -0
  30. package/dist/esm/index.js +42 -1
  31. package/dist/esm/plugins/analyze/index.js +4 -3
  32. package/dist/esm/plugins/deploy/dependencies/index.js +2 -3
  33. package/dist/esm/register-esm.mjs +22 -0
  34. package/dist/esm/utils/createServer.js +1 -1
  35. package/dist/esm-node/builder/generator/getBuilderEnvironments.js +1 -1
  36. package/dist/esm-node/builder/generator/index.js +1 -1
  37. package/dist/esm-node/builder/index.js +2 -2
  38. package/dist/esm-node/builder/shared/builderPlugins/adapterBasic.js +1 -1
  39. package/dist/esm-node/commands/build.js +0 -3
  40. package/dist/esm-node/commands/dev.js +16 -24
  41. package/dist/esm-node/commands/index.js +6 -6
  42. package/dist/esm-node/esm/esbuild-loader.js +39 -0
  43. package/dist/esm-node/esm/register-esm.js +39 -0
  44. package/dist/esm-node/esm/ts-node-loader.js +42 -0
  45. package/dist/esm-node/index.js +17 -1
  46. package/dist/esm-node/plugins/analyze/index.js +4 -3
  47. package/dist/esm-node/plugins/deploy/dependencies/index.js +1 -2
  48. package/dist/esm-node/utils/createServer.js +1 -1
  49. package/dist/types/builder/index.d.ts +1 -1
  50. package/dist/types/esm/esbuild-loader.d.mts +6 -0
  51. package/dist/types/esm/register-esm.d.mts +5 -0
  52. package/dist/types/esm/ts-node-loader.d.mts +6 -0
  53. package/dist/types/esm/utils.d.mts +6 -0
  54. package/dist/types/plugins/deploy/platforms/netlify-entry-cjs.d.ts +0 -0
  55. package/dist/types/plugins/deploy/platforms/netlify-entry-mjs.d.ts +1 -0
  56. package/dist/types/plugins/deploy/platforms/netlifyEntry.d.ts +1 -2
  57. package/package.json +8 -8
@@ -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("@modern-js/rsbuild-plugin-esbuild")));
41
+ const { pluginEsbuild } = await import("@modern-js/rsbuild-plugin-esbuild");
42
42
  builder.addPlugins([
43
43
  pluginEsbuild(esbuildOptions)
44
44
  ]);
@@ -50,7 +50,7 @@ async function generateBuilder(options, bundlerType) {
50
50
  return builder;
51
51
  }
52
52
  async function applyBuilderPlugins(builder, options) {
53
- const { builderPluginAdapterBasic, builderPluginAdapterHtml, builderPluginAdapterSSR, builderPluginAdapterWorker } = await Promise.resolve().then(() => __toESM(require("../shared/builderPlugins")));
53
+ const { builderPluginAdapterBasic, builderPluginAdapterHtml, builderPluginAdapterSSR, builderPluginAdapterWorker } = await import("../shared/builderPlugins/index.js");
54
54
  builder.addPlugins([
55
55
  builderPluginAdapterBasic(),
56
56
  builderPluginAdapterSSR(options),
@@ -59,7 +59,7 @@ async function applyBuilderPlugins(builder, options) {
59
59
  ]);
60
60
  const { normalizedConfig } = options;
61
61
  if (!normalizedConfig.output.disableNodePolyfill) {
62
- const { pluginNodePolyfill } = await Promise.resolve().then(() => __toESM(require("@rsbuild/plugin-node-polyfill")));
62
+ const { pluginNodePolyfill } = await import("@rsbuild/plugin-node-polyfill");
63
63
  builder.addPlugins([
64
64
  pluginNodePolyfill()
65
65
  ]);
@@ -33,10 +33,10 @@ __export(builder_exports, {
33
33
  module.exports = __toCommonJS(builder_exports);
34
34
  async function createBuilderGenerator(bundler) {
35
35
  if (bundler === "rspack") {
36
- const { createRspackBuilderForModern } = await Promise.resolve().then(() => __toESM(require("./builder-rspack")));
36
+ const { createRspackBuilderForModern } = await import("./builder-rspack/index.js");
37
37
  return createRspackBuilderForModern;
38
38
  }
39
- const { createWebpackBuilderForModern } = await Promise.resolve().then(() => __toESM(require("./builder-webpack")));
39
+ const { createWebpackBuilderForModern } = await import("./builder-webpack/index.js");
40
40
  return createWebpackBuilderForModern;
41
41
  }
42
42
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
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
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var build_exports = {};
20
30
  __export(build_exports, {
@@ -36,6 +46,15 @@ const build = async (api, options) => {
36
46
  const appContext = api.useAppContext();
37
47
  const hookRunners = api.useHookRunners();
38
48
  await (0, import_loadPlugins.loadServerPlugins)(api, appContext.appDirectory, appContext.metaName);
49
+ if (appContext.moduleType && appContext.moduleType === "module") {
50
+ var _resolvedConfig_source1;
51
+ const { registerEsm } = await import("../esm/register-esm.mjs");
52
+ await registerEsm({
53
+ appDir: appContext.appDirectory,
54
+ distDir: appContext.distDirectory,
55
+ alias: (_resolvedConfig_source1 = resolvedConfig.source) === null || _resolvedConfig_source1 === void 0 ? void 0 : _resolvedConfig_source1.alias
56
+ });
57
+ }
39
58
  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);
40
59
  const { apiOnly } = appContext;
41
60
  if (apiOnly) {
@@ -50,6 +50,15 @@ const dev = async (api, options, devServerOptions) => {
50
50
  let normalizedConfig = api.useResolvedConfigContext();
51
51
  const appContext = api.useAppContext();
52
52
  const hookRunners = api.useHookRunners();
53
+ if (appContext.moduleType && appContext.moduleType === "module") {
54
+ var _normalizedConfig_source1;
55
+ const { registerEsm } = await import("../esm/register-esm.mjs");
56
+ await registerEsm({
57
+ appDir: appContext.appDirectory,
58
+ distDir: appContext.distDirectory,
59
+ alias: (_normalizedConfig_source1 = normalizedConfig.source) === null || _normalizedConfig_source1 === void 0 ? void 0 : _normalizedConfig_source1.alias
60
+ });
61
+ }
53
62
  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);
54
63
  normalizedConfig = {
55
64
  ...normalizedConfig,
@@ -44,7 +44,7 @@ const devCommand = async (program, api) => {
44
44
  const runner = api.useHookRunners();
45
45
  const devToolMetas = await runner.registerDev();
46
46
  const devProgram = program.command("dev").alias("start").usage("[options]").description(import_locale.i18n.t(import_locale.localeKeys.command.dev.describe)).option("-c --config <config>", import_locale.i18n.t(import_locale.localeKeys.command.shared.config)).option("-e --entry [entry...]", import_locale.i18n.t(import_locale.localeKeys.command.dev.entry)).option("--analyze", import_locale.i18n.t(import_locale.localeKeys.command.shared.analyze)).option("--api-only", import_locale.i18n.t(import_locale.localeKeys.command.dev.apiOnly)).option("--web-only", import_locale.i18n.t(import_locale.localeKeys.command.dev.webOnly)).action(async (options) => {
47
- const { dev } = await Promise.resolve().then(() => __toESM(require("./dev")));
47
+ const { dev } = await import("./dev.js");
48
48
  await dev(api, options);
49
49
  });
50
50
  for (const meta of devToolMetas) {
@@ -54,7 +54,7 @@ const devCommand = async (program, api) => {
54
54
  for (const subCmd of meta.subCommands) {
55
55
  devProgram.command(subCmd).action(async (options = {}) => {
56
56
  const { appDirectory } = api.useAppContext();
57
- const { isTypescript } = await Promise.resolve().then(() => __toESM(require("@modern-js/utils")));
57
+ const { isTypescript } = await import("@modern-js/utils");
58
58
  await runner.beforeDevTask(meta);
59
59
  await meta.action(options, {
60
60
  isTsProject: isTypescript(appDirectory)
@@ -67,7 +67,7 @@ const buildCommand = async (program, api) => {
67
67
  const runner = api.useHookRunners();
68
68
  const platformBuilders = await runner.registerBuildPlatform();
69
69
  const buildProgram = program.command("build").usage("[options]").description(import_locale.i18n.t(import_locale.localeKeys.command.build.describe)).option("-c --config <config>", import_locale.i18n.t(import_locale.localeKeys.command.shared.config)).option("--analyze", import_locale.i18n.t(import_locale.localeKeys.command.shared.analyze)).action(async (options) => {
70
- const { build } = await Promise.resolve().then(() => __toESM(require("./build")));
70
+ const { build } = await import("./build.js");
71
71
  await build(api, options);
72
72
  });
73
73
  for (const platformBuilder of platformBuilders) {
@@ -75,7 +75,7 @@ const buildCommand = async (program, api) => {
75
75
  for (const platform of platforms) {
76
76
  buildProgram.command(platform).action(async () => {
77
77
  const { appDirectory } = api.useAppContext();
78
- const { isTypescript } = await Promise.resolve().then(() => __toESM(require("@modern-js/utils")));
78
+ const { isTypescript } = await import("@modern-js/utils");
79
79
  await runner.beforeBuildPlatform(platformBuilders);
80
80
  await platformBuilder.build(platform, {
81
81
  isTsProject: isTypescript(appDirectory)
@@ -86,17 +86,17 @@ const buildCommand = async (program, api) => {
86
86
  };
87
87
  const serverCommand = (program, api) => {
88
88
  program.command("serve").usage("[options]").description(import_locale.i18n.t(import_locale.localeKeys.command.serve.describe)).option("--api-only", import_locale.i18n.t(import_locale.localeKeys.command.dev.apiOnly)).option("-c --config <config>", import_locale.i18n.t(import_locale.localeKeys.command.shared.config)).action(async () => {
89
- const { start } = await Promise.resolve().then(() => __toESM(require("./serve")));
89
+ const { start } = await import("./serve.js");
90
90
  await start(api);
91
91
  });
92
92
  };
93
93
  const deployCommand = (program, api) => {
94
94
  program.command("deploy").usage("[options]").option("-c --config <config>", import_locale.i18n.t(import_locale.localeKeys.command.shared.config)).option("-s --skip-build", import_locale.i18n.t(import_locale.localeKeys.command.shared.skipBuild)).description(import_locale.i18n.t(import_locale.localeKeys.command.deploy.describe)).action(async (options) => {
95
95
  if (!options.skipBuild) {
96
- const { build } = await Promise.resolve().then(() => __toESM(require("./build")));
96
+ const { build } = await import("./build.js");
97
97
  await build(api);
98
98
  }
99
- const { deploy } = await Promise.resolve().then(() => __toESM(require("./deploy")));
99
+ const { deploy } = await import("./deploy.js");
100
100
  await deploy(api, options);
101
101
  process.exit(0);
102
102
  });
@@ -111,7 +111,7 @@ const newCommand = (program, locale) => {
111
111
  };
112
112
  const inspectCommand = (program, api) => {
113
113
  program.command("inspect").description("inspect the internal configs").option(`--env <env>`, import_locale.i18n.t(import_locale.localeKeys.command.inspect.env), "development").option("--output <output>", import_locale.i18n.t(import_locale.localeKeys.command.inspect.output), "/").option("--verbose", import_locale.i18n.t(import_locale.localeKeys.command.inspect.verbose)).option("-c --config <config>", import_locale.i18n.t(import_locale.localeKeys.command.shared.config)).action(async (options) => {
114
- const { inspect } = await Promise.resolve().then(() => __toESM(require("./inspect")));
114
+ const { inspect } = await import("./inspect.js");
115
115
  inspect(api, options);
116
116
  });
117
117
  };
@@ -0,0 +1,20 @@
1
+ import { pathToFileURL } from 'url';
2
+ import { createMatchPath } from './utils.mjs';
3
+
4
+ let matchPath;
5
+ export async function initialize({ appDir, alias, tsconfigPath }) {
6
+ matchPath = createMatchPath({
7
+ alias,
8
+ appDir,
9
+ tsconfigPath,
10
+ });
11
+ }
12
+
13
+ export function resolve(specifier, context, defaultResolve) {
14
+ const match = matchPath(specifier);
15
+ return match
16
+ ? defaultResolve(pathToFileURL(match).href, context)
17
+ : defaultResolve(specifier, context);
18
+ }
19
+
20
+ export { load } from 'esbuild-register/loader';
@@ -0,0 +1,65 @@
1
+ import path from 'node:path';
2
+ import { fs, readTsConfigByFile } from '@modern-js/utils';
3
+
4
+ const checkDep = async dep => {
5
+ try {
6
+ await import(dep);
7
+ return true;
8
+ } catch (error) {
9
+ return false;
10
+ }
11
+ };
12
+
13
+ export const registerEsm = async ({ appDir, distDir, alias }) => {
14
+ const nodeVersion = process.versions.node;
15
+ const versionArr = nodeVersion.split('.').map(Number);
16
+ if (versionArr[0] < 18 || (versionArr[0] === 18 && versionArr[1] < 19)) {
17
+ throw new Error(
18
+ `The node version of the esm project must be greater than 18.19.0, current version is ${nodeVersion}`,
19
+ );
20
+ }
21
+ const hasTsNode = await checkDep('ts-node');
22
+ const TS_CONFIG_FILENAME = `tsconfig.json`;
23
+ const tsconfigPath = path.resolve(appDir, TS_CONFIG_FILENAME);
24
+ const hasTsconfig = await fs.pathExists(tsconfigPath);
25
+ const { register } = await import('node:module');
26
+ if (hasTsNode && hasTsconfig) {
27
+ // These can be overridden by ts-node options in tsconfig.json
28
+ process.env.TS_NODE_TRANSPILE_ONLY = true;
29
+ process.env.TS_NODE_PROJECT = tsconfigPath;
30
+ process.env.TS_NODE_SCOPE = true;
31
+ process.env.TS_NODE_FILES = true;
32
+ process.env.TS_NODE_IGNORE = `(?:^|/)node_modules/,(?:^|/)${path.relative(
33
+ appDir,
34
+ distDir,
35
+ )}/`;
36
+ register('./ts-node-loader.mjs', import.meta.url, {
37
+ data: {
38
+ appDir,
39
+ distDir,
40
+ alias,
41
+ tsconfigPath,
42
+ },
43
+ });
44
+ } else {
45
+ process.env.MODERN_NODE_LOADER = 'esbuild';
46
+ let tsConfig = {};
47
+ if (hasTsconfig) {
48
+ tsConfig = readTsConfigByFile(tsconfigPath);
49
+ }
50
+ const esbuildRegister = await import('esbuild-register/dist/node');
51
+ esbuildRegister.register({
52
+ tsconfigRaw: hasTsconfig ? tsConfig : undefined,
53
+ hookIgnoreNodeModules: true,
54
+ hookMatcher: fileName => !fileName.startsWith(distDir),
55
+ });
56
+ register('./esbuild-loader.mjs', import.meta.url, {
57
+ data: {
58
+ appDir,
59
+ distDir,
60
+ alias,
61
+ tsconfigPath,
62
+ },
63
+ });
64
+ }
65
+ };
@@ -0,0 +1,21 @@
1
+ import { pathToFileURL } from 'url';
2
+ import { resolve as tsNodeResolve } from 'ts-node/esm';
3
+ import { createMatchPath } from './utils.mjs';
4
+
5
+ let matchPath;
6
+ export async function initialize({ appDir, alias, tsconfigPath }) {
7
+ matchPath = createMatchPath({
8
+ alias,
9
+ appDir,
10
+ tsconfigPath,
11
+ });
12
+ }
13
+
14
+ export function resolve(specifier, context, defaultResolve) {
15
+ const match = matchPath(specifier, undefined, undefined, ['']);
16
+ return match
17
+ ? tsNodeResolve(pathToFileURL(match).href, context, defaultResolve)
18
+ : tsNodeResolve(specifier, context, defaultResolve);
19
+ }
20
+
21
+ export { transformSource, load } from 'ts-node/esm';
@@ -0,0 +1,28 @@
1
+ import path from 'path';
2
+ import tsConfigPaths from '@modern-js/utils/tsconfig-paths';
3
+ import { getAliasConfig } from '@modern-js/utils';
4
+
5
+ export function createMatchPath({ alias, appDir, tsconfigPath }) {
6
+ const aliasConfig = getAliasConfig(alias, {
7
+ appDirectory: appDir,
8
+ tsconfigPath,
9
+ });
10
+
11
+ const { paths = {}, absoluteBaseUrl = './' } = aliasConfig;
12
+
13
+ const tsPaths = Object.keys(paths).reduce((o, key) => {
14
+ let tsPath = paths[key];
15
+ if (typeof tsPath === 'string' && path.isAbsolute(tsPath)) {
16
+ tsPath = path.relative(absoluteBaseUrl, tsPath);
17
+ }
18
+ if (typeof tsPath === 'string') {
19
+ tsPath = [tsPath];
20
+ }
21
+ return {
22
+ ...o,
23
+ [`${key}`]: tsPath,
24
+ };
25
+ }, {});
26
+
27
+ return tsConfigPaths.createMatchPath(absoluteBaseUrl, tsPaths);
28
+ }
package/dist/cjs/index.js CHANGED
@@ -139,7 +139,7 @@ const appTools = (options = {
139
139
  async fileChange(e) {
140
140
  const { filename, eventType, isPrivate } = e;
141
141
  if (!isPrivate && (eventType === "change" || eventType === "unlink")) {
142
- const { closeServer } = await Promise.resolve().then(() => __toESM(require("./utils/createServer")));
142
+ const { closeServer } = await import("./utils/createServer");
143
143
  await closeServer();
144
144
  await (0, import_restart.restart)(api.useHookRunners(), filename);
145
145
  }
@@ -77,9 +77,9 @@ var analyze_default = ({ bundler }) => ({
77
77
  return;
78
78
  }
79
79
  const [{ getBundleEntry }, { getServerRoutes }, { getHtmlTemplate }] = await Promise.all([
80
- Promise.resolve().then(() => __toESM(require("./getBundleEntry"))),
81
- Promise.resolve().then(() => __toESM(require("./getServerRoutes"))),
82
- Promise.resolve().then(() => __toESM(require("./getHtmlTemplate")))
80
+ import("./getBundleEntry.js"),
81
+ import("./getServerRoutes.js"),
82
+ import("./getHtmlTemplate.js")
83
83
  ]);
84
84
  const { entrypoints } = await hookRunners.modifyEntrypoints({
85
85
  entrypoints: await getBundleEntry(hookRunners, appContext, resolvedConfig)
@@ -212,6 +212,7 @@ const handleDependencies = async ({ appDir, serverRootDir, includeEntries, trace
212
212
  name: `${projectPkgJson.name || "modernjs-project"}-prod`,
213
213
  version: projectPkgJson.version || "0.0.0",
214
214
  private: true,
215
+ type: projectPkgJson.type || "commonjs",
215
216
  dependencies: Object.fromEntries([
216
217
  ...Object.values(tracedPackages).map((pkg) => [
217
218
  pkg.name,
@@ -141,7 +141,18 @@ const findPackageParents = (pkg, version, tracedFiles) => {
141
141
  const traceFiles = async (entryFiles, serverRootDir, base = "/") => {
142
142
  return await (0, import_nft.nodeFileTrace)(entryFiles, {
143
143
  base,
144
- processCwd: serverRootDir
144
+ processCwd: serverRootDir,
145
+ resolve: async (id, parent, job, isCjs) => {
146
+ if (id.startsWith("@modern-js/prod-server")) {
147
+ return require.resolve(id, {
148
+ paths: [
149
+ require.resolve("@modern-js/app-tools")
150
+ ]
151
+ });
152
+ } else {
153
+ return (0, import_nft.resolve)(id, parent, job, isCjs);
154
+ }
155
+ }
145
156
  });
146
157
  };
147
158
  const resolveTracedPath = async (base, p) => import_utils.fs.realpath(import_path.default.resolve(base, p));
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ var import_index = require("./index.cjs");
3
+ const requestHandler = null;
4
+ (0, import_index.createHandler)();
5
+ exports.handler = async (req, res) => {
6
+ if (!requestHandler) {
7
+ await (0, import_index.createHandler)();
8
+ }
9
+ return requestHandler(req, res);
10
+ };
@@ -50,7 +50,8 @@ async function cleanDistDirectory(dir) {
50
50
  }
51
51
  }
52
52
  const createNetlifyPreset = (appContext, modernConfig, needModernServer) => {
53
- const { appDirectory, distDirectory, entrypoints, serverPlugins } = appContext;
53
+ const { appDirectory, distDirectory, entrypoints, serverPlugins, moduleType } = appContext;
54
+ const isEsmProject = moduleType === "module";
54
55
  const plugins = serverPlugins.map((plugin) => plugin.name);
55
56
  const netlifyOutput = import_node_path.default.join(appDirectory, ".netlify");
56
57
  const funcsDirectory = import_node_path.default.join(netlifyOutput, "functions");
@@ -117,7 +118,13 @@ const createNetlifyPreset = (appContext, modernConfig, needModernServer) => {
117
118
  let entryCode = (await import_utils.fs.readFile(import_node_path.default.join(__dirname, "./netlifyEntry.js"))).toString();
118
119
  const serverAppContext = (0, import_utils2.serverAppContenxtTemplate)(appContext);
119
120
  entryCode = entryCode.replace("p_genPluginImportsCode", pluginImportCode).replace("p_ROUTE_SPEC_FILE", `"${import_utils.ROUTE_SPEC_FILE}"`).replace("p_dynamicProdOptions", JSON.stringify(dynamicProdOptions)).replace("p_plugins", pluginsCode).replace("p_sharedDirectory", serverAppContext.sharedDirectory).replace("p_apiDirectory", serverAppContext.apiDirectory).replace("p_lambdaDirectory", serverAppContext.lambdaDirectory);
120
- await import_utils.fs.writeFile(entryFilePath, entryCode);
121
+ if (isEsmProject) {
122
+ const cjsEntryFilePath = import_node_path.default.join(funcsDirectory, "index.cjs");
123
+ await import_utils.fs.writeFile(cjsEntryFilePath, entryCode);
124
+ await import_utils.fs.writeFile(entryFilePath, `import('./index.cjs');`);
125
+ } else {
126
+ await import_utils.fs.writeFile(entryFilePath, entryCode);
127
+ }
121
128
  },
122
129
  async end() {
123
130
  if (process.env.NODE_ENV !== "development") {
@@ -1,4 +1,26 @@
1
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 netlifyEntry_exports = {};
20
+ __export(netlifyEntry_exports, {
21
+ createHandler: () => createHandler
22
+ });
23
+ module.exports = __toCommonJS(netlifyEntry_exports);
2
24
  const fs = require("node:fs/promises");
3
25
  const path = require("node:path");
4
26
  const { createNetlifyFunction } = require("@modern-js/prod-server/netlify");
@@ -59,3 +81,7 @@ module.exports.default = async (request, context) => {
59
81
  }
60
82
  return requestHandler(request, context);
61
83
  };
84
+ // Annotate the CommonJS export names for ESM import in node:
85
+ 0 && (module.exports = {
86
+ createHandler
87
+ });
@@ -36,7 +36,8 @@ var import_utils = require("@modern-js/utils");
36
36
  var import_utils2 = require("../utils");
37
37
  var import_dependencies = require("../dependencies");
38
38
  const createNodePreset = (appContext, config) => {
39
- const { appDirectory, distDirectory, serverPlugins } = appContext;
39
+ const { appDirectory, distDirectory, serverPlugins, moduleType } = appContext;
40
+ const isEsmProject = moduleType === "module";
40
41
  const plugins = serverPlugins.map((plugin) => plugin.name);
41
42
  const outputDirectory = import_node_path.default.join(appDirectory, ".output");
42
43
  const staticDirectory = import_node_path.default.join(outputDirectory, "static");
@@ -72,7 +73,13 @@ const createNodePreset = (appContext, config) => {
72
73
  let entryCode = (await import_utils.fs.readFile(import_node_path.default.join(__dirname, "./nodeEntry.js"))).toString();
73
74
  const serverAppContext = (0, import_utils2.serverAppContenxtTemplate)(appContext);
74
75
  entryCode = entryCode.replace("p_genPluginImportsCode", pluginImportCode).replace("p_ROUTE_SPEC_FILE", `"${import_utils.ROUTE_SPEC_FILE}"`).replace("p_dynamicProdOptions", JSON.stringify(dynamicProdOptions)).replace("p_plugins", pluginsCode).replace("p_sharedDirectory", serverAppContext.sharedDirectory).replace("p_apiDirectory", serverAppContext.apiDirectory).replace("p_lambdaDirectory", serverAppContext.lambdaDirectory);
75
- await import_utils.fs.writeFile(entryFilePath, entryCode);
76
+ if (isEsmProject) {
77
+ const cjsEntryFilePath = import_node_path.default.join(outputDirectory, "index.cjs");
78
+ await import_utils.fs.writeFile(cjsEntryFilePath, entryCode);
79
+ await import_utils.fs.writeFile(entryFilePath, `import('./index.cjs');`);
80
+ } else {
81
+ await import_utils.fs.writeFile(entryFilePath, entryCode);
82
+ }
76
83
  },
77
84
  async end() {
78
85
  console.log("Static directory:", import_utils.chalk.blue(import_node_path.default.relative(appDirectory, staticDirectory)));
@@ -37,7 +37,7 @@ async function getServerPlugins(api, metaName = "modern-js") {
37
37
  }
38
38
  async function loadServerPlugins(api, appDirectory, metaName) {
39
39
  const plugins = await getServerPlugins(api, metaName);
40
- const instances = (0, import_prod_server.loadServerPlugins)(plugins, appDirectory);
40
+ const instances = await (0, import_prod_server.loadServerPlugins)(plugins, appDirectory);
41
41
  return instances;
42
42
  }
43
43
  // Annotate the CommonJS export names for ESM import in node:
@@ -33,6 +33,14 @@ __export(register_exports, {
33
33
  module.exports = __toCommonJS(register_exports);
34
34
  var import_node_path = __toESM(require("node:path"));
35
35
  var import_utils = require("@modern-js/utils");
36
+ const registerEsbuild = async ({ isTsProject, tsConfig, distDir }) => {
37
+ const esbuildRegister = await import("esbuild-register/dist/node");
38
+ esbuildRegister.register({
39
+ tsconfigRaw: isTsProject ? tsConfig : void 0,
40
+ hookIgnoreNodeModules: true,
41
+ hookMatcher: (fileName) => !fileName.startsWith(distDir)
42
+ });
43
+ };
36
44
  const registerCompiler = async (appDir = process.cwd(), distDir, alias) => {
37
45
  const TS_CONFIG_FILENAME = `tsconfig.json`;
38
46
  const tsconfigPath = import_node_path.default.resolve(appDir, TS_CONFIG_FILENAME);
@@ -61,32 +69,40 @@ const registerCompiler = async (appDir = process.cwd(), distDir, alias) => {
61
69
  if (isTsProject) {
62
70
  tsConfig = (0, import_utils.readTsConfigByFile)(tsconfigPath);
63
71
  }
64
- try {
65
- const tsNode = await Promise.resolve().then(() => __toESM(require("ts-node")));
66
- const tsNodeOptions = tsConfig["ts-node"];
67
- if (isTsProject) {
68
- tsNode.register({
69
- project: tsconfigPath,
70
- scope: true,
71
- // for env.d.ts, https://www.npmjs.com/package/ts-node#missing-types
72
- files: true,
73
- transpileOnly: true,
74
- ignore: [
75
- "(?:^|/)node_modules/",
76
- `(?:^|/)${import_node_path.default.relative(appDir, distDir)}/`
77
- ],
78
- ...tsNodeOptions
72
+ const { MODERN_NODE_LOADER } = process.env;
73
+ if (MODERN_NODE_LOADER !== "esbuild") {
74
+ try {
75
+ const tsNode = await import("ts-node");
76
+ const tsNodeOptions = tsConfig["ts-node"];
77
+ if (isTsProject) {
78
+ tsNode.register({
79
+ project: tsconfigPath,
80
+ scope: true,
81
+ // for env.d.ts, https://www.npmjs.com/package/ts-node#missing-types
82
+ files: true,
83
+ transpileOnly: true,
84
+ ignore: [
85
+ "(?:^|/)node_modules/",
86
+ `(?:^|/)${import_node_path.default.relative(appDir, distDir)}/`
87
+ ],
88
+ ...tsNodeOptions
89
+ });
90
+ }
91
+ } catch (error) {
92
+ await registerEsbuild({
93
+ isTsProject,
94
+ tsConfig,
95
+ distDir
79
96
  });
80
97
  }
81
- } catch (error) {
82
- const esbuildRegister = await Promise.resolve().then(() => __toESM(require("esbuild-register/dist/node")));
83
- esbuildRegister.register({
84
- tsconfigRaw: isTsProject ? tsConfig : void 0,
85
- hookIgnoreNodeModules: true,
86
- hookMatcher: (fileName) => !fileName.startsWith(distDir)
98
+ } else {
99
+ await registerEsbuild({
100
+ isTsProject,
101
+ tsConfig,
102
+ distDir
87
103
  });
88
104
  }
89
- const tsConfigPaths = await Promise.resolve().then(() => __toESM(require("@modern-js/utils/tsconfig-paths")));
105
+ const tsConfigPaths = (await import("@modern-js/utils/tsconfig-paths")).default;
90
106
  if (await import_utils.fs.pathExists(appDir)) {
91
107
  const loaderRes = tsConfigPaths.loadConfig(appDir);
92
108
  if (loaderRes.resultType === "success") {
@@ -38,8 +38,6 @@ function getBuilderEnvironments(normalizedConfig, appContext) {
38
38
  var v = entries[entry1];
39
39
  serverEntries[entry1] = v.map(function(entry2) {
40
40
  return entry2.replace("index.jsx", "index.server.jsx");
41
- }).map(function(entry2) {
42
- return entry2.replace("bootstrap.jsx", "bootstrap.server.jsx");
43
41
  });
44
42
  }
45
43
  var environments = {
@@ -54,7 +54,7 @@ function _applyBuilderPlugins() {
54
54
  case 0:
55
55
  return [
56
56
  4,
57
- import("../shared/builderPlugins")
57
+ import("../shared/builderPlugins/index.js")
58
58
  ];
59
59
  case 1:
60
60
  _ref = _state.sent(), builderPluginAdapterBasic = _ref.builderPluginAdapterBasic, builderPluginAdapterHtml = _ref.builderPluginAdapterHtml, builderPluginAdapterSSR = _ref.builderPluginAdapterSSR, builderPluginAdapterWorker = _ref.builderPluginAdapterWorker;
@@ -16,7 +16,7 @@ function _createBuilderGenerator() {
16
16
  ];
17
17
  return [
18
18
  4,
19
- import("./builder-rspack")
19
+ import("./builder-rspack/index.js")
20
20
  ];
21
21
  case 1:
22
22
  createRspackBuilderForModern = _state.sent().createRspackBuilderForModern;
@@ -27,7 +27,7 @@ function _createBuilderGenerator() {
27
27
  case 2:
28
28
  return [
29
29
  4,
30
- import("./builder-webpack")
30
+ import("./builder-webpack/index.js")
31
31
  ];
32
32
  case 3:
33
33
  createWebpackBuilderForModern = _state.sent().createWebpackBuilderForModern;
@@ -27,7 +27,7 @@ function applyNodeCompat(isServiceWorker, chain) {
27
27
  ".node.ts",
28
28
  ".node.tsx",
29
29
  ".server.js",
30
- ".server.jsx",
30
+ ".server.ts",
31
31
  ".server.ts",
32
32
  ".server.tsx"
33
33
  ];