@modern-js/app-tools 2.62.2-alpha.0 → 2.63.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 (144) hide show
  1. package/bin/modern.js +1 -1
  2. package/dist/cjs/commands/build.js +19 -13
  3. package/dist/cjs/commands/deploy.js +5 -5
  4. package/dist/cjs/commands/dev.js +11 -11
  5. package/dist/cjs/commands/index.js +6 -6
  6. package/dist/cjs/commands/inspect.js +1 -1
  7. package/dist/cjs/commands/serve.js +4 -4
  8. package/dist/cjs/{new/compat → compat}/hooks.js +20 -8
  9. package/dist/cjs/{new/compat → compat}/index.js +10 -2
  10. package/dist/cjs/{new/compat → compat}/utils.js +10 -1
  11. package/dist/cjs/index.js +156 -7
  12. package/dist/cjs/plugins/analyze/getBundleEntry.js +2 -2
  13. package/dist/cjs/plugins/analyze/getFileSystemEntry.js +9 -9
  14. package/dist/cjs/plugins/analyze/getHtmlTemplate.js +51 -25
  15. package/dist/cjs/plugins/analyze/index.js +128 -130
  16. package/dist/cjs/plugins/deploy/index.js +12 -14
  17. package/dist/cjs/plugins/initialize/index.js +44 -50
  18. package/dist/cjs/plugins/serverBuild.js +30 -32
  19. package/dist/cjs/{new/run.js → run/index.js} +6 -6
  20. package/dist/cjs/{new/types/index.js → types/new.js} +2 -2
  21. package/dist/cjs/{new → utils}/getConfigFile.js +1 -1
  22. package/dist/cjs/{new/context.js → utils/initAppContext.js} +5 -5
  23. package/dist/cjs/{new/utils/index.js → utils/isAutoLoadPlugins.js} +6 -6
  24. package/dist/cjs/utils/loadPlugins.js +35 -4
  25. package/dist/cjs/utils/printInstructions.js +2 -2
  26. package/dist/cjs/utils/restart.js +4 -3
  27. package/dist/esm/commands/build.js +18 -12
  28. package/dist/esm/commands/deploy.js +6 -6
  29. package/dist/esm/commands/dev.js +10 -10
  30. package/dist/esm/commands/index.js +8 -8
  31. package/dist/esm/commands/inspect.js +1 -1
  32. package/dist/esm/commands/serve.js +5 -5
  33. package/dist/esm/{new/compat → compat}/hooks.js +65 -41
  34. package/dist/esm/{new/compat → compat}/index.js +13 -2
  35. package/dist/{esm-node/new → esm}/compat/utils.js +10 -1
  36. package/dist/esm/index.js +248 -5
  37. package/dist/esm/plugins/analyze/getBundleEntry.js +3 -3
  38. package/dist/esm/plugins/analyze/getFileSystemEntry.js +12 -12
  39. package/dist/esm/plugins/analyze/getHtmlTemplate.js +101 -28
  40. package/dist/esm/plugins/analyze/index.js +328 -331
  41. package/dist/esm/plugins/deploy/index.js +84 -88
  42. package/dist/esm/plugins/initialize/index.js +61 -64
  43. package/dist/esm/plugins/serverBuild.js +52 -56
  44. package/dist/esm/{new/run.js → run/index.js} +6 -6
  45. package/dist/esm/{new → utils}/getConfigFile.js +1 -1
  46. package/dist/esm/{new/context.js → utils/initAppContext.js} +3 -3
  47. package/dist/esm/{new/utils/index.js → utils/isAutoLoadPlugins.js} +6 -6
  48. package/dist/esm/utils/loadPlugins.js +95 -7
  49. package/dist/esm/utils/printInstructions.js +3 -3
  50. package/dist/esm/utils/restart.js +5 -4
  51. package/dist/esm-node/commands/build.js +19 -13
  52. package/dist/esm-node/commands/deploy.js +5 -5
  53. package/dist/esm-node/commands/dev.js +11 -11
  54. package/dist/esm-node/commands/index.js +6 -6
  55. package/dist/esm-node/commands/inspect.js +1 -1
  56. package/dist/esm-node/commands/serve.js +4 -4
  57. package/dist/esm-node/{new/compat → compat}/hooks.js +20 -8
  58. package/dist/esm-node/{new/compat → compat}/index.js +10 -2
  59. package/dist/{esm/new → esm-node}/compat/utils.js +10 -1
  60. package/dist/esm-node/index.js +143 -5
  61. package/dist/esm-node/plugins/analyze/getBundleEntry.js +2 -2
  62. package/dist/esm-node/plugins/analyze/getFileSystemEntry.js +9 -9
  63. package/dist/esm-node/plugins/analyze/getHtmlTemplate.js +49 -24
  64. package/dist/esm-node/plugins/analyze/index.js +128 -130
  65. package/dist/esm-node/plugins/deploy/index.js +12 -14
  66. package/dist/esm-node/plugins/initialize/index.js +44 -50
  67. package/dist/esm-node/plugins/serverBuild.js +30 -32
  68. package/dist/esm-node/{new/run.js → run/index.js} +6 -6
  69. package/dist/esm-node/{new → utils}/getConfigFile.js +1 -1
  70. package/dist/esm-node/{new/context.js → utils/initAppContext.js} +3 -3
  71. package/dist/esm-node/{new/utils/index.js → utils/isAutoLoadPlugins.js} +2 -2
  72. package/dist/esm-node/utils/loadPlugins.js +34 -4
  73. package/dist/esm-node/utils/printInstructions.js +2 -2
  74. package/dist/esm-node/utils/restart.js +4 -3
  75. package/dist/types/builder/generator/adapterCopy.d.ts +2 -1
  76. package/dist/types/builder/generator/createBuilderProviderConfig.d.ts +3 -2
  77. package/dist/types/builder/generator/createCopyPattern.d.ts +4 -3
  78. package/dist/types/builder/generator/getBuilderEnvironments.d.ts +2 -2
  79. package/dist/types/builder/index.d.ts +1 -1
  80. package/dist/types/builder/shared/createCopyInfo.d.ts +3 -2
  81. package/dist/types/builder/shared/types.d.ts +3 -2
  82. package/dist/types/commands/build.d.ts +2 -2
  83. package/dist/types/commands/deploy.d.ts +2 -2
  84. package/dist/types/commands/dev.d.ts +2 -2
  85. package/dist/types/commands/index.d.ts +6 -6
  86. package/dist/types/commands/inspect.d.ts +2 -2
  87. package/dist/types/commands/serve.d.ts +2 -2
  88. package/dist/types/compat/hooks.d.ts +7 -0
  89. package/dist/types/compat/index.d.ts +2 -0
  90. package/dist/types/config/default.d.ts +4 -3
  91. package/dist/types/config/initialize/index.d.ts +3 -2
  92. package/dist/types/config/initialize/inits.d.ts +4 -3
  93. package/dist/types/index.d.ts +8 -5
  94. package/dist/types/plugins/analyze/getBundleEntry.d.ts +3 -3
  95. package/dist/types/plugins/analyze/getFileSystemEntry.d.ts +3 -3
  96. package/dist/types/plugins/analyze/getHtmlTemplate.d.ts +26 -5
  97. package/dist/types/plugins/analyze/getServerRoutes.d.ts +2 -2
  98. package/dist/types/plugins/analyze/index.d.ts +2 -3
  99. package/dist/types/plugins/deploy/index.d.ts +2 -3
  100. package/dist/types/plugins/deploy/platforms/platform.d.ts +3 -3
  101. package/dist/types/plugins/deploy/utils.d.ts +2 -2
  102. package/dist/types/plugins/initialize/index.d.ts +2 -2
  103. package/dist/types/plugins/serverBuild.d.ts +2 -2
  104. package/dist/types/types/index.d.ts +7 -3
  105. package/dist/types/types/new.d.ts +157 -0
  106. package/dist/types/utils/env.d.ts +2 -2
  107. package/dist/types/utils/generateWatchFiles.d.ts +2 -2
  108. package/dist/types/{new/context.d.ts → utils/initAppContext.d.ts} +0 -1
  109. package/dist/types/utils/isAutoLoadPlugins.d.ts +1 -0
  110. package/dist/types/utils/loadPlugins.d.ts +13 -3
  111. package/dist/types/utils/printInstructions.d.ts +3 -3
  112. package/dist/types/utils/restart.d.ts +2 -3
  113. package/dist/types/utils/routes.d.ts +2 -1
  114. package/lib/types.d.ts +82 -61
  115. package/package.json +24 -24
  116. package/dist/cjs/hooks.js +0 -60
  117. package/dist/cjs/new/index.js +0 -79
  118. package/dist/cjs/new/loadPlugins.js +0 -57
  119. package/dist/cjs/old.js +0 -179
  120. package/dist/esm/hooks.js +0 -36
  121. package/dist/esm/new/index.js +0 -55
  122. package/dist/esm/new/loadPlugins.js +0 -94
  123. package/dist/esm/old.js +0 -258
  124. package/dist/esm-node/hooks.js +0 -36
  125. package/dist/esm-node/new/index.js +0 -52
  126. package/dist/esm-node/new/loadPlugins.js +0 -33
  127. package/dist/esm-node/old.js +0 -140
  128. package/dist/types/hooks.d.ts +0 -2
  129. package/dist/types/new/compat/hooks.d.ts +0 -8
  130. package/dist/types/new/compat/index.d.ts +0 -4
  131. package/dist/types/new/index.d.ts +0 -9
  132. package/dist/types/new/loadPlugins.d.ts +0 -9
  133. package/dist/types/new/types/index.d.ts +0 -90
  134. package/dist/types/new/utils/index.d.ts +0 -1
  135. package/dist/types/old.d.ts +0 -13
  136. /package/dist/cjs/{new/constants.js → constants.js} +0 -0
  137. /package/dist/esm/{new/constants.js → constants.js} +0 -0
  138. /package/dist/esm/{new/types/index.js → types/new.js} +0 -0
  139. /package/dist/esm-node/{new/constants.js → constants.js} +0 -0
  140. /package/dist/esm-node/{new/types/index.js → types/new.js} +0 -0
  141. /package/dist/types/{new/compat → compat}/utils.d.ts +0 -0
  142. /package/dist/types/{new/constants.d.ts → constants.d.ts} +0 -0
  143. /package/dist/types/{new/run.d.ts → run/index.d.ts} +0 -0
  144. /package/dist/types/{new → utils}/getConfigFile.d.ts +0 -0
@@ -2,7 +2,7 @@ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import { logger, prettyInstructions } from "@modern-js/utils";
4
4
  var printInstructions = function() {
5
- var _ref = _async_to_generator(function(hookRunners, appContext, config) {
5
+ var _ref = _async_to_generator(function(hooks, appContext, config) {
6
6
  var message, instructions;
7
7
  return _ts_generator(this, function(_state) {
8
8
  switch (_state.label) {
@@ -10,7 +10,7 @@ var printInstructions = function() {
10
10
  message = prettyInstructions(appContext, config);
11
11
  return [
12
12
  4,
13
- hookRunners.beforePrintInstructions({
13
+ hooks.onBeforePrintInstructions.call({
14
14
  instructions: message
15
15
  })
16
16
  ];
@@ -23,7 +23,7 @@ var printInstructions = function() {
23
23
  }
24
24
  });
25
25
  });
26
- return function printInstructions2(hookRunners, appContext, config) {
26
+ return function printInstructions2(hooks, appContext, config) {
27
27
  return _ref.apply(this, arguments);
28
28
  };
29
29
  }();
@@ -1,12 +1,13 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import { cli } from "@modern-js/plugin-v2/cli";
4
- import { chalk, clearConsole, getFullArgv, logger, program } from "@modern-js/utils";
5
- function restart(hooksRunner, filename) {
4
+ import { chalk, clearConsole, getFullArgv, logger } from "@modern-js/utils";
5
+ import { program } from "@modern-js/utils/commander";
6
+ function restart(hooks, filename) {
6
7
  return _restart.apply(this, arguments);
7
8
  }
8
9
  function _restart() {
9
- _restart = _async_to_generator(function(hooksRunner, filename) {
10
+ _restart = _async_to_generator(function(hooks, filename) {
10
11
  var hasGetError, err;
11
12
  return _ts_generator(this, function(_state) {
12
13
  switch (_state.label) {
@@ -16,7 +17,7 @@ function _restart() {
16
17
  hasGetError = false;
17
18
  return [
18
19
  4,
19
- hooksRunner.beforeRestart()
20
+ hooks.onBeforeRestart.call()
20
21
  ];
21
22
  case 1:
22
23
  _state.sent();
@@ -1,4 +1,3 @@
1
- import { ResolvedConfigContext } from "@modern-js/core";
2
1
  import { logger } from "@modern-js/utils";
3
2
  import { buildServerConfig } from "../utils/config";
4
3
  import { loadServerPlugins } from "../utils/loadPlugins";
@@ -9,9 +8,9 @@ const build = async (api, options) => {
9
8
  if (options === null || options === void 0 ? void 0 : options.analyze) {
10
9
  process.env.BUNDLE_ANALYZE = "true";
11
10
  }
12
- let resolvedConfig = api.useResolvedConfigContext();
13
- const appContext = api.useAppContext();
14
- const hookRunners = api.useHookRunners();
11
+ const resolvedConfig = api.getNormalizedConfig();
12
+ const appContext = api.getAppContext();
13
+ const hooks = api.getHooks();
15
14
  await loadServerPlugins(api, appContext.appDirectory, appContext.metaName);
16
15
  if (appContext.moduleType && appContext.moduleType === "module") {
17
16
  var _resolvedConfig_source1;
@@ -26,9 +25,12 @@ const build = async (api, options) => {
26
25
  const { apiOnly } = appContext;
27
26
  if (apiOnly) {
28
27
  const { appDirectory: appDirectory2, distDirectory: distDirectory2, serverConfigFile: serverConfigFile2 } = appContext;
29
- await hookRunners.beforeBuild({
28
+ await hooks.onBeforeBuild.call({
29
+ environments: {},
30
30
  // "null" bundlerConfigs
31
- bundlerConfigs: void 0
31
+ bundlerConfigs: void 0,
32
+ isFirstCompile: false,
33
+ isWatch: false
32
34
  });
33
35
  await buildServerConfig({
34
36
  appDirectory: appDirectory2,
@@ -36,17 +38,21 @@ const build = async (api, options) => {
36
38
  configFile: serverConfigFile2
37
39
  });
38
40
  await generateRoutes(appContext);
39
- await hookRunners.afterBuild({
41
+ await hooks.onAfterBuild.call({
42
+ environments: {},
40
43
  // "null" stats
41
- stats: void 0
44
+ stats: void 0,
45
+ isFirstCompile: false,
46
+ isWatch: false
42
47
  });
43
48
  return;
44
49
  }
45
- resolvedConfig = {
46
- ...resolvedConfig,
47
- cliOptions: options
48
- };
49
- ResolvedConfigContext.set(resolvedConfig);
50
+ api.modifyResolvedConfig((config) => {
51
+ return {
52
+ ...config,
53
+ cliOptions: options
54
+ };
55
+ });
50
56
  const { distDirectory, appDirectory, serverConfigFile } = appContext;
51
57
  await buildServerConfig({
52
58
  appDirectory,
@@ -1,11 +1,11 @@
1
1
  import { getServerPlugins } from "../utils/loadPlugins";
2
2
  const deploy = async (api, options) => {
3
- const hookRunners = api.useHookRunners();
4
- const { metaName } = api.useAppContext();
3
+ const hooks = api.getHooks();
4
+ const { metaName } = api.getAppContext();
5
5
  await getServerPlugins(api, metaName);
6
- await hookRunners.beforeDeploy(options);
7
- await hookRunners.deploy(options);
8
- await hookRunners.afterDeploy(options);
6
+ await hooks.onBeforeDeploy.call(options);
7
+ await hooks.deploy.call();
8
+ await hooks.onAfterDeploy.call(options);
9
9
  };
10
10
  export {
11
11
  deploy
@@ -1,5 +1,4 @@
1
1
  import path from "node:path";
2
- import { ResolvedConfigContext } from "@modern-js/core";
3
2
  import { applyPlugins } from "@modern-js/prod-server";
4
3
  import { createDevServer } from "@modern-js/server";
5
4
  import { DEFAULT_DEV_HOST, SERVER_DIR, getMeta, logger } from "@modern-js/utils";
@@ -14,9 +13,9 @@ const dev = async (api, options, devServerOptions) => {
14
13
  if (options.analyze) {
15
14
  process.env.BUNDLE_ANALYZE = "true";
16
15
  }
17
- let normalizedConfig = api.useResolvedConfigContext();
18
- const appContext = api.useAppContext();
19
- const hookRunners = api.useHookRunners();
16
+ const normalizedConfig = api.getNormalizedConfig();
17
+ const appContext = api.getAppContext();
18
+ const hooks = api.getHooks();
20
19
  if (appContext.moduleType && appContext.moduleType === "module") {
21
20
  var _normalizedConfig_source1;
22
21
  const { registerEsm } = await import("../esm/register-esm.mjs");
@@ -27,11 +26,12 @@ const dev = async (api, options, devServerOptions) => {
27
26
  });
28
27
  }
29
28
  await 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);
30
- normalizedConfig = {
31
- ...normalizedConfig,
32
- cliOptions: options
33
- };
34
- ResolvedConfigContext.set(normalizedConfig);
29
+ api.modifyResolvedConfig((config) => {
30
+ return {
31
+ ...config,
32
+ cliOptions: options
33
+ };
34
+ });
35
35
  const { appDirectory, distDirectory, port, apiOnly, serverConfigFile, metaName, serverRoutes } = appContext;
36
36
  await buildServerConfig({
37
37
  appDirectory,
@@ -41,7 +41,7 @@ const dev = async (api, options, devServerOptions) => {
41
41
  });
42
42
  const meta = getMeta(metaName);
43
43
  const serverConfigPath = path.resolve(appDirectory, SERVER_DIR, `${meta}.server`);
44
- await hookRunners.beforeDev();
44
+ await hooks.onBeforeDev.call();
45
45
  if (!appContext.builder && !apiOnly) {
46
46
  throw new Error("Expect the Builder to have been initialized, But the appContext.builder received `undefined`");
47
47
  }
@@ -80,7 +80,7 @@ const dev = async (api, options, devServerOptions) => {
80
80
  port,
81
81
  host
82
82
  }, () => {
83
- printInstructions(hookRunners, appContext, normalizedConfig);
83
+ printInstructions(hooks, appContext, normalizedConfig);
84
84
  });
85
85
  } else {
86
86
  const { server, afterListen } = await createDevServer({
@@ -2,8 +2,8 @@ import { castArray } from "@modern-js/uni-builder";
2
2
  import { newAction, upgradeAction } from "@modern-js/utils";
3
3
  import { i18n, localeKeys } from "../locale";
4
4
  const devCommand = async (program, api) => {
5
- const runner = api.useHookRunners();
6
- const devToolMetas = await runner.registerDev();
5
+ const hooks = api.getHooks();
6
+ const devToolMetas = await hooks.registerDev.call();
7
7
  const devProgram = program.command("dev").alias("start").usage("[options]").description(i18n.t(localeKeys.command.dev.describe)).option("-c --config <config>", i18n.t(localeKeys.command.shared.config)).option("-e --entry [entry...]", i18n.t(localeKeys.command.dev.entry)).option("--analyze", i18n.t(localeKeys.command.shared.analyze)).option("--api-only", i18n.t(localeKeys.command.dev.apiOnly)).option("--web-only", i18n.t(localeKeys.command.dev.webOnly)).action(async (options) => {
8
8
  const { dev } = await import("./dev.js");
9
9
  await dev(api, options);
@@ -14,7 +14,7 @@ const devCommand = async (program, api) => {
14
14
  }
15
15
  for (const subCmd of meta.subCommands) {
16
16
  devProgram.command(subCmd).action(async (options = {}) => {
17
- const { appDirectory } = api.useAppContext();
17
+ const { appDirectory } = api.getAppContext();
18
18
  const { isTypescript } = await import("@modern-js/utils");
19
19
  await meta.action(options, {
20
20
  isTsProject: isTypescript(appDirectory)
@@ -24,8 +24,8 @@ const devCommand = async (program, api) => {
24
24
  }
25
25
  };
26
26
  const buildCommand = async (program, api) => {
27
- const runner = api.useHookRunners();
28
- const platformBuilders = await runner.registerBuildPlatform();
27
+ const hooks = api.getHooks();
28
+ const platformBuilders = await hooks.registerBuildPlatform.call();
29
29
  const buildProgram = program.command("build").usage("[options]").description(i18n.t(localeKeys.command.build.describe)).option("-c --config <config>", i18n.t(localeKeys.command.shared.config)).option("--analyze", i18n.t(localeKeys.command.shared.analyze)).action(async (options) => {
30
30
  const { build } = await import("./build.js");
31
31
  await build(api, options);
@@ -34,7 +34,7 @@ const buildCommand = async (program, api) => {
34
34
  const platforms = castArray(platformBuilder.platform);
35
35
  for (const platform of platforms) {
36
36
  buildProgram.command(platform).action(async () => {
37
- const { appDirectory } = api.useAppContext();
37
+ const { appDirectory } = api.getAppContext();
38
38
  const { isTypescript } = await import("@modern-js/utils");
39
39
  await platformBuilder.build(platform, {
40
40
  isTsProject: isTypescript(appDirectory)
@@ -1,5 +1,5 @@
1
1
  const inspect = async (api, options) => {
2
- const appContext = api.useAppContext();
2
+ const appContext = api.getAppContext();
3
3
  if (!appContext.builder) {
4
4
  throw new Error("Expect the Builder to have been initialized, But the appContext.builder received `undefined`");
5
5
  }
@@ -5,9 +5,9 @@ import { loadServerPlugins } from "../utils/loadPlugins";
5
5
  import { printInstructions } from "../utils/printInstructions";
6
6
  const start = async (api) => {
7
7
  var _userConfig_source, _userConfig_output_distPath;
8
- const appContext = api.useAppContext();
9
- const userConfig = api.useResolvedConfigContext();
10
- const hookRunners = api.useHookRunners();
8
+ const appContext = api.getAppContext();
9
+ const userConfig = api.getNormalizedConfig();
10
+ const hooks = api.getHooks();
11
11
  const { distDirectory, appDirectory, internalDirectory, port, metaName, serverRoutes, serverConfigFile } = appContext;
12
12
  logger.info(`Starting production server...`);
13
13
  const apiOnly = await 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);
@@ -44,7 +44,7 @@ const start = async (api) => {
44
44
  runMode
45
45
  });
46
46
  app.listen(port, async () => {
47
- await printInstructions(hookRunners, appContext, userConfig);
47
+ await printInstructions(hooks, appContext, userConfig);
48
48
  });
49
49
  };
50
50
  export {
@@ -1,3 +1,4 @@
1
+ import { getModifyHtmlPartials } from "../plugins/analyze/getHtmlTemplate";
1
2
  import { transformHookParams, transformHookResult, transformHookRunner } from "./utils";
2
3
  function getHookRunners(context) {
3
4
  const { hooks } = context;
@@ -41,6 +42,11 @@ function getHookRunners(context) {
41
42
  beforePrintInstructions: async (params) => {
42
43
  return hooks.onBeforePrintInstructions.call(params);
43
44
  },
45
+ // garfish plugin hooks
46
+ appendEntryCode: async (params) => {
47
+ const result = await (hooks === null || hooks === void 0 ? void 0 : hooks.appendEntryCode.call(params));
48
+ return result;
49
+ },
44
50
  /**
45
51
  * common hooks
46
52
  */
@@ -51,7 +57,13 @@ function getHookRunners(context) {
51
57
  return hooks.modifyResolvedConfig.call(params);
52
58
  },
53
59
  htmlPartials: async (params) => {
54
- return hooks.modifyHtmlPartials.call(params);
60
+ await hooks.modifyHtmlPartials.call({
61
+ entrypoint: params.entrypoint,
62
+ partials: getModifyHtmlPartials(params.partials)
63
+ });
64
+ return {
65
+ partials: params.partials
66
+ };
55
67
  },
56
68
  commands: async (params) => {
57
69
  return hooks.addCommand.call(params);
@@ -62,7 +74,7 @@ function getHookRunners(context) {
62
74
  prepare: async () => {
63
75
  return hooks.onPrepare.call();
64
76
  },
65
- filedChange: async (params) => {
77
+ fileChange: async (params) => {
66
78
  return hooks.onFileChanged.call(params);
67
79
  },
68
80
  beforeCreateCompiler: async (params) => {
@@ -98,20 +110,20 @@ function getHookRunners(context) {
98
110
  /**
99
111
  * @deprecated
100
112
  */
101
- registerDev: async (params) => {
102
- return hooks.registerDev.call(params);
113
+ registerDev: async () => {
114
+ return hooks.registerDev.call();
103
115
  },
104
116
  /**
105
117
  * @deprecated
106
118
  */
107
- registerBuildPlatform: async (params) => {
108
- return hooks.registerBuildPlatform.call(params);
119
+ registerBuildPlatform: async () => {
120
+ return hooks.registerBuildPlatform.call();
109
121
  },
110
122
  /**
111
123
  * @deprecated
112
124
  */
113
- addRuntimeExports: async (params) => {
114
- return hooks.addRuntimeExports.call(params);
125
+ addRuntimeExports: async () => {
126
+ return hooks.addRuntimeExports.call();
115
127
  }
116
128
  };
117
129
  }
@@ -1,3 +1,4 @@
1
+ import { createCollectAsyncHook } from "@modern-js/plugin-v2";
1
2
  import { getHookRunners } from "./hooks";
2
3
  const compatPlugin = () => ({
3
4
  name: "@modern-js/app-tools-compat",
@@ -7,7 +8,8 @@ const compatPlugin = () => ({
7
8
  };
8
9
  return {
9
10
  useAppContext: () => {
10
- return getAppContext();
11
+ const { _internalContext, ...appContext } = getAppContext();
12
+ return appContext;
11
13
  },
12
14
  setAppContext: (context) => {
13
15
  return updateAppContext(context);
@@ -23,7 +25,13 @@ const compatPlugin = () => ({
23
25
  }
24
26
  };
25
27
  },
26
- setup: (_api) => {
28
+ registryHooks: {
29
+ appendEntryCode: createCollectAsyncHook()
30
+ },
31
+ setup: (api) => {
32
+ api.updateAppContext({
33
+ toolsType: "app-tools"
34
+ });
27
35
  }
28
36
  });
29
37
  export {
@@ -16,7 +16,7 @@ function transformHookRunner(hookRunnerName) {
16
16
  return "addCommand";
17
17
  case "watchFiles":
18
18
  return "addWatchFiles";
19
- case "filedChange":
19
+ case "fileChange":
20
20
  return "onFileChanged";
21
21
  case "beforeCreateCompiler":
22
22
  return "onBeforeCreateCompiler";
@@ -50,6 +50,15 @@ function transformHookParams(hookRunnerName, params) {
50
50
  return {
51
51
  resolved: params
52
52
  };
53
+ case "htmlPartials":
54
+ return {
55
+ partials: {
56
+ top: params.partials.top.current,
57
+ head: params.partials.head.current,
58
+ body: params.partials.body.current
59
+ },
60
+ entrypoint: params.entrypoint
61
+ };
53
62
  default:
54
63
  return params;
55
64
  }
@@ -1,12 +1,150 @@
1
- import { appTools } from "./new/index";
2
- import { appTools as appTools2, initAppContext } from "./new/index";
3
- import { dev } from "./commands/dev";
4
- import { mergeConfig } from "@modern-js/core";
1
+ import { getLocaleLanguage } from "@modern-js/plugin-i18n/language-detector";
2
+ import { createAsyncHook, createCollectAsyncHook } from "@modern-js/plugin-v2";
3
+ import { castArray } from "@modern-js/uni-builder";
4
+ import { cleanRequireCache, deprecatedCommands, emptyDir, getArgv, getCommand } from "@modern-js/utils";
5
+ import { buildCommand, deployCommand, devCommand, inspectCommand, newCommand, serverCommand, upgradeCommand } from "./commands";
6
+ import { compatPlugin } from "./compat";
7
+ import { DEFAULT_RUNTIME_CONFIG_FILE, DEFAULT_SERVER_CONFIG_FILE } from "./constants";
8
+ import { i18n } from "./locale";
9
+ import analyzePlugin from "./plugins/analyze";
10
+ import deployPlugin from "./plugins/deploy";
11
+ import initializePlugin from "./plugins/initialize";
12
+ import serverBuildPlugin from "./plugins/serverBuild";
13
+ import { generateWatchFiles } from "./utils/generateWatchFiles";
14
+ import { initAppContext } from "./utils/initAppContext";
15
+ import { restart } from "./utils/restart";
16
+ export * from "./defineConfig";
17
+ const appTools = (options = {
18
+ // default webpack to be compatible with original projects
19
+ bundler: "webpack"
20
+ }) => ({
21
+ name: "@modern-js/app-tools",
22
+ usePlugins: [
23
+ compatPlugin(),
24
+ initializePlugin({
25
+ bundler: (options === null || options === void 0 ? void 0 : options.bundler) && [
26
+ "rspack",
27
+ "experimental-rspack"
28
+ ].includes(options.bundler) ? "rspack" : "webpack"
29
+ }),
30
+ analyzePlugin({
31
+ bundler: (options === null || options === void 0 ? void 0 : options.bundler) && [
32
+ "rspack",
33
+ "experimental-rspack"
34
+ ].includes(options.bundler) ? "rspack" : "webpack"
35
+ }),
36
+ serverBuildPlugin(),
37
+ deployPlugin()
38
+ ],
39
+ post: [
40
+ "@modern-js/plugin-initialize",
41
+ "@modern-js/plugin-analyze",
42
+ "@modern-js/plugin-ssr",
43
+ "@modern-js/plugin-document",
44
+ "@modern-js/plugin-state",
45
+ "@modern-js/plugin-router",
46
+ "@modern-js/plugin-router-v5",
47
+ "@modern-js/plugin-polyfill"
48
+ ],
49
+ registryHooks: {
50
+ onBeforeConfig: createAsyncHook(),
51
+ onAfterPrepare: createAsyncHook(),
52
+ deploy: createAsyncHook(),
53
+ _internalRuntimePlugins: createAsyncHook(),
54
+ _internalServerPlugins: createAsyncHook(),
55
+ checkEntryPoint: createAsyncHook(),
56
+ modifyEntrypoints: createAsyncHook(),
57
+ modifyFileSystemRoutes: createAsyncHook(),
58
+ modifyServerRoutes: createAsyncHook(),
59
+ generateEntryCode: createAsyncHook(),
60
+ onBeforeGenerateRoutes: createAsyncHook(),
61
+ onBeforePrintInstructions: createAsyncHook(),
62
+ registerDev: createCollectAsyncHook(),
63
+ registerBuildPlatform: createCollectAsyncHook(),
64
+ addRuntimeExports: createAsyncHook()
65
+ },
66
+ setup: (api) => {
67
+ var _userConfig_output;
68
+ const context = api.getAppContext();
69
+ const userConfig = api.getConfig();
70
+ const locale = getLocaleLanguage();
71
+ i18n.changeLanguage({
72
+ locale
73
+ });
74
+ api.updateAppContext(initAppContext({
75
+ appDirectory: context.appDirectory,
76
+ options: {},
77
+ serverConfigFile: DEFAULT_SERVER_CONFIG_FILE,
78
+ runtimeConfigFile: DEFAULT_RUNTIME_CONFIG_FILE,
79
+ tempDir: (_userConfig_output = userConfig.output) === null || _userConfig_output === void 0 ? void 0 : _userConfig_output.tempDir
80
+ }));
81
+ api.addCommand(async ({ program }) => {
82
+ await devCommand(program, api);
83
+ await buildCommand(program, api);
84
+ serverCommand(program, api);
85
+ deployCommand(program, api);
86
+ newCommand(program, locale);
87
+ inspectCommand(program, api);
88
+ upgradeCommand(program);
89
+ deprecatedCommands(program);
90
+ });
91
+ api.onPrepare(async () => {
92
+ const command = getCommand();
93
+ if (command === "deploy") {
94
+ const isSkipBuild = [
95
+ "-s",
96
+ "--skip-build"
97
+ ].some((tag) => {
98
+ return getArgv().includes(tag);
99
+ });
100
+ if (isSkipBuild) {
101
+ return;
102
+ }
103
+ }
104
+ if (command === "dev" || command === "start" || command === "build" || command === "deploy") {
105
+ const resolvedConfig = api.getNormalizedConfig();
106
+ if (resolvedConfig.output.cleanDistPath) {
107
+ const appContext = api.getAppContext();
108
+ await emptyDir(appContext.distDirectory);
109
+ }
110
+ }
111
+ });
112
+ api.addWatchFiles(async () => {
113
+ const appContext = api.getAppContext();
114
+ const config = api.getNormalizedConfig();
115
+ const files = await generateWatchFiles(appContext, config.source.configDir);
116
+ const watchFiles = castArray(config.dev.watchFiles);
117
+ watchFiles.forEach(({ type, paths }) => {
118
+ if (type === "reload-server") {
119
+ files.push(...Array.isArray(paths) ? paths : [
120
+ paths
121
+ ]);
122
+ }
123
+ });
124
+ return files;
125
+ });
126
+ api.onFileChanged(async (e) => {
127
+ const { filename, eventType, isPrivate } = e;
128
+ if (!isPrivate && (eventType === "change" || eventType === "unlink")) {
129
+ const { closeServer } = await import("./utils/createServer.js");
130
+ await closeServer();
131
+ await restart(api.getHooks(), filename);
132
+ }
133
+ });
134
+ api.onBeforeRestart(() => {
135
+ cleanRequireCache([
136
+ require.resolve("./plugins/analyze")
137
+ ]);
138
+ });
139
+ }
140
+ });
5
141
  import { defineConfig, defineLegacyConfig } from "./defineConfig";
142
+ import { mergeConfig } from "@modern-js/core";
143
+ import { dev } from "./commands/dev";
6
144
  export * from "./types";
7
145
  var src_default = appTools;
8
146
  export {
9
- appTools2 as appTools,
147
+ appTools,
10
148
  src_default as default,
11
149
  defineConfig,
12
150
  defineLegacyConfig,
@@ -22,10 +22,10 @@ const ifAlreadyExists = (entrypoints, checked) => entrypoints.some((entrypoint)
22
22
  }
23
23
  return false;
24
24
  });
25
- const getBundleEntry = async (hookRunners, appContext, config) => {
25
+ const getBundleEntry = async (hooks, appContext, config) => {
26
26
  const { appDirectory, packageName } = appContext;
27
27
  const { disableDefaultEntries, entries, entriesDir, mainEntryName } = config.source;
28
- const defaults = disableDefaultEntries ? [] : await getFileSystemEntry(hookRunners, appContext, config);
28
+ const defaults = disableDefaultEntries ? [] : await getFileSystemEntry(hooks, appContext, config);
29
29
  if (entries) {
30
30
  Object.keys(entries).forEach((name) => {
31
31
  const value = entries[name];
@@ -6,8 +6,8 @@ import { isDefaultExportFunction } from "./isDefaultExportFunction";
6
6
  const hasIndex = (dir) => findExists(JS_EXTENSIONS.map((ext) => path.resolve(dir, `${INDEX_FILE_NAME}${ext}`)));
7
7
  const hasEntry = (dir) => findExists(JS_EXTENSIONS.map((ext) => path.resolve(dir, `${ENTRY_FILE_NAME}${ext}`)));
8
8
  const hasServerEntry = (dir) => findExists(JS_EXTENSIONS.map((ext) => path.resolve(dir, `${ENTRY_FILE_NAME}.server${ext}`)));
9
- const isBundleEntry = async (hookRunners, dir, enableCustomEntry) => {
10
- const { entry } = await hookRunners.checkEntryPoint({
9
+ const isBundleEntry = async (hooks, dir, enableCustomEntry) => {
10
+ const { entry } = await hooks.checkEntryPoint.call({
11
11
  path: dir,
12
12
  entry: false
13
13
  });
@@ -20,7 +20,7 @@ const isBundleEntry = async (hookRunners, dir, enableCustomEntry) => {
20
20
  }
21
21
  return hasIndex(dir);
22
22
  };
23
- const scanDir = async (hookRunners, dirs, enableCustomEntry) => {
23
+ const scanDir = async (hooks, dirs, enableCustomEntry) => {
24
24
  const entries = await Promise.all(dirs.map(async (dir) => {
25
25
  const indexFile = hasIndex(dir);
26
26
  const customBootstrap = isDefaultExportFunction(indexFile) ? indexFile : false;
@@ -37,7 +37,7 @@ const scanDir = async (hookRunners, dirs, enableCustomEntry) => {
37
37
  customBootstrap
38
38
  };
39
39
  }
40
- const entryFile = (await hookRunners.checkEntryPoint({
40
+ const entryFile = (await hooks.checkEntryPoint.call({
41
41
  path: dir,
42
42
  entry: false
43
43
  })).entry;
@@ -71,7 +71,7 @@ const scanDir = async (hookRunners, dirs, enableCustomEntry) => {
71
71
  }
72
72
  return entries;
73
73
  };
74
- const getFileSystemEntry = async (hookRunners, appContext, config) => {
74
+ const getFileSystemEntry = async (hooks, appContext, config) => {
75
75
  const { appDirectory } = appContext;
76
76
  const { source: { entriesDir, disableEntryDirs, enableCustomEntry } } = config;
77
77
  let disabledDirs = [];
@@ -81,19 +81,19 @@ const getFileSystemEntry = async (hookRunners, appContext, config) => {
81
81
  const src = ensureAbsolutePath(appDirectory, entriesDir || "");
82
82
  if (fs.existsSync(src)) {
83
83
  if (fs.statSync(src).isDirectory()) {
84
- if (await isBundleEntry(hookRunners, src, enableCustomEntry)) {
85
- return scanDir(hookRunners, [
84
+ if (await isBundleEntry(hooks, src, enableCustomEntry)) {
85
+ return scanDir(hooks, [
86
86
  src
87
87
  ], enableCustomEntry);
88
88
  }
89
89
  const dirs = [];
90
90
  await Promise.all(fs.readdirSync(src).map(async (filename) => {
91
91
  const file = path.join(src, filename);
92
- if (fs.statSync(file).isDirectory() && await isBundleEntry(hookRunners, file, enableCustomEntry) && !disabledDirs.includes(file)) {
92
+ if (fs.statSync(file).isDirectory() && await isBundleEntry(hooks, file, enableCustomEntry) && !disabledDirs.includes(file)) {
93
93
  dirs.push(file);
94
94
  }
95
95
  }));
96
- return scanDir(hookRunners, dirs, enableCustomEntry);
96
+ return scanDir(hooks, dirs, enableCustomEntry);
97
97
  } else {
98
98
  throw Error(`source.entriesDir accept a directory.`);
99
99
  }