@modern-js/app-tools 2.3.1-alpha.1 → 2.4.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 (168) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +14 -18
  3. package/dist/js/modern/analyze/index.js +45 -48
  4. package/dist/js/modern/analyze/nestedRoutes.js +10 -1
  5. package/dist/js/modern/analyze/templates.js +2 -9
  6. package/dist/js/modern/builder/builder-rspack/index.js +8 -0
  7. package/dist/js/modern/builder/builder-webpack/builderPlugins/compatModern.js +41 -0
  8. package/dist/js/modern/builder/builder-webpack/index.js +93 -0
  9. package/dist/js/modern/builder/{webpackPlugins/routerPlugin.js → builder-webpack/webpackPlugins/RouterPlugin.js} +1 -1
  10. package/dist/js/modern/builder/builder-webpack/webpackPlugins/index.js +1 -0
  11. package/dist/js/modern/builder/generator/createBuilderOptions.js +24 -0
  12. package/dist/js/modern/builder/generator/createBuilderProviderConfig.js +39 -0
  13. package/dist/js/modern/builder/generator/getBuilderTargets.js +12 -0
  14. package/dist/js/modern/builder/generator/index.js +53 -0
  15. package/dist/js/modern/builder/index.js +13 -133
  16. package/dist/js/modern/builder/{builderPlugins/compatModern.js → shared/builderPlugins/adapterModern.js} +81 -111
  17. package/dist/js/modern/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +27 -0
  18. package/dist/js/modern/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +34 -0
  19. package/dist/js/modern/builder/{share.js → shared/createCopyPattern.js} +0 -0
  20. package/dist/js/modern/builder/shared/index.js +3 -0
  21. package/dist/js/modern/builder/{loaders → shared/loaders}/serverModuleLoader.js +0 -0
  22. package/dist/js/modern/builder/shared/types.js +0 -0
  23. package/dist/js/modern/config/default.js +2 -2
  24. package/dist/js/modern/config/index.js +3 -8
  25. package/dist/js/modern/config/initialize/index.js +12 -0
  26. package/dist/js/modern/config/{initial → initialize}/inits.js +4 -2
  27. package/dist/js/modern/config/{initial → legacy}/createHtmlConfig.js +0 -0
  28. package/dist/js/modern/config/{initial → legacy}/createOutputConfig.js +0 -0
  29. package/dist/js/modern/config/{initial → legacy}/createSourceConfig.js +0 -0
  30. package/dist/js/modern/config/{initial → legacy}/createToolsConfig.js +0 -0
  31. package/dist/js/modern/config/{initial/transformNormalizedConfig.js → legacy/index.js} +4 -0
  32. package/dist/js/modern/index.js +18 -8
  33. package/dist/js/modern/initialize/index.js +36 -28
  34. package/dist/js/modern/locale/zh.js +1 -1
  35. package/dist/js/modern/types/utils.js +0 -0
  36. package/dist/js/node/analyze/index.js +46 -49
  37. package/dist/js/node/analyze/nestedRoutes.js +10 -1
  38. package/dist/js/node/analyze/templates.js +2 -9
  39. package/dist/js/node/builder/builder-rspack/index.js +31 -0
  40. package/dist/js/node/builder/builder-webpack/builderPlugins/compatModern.js +64 -0
  41. package/dist/js/node/builder/builder-webpack/index.js +118 -0
  42. package/dist/js/node/builder/{webpackPlugins/routerPlugin.js → builder-webpack/webpackPlugins/RouterPlugin.js} +7 -5
  43. package/dist/js/node/builder/builder-webpack/webpackPlugins/index.js +17 -0
  44. package/dist/js/node/builder/generator/createBuilderOptions.js +47 -0
  45. package/dist/js/node/builder/generator/createBuilderProviderConfig.js +60 -0
  46. package/dist/js/node/builder/{loaders/routerLoader.js → generator/getBuilderTargets.js} +13 -16
  47. package/dist/js/node/builder/generator/index.js +82 -0
  48. package/dist/js/node/builder/index.js +14 -123
  49. package/dist/js/node/builder/{builderPlugins/compatModern.js → shared/builderPlugins/adapterModern.js} +86 -115
  50. package/dist/js/node/builder/{webpackPlugins/htmlAsyncChunkPlugin.js → shared/bundlerPlugins/HtmlAsyncChunkPlugin.js} +17 -20
  51. package/dist/js/node/builder/{webpackPlugins/htmlBottomTemplate.js → shared/bundlerPlugins/HtmlBottomTemplate.js} +21 -24
  52. package/dist/js/node/builder/{share.js → shared/createCopyPattern.js} +3 -3
  53. package/dist/js/node/builder/shared/index.js +19 -0
  54. package/dist/js/node/builder/{loaders → shared/loaders}/serverModuleLoader.js +0 -0
  55. package/dist/js/node/builder/shared/types.js +15 -0
  56. package/dist/js/node/config/default.js +2 -2
  57. package/dist/js/node/config/index.js +4 -19
  58. package/dist/js/node/config/{initial → initialize}/index.js +10 -16
  59. package/dist/js/node/config/{initial → initialize}/inits.js +4 -2
  60. package/dist/js/node/config/{initial → legacy}/createHtmlConfig.js +0 -0
  61. package/dist/js/node/config/{initial → legacy}/createOutputConfig.js +0 -0
  62. package/dist/js/node/config/{initial → legacy}/createSourceConfig.js +0 -0
  63. package/dist/js/node/config/{initial → legacy}/createToolsConfig.js +0 -0
  64. package/dist/js/node/config/{initial/transformNormalizedConfig.js → legacy/index.js} +8 -3
  65. package/dist/js/node/index.js +18 -8
  66. package/dist/js/node/initialize/index.js +35 -28
  67. package/dist/js/node/locale/zh.js +1 -1
  68. package/dist/js/node/types/utils.js +15 -0
  69. package/dist/js/treeshaking/analyze/index.js +135 -130
  70. package/dist/js/treeshaking/analyze/nestedRoutes.js +10 -1
  71. package/dist/js/treeshaking/analyze/templates.js +3 -7
  72. package/dist/js/treeshaking/builder/builder-rspack/index.js +6 -0
  73. package/dist/js/treeshaking/builder/builder-webpack/builderPlugins/compatModern.js +64 -0
  74. package/dist/js/treeshaking/builder/builder-webpack/index.js +301 -0
  75. package/dist/js/treeshaking/builder/{webpackPlugins/routerPlugin.js → builder-webpack/webpackPlugins/RouterPlugin.js} +1 -1
  76. package/dist/js/treeshaking/builder/builder-webpack/webpackPlugins/index.js +1 -0
  77. package/dist/js/treeshaking/builder/generator/createBuilderOptions.js +41 -0
  78. package/dist/js/treeshaking/builder/generator/createBuilderProviderConfig.js +70 -0
  79. package/dist/js/treeshaking/builder/generator/getBuilderTargets.js +12 -0
  80. package/dist/js/treeshaking/builder/generator/index.js +199 -0
  81. package/dist/js/treeshaking/builder/index.js +29 -228
  82. package/dist/js/treeshaking/builder/{builderPlugins/compatModern.js → shared/builderPlugins/adapterModern.js} +103 -156
  83. package/dist/js/treeshaking/builder/{webpackPlugins/htmlAsyncChunkPlugin.js → shared/bundlerPlugins/HtmlAsyncChunkPlugin.js} +0 -0
  84. package/dist/js/treeshaking/builder/{webpackPlugins/htmlBottomTemplate.js → shared/bundlerPlugins/HtmlBottomTemplate.js} +0 -0
  85. package/dist/js/treeshaking/builder/{share.js → shared/createCopyPattern.js} +0 -0
  86. package/dist/js/treeshaking/builder/shared/index.js +3 -0
  87. package/dist/js/treeshaking/builder/{loaders → shared/loaders}/serverModuleLoader.js +0 -0
  88. package/dist/js/treeshaking/builder/shared/types.js +1 -0
  89. package/dist/js/treeshaking/config/default.js +2 -2
  90. package/dist/js/treeshaking/config/index.js +3 -3
  91. package/dist/js/treeshaking/config/initialize/index.js +10 -0
  92. package/dist/js/treeshaking/config/{initial → initialize}/inits.js +4 -2
  93. package/dist/js/treeshaking/config/{initial → legacy}/createHtmlConfig.js +0 -0
  94. package/dist/js/treeshaking/config/{initial → legacy}/createOutputConfig.js +0 -0
  95. package/dist/js/treeshaking/config/{initial → legacy}/createSourceConfig.js +0 -0
  96. package/dist/js/treeshaking/config/{initial → legacy}/createToolsConfig.js +0 -0
  97. package/dist/js/treeshaking/config/{initial/transformNormalizedConfig.js → legacy/index.js} +4 -1
  98. package/dist/js/treeshaking/index.js +19 -12
  99. package/dist/js/treeshaking/initialize/index.js +34 -26
  100. package/dist/js/treeshaking/locale/zh.js +1 -1
  101. package/dist/js/treeshaking/types/utils.js +1 -0
  102. package/dist/types/analyze/generateCode.d.ts +1 -1
  103. package/dist/types/analyze/getBundleEntry.d.ts +1 -1
  104. package/dist/types/analyze/getFileSystemEntry.d.ts +1 -1
  105. package/dist/types/analyze/getHtmlTemplate.d.ts +2 -2
  106. package/dist/types/analyze/getServerRoutes.d.ts +1 -1
  107. package/dist/types/analyze/index.d.ts +5 -1
  108. package/dist/types/builder/builder-rspack/index.d.ts +2 -0
  109. package/dist/types/builder/{builderPlugins → builder-webpack/builderPlugins}/compatModern.d.ts +2 -2
  110. package/dist/types/builder/builder-webpack/index.d.ts +4 -0
  111. package/dist/types/builder/{webpackPlugins/routerPlugin.d.ts → builder-webpack/webpackPlugins/RouterPlugin.d.ts} +1 -1
  112. package/dist/types/builder/builder-webpack/webpackPlugins/index.d.ts +1 -0
  113. package/dist/types/builder/generator/createBuilderOptions.d.ts +3 -0
  114. package/dist/types/builder/generator/createBuilderProviderConfig.d.ts +2 -0
  115. package/dist/types/builder/generator/getBuilderTargets.d.ts +3 -0
  116. package/dist/types/builder/generator/index.d.ts +17 -0
  117. package/dist/types/builder/index.d.ts +1 -18
  118. package/dist/types/builder/shared/builderPlugins/adapterModern.d.ts +13 -0
  119. package/dist/types/builder/{webpackPlugins/htmlAsyncChunkPlugin.d.ts → shared/bundlerPlugins/HtmlAsyncChunkPlugin.d.ts} +2 -1
  120. package/dist/types/builder/{webpackPlugins/htmlBottomTemplate.d.ts → shared/bundlerPlugins/HtmlBottomTemplate.d.ts} +2 -1
  121. package/dist/types/builder/{share.d.ts → shared/createCopyPattern.d.ts} +1 -1
  122. package/dist/types/builder/shared/index.d.ts +3 -0
  123. package/dist/types/builder/shared/loaders/serverModuleLoader.d.ts +4 -0
  124. package/dist/types/builder/shared/types.d.ts +16 -0
  125. package/dist/types/commands/build.d.ts +1 -1
  126. package/dist/types/commands/deploy.d.ts +1 -1
  127. package/dist/types/commands/dev.d.ts +1 -1
  128. package/dist/types/commands/inspect.d.ts +1 -1
  129. package/dist/types/commands/serve.d.ts +1 -1
  130. package/dist/types/config/default.d.ts +1 -1
  131. package/dist/types/config/index.d.ts +3 -2
  132. package/dist/types/config/initialize/index.d.ts +2 -0
  133. package/dist/types/config/{initial → initialize}/inits.d.ts +3 -3
  134. package/dist/types/config/{initial → legacy}/createHtmlConfig.d.ts +1 -1
  135. package/dist/types/config/{initial → legacy}/createOutputConfig.d.ts +1 -1
  136. package/dist/types/config/{initial → legacy}/createSourceConfig.d.ts +1 -1
  137. package/dist/types/config/{initial → legacy}/createToolsConfig.d.ts +1 -1
  138. package/dist/types/config/legacy/index.d.ts +3 -0
  139. package/dist/types/defineConfig.d.ts +3 -2
  140. package/dist/types/index.d.ts +7 -3
  141. package/dist/types/initialize/index.d.ts +6 -2
  142. package/dist/types/types/config/deploy.d.ts +1 -2
  143. package/dist/types/types/config/dev.d.ts +2 -3
  144. package/dist/types/types/config/experiments.d.ts +1 -2
  145. package/dist/types/types/config/html.d.ts +5 -3
  146. package/dist/types/types/config/index.d.ts +41 -48
  147. package/dist/types/types/config/output.d.ts +8 -3
  148. package/dist/types/types/config/performance.d.ts +6 -3
  149. package/dist/types/types/config/security.d.ts +3 -3
  150. package/dist/types/types/config/source.d.ts +7 -3
  151. package/dist/types/types/config/tools.d.ts +10 -4
  152. package/dist/types/types/hooks.d.ts +4 -3
  153. package/dist/types/types/index.d.ts +16 -6
  154. package/dist/types/types/utils.d.ts +7 -0
  155. package/dist/types/utils/config.d.ts +1 -1
  156. package/dist/types/utils/getServerInternalPlugins.d.ts +1 -1
  157. package/dist/types/utils/printInstructions.d.ts +1 -1
  158. package/package.json +34 -25
  159. package/dist/js/modern/builder/loaders/routerLoader.js +0 -17
  160. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -30
  161. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +0 -37
  162. package/dist/js/modern/config/initial/index.js +0 -16
  163. package/dist/js/treeshaking/builder/loaders/routerLoader.js +0 -13
  164. package/dist/js/treeshaking/config/initial/index.js +0 -12
  165. package/dist/types/builder/loaders/routerLoader.d.ts +0 -3
  166. package/dist/types/builder/loaders/serverModuleLoader.d.ts +0 -3
  167. package/dist/types/config/initial/index.d.ts +0 -4
  168. package/dist/types/config/initial/transformNormalizedConfig.d.ts +0 -2
@@ -1,5 +1,9 @@
1
- import { CliPlugin, AppTools } from '../types';
1
+ import type { CliPlugin, AppTools } from '../types';
2
2
 
3
- declare const _default: () => CliPlugin<AppTools>;
3
+ declare const _default: ({
4
+ bundler
5
+ }: {
6
+ bundler: 'rspack' | 'webpack';
7
+ }) => CliPlugin<AppTools<'shared'>>;
4
8
 
5
9
  export default _default;
@@ -5,5 +5,4 @@ export interface MicroFrontend {
5
5
  }
6
6
  export interface DeployUserConfig {
7
7
  microFrontend?: boolean | MicroFrontend;
8
- }
9
- export type DeployNormalizedConfig = DeployUserConfig;
8
+ }
@@ -1,5 +1,5 @@
1
- import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
- type BuilderDevConfig = Required<BuilderConfig>['dev'];
1
+ import type { SharedBuilderConfig } from '@modern-js/builder-shared';
2
+ type BuilderDevConfig = Required<SharedBuilderConfig>['dev'];
3
3
  export type DevProxyOptions = string | Record<string, string>;
4
4
  export interface DevUserConfig extends BuilderDevConfig {
5
5
  /**
@@ -9,5 +9,4 @@ export interface DevUserConfig extends BuilderDevConfig {
9
9
  */
10
10
  proxy?: string | Record<string, string>;
11
11
  }
12
- export type DevNormalizedConfig = DevUserConfig;
13
12
  export {};
@@ -1,4 +1,3 @@
1
1
  import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
2
  export type BuilderExperimentsConfig = Required<BuilderConfig>['experiments'];
3
- export type ExperimentsUserConfig = BuilderExperimentsConfig;
4
- export type ExperimentsNormalizedConfig = ExperimentsUserConfig;
3
+ export type ExperimentsUserConfig = BuilderExperimentsConfig;
@@ -1,4 +1,6 @@
1
1
  import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
- export type BuilderHtmlConfig = Required<BuilderConfig>['html'];
3
- export type HtmlUserConfig = BuilderHtmlConfig;
4
- export type HtmlNormalizedConfig = HtmlUserConfig;
2
+ import type { BuilderConfig as RsBuilderConfig } from '@modern-js/builder-rspack-provider';
3
+ import { UnwrapBuilderConfig } from '../utils';
4
+ export type { SharedHtmlConfig } from '@modern-js/builder-shared';
5
+ export type HtmlUserConfig = UnwrapBuilderConfig<BuilderConfig, 'html'>;
6
+ export type RsHtmlUserConfig = UnwrapBuilderConfig<RsBuilderConfig, 'html'>;
@@ -1,16 +1,14 @@
1
- import type { UserConfig } from '@modern-js/core';
2
- import type { ServerUserConfig, ServerNormalizedConfig, BffUserConfig, BffNormalizedConfig } from '@modern-js/server-core';
1
+ import type { ServerUserConfig, BffUserConfig } from '@modern-js/server-core';
3
2
  import type { BuilderPlugin } from '@modern-js/builder-webpack-provider';
4
- import type { AppToolsHooks } from '../hooks';
5
- import type { OutputNormalizedConfig, OutputUserConfig } from './output';
6
- import type { SourceNormalizedConfig, SourceUserConfig } from './source';
7
- import type { DevNormalizedConfig, DevUserConfig } from './dev';
8
- import type { ToolsNormalizedConfig, ToolsUserConfig } from './tools';
9
- import type { HtmlNormalizedConfig, HtmlUserConfig } from './html';
10
- import type { SecurityNormalizedConfig, SecurityUserConfig } from './security';
11
- import type { DeployNormalizedConfig, DeployUserConfig } from './deploy';
12
- import type { ExperimentsUserConfig, ExperimentsNormalizedConfig } from './experiments';
13
- import type { PerformanceNormalizedConfig, PerformanceUserConfig } from './performance';
3
+ import type { OutputUserConfig, RsOutputUserConfig, SharedOutputConfig } from './output';
4
+ import type { RsSourceUserConfig, SharedSourceConfig, SourceUserConfig } from './source';
5
+ import type { DevUserConfig } from './dev';
6
+ import type { RsToolsUserConfig, SharedToolsConfig, ToolsUserConfig } from './tools';
7
+ import type { HtmlUserConfig, RsHtmlUserConfig, SharedHtmlConfig } from './html';
8
+ import type { SecurityUserConfig } from './security';
9
+ import type { DeployUserConfig } from './deploy';
10
+ import type { ExperimentsUserConfig } from './experiments';
11
+ import type { PerformanceUserConfig, RsPerformanceConfig, SharedPerformanceConfig } from './performance';
14
12
  export * from './output';
15
13
  export interface RuntimeUserConfig {
16
14
  [name: string]: any;
@@ -18,22 +16,10 @@ export interface RuntimeUserConfig {
18
16
  export interface RuntimeByEntriesUserConfig {
19
17
  [name: string]: RuntimeUserConfig;
20
18
  }
21
- export type RuntimeNormalizedConfig = RuntimeUserConfig;
22
- export type RuntimeByEntriesNormalizedConfig = RuntimeByEntriesUserConfig;
23
- export interface AppToolsUserConfig {
24
- source?: SourceUserConfig;
25
- output?: OutputUserConfig;
19
+ export type SharedUserConfig = {
26
20
  server?: ServerUserConfig;
27
- dev?: DevUserConfig;
28
- deploy?: DeployUserConfig;
29
- html?: HtmlUserConfig;
30
- tools?: ToolsUserConfig;
31
- runtime?: RuntimeUserConfig;
32
- security?: SecurityUserConfig;
33
- runtimeByEntries?: RuntimeByEntriesUserConfig;
34
- performance?: PerformanceUserConfig;
35
- experiments?: ExperimentsUserConfig;
36
- builderPlugins?: BuilderPlugin[];
21
+ source?: SharedSourceConfig;
22
+ output?: SharedOutputConfig;
37
23
  /**
38
24
  * The configuration of `bff` is provided by `bff` plugin.
39
25
  * Please use `yarn new` or `pnpm new` to enable the corresponding capability.
@@ -41,26 +27,33 @@ export interface AppToolsUserConfig {
41
27
  */
42
28
 
43
29
  bff?: BffUserConfig;
30
+ dev?: DevUserConfig;
31
+ deploy?: DeployUserConfig;
32
+ runtime?: RuntimeUserConfig;
33
+ runtimeByEntries?: RuntimeByEntriesUserConfig;
34
+ html?: SharedHtmlConfig;
35
+ tools?: SharedToolsConfig;
36
+ builderPlugins?: BuilderPlugin[];
37
+ performance?: SharedPerformanceConfig;
38
+ };
39
+ export interface AppToolsUserConfig extends SharedUserConfig {
40
+ source?: SourceUserConfig;
41
+ output?: OutputUserConfig;
42
+ html?: HtmlUserConfig;
43
+ tools?: ToolsUserConfig;
44
+ security?: SecurityUserConfig;
45
+ performance?: PerformanceUserConfig;
46
+ experiments?: ExperimentsUserConfig;
47
+ }
48
+ export interface RsAppToolsUserConfig extends SharedUserConfig {
49
+ source?: RsSourceUserConfig;
50
+ output?: RsOutputUserConfig;
51
+ html?: RsHtmlUserConfig;
52
+ tools?: RsToolsUserConfig;
53
+ performance?: RsPerformanceConfig;
44
54
  }
45
- export type AppToolsNormalizedConfig = {
46
- source: SourceNormalizedConfig;
47
- bff: BffNormalizedConfig;
48
- dev: DevNormalizedConfig;
49
- deploy: DeployNormalizedConfig;
50
- html: HtmlNormalizedConfig;
51
- runtime: RuntimeNormalizedConfig;
52
- runtimeByEntries: RuntimeByEntriesNormalizedConfig;
53
- output: OutputNormalizedConfig;
54
- security: SecurityNormalizedConfig;
55
- server: ServerNormalizedConfig;
56
- tools: ToolsNormalizedConfig;
57
- performance: PerformanceNormalizedConfig;
58
- experiments: ExperimentsNormalizedConfig;
59
- builderPlugins: BuilderPlugin[];
55
+ interface SharedNormalizedConfig<RawConfig> {
60
56
  cliOptions?: Record<string, any>;
61
- _raw: UserConfig<{
62
- hooks: AppToolsHooks;
63
- userConfig: AppToolsUserConfig;
64
- normalizedConfig: AppToolsNormalizedConfig;
65
- }>;
66
- };
57
+ _raw: RawConfig;
58
+ }
59
+ export type AppToolsNormalizedConfig<Config = SharedUserConfig> = Required<Config> & SharedNormalizedConfig<Config>;
@@ -1,10 +1,15 @@
1
1
  import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
- export type BuilderOutputConfig = Required<BuilderConfig>['output'];
3
- export interface OutputUserConfig extends BuilderOutputConfig {
2
+ import type { BuilderConfig as RsBuilderConfig } from '@modern-js/builder-rspack-provider';
3
+ import type { SharedOutputConfig as BuilderSharedOutputConfig } from '@modern-js/builder-shared';
4
+ import { UnwrapBuilderConfig } from '../utils';
5
+ export type BuilderOutputConfig = UnwrapBuilderConfig<BuilderConfig, 'output'>;
6
+ export type RsBuilderOutputConfig = UnwrapBuilderConfig<RsBuilderConfig, 'output'>;
7
+ export interface SharedOutputConfig extends BuilderSharedOutputConfig {
4
8
  ssg?: SSGConfig;
5
9
  disableNodePolyfill?: boolean;
6
10
  }
7
- export type OutputNormalizedConfig = OutputUserConfig;
11
+ export interface OutputUserConfig extends BuilderOutputConfig, SharedOutputConfig {}
12
+ export interface RsOutputUserConfig extends RsBuilderOutputConfig, SharedOutputConfig {}
8
13
  export type SSGRouteOptions = string | {
9
14
  url: string;
10
15
  output?: string;
@@ -1,4 +1,7 @@
1
1
  import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
- export type BuilderPerformanceConfig = Required<BuilderConfig>['performance'];
3
- export type PerformanceUserConfig = BuilderPerformanceConfig;
4
- export type PerformanceNormalizedConfig = PerformanceUserConfig;
2
+ import type { BuilderConfig as RsBuilderConfig } from '@modern-js/builder-rspack-provider';
3
+ import { UnwrapBuilderConfig } from '../utils';
4
+ export type { SharedPerformanceConfig } from '@modern-js/builder-shared';
5
+ export type BuilderPerformanceConfig = UnwrapBuilderConfig<BuilderConfig, 'performance'>;
6
+ export type RsPerformanceConfig = UnwrapBuilderConfig<RsBuilderConfig, 'performance'>;
7
+ export type PerformanceUserConfig = BuilderPerformanceConfig;
@@ -1,4 +1,4 @@
1
1
  import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
- export type BuilderSecurityConfig = Required<BuilderConfig>['security'];
3
- export type SecurityUserConfig = BuilderSecurityConfig;
4
- export type SecurityNormalizedConfig = SecurityUserConfig;
2
+ import { UnwrapBuilderConfig } from '../utils';
3
+ export type BuilderSecurityConfig = UnwrapBuilderConfig<BuilderConfig, 'security'>;
4
+ export type SecurityUserConfig = BuilderSecurityConfig;
@@ -1,12 +1,15 @@
1
1
  import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
- export type BuilderSourceConfig = Required<BuilderConfig>['source'];
2
+ import type { BuilderConfig as RsBuilderConfig } from '@modern-js/builder-rspack-provider';
3
+ import type { SharedSourceConfig as BuilderSharedSourceConfig } from '@modern-js/builder-shared';
4
+ export type BuilderSourceConfig = NonNullable<BuilderConfig['source']>;
5
+ export type RsBuilderSourceConfig = NonNullable<RsBuilderConfig['source']>;
3
6
  export type Entry = string | {
4
7
  entry: string;
5
8
  disableMount?: boolean;
6
9
  customBootstrap?: string;
7
10
  };
8
11
  export type Entries = Record<string, Entry>;
9
- export interface SourceUserConfig extends BuilderSourceConfig {
12
+ export interface SharedSourceConfig extends BuilderSharedSourceConfig {
10
13
  entries?: Entries;
11
14
  enableAsyncEntry?: boolean;
12
15
  disableDefaultEntries?: boolean;
@@ -21,4 +24,5 @@ export interface SourceUserConfig extends BuilderSourceConfig {
21
24
 
22
25
  designSystem?: Record<string, any>;
23
26
  }
24
- export type SourceNormalizedConfig = SourceUserConfig;
27
+ export interface SourceUserConfig extends BuilderSourceConfig, SharedSourceConfig {}
28
+ export interface RsSourceUserConfig extends RsBuilderSourceConfig, SharedSourceConfig {}
@@ -2,7 +2,13 @@ import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
2
2
  import type { JestConfig } from '@modern-js/core';
3
3
  import type { PluginSwcOptions } from '@modern-js/builder-plugin-swc';
4
4
  import type { PluginEsbuildOptions } from '@modern-js/builder-plugin-esbuild';
5
- export type BuilderToolsConfig = Required<BuilderConfig>['tools'];
5
+ import type { BuilderConfig as RsBuilderConfig } from '@modern-js/builder-rspack-provider';
6
+ import type { SharedToolsConfig as BuilderSharedToolsConfig } from '@modern-js/builder-shared';
7
+ import type { UnwrapBuilderConfig } from '../utils';
8
+ export type BuilderToolsConfig = UnwrapBuilderConfig<BuilderConfig, 'tools'> & {
9
+ esbuild?: PluginEsbuildOptions;
10
+ };
11
+ export type RsBuilderToolsConfig = UnwrapBuilderConfig<RsBuilderConfig, 'source'>;
6
12
  /**
7
13
  * The configuration of `tools.tailwindcss` is provided by `tailwindcss` plugin.
8
14
  * Please use `yarn new` or `pnpm new` to enable the corresponding capability.
@@ -10,10 +16,9 @@ export type BuilderToolsConfig = Required<BuilderConfig>['tools'];
10
16
  */
11
17
 
12
18
  export type Tailwindcss = Record<string, any> | ((options: Record<string, any>) => Record<string, any> | void);
13
- export interface ToolsUserConfig extends BuilderToolsConfig {
19
+ export interface SharedToolsConfig extends BuilderSharedToolsConfig {
14
20
  tailwindcss?: Tailwindcss;
15
21
  jest?: JestConfig | ((jestConfig: JestConfig) => JestConfig);
16
- esbuild?: PluginEsbuildOptions;
17
22
  /**
18
23
  * The configuration of `swc` is provided by `swc` plugin.
19
24
  * @requires `swc` plugin
@@ -21,4 +26,5 @@ export interface ToolsUserConfig extends BuilderToolsConfig {
21
26
 
22
27
  swc?: PluginSwcOptions;
23
28
  }
24
- export type ToolsNormalizedConfig = ToolsUserConfig;
29
+ export interface ToolsUserConfig extends BuilderToolsConfig, SharedToolsConfig {}
30
+ export interface RsToolsUserConfig extends SharedToolsConfig, RsBuilderToolsConfig {}
@@ -3,6 +3,7 @@ import type { AsyncWaterfall, AsyncWorkflow, ParallelWorkflow } from '@modern-js
3
3
  import type { Entrypoint, HtmlPartials, NestedRoute, PageRoute, RouteLegacy, ServerRoute } from '@modern-js/types';
4
4
  import type { RegisterBuildPlatformResult, DevToolData } from '@modern-js/core';
5
5
  import type { Stats, MultiStats } from '@modern-js/builder-shared';
6
+ import type { Rspack } from '@modern-js/builder-rspack-provider';
6
7
  export interface ImportSpecifier {
7
8
  local?: string;
8
9
  imported?: string;
@@ -60,16 +61,16 @@ export type AppToolsHooks = {
60
61
  beforeDev: AsyncWorkflow<void, unknown>;
61
62
  afterDev: AsyncWorkflow<void, unknown>;
62
63
  beforeCreateCompiler: AsyncWorkflow<{
63
- bundlerConfigs: webpack.Configuration[];
64
+ bundlerConfigs: webpack.Configuration[] | Rspack.Configuration[];
64
65
  }, unknown>;
65
66
  afterCreateCompiler: AsyncWorkflow<{
66
- compiler?: webpack.Compiler | webpack.MultiCompiler;
67
+ compiler?: webpack.Compiler | webpack.MultiCompiler | Rspack.Compiler;
67
68
  }, unknown>;
68
69
  beforePrintInstructions: AsyncWaterfall<{
69
70
  instructions: string;
70
71
  }>;
71
72
  beforeBuild: AsyncWorkflow<{
72
- bundlerConfigs?: webpack.Configuration[];
73
+ bundlerConfigs?: webpack.Configuration[] | Rspack.Configuration[];
73
74
  }, unknown>;
74
75
  afterBuild: AsyncWorkflow<{
75
76
  stats?: Stats | MultiStats;
@@ -1,23 +1,33 @@
1
1
  import type { NormalizedConfig, UserConfig } from '@modern-js/core';
2
- import type { AppToolsUserConfig, AppToolsNormalizedConfig } from './config';
2
+ import type { AppToolsUserConfig, AppToolsNormalizedConfig, SharedUserConfig, RsAppToolsUserConfig } from './config';
3
3
  import type { AppToolsHooks } from './hooks';
4
4
  import type { AppToolsLegacyUserConfig, AppToolsLegacyNormalizedConfig } from './legacyConfig';
5
+ import { Bundler, FromConfig } from './utils';
5
6
  export * from './hooks';
6
7
  export * from './config';
7
8
  export * from './legacyConfig';
9
+ export type { Bundler } from './utils';
8
10
  export type { ServerUserConfig, ServerNormalizedConfig, BffUserConfig, BffNormalizedConfig, SSR, SSRByEntries } from '@modern-js/server-core';
9
11
  export type { IAppContext, PluginAPI, CliPlugin, NormalizedConfig, UserConfig } from '@modern-js/core';
10
- export type AppTools = {
12
+ export type AppTools<B extends Bundler = 'webpack'> = {
11
13
  hooks: AppToolsHooks;
12
- userConfig: AppToolsUserConfig;
13
- normalizedConfig: AppToolsNormalizedConfig;
14
+ userConfig: FromConfig<B, {
15
+ rspack: RsAppToolsUserConfig;
16
+ webpack: AppToolsUserConfig;
17
+ shared: SharedUserConfig;
18
+ }>;
19
+ normalizedConfig: FromConfig<B, {
20
+ rspack: AppToolsNormalizedConfig<RsAppToolsUserConfig>;
21
+ webpack: AppToolsNormalizedConfig<AppToolsUserConfig>;
22
+ shared: AppToolsNormalizedConfig<SharedUserConfig>;
23
+ }>;
14
24
  };
15
25
  export type LegacyAppTools = {
16
26
  hooks: AppToolsHooks;
17
27
  userConfig: AppToolsLegacyUserConfig;
18
28
  normalizedConfig: AppToolsLegacyNormalizedConfig;
19
29
  };
20
- export type AppNormalizedConfig = NormalizedConfig<AppTools>;
30
+ export type AppNormalizedConfig<B extends Bundler = 'webpack'> = NormalizedConfig<AppTools<B>>;
21
31
  export type AppLegacyNormalizedConfig = NormalizedConfig<LegacyAppTools>;
22
- export type AppUserConfig = UserConfig<AppTools>;
32
+ export type AppUserConfig<B extends Bundler = 'webpack'> = UserConfig<AppTools<B>>;
23
33
  export type AppLegacyUserConfig = UserConfig<LegacyAppTools>;
@@ -0,0 +1,7 @@
1
+ export type UnwrapBuilderConfig<Config, Key extends keyof Config> = Required<Config>[Key];
2
+ export type Bundler = 'rspack' | 'webpack' | 'shared';
3
+ export type FromConfig<B extends Bundler, Config extends {
4
+ rspack: Rspack;
5
+ webpack: Webpack;
6
+ shared: Shared;
7
+ }, Rspack = {}, Webpack = {}, Shared = {}> = B extends 'shared' ? Config['shared'] : B extends 'rspack' ? Config['rspack'] : Config['webpack'];
@@ -19,4 +19,4 @@ export declare const buildServerConfig: ({
19
19
  */
20
20
 
21
21
  export declare const safeReplacer: () => (key: string, value: unknown) => unknown;
22
- export declare const emitResolvedConfig: (appDirectory: string, resolvedConfig: AppNormalizedConfig) => Promise<void>;
22
+ export declare const emitResolvedConfig: (appDirectory: string, resolvedConfig: AppNormalizedConfig<'shared'>) => Promise<void>;
@@ -1,2 +1,2 @@
1
1
  import { AppTools, PluginAPI } from '../types';
2
- export declare function getServerInternalPlugins(api: PluginAPI<AppTools>): Promise<Record<string, string>>;
2
+ export declare function getServerInternalPlugins(api: PluginAPI<AppTools<'shared'>>): Promise<Record<string, string>>;
@@ -1,3 +1,3 @@
1
1
  import type { IAppContext, CliHooksRunner } from '@modern-js/core';
2
2
  import type { AppNormalizedConfig, AppTools } from '../types';
3
- export declare const printInstructions: (hookRunners: CliHooksRunner<AppTools>, appContext: IAppContext, config: AppNormalizedConfig) => Promise<void>;
3
+ export declare const printInstructions: (hookRunners: CliHooksRunner<AppTools<'shared'>>, appContext: IAppContext, config: AppNormalizedConfig<'shared'>) => Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modern-js/app-tools",
3
- "description": "The meta-framework suite designed from scratch for frontend-focused modern web development.",
3
+ "description": "A Progressive React Framework for modern web development.",
4
4
  "homepage": "https://modernjs.dev",
5
5
  "bugs": "https://github.com/modern-js-dev/modern.js/issues",
6
6
  "repository": "modern-js-dev/modern.js",
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "2.3.1-alpha.1",
14
+ "version": "2.4.0",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",
@@ -63,37 +63,46 @@
63
63
  "@babel/runtime": "^7.18.0",
64
64
  "@babel/traverse": "^7.18.0",
65
65
  "@babel/types": "^7.18.0",
66
- "@modern-js/builder": "2.3.0",
67
- "@modern-js/builder-plugin-esbuild": "2.3.0",
68
- "@modern-js/builder-plugin-node-polyfill": "2.3.0",
69
- "@modern-js/builder-shared": "2.3.0",
70
- "@modern-js/builder-webpack-provider": "2.3.0",
71
- "@modern-js/core": "2.3.0",
72
- "@modern-js/new-action": "2.3.0",
73
- "@modern-js/node-bundle-require": "2.3.0",
74
- "@modern-js/plugin": "2.3.0",
75
- "@modern-js/plugin-data-loader": "2.3.0",
76
- "@modern-js/plugin-i18n": "2.3.0",
77
- "@modern-js/plugin-lint": "2.3.0",
78
- "@modern-js/prod-server": "2.3.0",
79
- "@modern-js/server": "2.3.0",
80
- "@modern-js/types": "2.3.0",
81
- "@modern-js/upgrade": "2.3.0",
82
- "@modern-js/utils": "2.3.0",
83
66
  "es-module-lexer": "^1.1.0",
84
- "esbuild": "0.15.7"
67
+ "esbuild": "0.15.7",
68
+ "@modern-js/builder": "2.4.0",
69
+ "@modern-js/builder-plugin-node-polyfill": "2.4.0",
70
+ "@modern-js/builder-shared": "2.4.0",
71
+ "@modern-js/builder-webpack-provider": "2.4.0",
72
+ "@modern-js/builder-plugin-esbuild": "2.4.0",
73
+ "@modern-js/core": "2.4.0",
74
+ "@modern-js/new-action": "2.4.0",
75
+ "@modern-js/node-bundle-require": "2.4.0",
76
+ "@modern-js/plugin": "2.4.0",
77
+ "@modern-js/plugin-data-loader": "2.4.0",
78
+ "@modern-js/plugin-i18n": "2.4.0",
79
+ "@modern-js/plugin-lint": "2.4.0",
80
+ "@modern-js/prod-server": "2.4.0",
81
+ "@modern-js/server": "2.4.0",
82
+ "@modern-js/types": "2.4.0",
83
+ "@modern-js/upgrade": "2.4.0",
84
+ "@modern-js/utils": "2.4.0"
85
85
  },
86
86
  "devDependencies": {
87
- "@modern-js/builder-plugin-swc": "2.3.0",
88
- "@modern-js/server-core": "2.3.0",
89
- "@scripts/build": "2.3.0",
90
- "@scripts/jest-config": "2.3.0",
91
87
  "@types/babel__traverse": "^7.14.2",
92
88
  "@types/jest": "^27",
93
89
  "@types/node": "^14",
94
90
  "jest": "^27",
95
91
  "typescript": "^4",
96
- "webpack": "^5.75.0"
92
+ "webpack": "^5.75.0",
93
+ "@modern-js/builder-plugin-swc": "2.4.0",
94
+ "@modern-js/builder-rspack-provider": "2.4.0",
95
+ "@modern-js/server-core": "2.4.0",
96
+ "@scripts/jest-config": "2.4.0",
97
+ "@scripts/build": "2.4.0"
98
+ },
99
+ "peerDependencies": {
100
+ "@modern-js/builder-rspack-provider": "^2.4.0"
101
+ },
102
+ "peerDependenciesMeta": {
103
+ "@modern-js/builder-rspack-provider": {
104
+ "optional": true
105
+ }
97
106
  },
98
107
  "sideEffects": false,
99
108
  "publishConfig": {
@@ -1,17 +0,0 @@
1
- import { slash } from "@modern-js/utils";
2
- function loader(source) {
3
- this.cacheable();
4
- const { target } = this._compiler.options;
5
- if (target === "node" || Array.isArray(target) && target.includes("node")) {
6
- return source;
7
- }
8
- const { resourcePath } = this;
9
- const code = `
10
- export { default } from "${slash(resourcePath)}";
11
- `;
12
- return code;
13
- }
14
- var routerLoader_default = loader;
15
- export {
16
- routerLoader_default as default
17
- };
@@ -1,30 +0,0 @@
1
- class HtmlAsyncChunkPlugin {
2
- constructor(htmlWebpackPlugin) {
3
- this.name = "HtmlAsyncChunkPlugin";
4
- this.htmlWebpackPlugin = htmlWebpackPlugin;
5
- }
6
- apply(compiler) {
7
- compiler.hooks.compilation.tap(
8
- this.name,
9
- (compilation) => {
10
- const hooks = this.htmlWebpackPlugin.getHooks(compilation);
11
- hooks.alterAssetTagGroups.tap(this.name, (assets) => {
12
- const tags = [...assets.headTags, ...assets.bodyTags];
13
- for (const tag of tags) {
14
- if (tag.tagName === "script") {
15
- const { attributes } = tag;
16
- if (attributes && attributes.defer === true) {
17
- attributes.async = true;
18
- delete attributes.defer;
19
- }
20
- }
21
- }
22
- return assets;
23
- });
24
- }
25
- );
26
- }
27
- }
28
- export {
29
- HtmlAsyncChunkPlugin
30
- };
@@ -1,37 +0,0 @@
1
- class BottomTemplatePlugin {
2
- constructor(htmlWebpackPlugin) {
3
- this.bottomTemplateReg = /<!--<\?-\s*bottomTemplate\s*\?>-->/;
4
- this.bodyRegExp = /(<\/\s*body\s*>)/i;
5
- this.htmlWebpackPlugin = htmlWebpackPlugin;
6
- this.name = "bottom-template";
7
- }
8
- apply(compiler) {
9
- compiler.hooks.compilation.tap(
10
- this.name,
11
- (compilation) => {
12
- this.htmlWebpackPlugin.getHooks(compilation).beforeEmit.tap(this.name, (data) => {
13
- var _a;
14
- if (!((_a = data.plugin.options) == null ? void 0 : _a.__internal__)) {
15
- return data;
16
- }
17
- if (this.bottomTemplateReg.test(data.html)) {
18
- data.html = data.html.replace(this.bottomTemplateReg, "");
19
- const { bottomTemplate } = data.plugin.options;
20
- if (bottomTemplate) {
21
- data.html = data.html.replace(
22
- this.bodyRegExp,
23
- (match) => `
24
- ${bottomTemplate}
25
- ${match}`
26
- );
27
- }
28
- }
29
- return data;
30
- });
31
- }
32
- );
33
- }
34
- }
35
- export {
36
- BottomTemplatePlugin
37
- };
@@ -1,16 +0,0 @@
1
- import { initHtmlConfig, initSourceConfig, initToolsConfig } from "./inits";
2
- import { transformNormalizedConfig } from "./transformNormalizedConfig";
3
- function checkIsLegacyConfig(config) {
4
- return Boolean(config.legacy);
5
- }
6
- function initialNormalizedConfig(config, appContext) {
7
- initHtmlConfig(config, appContext);
8
- initSourceConfig(config, appContext);
9
- initToolsConfig(config);
10
- return config;
11
- }
12
- export {
13
- checkIsLegacyConfig,
14
- initialNormalizedConfig,
15
- transformNormalizedConfig
16
- };
@@ -1,13 +0,0 @@
1
- import { slash } from "@modern-js/utils";
2
- function loader(source) {
3
- this.cacheable();
4
- var target = this._compiler.options.target;
5
- if (target === "node" || Array.isArray(target) && target.includes("node")) {
6
- return source;
7
- }
8
- var resourcePath = this.resourcePath;
9
- var code = '\n export { default } from "'.concat(slash(resourcePath), '";\n ');
10
- return code;
11
- }
12
- var routerLoader_default = loader;
13
- export { routerLoader_default as default };
@@ -1,12 +0,0 @@
1
- import { initHtmlConfig, initSourceConfig, initToolsConfig } from "./inits";
2
- import { transformNormalizedConfig } from "./transformNormalizedConfig";
3
- function checkIsLegacyConfig(config) {
4
- return Boolean(config.legacy);
5
- }
6
- function initialNormalizedConfig(config, appContext) {
7
- initHtmlConfig(config, appContext);
8
- initSourceConfig(config, appContext);
9
- initToolsConfig(config);
10
- return config;
11
- }
12
- export { checkIsLegacyConfig, initialNormalizedConfig, transformNormalizedConfig };
@@ -1,3 +0,0 @@
1
- import type { LoaderContext } from 'webpack';
2
- declare function loader(this: LoaderContext<void>, source: string): string;
3
- export default loader;
@@ -1,3 +0,0 @@
1
- import { LoaderContext } from 'webpack';
2
- declare function loader(this: LoaderContext<void>): string;
3
- export default loader;
@@ -1,4 +0,0 @@
1
- import { AppNormalizedConfig, IAppContext, AppLegacyUserConfig, AppUserConfig } from '../../types';
2
- export { transformNormalizedConfig } from './transformNormalizedConfig';
3
- export declare function checkIsLegacyConfig(config: AppLegacyUserConfig | AppUserConfig): config is AppLegacyUserConfig;
4
- export declare function initialNormalizedConfig(config: AppNormalizedConfig, appContext: IAppContext): AppNormalizedConfig;
@@ -1,2 +0,0 @@
1
- import { AppLegacyNormalizedConfig, AppNormalizedConfig } from '../../types';
2
- export declare function transformNormalizedConfig(config: AppLegacyNormalizedConfig): AppNormalizedConfig;