@bleedingdev/modern-js-plugin 3.2.0-ultramodern.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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/cjs/cli/api.js +119 -0
  4. package/dist/cjs/cli/context.js +85 -0
  5. package/dist/cjs/cli/hooks.js +65 -0
  6. package/dist/cjs/cli/index.js +71 -0
  7. package/dist/cjs/cli/run/config/createLoadedConfig.js +87 -0
  8. package/dist/cjs/cli/run/config/createResolvedConfig.js +48 -0
  9. package/dist/cjs/cli/run/config/loadConfig.js +113 -0
  10. package/dist/cjs/cli/run/create.js +198 -0
  11. package/dist/cjs/cli/run/index.js +56 -0
  12. package/dist/cjs/cli/run/run.js +57 -0
  13. package/dist/cjs/cli/run/types.js +18 -0
  14. package/dist/cjs/cli/run/utils/checkIsDuplicationPlugin.js +45 -0
  15. package/dist/cjs/cli/run/utils/commander.js +56 -0
  16. package/dist/cjs/cli/run/utils/createFileWatcher.js +112 -0
  17. package/dist/cjs/cli/run/utils/debug.js +37 -0
  18. package/dist/cjs/cli/run/utils/initAppDir.js +55 -0
  19. package/dist/cjs/cli/run/utils/mergeConfig.js +66 -0
  20. package/dist/cjs/hooks.js +169 -0
  21. package/dist/cjs/index.js +55 -0
  22. package/dist/cjs/manager.js +135 -0
  23. package/dist/cjs/runtime/api.js +95 -0
  24. package/dist/cjs/runtime/context.js +60 -0
  25. package/dist/cjs/runtime/hooks.js +46 -0
  26. package/dist/cjs/runtime/index.js +51 -0
  27. package/dist/cjs/runtime/run/create.js +79 -0
  28. package/dist/cjs/runtime/run/index.js +37 -0
  29. package/dist/cjs/runtime/run/types.js +18 -0
  30. package/dist/cjs/server/api.js +96 -0
  31. package/dist/cjs/server/context.js +75 -0
  32. package/dist/cjs/server/hooks.js +43 -0
  33. package/dist/cjs/server/index.js +54 -0
  34. package/dist/cjs/server/run/create.js +79 -0
  35. package/dist/cjs/server/run/index.js +40 -0
  36. package/dist/cjs/server/run/types.js +18 -0
  37. package/dist/cjs/types/cli/api.js +18 -0
  38. package/dist/cjs/types/cli/context.js +18 -0
  39. package/dist/cjs/types/cli/hooks.js +18 -0
  40. package/dist/cjs/types/cli/index.js +18 -0
  41. package/dist/cjs/types/cli/plugin.js +18 -0
  42. package/dist/cjs/types/hooks.js +18 -0
  43. package/dist/cjs/types/index.js +18 -0
  44. package/dist/cjs/types/plugin.js +18 -0
  45. package/dist/cjs/types/runtime/api.js +18 -0
  46. package/dist/cjs/types/runtime/context.js +18 -0
  47. package/dist/cjs/types/runtime/hooks.js +18 -0
  48. package/dist/cjs/types/runtime/index.js +18 -0
  49. package/dist/cjs/types/runtime/plugin.js +18 -0
  50. package/dist/cjs/types/server/api.js +18 -0
  51. package/dist/cjs/types/server/context.js +18 -0
  52. package/dist/cjs/types/server/hooks.js +18 -0
  53. package/dist/cjs/types/server/index.js +18 -0
  54. package/dist/cjs/types/server/plugin.js +18 -0
  55. package/dist/cjs/types/utils.js +18 -0
  56. package/dist/esm/cli/api.mjs +85 -0
  57. package/dist/esm/cli/context.mjs +38 -0
  58. package/dist/esm/cli/hooks.mjs +31 -0
  59. package/dist/esm/cli/index.mjs +6 -0
  60. package/dist/esm/cli/run/config/createLoadedConfig.mjs +53 -0
  61. package/dist/esm/cli/run/config/createResolvedConfig.mjs +14 -0
  62. package/dist/esm/cli/run/config/loadConfig.mjs +60 -0
  63. package/dist/esm/cli/run/create.mjs +158 -0
  64. package/dist/esm/cli/run/index.mjs +7 -0
  65. package/dist/esm/cli/run/run.mjs +23 -0
  66. package/dist/esm/cli/run/types.mjs +0 -0
  67. package/dist/esm/cli/run/utils/checkIsDuplicationPlugin.mjs +11 -0
  68. package/dist/esm/cli/run/utils/commander.mjs +16 -0
  69. package/dist/esm/cli/run/utils/createFileWatcher.mjs +68 -0
  70. package/dist/esm/cli/run/utils/debug.mjs +3 -0
  71. package/dist/esm/cli/run/utils/initAppDir.mjs +11 -0
  72. package/dist/esm/cli/run/utils/mergeConfig.mjs +32 -0
  73. package/dist/esm/hooks.mjs +120 -0
  74. package/dist/esm/index.mjs +2 -0
  75. package/dist/esm/manager.mjs +101 -0
  76. package/dist/esm/runtime/api.mjs +61 -0
  77. package/dist/esm/runtime/context.mjs +23 -0
  78. package/dist/esm/runtime/hooks.mjs +12 -0
  79. package/dist/esm/runtime/index.mjs +4 -0
  80. package/dist/esm/runtime/run/create.mjs +45 -0
  81. package/dist/esm/runtime/run/index.mjs +3 -0
  82. package/dist/esm/runtime/run/types.mjs +0 -0
  83. package/dist/esm/server/api.mjs +59 -0
  84. package/dist/esm/server/context.mjs +38 -0
  85. package/dist/esm/server/hooks.mjs +9 -0
  86. package/dist/esm/server/index.mjs +4 -0
  87. package/dist/esm/server/run/create.mjs +45 -0
  88. package/dist/esm/server/run/index.mjs +3 -0
  89. package/dist/esm/server/run/types.mjs +0 -0
  90. package/dist/esm/types/cli/api.mjs +0 -0
  91. package/dist/esm/types/cli/context.mjs +0 -0
  92. package/dist/esm/types/cli/hooks.mjs +0 -0
  93. package/dist/esm/types/cli/index.mjs +0 -0
  94. package/dist/esm/types/cli/plugin.mjs +0 -0
  95. package/dist/esm/types/hooks.mjs +0 -0
  96. package/dist/esm/types/index.mjs +0 -0
  97. package/dist/esm/types/plugin.mjs +0 -0
  98. package/dist/esm/types/runtime/api.mjs +0 -0
  99. package/dist/esm/types/runtime/context.mjs +0 -0
  100. package/dist/esm/types/runtime/hooks.mjs +0 -0
  101. package/dist/esm/types/runtime/index.mjs +0 -0
  102. package/dist/esm/types/runtime/plugin.mjs +0 -0
  103. package/dist/esm/types/server/api.mjs +0 -0
  104. package/dist/esm/types/server/context.mjs +0 -0
  105. package/dist/esm/types/server/hooks.mjs +0 -0
  106. package/dist/esm/types/server/index.mjs +0 -0
  107. package/dist/esm/types/server/plugin.mjs +0 -0
  108. package/dist/esm/types/utils.mjs +0 -0
  109. package/dist/esm-node/cli/api.mjs +86 -0
  110. package/dist/esm-node/cli/context.mjs +39 -0
  111. package/dist/esm-node/cli/hooks.mjs +32 -0
  112. package/dist/esm-node/cli/index.mjs +7 -0
  113. package/dist/esm-node/cli/run/config/createLoadedConfig.mjs +54 -0
  114. package/dist/esm-node/cli/run/config/createResolvedConfig.mjs +15 -0
  115. package/dist/esm-node/cli/run/config/loadConfig.mjs +63 -0
  116. package/dist/esm-node/cli/run/create.mjs +159 -0
  117. package/dist/esm-node/cli/run/index.mjs +8 -0
  118. package/dist/esm-node/cli/run/run.mjs +24 -0
  119. package/dist/esm-node/cli/run/types.mjs +1 -0
  120. package/dist/esm-node/cli/run/utils/checkIsDuplicationPlugin.mjs +12 -0
  121. package/dist/esm-node/cli/run/utils/commander.mjs +17 -0
  122. package/dist/esm-node/cli/run/utils/createFileWatcher.mjs +69 -0
  123. package/dist/esm-node/cli/run/utils/debug.mjs +4 -0
  124. package/dist/esm-node/cli/run/utils/initAppDir.mjs +12 -0
  125. package/dist/esm-node/cli/run/utils/mergeConfig.mjs +33 -0
  126. package/dist/esm-node/hooks.mjs +121 -0
  127. package/dist/esm-node/index.mjs +3 -0
  128. package/dist/esm-node/manager.mjs +102 -0
  129. package/dist/esm-node/runtime/api.mjs +62 -0
  130. package/dist/esm-node/runtime/context.mjs +24 -0
  131. package/dist/esm-node/runtime/hooks.mjs +13 -0
  132. package/dist/esm-node/runtime/index.mjs +5 -0
  133. package/dist/esm-node/runtime/run/create.mjs +46 -0
  134. package/dist/esm-node/runtime/run/index.mjs +4 -0
  135. package/dist/esm-node/runtime/run/types.mjs +1 -0
  136. package/dist/esm-node/server/api.mjs +60 -0
  137. package/dist/esm-node/server/context.mjs +39 -0
  138. package/dist/esm-node/server/hooks.mjs +10 -0
  139. package/dist/esm-node/server/index.mjs +5 -0
  140. package/dist/esm-node/server/run/create.mjs +46 -0
  141. package/dist/esm-node/server/run/index.mjs +4 -0
  142. package/dist/esm-node/server/run/types.mjs +1 -0
  143. package/dist/esm-node/types/cli/api.mjs +1 -0
  144. package/dist/esm-node/types/cli/context.mjs +1 -0
  145. package/dist/esm-node/types/cli/hooks.mjs +1 -0
  146. package/dist/esm-node/types/cli/index.mjs +1 -0
  147. package/dist/esm-node/types/cli/plugin.mjs +1 -0
  148. package/dist/esm-node/types/hooks.mjs +1 -0
  149. package/dist/esm-node/types/index.mjs +1 -0
  150. package/dist/esm-node/types/plugin.mjs +1 -0
  151. package/dist/esm-node/types/runtime/api.mjs +1 -0
  152. package/dist/esm-node/types/runtime/context.mjs +1 -0
  153. package/dist/esm-node/types/runtime/hooks.mjs +1 -0
  154. package/dist/esm-node/types/runtime/index.mjs +1 -0
  155. package/dist/esm-node/types/runtime/plugin.mjs +1 -0
  156. package/dist/esm-node/types/server/api.mjs +1 -0
  157. package/dist/esm-node/types/server/context.mjs +1 -0
  158. package/dist/esm-node/types/server/hooks.mjs +1 -0
  159. package/dist/esm-node/types/server/index.mjs +1 -0
  160. package/dist/esm-node/types/server/plugin.mjs +1 -0
  161. package/dist/esm-node/types/utils.mjs +1 -0
  162. package/dist/types/cli/api.d.ts +8 -0
  163. package/dist/types/cli/context.d.ts +19 -0
  164. package/dist/types/cli/hooks.d.ts +42 -0
  165. package/dist/types/cli/index.d.ts +6 -0
  166. package/dist/types/cli/run/config/createLoadedConfig.d.ts +2 -0
  167. package/dist/types/cli/run/config/createResolvedConfig.d.ts +3 -0
  168. package/dist/types/cli/run/config/loadConfig.d.ts +25 -0
  169. package/dist/types/cli/run/create.d.ts +24 -0
  170. package/dist/types/cli/run/index.d.ts +13 -0
  171. package/dist/types/cli/run/run.d.ts +2 -0
  172. package/dist/types/cli/run/types.d.ts +32 -0
  173. package/dist/types/cli/run/utils/checkIsDuplicationPlugin.d.ts +1 -0
  174. package/dist/types/cli/run/utils/commander.d.ts +5 -0
  175. package/dist/types/cli/run/utils/createFileWatcher.d.ts +3 -0
  176. package/dist/types/cli/run/utils/debug.d.ts +1 -0
  177. package/dist/types/cli/run/utils/initAppDir.d.ts +1 -0
  178. package/dist/types/cli/run/utils/mergeConfig.d.ts +2 -0
  179. package/dist/types/hooks.d.ts +7 -0
  180. package/dist/types/index.d.ts +7 -0
  181. package/dist/types/manager.d.ts +5 -0
  182. package/dist/types/runtime/api.d.ts +9 -0
  183. package/dist/types/runtime/context.d.ts +11 -0
  184. package/dist/types/runtime/hooks.d.ts +2 -0
  185. package/dist/types/runtime/index.d.ts +5 -0
  186. package/dist/types/runtime/run/create.d.ts +7 -0
  187. package/dist/types/runtime/run/index.d.ts +5 -0
  188. package/dist/types/runtime/run/types.d.ts +6 -0
  189. package/dist/types/server/api.d.ts +9 -0
  190. package/dist/types/server/context.d.ts +13 -0
  191. package/dist/types/server/hooks.d.ts +9 -0
  192. package/dist/types/server/index.d.ts +4 -0
  193. package/dist/types/server/run/create.d.ts +7 -0
  194. package/dist/types/server/run/index.d.ts +8 -0
  195. package/dist/types/server/run/types.d.ts +22 -0
  196. package/dist/types/types/cli/api.d.ts +49 -0
  197. package/dist/types/types/cli/context.d.ts +42 -0
  198. package/dist/types/types/cli/hooks.d.ts +72 -0
  199. package/dist/types/types/cli/index.d.ts +4 -0
  200. package/dist/types/types/cli/plugin.d.ts +17 -0
  201. package/dist/types/types/hooks.d.ts +27 -0
  202. package/dist/types/types/index.d.ts +4 -0
  203. package/dist/types/types/plugin.d.ts +45 -0
  204. package/dist/types/types/runtime/api.d.ts +21 -0
  205. package/dist/types/types/runtime/context.d.ts +13 -0
  206. package/dist/types/types/runtime/hooks.d.ts +39 -0
  207. package/dist/types/types/runtime/index.d.ts +4 -0
  208. package/dist/types/types/runtime/plugin.d.ts +14 -0
  209. package/dist/types/types/server/api.d.ts +19 -0
  210. package/dist/types/types/server/context.d.ts +28 -0
  211. package/dist/types/types/server/hooks.d.ts +24 -0
  212. package/dist/types/types/server/index.d.ts +4 -0
  213. package/dist/types/types/server/plugin.d.ts +14 -0
  214. package/dist/types/types/utils.d.ts +7 -0
  215. package/package.json +111 -0
  216. package/rslib.config.mts +4 -0
  217. package/rstest.config.mts +5 -0
@@ -0,0 +1,45 @@
1
+ import { merge } from "@modern-js/runtime-utils/merge";
2
+ import { createPluginManager } from "../../manager.mjs";
3
+ import { initPluginAPI } from "../api.mjs";
4
+ import { createRuntimeContext, initRuntimeContext } from "../context.mjs";
5
+ const createRuntime = ()=>{
6
+ let initOptions;
7
+ const pluginManager = createPluginManager();
8
+ function init(options) {
9
+ pluginManager.clear();
10
+ initOptions = options;
11
+ const { plugins: allPlugins, handleSetupResult } = options;
12
+ pluginManager.addPlugins(allPlugins);
13
+ const plugins = pluginManager.getPlugins();
14
+ const context = createRuntimeContext({
15
+ runtimeContext: initRuntimeContext(),
16
+ config: initOptions.config,
17
+ plugins
18
+ });
19
+ const pluginAPI = initPluginAPI({
20
+ context,
21
+ pluginManager,
22
+ plugins
23
+ });
24
+ context.pluginAPI = pluginAPI;
25
+ for (const plugin of plugins){
26
+ const setupResult = plugin.setup?.(pluginAPI);
27
+ if (handleSetupResult) handleSetupResult(setupResult, pluginAPI);
28
+ }
29
+ return {
30
+ runtimeContext: context
31
+ };
32
+ }
33
+ function run(options) {
34
+ const { runtimeContext } = init(options);
35
+ const configs = runtimeContext.hooks.config.call().filter((config)=>Boolean(config));
36
+ runtimeContext.config = merge({}, ...configs, runtimeContext.config || {});
37
+ return {
38
+ runtimeContext
39
+ };
40
+ }
41
+ return {
42
+ run
43
+ };
44
+ };
45
+ export { createRuntime };
@@ -0,0 +1,3 @@
1
+ import { createRuntime } from "./create.mjs";
2
+ const runtime = createRuntime();
3
+ export { runtime };
File without changes
@@ -0,0 +1,59 @@
1
+ import { createDebugger } from "@modern-js/utils";
2
+ import { assign as lodash_assign } from "@modern-js/utils/lodash";
3
+ const debug = createDebugger('plugin-server-v2');
4
+ function initPluginAPI({ context, pluginManager }) {
5
+ const { hooks, extendsHooks, plugins } = context;
6
+ function getServerContext() {
7
+ if (context) {
8
+ const { hooks, extendsHooks, config, pluginAPI, ...serverContext } = context;
9
+ serverContext._internalContext = context;
10
+ return serverContext;
11
+ }
12
+ throw new Error('Cannot access context');
13
+ }
14
+ function getConfig() {
15
+ if (context.config) return context.config;
16
+ throw new Error('Cannot access config');
17
+ }
18
+ function getHooks() {
19
+ return context.hooks;
20
+ }
21
+ const extendsPluginApi = {};
22
+ plugins.forEach((plugin)=>{
23
+ const { _registryApi } = plugin;
24
+ if (_registryApi) {
25
+ const apis = _registryApi(getServerContext, updateServerContext);
26
+ Object.keys(apis).forEach((apiName)=>{
27
+ extendsPluginApi[apiName] = apis[apiName];
28
+ });
29
+ }
30
+ });
31
+ if (extendsHooks) Object.keys(extendsHooks).forEach((hookName)=>{
32
+ extendsPluginApi[hookName] = extendsHooks[hookName].tap;
33
+ });
34
+ function updateServerContext(updateContext) {
35
+ context = lodash_assign(context, updateContext);
36
+ }
37
+ const pluginAPI = {
38
+ isPluginExists: pluginManager.isPluginExists,
39
+ getServerContext,
40
+ getServerConfig: getConfig,
41
+ getHooks,
42
+ updateServerContext,
43
+ modifyConfig: hooks.modifyConfig.tap,
44
+ onPrepare: hooks.onPrepare.tap,
45
+ onReset: hooks.onReset.tap,
46
+ ...extendsPluginApi
47
+ };
48
+ if ("u" < typeof Proxy) return pluginAPI;
49
+ return new Proxy(pluginAPI, {
50
+ get (target, prop) {
51
+ if ('then' === prop) return;
52
+ if (prop in target) return target[prop];
53
+ return ()=>{
54
+ debug(`api.${prop.toString()} not exist`);
55
+ };
56
+ }
57
+ });
58
+ }
59
+ export { debug, initPluginAPI };
@@ -0,0 +1,38 @@
1
+ import { initHooks } from "./hooks.mjs";
2
+ function initServerContext(params) {
3
+ const { options, plugins } = params;
4
+ return {
5
+ routes: options.routes || [],
6
+ appDirectory: options.appContext.appDirectory || '',
7
+ apiDirectory: options.appContext.apiDirectory,
8
+ lambdaDirectory: options.appContext.lambdaDirectory,
9
+ internalDirectory: options.appContext.internalDirectory || '',
10
+ sharedDirectory: options.appContext.sharedDirectory || '',
11
+ distDirectory: options.pwd,
12
+ metaName: options.metaName || 'modern-js',
13
+ plugins: plugins,
14
+ middlewares: [],
15
+ bffRuntimeFramework: options.appContext.bffRuntimeFramework,
16
+ renderMiddlewares: []
17
+ };
18
+ }
19
+ function createServerContext({ serverContext, config }) {
20
+ const { plugins } = serverContext;
21
+ const extendsHooks = {};
22
+ plugins.forEach((plugin)=>{
23
+ const { registryHooks = {} } = plugin;
24
+ Object.keys(registryHooks).forEach((hookName)=>{
25
+ extendsHooks[hookName] = registryHooks[hookName];
26
+ });
27
+ });
28
+ return {
29
+ ...serverContext,
30
+ hooks: {
31
+ ...initHooks(),
32
+ ...extendsHooks
33
+ },
34
+ extendsHooks,
35
+ config
36
+ };
37
+ }
38
+ export { createServerContext, initServerContext };
@@ -0,0 +1,9 @@
1
+ import { createAsyncHook } from "../hooks.mjs";
2
+ function initHooks() {
3
+ return {
4
+ modifyConfig: createAsyncHook(),
5
+ onPrepare: createAsyncHook(),
6
+ onReset: createAsyncHook()
7
+ };
8
+ }
9
+ export { initHooks };
@@ -0,0 +1,4 @@
1
+ export { initPluginAPI } from "./api.mjs";
2
+ export { createServerContext, initServerContext } from "./context.mjs";
3
+ export { initHooks } from "./hooks.mjs";
4
+ export { createServer, server } from "./run/index.mjs";
@@ -0,0 +1,45 @@
1
+ import { createPluginManager } from "../../manager.mjs";
2
+ import { initPluginAPI } from "../api.mjs";
3
+ import { createServerContext, initServerContext } from "../context.mjs";
4
+ const createServer = ()=>{
5
+ let initOptions;
6
+ const pluginManager = createPluginManager();
7
+ function init(options) {
8
+ pluginManager.clear();
9
+ initOptions = options;
10
+ const { plugins: allPlugins, options: runOptions, handleSetupResult } = initOptions;
11
+ pluginManager.addPlugins(allPlugins);
12
+ const plugins = pluginManager.getPlugins();
13
+ const context = createServerContext({
14
+ serverContext: initServerContext({
15
+ plugins,
16
+ options: runOptions
17
+ }),
18
+ config: initOptions.config
19
+ });
20
+ const pluginAPI = initPluginAPI({
21
+ context,
22
+ pluginManager
23
+ });
24
+ context.pluginAPI = pluginAPI;
25
+ for (const plugin of plugins){
26
+ const setupResult = plugin.setup?.(pluginAPI);
27
+ if (handleSetupResult) handleSetupResult(setupResult, pluginAPI);
28
+ }
29
+ return {
30
+ serverContext: context
31
+ };
32
+ }
33
+ async function run(options) {
34
+ const { serverContext } = init(options);
35
+ const config = await serverContext.hooks.modifyConfig.call(serverContext.config);
36
+ serverContext.config = config;
37
+ return {
38
+ serverContext
39
+ };
40
+ }
41
+ return {
42
+ run
43
+ };
44
+ };
45
+ export { createServer };
@@ -0,0 +1,3 @@
1
+ import { createServer } from "./create.mjs";
2
+ const server = createServer();
3
+ export { createServer, server };
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,86 @@
1
+ import "node:module";
2
+ import { assign as lodash_assign } from "@modern-js/utils/lodash";
3
+ import { debug } from "./run/utils/debug.mjs";
4
+ function initPluginAPI({ context, pluginManager }) {
5
+ const { hooks, extendsHooks, plugins } = context;
6
+ function getAppContext() {
7
+ if (context) {
8
+ const { hooks, extendsHooks, config, normalizedConfig, pluginAPI, ...appContext } = context;
9
+ appContext._internalContext = context;
10
+ return appContext;
11
+ }
12
+ throw new Error('Cannot access context');
13
+ }
14
+ function getConfig() {
15
+ if (context.config) return context.config;
16
+ throw new Error('Cannot access config');
17
+ }
18
+ function getNormalizedConfig() {
19
+ if (context.normalizedConfig) return context.normalizedConfig;
20
+ throw new Error('Cannot access normalized config');
21
+ }
22
+ function getHooks() {
23
+ return context.hooks;
24
+ }
25
+ const extendsPluginApi = {};
26
+ plugins.forEach((plugin)=>{
27
+ const { _registryApi } = plugin;
28
+ if (_registryApi) {
29
+ const apis = _registryApi(getAppContext, updateAppContext);
30
+ Object.keys(apis).forEach((apiName)=>{
31
+ extendsPluginApi[apiName] = apis[apiName];
32
+ });
33
+ }
34
+ });
35
+ if (extendsHooks) Object.keys(extendsHooks).forEach((hookName)=>{
36
+ extendsPluginApi[hookName] = extendsHooks[hookName].tap;
37
+ });
38
+ function updateAppContext(updateContext) {
39
+ context = lodash_assign(context, updateContext);
40
+ }
41
+ const pluginAPI = {
42
+ isPluginExists: pluginManager.isPluginExists,
43
+ getAppContext,
44
+ getConfig,
45
+ getNormalizedConfig,
46
+ getHooks,
47
+ updateAppContext,
48
+ config: hooks.config.tap,
49
+ modifyConfig: hooks.modifyConfig.tap,
50
+ modifyResolvedConfig: hooks.modifyResolvedConfig.tap,
51
+ modifyRsbuildConfig: hooks.modifyRsbuildConfig.tap,
52
+ modifyBundlerChain: hooks.modifyBundlerChain.tap,
53
+ modifyRspackConfig: hooks.modifyRspackConfig.tap,
54
+ modifyHtmlPartials: hooks.modifyHtmlPartials.tap,
55
+ addCommand: hooks.addCommand.tap,
56
+ onPrepare: hooks.onPrepare.tap,
57
+ addWatchFiles: hooks.addWatchFiles.tap,
58
+ onFileChanged: hooks.onFileChanged.tap,
59
+ onBeforeRestart: hooks.onBeforeRestart.tap,
60
+ onBeforeCreateCompiler: hooks.onBeforeCreateCompiler.tap,
61
+ onDevCompileDone: hooks.onDevCompileDone.tap,
62
+ onAfterCreateCompiler: hooks.onAfterCreateCompiler.tap,
63
+ onBeforeBuild: hooks.onBeforeBuild.tap,
64
+ onAfterBuild: hooks.onAfterBuild.tap,
65
+ onBeforeDev: hooks.onBeforeDev.tap,
66
+ onAfterDev: hooks.onAfterDev.tap,
67
+ onBeforeDeploy: hooks.onBeforeDeploy.tap,
68
+ onAfterDeploy: hooks.onAfterDeploy.tap,
69
+ onBeforeExit: hooks.onBeforeExit.tap,
70
+ _internalRuntimePlugins: hooks._internalRuntimePlugins.tap,
71
+ _internalServerPlugins: hooks._internalServerPlugins.tap,
72
+ modifyServerRoutes: hooks.modifyServerRoutes.tap,
73
+ ...extendsPluginApi
74
+ };
75
+ if ("u" < typeof Proxy) return pluginAPI;
76
+ return new Proxy(pluginAPI, {
77
+ get (target, prop) {
78
+ if ('then' === prop) return;
79
+ if (prop in target) return target[prop];
80
+ return ()=>{
81
+ debug(`api.${prop.toString()} not exist`);
82
+ };
83
+ }
84
+ });
85
+ }
86
+ export { initPluginAPI };
@@ -0,0 +1,39 @@
1
+ import "node:module";
2
+ import path from "path";
3
+ import { initHooks } from "./hooks.mjs";
4
+ function initAppContext(params) {
5
+ const { appDirectory, srcDir = 'src', distDir = 'dist' } = params;
6
+ return {
7
+ metaName: params.metaName,
8
+ packageName: params.packageName,
9
+ configFile: params.configFile,
10
+ command: params.command,
11
+ isProd: 'production' === process.env.NODE_ENV,
12
+ appDirectory: appDirectory,
13
+ srcDirectory: path.resolve(appDirectory, srcDir),
14
+ distDirectory: '',
15
+ nodeModulesDirectory: path.resolve(appDirectory, 'node_modules'),
16
+ plugins: params.plugins
17
+ };
18
+ }
19
+ async function createContext({ appContext, config, normalizedConfig }) {
20
+ const { plugins } = appContext;
21
+ const extendsHooks = {};
22
+ plugins.forEach((plugin)=>{
23
+ const { registryHooks = {} } = plugin;
24
+ Object.keys(registryHooks).forEach((hookName)=>{
25
+ extendsHooks[hookName] = registryHooks[hookName];
26
+ });
27
+ });
28
+ return {
29
+ ...appContext,
30
+ hooks: {
31
+ ...initHooks(),
32
+ ...extendsHooks
33
+ },
34
+ extendsHooks,
35
+ config,
36
+ normalizedConfig
37
+ };
38
+ }
39
+ export { createContext, initAppContext };
@@ -0,0 +1,32 @@
1
+ import "node:module";
2
+ import { createAsyncHook, createCollectAsyncHook } from "../hooks.mjs";
3
+ function initHooks() {
4
+ return {
5
+ config: createCollectAsyncHook(),
6
+ modifyConfig: createAsyncHook(),
7
+ modifyResolvedConfig: createAsyncHook(),
8
+ modifyRsbuildConfig: createAsyncHook(),
9
+ modifyBundlerChain: createAsyncHook(),
10
+ modifyRspackConfig: createAsyncHook(),
11
+ modifyHtmlPartials: createAsyncHook(),
12
+ addCommand: createAsyncHook(),
13
+ addWatchFiles: createCollectAsyncHook(),
14
+ onPrepare: createAsyncHook(),
15
+ onFileChanged: createAsyncHook(),
16
+ onBeforeRestart: createAsyncHook(),
17
+ onBeforeCreateCompiler: createAsyncHook(),
18
+ onAfterCreateCompiler: createAsyncHook(),
19
+ onDevCompileDone: createAsyncHook(),
20
+ onBeforeBuild: createAsyncHook(),
21
+ onAfterBuild: createAsyncHook(),
22
+ onBeforeDev: createAsyncHook(),
23
+ onAfterDev: createAsyncHook(),
24
+ onBeforeDeploy: createAsyncHook(),
25
+ onAfterDeploy: createAsyncHook(),
26
+ onBeforeExit: createAsyncHook(),
27
+ _internalRuntimePlugins: createAsyncHook(),
28
+ _internalServerPlugins: createAsyncHook(),
29
+ modifyServerRoutes: createAsyncHook()
30
+ };
31
+ }
32
+ export { initHooks };
@@ -0,0 +1,7 @@
1
+ import "node:module";
2
+ export { initPluginAPI } from "./api.mjs";
3
+ export { createContext, initAppContext } from "./context.mjs";
4
+ export { initHooks } from "./hooks.mjs";
5
+ export { cli, createCli, createLoadedConfig, initAppDir } from "./run/index.mjs";
6
+ export { createConfigOptions, createStorybookOptions } from "./run/create.mjs";
7
+ export { mergeConfig } from "./run/utils/mergeConfig.mjs";
@@ -0,0 +1,54 @@
1
+ import "node:module";
2
+ import { CONFIG_FILE_EXTENSIONS, chalk, fs, getCommand, getNodeEnv, isDevCommand, logger } from "@modern-js/utils";
3
+ import { mergeConfig } from "../utils/mergeConfig.mjs";
4
+ import { getConfigFilePath, loadConfig } from "./loadConfig.mjs";
5
+ async function getConfigObject(config) {
6
+ if ('function' == typeof config) return await config({
7
+ env: getNodeEnv(),
8
+ command: getCommand()
9
+ }) || {};
10
+ return config || {};
11
+ }
12
+ async function loadLocalConfig(appDirectory, configFile) {
13
+ let localConfigFile = false;
14
+ if ('string' == typeof configFile) {
15
+ for (const ext of CONFIG_FILE_EXTENSIONS)if (configFile.endsWith(ext)) {
16
+ const replacedPath = configFile.replace(ext, `.local${ext}`);
17
+ if (fs.existsSync(replacedPath)) localConfigFile = replacedPath;
18
+ }
19
+ }
20
+ if (localConfigFile) {
21
+ const loaded = await loadConfig(appDirectory, localConfigFile);
22
+ return getConfigObject(loaded.config);
23
+ }
24
+ return null;
25
+ }
26
+ async function createLoadedConfig(appDirectory, configFilePath, otherConfig) {
27
+ const configFile = getConfigFilePath(appDirectory, configFilePath);
28
+ const loaded = await loadConfig(appDirectory, configFile);
29
+ if (!loaded.config && !loaded.pkgConfig) {
30
+ logger.warn("Can not find any config file in the current project, please check if you have a correct config file.");
31
+ logger.warn(`Current project path: ${chalk.yellow(appDirectory)}`);
32
+ }
33
+ const config = await getConfigObject(loaded.config);
34
+ let mergedConfig = config;
35
+ if (isDevCommand()) {
36
+ const localConfig = await loadLocalConfig(appDirectory, configFile);
37
+ if (localConfig) mergedConfig = mergeConfig([
38
+ mergedConfig,
39
+ localConfig
40
+ ]);
41
+ }
42
+ if (otherConfig) mergedConfig = mergeConfig([
43
+ mergedConfig,
44
+ otherConfig
45
+ ]);
46
+ return {
47
+ packageName: loaded.packageName,
48
+ config: mergedConfig,
49
+ configFile: loaded.configFile,
50
+ pkgConfig: loaded.pkgConfig,
51
+ jsConfig: loaded.config
52
+ };
53
+ }
54
+ export { createLoadedConfig };
@@ -0,0 +1,15 @@
1
+ import "node:module";
2
+ import { createDebugger } from "@modern-js/utils";
3
+ import { mergeConfig } from "../utils/mergeConfig.mjs";
4
+ const debug = createDebugger('resolve-config');
5
+ const createResolveConfig = async (loaded, configs)=>{
6
+ const { config: userConfig } = loaded;
7
+ const resolved = mergeConfig([
8
+ {},
9
+ ...configs,
10
+ userConfig
11
+ ]);
12
+ debug('resolved %o', resolved);
13
+ return resolved;
14
+ };
15
+ export { createResolveConfig };
@@ -0,0 +1,63 @@
1
+ import "node:module";
2
+ import { compatibleRequire, fs, globby } from "@modern-js/utils";
3
+ import { createJiti } from "jiti";
4
+ import path from "path";
5
+ import { fileURLToPath as __rspack_fileURLToPath } from "node:url";
6
+ var loadConfig_filename = __rspack_fileURLToPath(import.meta.url);
7
+ const getConfigFilePath = (appDirectory, configFilePath)=>{
8
+ if (path.isAbsolute(configFilePath)) return configFilePath;
9
+ return path.resolve(appDirectory, configFilePath);
10
+ };
11
+ const clearFilesOverTime = async (targetDir, overtime)=>{
12
+ try {
13
+ const files = await globby(`${targetDir}/**/*`, {
14
+ stats: true,
15
+ absolute: true
16
+ });
17
+ const currentTime = Date.now();
18
+ if (files.length > 0) {
19
+ for (const file of files)if (currentTime - file.stats.birthtimeMs >= 1000 * overtime) fs.unlinkSync(file.path);
20
+ }
21
+ } catch (err) {}
22
+ };
23
+ async function loadConfigContent(configFile) {
24
+ const jitiFrom = import.meta.url;
25
+ const jiti = createJiti(jitiFrom, {
26
+ requireCache: false,
27
+ interopDefault: true
28
+ });
29
+ if (!fs.existsSync(configFile)) throw new Error(`Configuration file does not exist: ${configFile}`);
30
+ try {
31
+ let config;
32
+ config = await jiti.import(configFile, {});
33
+ return config.default || config;
34
+ } catch (e) {
35
+ if (e instanceof Error) e.message = `Get Error while loading config file: ${configFile}, please check it and retry.\n${e.message || ''}`;
36
+ throw e;
37
+ }
38
+ }
39
+ const loadTypeScriptFile = (filePath)=>{
40
+ const jiti = createJiti(loadConfig_filename, {
41
+ requireCache: false,
42
+ interopDefault: true
43
+ });
44
+ if (!fs.existsSync(filePath)) throw new Error(`TypeScript file does not exist: ${filePath}`);
45
+ try {
46
+ return jiti(filePath);
47
+ } catch (e) {
48
+ if (e instanceof Error) e.message = `Get Error while loading TypeScript file: ${filePath}, please check it and retry.\n${e.message || ''}`;
49
+ throw e;
50
+ }
51
+ };
52
+ const loadConfig = async (appDirectory, configFile)=>{
53
+ const pkg = await compatibleRequire(path.resolve(appDirectory, './package.json'));
54
+ const packageName = pkg.name;
55
+ let config;
56
+ if (configFile) config = await loadConfigContent(configFile);
57
+ return {
58
+ packageName,
59
+ configFile,
60
+ config
61
+ };
62
+ };
63
+ export { clearFilesOverTime, getConfigFilePath, loadConfig, loadTypeScriptFile };