@modern-js/app-tools 2.63.1 → 2.63.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) 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 +21 -6
  9. package/dist/cjs/{new/compat → compat}/index.js +7 -2
  10. package/dist/cjs/{new/compat → compat}/utils.js +29 -8
  11. package/dist/cjs/config/default.js +6 -1
  12. package/dist/cjs/config/legacy/index.js +0 -1
  13. package/dist/cjs/index.js +154 -5
  14. package/dist/cjs/plugins/analyze/getServerRoutes.js +12 -2
  15. package/dist/cjs/plugins/analyze/index.js +25 -10
  16. package/dist/cjs/plugins/analyze/utils.js +6 -0
  17. package/dist/cjs/plugins/deploy/platforms/netlify.js +7 -4
  18. package/dist/cjs/plugins/deploy/platforms/node.js +6 -3
  19. package/dist/cjs/plugins/deploy/platforms/vercel.js +7 -4
  20. package/dist/cjs/plugins/serverBuild.js +30 -32
  21. package/dist/cjs/{new/run.js → run/index.js} +6 -6
  22. package/dist/cjs/{new → utils}/getConfigFile.js +1 -1
  23. package/dist/cjs/{new/context.js → utils/initAppContext.js} +3 -3
  24. package/dist/cjs/{new/utils/index.js → utils/isAutoLoadPlugins.js} +6 -6
  25. package/dist/cjs/utils/loadPlugins.js +35 -4
  26. package/dist/cjs/utils/printInstructions.js +2 -11
  27. package/dist/cjs/utils/restart.js +2 -2
  28. package/dist/esm/commands/build.js +18 -12
  29. package/dist/esm/commands/deploy.js +6 -6
  30. package/dist/esm/commands/dev.js +11 -11
  31. package/dist/esm/commands/index.js +8 -8
  32. package/dist/esm/commands/inspect.js +1 -1
  33. package/dist/esm/commands/serve.js +6 -6
  34. package/dist/esm/{new/compat → compat}/hooks.js +98 -49
  35. package/dist/esm/{new/compat → compat}/index.js +8 -3
  36. package/dist/esm/{new/compat → compat}/utils.js +29 -8
  37. package/dist/esm/config/default.js +12 -1
  38. package/dist/esm/config/legacy/index.js +0 -1
  39. package/dist/esm/index.js +245 -2
  40. package/dist/esm/plugins/analyze/getServerRoutes.js +11 -2
  41. package/dist/esm/plugins/analyze/index.js +76 -34
  42. package/dist/esm/plugins/analyze/utils.js +5 -0
  43. package/dist/esm/plugins/deploy/platforms/netlify.js +6 -3
  44. package/dist/esm/plugins/deploy/platforms/node.js +5 -2
  45. package/dist/esm/plugins/deploy/platforms/vercel.js +6 -3
  46. package/dist/esm/plugins/serverBuild.js +52 -56
  47. package/dist/esm/{new/run.js → run/index.js} +6 -6
  48. package/dist/esm/{new → utils}/getConfigFile.js +1 -1
  49. package/dist/esm/{new/utils/index.js → utils/isAutoLoadPlugins.js} +6 -6
  50. package/dist/esm/utils/loadPlugins.js +95 -7
  51. package/dist/esm/utils/printInstructions.js +1 -28
  52. package/dist/esm/utils/restart.js +3 -3
  53. package/dist/esm-node/commands/build.js +19 -13
  54. package/dist/esm-node/commands/deploy.js +5 -5
  55. package/dist/esm-node/commands/dev.js +12 -12
  56. package/dist/esm-node/commands/index.js +6 -6
  57. package/dist/esm-node/commands/inspect.js +1 -1
  58. package/dist/esm-node/commands/serve.js +5 -5
  59. package/dist/esm-node/{new/compat → compat}/hooks.js +21 -6
  60. package/dist/esm-node/{new/compat → compat}/index.js +8 -3
  61. package/dist/esm-node/{new/compat → compat}/utils.js +29 -8
  62. package/dist/esm-node/config/default.js +6 -1
  63. package/dist/esm-node/config/legacy/index.js +0 -1
  64. package/dist/esm-node/index.js +140 -2
  65. package/dist/esm-node/plugins/analyze/getServerRoutes.js +11 -2
  66. package/dist/esm-node/plugins/analyze/index.js +26 -11
  67. package/dist/esm-node/plugins/analyze/utils.js +5 -0
  68. package/dist/esm-node/plugins/deploy/platforms/netlify.js +6 -3
  69. package/dist/esm-node/plugins/deploy/platforms/node.js +5 -2
  70. package/dist/esm-node/plugins/deploy/platforms/vercel.js +6 -3
  71. package/dist/esm-node/plugins/serverBuild.js +30 -32
  72. package/dist/esm-node/{new/run.js → run/index.js} +6 -6
  73. package/dist/esm-node/{new → utils}/getConfigFile.js +1 -1
  74. package/dist/esm-node/{new/utils/index.js → utils/isAutoLoadPlugins.js} +2 -2
  75. package/dist/esm-node/utils/loadPlugins.js +34 -4
  76. package/dist/esm-node/utils/printInstructions.js +1 -9
  77. package/dist/esm-node/utils/restart.js +2 -2
  78. package/dist/types/commands/build.d.ts +2 -2
  79. package/dist/types/commands/deploy.d.ts +2 -2
  80. package/dist/types/commands/dev.d.ts +2 -2
  81. package/dist/types/commands/index.d.ts +6 -6
  82. package/dist/types/commands/inspect.d.ts +2 -2
  83. package/dist/types/commands/serve.d.ts +2 -2
  84. package/dist/types/{new/compat → compat}/hooks.d.ts +2 -2
  85. package/dist/types/compat/index.d.ts +2 -0
  86. package/dist/types/{new/compat → compat}/utils.d.ts +8 -1
  87. package/dist/types/index.d.ts +5 -3
  88. package/dist/types/plugins/analyze/getServerRoutes.d.ts +1 -0
  89. package/dist/types/plugins/analyze/utils.d.ts +1 -0
  90. package/dist/types/plugins/serverBuild.d.ts +2 -2
  91. package/dist/types/types/config/index.d.ts +0 -1
  92. package/dist/types/types/index.d.ts +2 -0
  93. package/dist/types/types/new.d.ts +11 -16
  94. package/dist/types/utils/generateWatchFiles.d.ts +2 -2
  95. package/dist/types/utils/isAutoLoadPlugins.d.ts +1 -0
  96. package/dist/types/utils/loadPlugins.d.ts +13 -3
  97. package/dist/types/utils/printInstructions.d.ts +1 -3
  98. package/dist/types/utils/restart.d.ts +2 -3
  99. package/package.json +24 -28
  100. package/dist/cjs/hooks.js +0 -60
  101. package/dist/cjs/new/index.js +0 -79
  102. package/dist/cjs/new/loadPlugins.js +0 -57
  103. package/dist/cjs/old.js +0 -179
  104. package/dist/cjs/plugins/deploy/dependencies/index.js +0 -237
  105. package/dist/cjs/plugins/deploy/dependencies/utils.js +0 -179
  106. package/dist/cjs/plugins/deploy/exports.js +0 -28
  107. package/dist/esm/hooks.js +0 -36
  108. package/dist/esm/new/index.js +0 -55
  109. package/dist/esm/new/loadPlugins.js +0 -94
  110. package/dist/esm/old.js +0 -258
  111. package/dist/esm/plugins/deploy/dependencies/index.js +0 -615
  112. package/dist/esm/plugins/deploy/dependencies/utils.js +0 -421
  113. package/dist/esm/plugins/deploy/exports.js +0 -4
  114. package/dist/esm-node/hooks.js +0 -36
  115. package/dist/esm-node/new/index.js +0 -52
  116. package/dist/esm-node/new/loadPlugins.js +0 -33
  117. package/dist/esm-node/old.js +0 -140
  118. package/dist/esm-node/plugins/deploy/dependencies/index.js +0 -202
  119. package/dist/esm-node/plugins/deploy/dependencies/utils.js +0 -137
  120. package/dist/esm-node/plugins/deploy/exports.js +0 -4
  121. package/dist/types/hooks.d.ts +0 -2
  122. package/dist/types/new/compat/index.d.ts +0 -2
  123. package/dist/types/new/index.d.ts +0 -6
  124. package/dist/types/new/loadPlugins.d.ts +0 -9
  125. package/dist/types/new/utils/index.d.ts +0 -1
  126. package/dist/types/old.d.ts +0 -13
  127. package/dist/types/plugins/deploy/dependencies/index.d.ts +0 -20
  128. package/dist/types/plugins/deploy/dependencies/utils.d.ts +0 -44
  129. package/dist/types/plugins/deploy/exports.d.ts +0 -1
  130. /package/dist/cjs/{new/constants.js → constants.js} +0 -0
  131. /package/dist/esm/{new/constants.js → constants.js} +0 -0
  132. /package/dist/esm/{new/context.js → utils/initAppContext.js} +0 -0
  133. /package/dist/esm-node/{new/constants.js → constants.js} +0 -0
  134. /package/dist/esm-node/{new/context.js → utils/initAppContext.js} +0 -0
  135. /package/dist/types/{new/constants.d.ts → constants.d.ts} +0 -0
  136. /package/dist/types/{new/run.d.ts → run/index.d.ts} +0 -0
  137. /package/dist/types/{new → utils}/getConfigFile.d.ts +0 -0
  138. /package/dist/types/{new/context.d.ts → utils/initAppContext.d.ts} +0 -0
@@ -1,23 +1,24 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
- import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
- import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
2
+ import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
4
3
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
5
4
  import { loadServerPlugins as loadServerPluginInstances } from "@modern-js/prod-server";
5
+ import { compatibleRequire, createDebugger, dynamicImport, getInternalPlugins, tryResolve } from "@modern-js/utils";
6
+ var debug = createDebugger("load-plugins");
6
7
  function getServerPlugins(api) {
7
8
  return _getServerPlugins.apply(this, arguments);
8
9
  }
9
10
  function _getServerPlugins() {
10
11
  _getServerPlugins = _async_to_generator(function(api) {
11
- var metaName, runner, plugins, filtedPlugins;
12
+ var metaName, hooks, plugins, filtedPlugins;
12
13
  var _arguments = arguments;
13
14
  return _ts_generator(this, function(_state) {
14
15
  switch (_state.label) {
15
16
  case 0:
16
17
  metaName = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : "modern-js";
17
- runner = api.useHookRunners();
18
+ hooks = api.getHooks();
18
19
  return [
19
20
  4,
20
- runner._internalServerPlugins({
21
+ hooks._internalServerPlugins.call({
21
22
  plugins: []
22
23
  })
23
24
  ];
@@ -26,9 +27,9 @@ function _getServerPlugins() {
26
27
  filtedPlugins = plugins.filter(function(plugin) {
27
28
  return plugin.name.includes(metaName);
28
29
  });
29
- api.setAppContext(_object_spread_props(_object_spread({}, api.useAppContext()), {
30
+ api.updateAppContext({
30
31
  serverPlugins: filtedPlugins
31
- }));
32
+ });
32
33
  return [
33
34
  2,
34
35
  filtedPlugins
@@ -68,7 +69,94 @@ function _loadServerPlugins() {
68
69
  });
69
70
  return _loadServerPlugins.apply(this, arguments);
70
71
  }
72
+ var resolveCliPlugin = function() {
73
+ var _ref = _async_to_generator(function(p, appDirectory) {
74
+ var pkg, pluginOptions, path, module, e, ref, result;
75
+ return _ts_generator(this, function(_state) {
76
+ switch (_state.label) {
77
+ case 0:
78
+ pkg = typeof p === "string" ? p : p[0];
79
+ pluginOptions = typeof p === "string" ? void 0 : p[1];
80
+ path = tryResolve(pkg, appDirectory);
81
+ _state.label = 1;
82
+ case 1:
83
+ _state.trys.push([
84
+ 1,
85
+ 3,
86
+ ,
87
+ 5
88
+ ]);
89
+ return [
90
+ 4,
91
+ compatibleRequire(path)
92
+ ];
93
+ case 2:
94
+ module = _state.sent();
95
+ return [
96
+ 3,
97
+ 5
98
+ ];
99
+ case 3:
100
+ e = _state.sent();
101
+ return [
102
+ 4,
103
+ dynamicImport(path)
104
+ ];
105
+ case 4:
106
+ ref = _state.sent(), module = ref.default, ref;
107
+ return [
108
+ 3,
109
+ 5
110
+ ];
111
+ case 5:
112
+ if (typeof module === "function") {
113
+ result = module(pluginOptions);
114
+ return [
115
+ 2,
116
+ result
117
+ ];
118
+ }
119
+ return [
120
+ 2,
121
+ module
122
+ ];
123
+ }
124
+ });
125
+ });
126
+ return function resolveCliPlugin2(p, appDirectory) {
127
+ return _ref.apply(this, arguments);
128
+ };
129
+ }();
130
+ var loadInternalPlugins = function() {
131
+ var _ref = _async_to_generator(function(appDirectory, internalPlugins, autoLoad, autoLoadPlugins) {
132
+ var plugins, loadedPlugins;
133
+ return _ts_generator(this, function(_state) {
134
+ switch (_state.label) {
135
+ case 0:
136
+ plugins = _to_consumable_array(autoLoadPlugins ? getInternalPlugins(appDirectory, internalPlugins) : []).concat(_to_consumable_array(autoLoad ? getInternalPlugins(appDirectory, autoLoad) : []));
137
+ return [
138
+ 4,
139
+ Promise.all(plugins.map(function(plugin) {
140
+ var loadedPlugin = resolveCliPlugin(plugin, appDirectory);
141
+ debug("resolve plugin %s: %s", plugin, loadedPlugin);
142
+ return loadedPlugin;
143
+ }))
144
+ ];
145
+ case 1:
146
+ loadedPlugins = _state.sent();
147
+ return [
148
+ 2,
149
+ loadedPlugins
150
+ ];
151
+ }
152
+ });
153
+ });
154
+ return function loadInternalPlugins2(appDirectory, internalPlugins, autoLoad, autoLoadPlugins) {
155
+ return _ref.apply(this, arguments);
156
+ };
157
+ }();
71
158
  export {
72
159
  getServerPlugins,
160
+ loadInternalPlugins,
73
161
  loadServerPlugins
74
162
  };
@@ -27,33 +27,6 @@ var printInstructions = function() {
27
27
  return _ref.apply(this, arguments);
28
28
  };
29
29
  }();
30
- var printInstructionsCompat = function() {
31
- var _ref = _async_to_generator(function(hookRunners, appContext, config) {
32
- var message, instructions;
33
- return _ts_generator(this, function(_state) {
34
- switch (_state.label) {
35
- case 0:
36
- message = prettyInstructions(appContext, config);
37
- return [
38
- 4,
39
- hookRunners.beforePrintInstructions({
40
- instructions: message
41
- })
42
- ];
43
- case 1:
44
- instructions = _state.sent().instructions;
45
- logger.log(instructions);
46
- return [
47
- 2
48
- ];
49
- }
50
- });
51
- });
52
- return function printInstructionsCompat2(hookRunners, appContext, config) {
53
- return _ref.apply(this, arguments);
54
- };
55
- }();
56
30
  export {
57
- printInstructions,
58
- printInstructionsCompat
31
+ printInstructions
59
32
  };
@@ -3,11 +3,11 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import { cli } from "@modern-js/plugin-v2/cli";
4
4
  import { chalk, clearConsole, getFullArgv, logger } from "@modern-js/utils";
5
5
  import { program } from "@modern-js/utils/commander";
6
- function restart(hooksRunner, filename) {
6
+ function restart(hooks, filename) {
7
7
  return _restart.apply(this, arguments);
8
8
  }
9
9
  function _restart() {
10
- _restart = _async_to_generator(function(hooksRunner, filename) {
10
+ _restart = _async_to_generator(function(hooks, filename) {
11
11
  var hasGetError, err;
12
12
  return _ts_generator(this, function(_state) {
13
13
  switch (_state.label) {
@@ -17,7 +17,7 @@ function _restart() {
17
17
  hasGetError = false;
18
18
  return [
19
19
  4,
20
- hooksRunner.beforeRestart()
20
+ hooks.onBeforeRestart.call()
21
21
  ];
22
22
  case 1:
23
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,12 +1,11 @@
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";
6
5
  import { buildServerConfig } from "../utils/config";
7
6
  import { setServer } from "../utils/createServer";
8
7
  import { loadServerPlugins } from "../utils/loadPlugins";
9
- import { printInstructionsCompat } from "../utils/printInstructions";
8
+ import { printInstructions } from "../utils/printInstructions";
10
9
  import { registerCompiler } from "../utils/register";
11
10
  import { generateRoutes } from "../utils/routes";
12
11
  const dev = async (api, options, devServerOptions) => {
@@ -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
- printInstructionsCompat(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
  }
@@ -2,12 +2,12 @@ import path from "path";
2
2
  import { createProdServer } from "@modern-js/prod-server";
3
3
  import { SERVER_DIR, getMeta, getTargetDir, isApiOnly, logger } from "@modern-js/utils";
4
4
  import { loadServerPlugins } from "../utils/loadPlugins";
5
- import { printInstructionsCompat } from "../utils/printInstructions";
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 printInstructionsCompat(hookRunners, appContext, userConfig);
47
+ await printInstructions(hooks, appContext, userConfig);
48
48
  });
49
49
  };
50
50
  export {
@@ -1,4 +1,4 @@
1
- import { getModifyHtmlPartials } from "../../plugins/analyze/getHtmlTemplate";
1
+ import { getModifyHtmlPartials } from "../plugins/analyze/getHtmlTemplate";
2
2
  import { transformHookParams, transformHookResult, transformHookRunner } from "./utils";
3
3
  function getHookRunners(context) {
4
4
  const { hooks } = context;
@@ -47,6 +47,14 @@ function getHookRunners(context) {
47
47
  const result = await (hooks === null || hooks === void 0 ? void 0 : hooks.appendEntryCode.call(params));
48
48
  return result;
49
49
  },
50
+ // test plugin hooks
51
+ jestConfig: async (utils) => {
52
+ const result = await (hooks === null || hooks === void 0 ? void 0 : hooks.jestConfig.call(utils, (utils2) => utils2));
53
+ return result;
54
+ },
55
+ afterTest: async () => {
56
+ return hooks.afterTest.call();
57
+ },
50
58
  /**
51
59
  * common hooks
52
60
  */
@@ -110,14 +118,14 @@ function getHookRunners(context) {
110
118
  /**
111
119
  * @deprecated
112
120
  */
113
- registerDev: async (params) => {
114
- return hooks.registerDev.call(params);
121
+ registerDev: async () => {
122
+ return hooks.registerDev.call();
115
123
  },
116
124
  /**
117
125
  * @deprecated
118
126
  */
119
- registerBuildPlatform: async (params) => {
120
- return hooks.registerBuildPlatform.call(params);
127
+ registerBuildPlatform: async () => {
128
+ return hooks.registerBuildPlatform.call();
121
129
  },
122
130
  /**
123
131
  * @deprecated
@@ -136,7 +144,14 @@ function handleSetupResult(setupResult, api) {
136
144
  if (typeof fn === "function") {
137
145
  const newAPI = transformHookRunner(key);
138
146
  if (api[newAPI]) {
139
- api[newAPI](async (params) => transformHookResult(key, await fn(transformHookParams(key, params))));
147
+ api[newAPI](async (...params) => {
148
+ const { isMultiple, params: transformParams } = transformHookParams(key, params);
149
+ if (isMultiple) {
150
+ return transformHookResult(key, await fn(...transformParams));
151
+ } else {
152
+ return transformHookResult(key, await fn(transformParams));
153
+ }
154
+ });
140
155
  }
141
156
  }
142
157
  });
@@ -1,4 +1,4 @@
1
- import { createCollectAsyncHook } from "@modern-js/plugin-v2";
1
+ import { createAsyncHook, createCollectAsyncHook } from "@modern-js/plugin-v2";
2
2
  import { getHookRunners } from "./hooks";
3
3
  const compatPlugin = () => ({
4
4
  name: "@modern-js/app-tools-compat",
@@ -26,9 +26,14 @@ const compatPlugin = () => ({
26
26
  };
27
27
  },
28
28
  registryHooks: {
29
- appendEntryCode: createCollectAsyncHook()
29
+ appendEntryCode: createCollectAsyncHook(),
30
+ jestConfig: createAsyncHook(),
31
+ afterTest: createAsyncHook()
30
32
  },
31
- setup: (_api) => {
33
+ setup: (api) => {
34
+ api.updateAppContext({
35
+ toolsType: "app-tools"
36
+ });
32
37
  }
33
38
  });
34
39
  export {
@@ -1,3 +1,4 @@
1
+ import { getModifyHtmlPartials } from "../plugins/analyze/getHtmlTemplate";
1
2
  function transformHookRunner(hookRunnerName) {
2
3
  switch (hookRunnerName) {
3
4
  case "beforeConfig":
@@ -48,25 +49,45 @@ function transformHookParams(hookRunnerName, params) {
48
49
  switch (hookRunnerName) {
49
50
  case "resolvedConfig":
50
51
  return {
51
- resolved: params
52
+ isMultiple: false,
53
+ params: {
54
+ resolved: params[0]
55
+ }
52
56
  };
53
57
  case "htmlPartials":
54
58
  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
59
+ isMultiple: false,
60
+ params: {
61
+ partials: {
62
+ top: params[0].partials.top.current,
63
+ head: params[0].partials.head.current,
64
+ body: params[0].partials.body.current
65
+ },
66
+ entrypoint: params[0].entrypoint
67
+ }
61
68
  };
69
+ case "jestConfig": {
70
+ return {
71
+ isMultiple: true,
72
+ params
73
+ };
74
+ }
62
75
  default:
63
- return params;
76
+ return {
77
+ isMultiple: false,
78
+ params: params[0]
79
+ };
64
80
  }
65
81
  }
66
82
  function transformHookResult(hookRunnerName, result) {
67
83
  switch (hookRunnerName) {
68
84
  case "resolvedConfig":
69
85
  return result.resolved;
86
+ case "htmlPartials":
87
+ return {
88
+ partials: getModifyHtmlPartials(result.partials),
89
+ entrypoint: result.entrypoint
90
+ };
70
91
  default:
71
92
  return result;
72
93
  }
@@ -4,7 +4,12 @@ function createDefaultConfig(appContext) {
4
4
  const dev = {
5
5
  // `dev.port` should not have a default value
6
6
  // because we will use `server.port` by default
7
- port: void 0
7
+ port: void 0,
8
+ cliShortcuts: {
9
+ help: false,
10
+ // does not support restart server and print urls yet
11
+ custom: (shortcuts = []) => shortcuts.filter(({ key }) => key !== "r" && key !== "u")
12
+ }
8
13
  };
9
14
  const output = {
10
15
  distPath: {
@@ -21,7 +21,6 @@ function transformNormalizedConfig(config) {
21
21
  server,
22
22
  cliOptions,
23
23
  testing,
24
- devtools: {},
25
24
  builderPlugins: [],
26
25
  plugins,
27
26
  security: {},