@modern-js/app-tools 2.7.0 → 2.8.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 (76) hide show
  1. package/CHANGELOG.md +53 -2
  2. package/README.md +2 -2
  3. package/dist/cjs/analyze/generateCode.js +16 -2
  4. package/dist/cjs/analyze/index.js +0 -32
  5. package/dist/cjs/analyze/templates.js +26 -2
  6. package/dist/cjs/analyze/utils.js +5 -0
  7. package/dist/cjs/builder/builder-webpack/builderPlugins/compatModern.js +2 -13
  8. package/dist/cjs/builder/generator/index.js +10 -2
  9. package/dist/cjs/builder/index.js +1 -1
  10. package/dist/cjs/builder/shared/builderPlugins/adapterBasic.js +101 -0
  11. package/dist/cjs/builder/shared/builderPlugins/adapterHtml.js +91 -0
  12. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +164 -0
  13. package/dist/cjs/builder/{builder-webpack/webpackPlugins → shared/builderPlugins}/index.js +5 -3
  14. package/dist/cjs/builder/{builder-webpack/webpackPlugins → shared/bundlerPlugins}/RouterPlugin.js +11 -5
  15. package/dist/cjs/builder/shared/bundlerPlugins/index.js +19 -0
  16. package/dist/cjs/builder/shared/index.js +1 -1
  17. package/dist/cjs/index.js +1 -1
  18. package/dist/cjs/locale/en.js +1 -0
  19. package/dist/cjs/locale/zh.js +1 -0
  20. package/dist/esm/analyze/generateCode.js +34 -19
  21. package/dist/esm/analyze/index.js +2 -25
  22. package/dist/esm/analyze/templates.js +16 -2
  23. package/dist/esm/analyze/utils.js +4 -1
  24. package/dist/esm/builder/builder-webpack/builderPlugins/compatModern.js +0 -11
  25. package/dist/esm/builder/generator/index.js +6 -4
  26. package/dist/esm/builder/index.js +1 -1
  27. package/dist/esm/builder/shared/builderPlugins/adapterBasic.js +101 -0
  28. package/dist/esm/builder/shared/builderPlugins/adapterHtml.js +120 -0
  29. package/dist/esm/builder/shared/builderPlugins/adapterSSR.js +350 -0
  30. package/dist/esm/builder/shared/builderPlugins/index.js +3 -0
  31. package/dist/esm/builder/{builder-webpack/webpackPlugins → shared/bundlerPlugins}/RouterPlugin.js +10 -6
  32. package/dist/esm/builder/shared/bundlerPlugins/index.js +3 -0
  33. package/dist/esm/builder/shared/index.js +1 -1
  34. package/dist/esm/index.js +1 -1
  35. package/dist/esm/locale/en.js +1 -0
  36. package/dist/esm/locale/zh.js +1 -0
  37. package/dist/esm-node/analyze/generateCode.js +29 -4
  38. package/dist/esm-node/analyze/index.js +1 -39
  39. package/dist/esm-node/analyze/templates.js +25 -2
  40. package/dist/esm-node/analyze/utils.js +4 -0
  41. package/dist/esm-node/builder/builder-webpack/builderPlugins/compatModern.js +2 -13
  42. package/dist/esm-node/builder/generator/index.js +10 -2
  43. package/dist/esm-node/builder/index.js +1 -1
  44. package/dist/esm-node/builder/shared/builderPlugins/adapterBasic.js +67 -0
  45. package/dist/esm-node/builder/shared/builderPlugins/adapterHtml.js +67 -0
  46. package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.js +143 -0
  47. package/dist/esm-node/builder/shared/builderPlugins/index.js +3 -0
  48. package/dist/esm-node/builder/{builder-webpack/webpackPlugins → shared/bundlerPlugins}/RouterPlugin.js +11 -5
  49. package/dist/esm-node/builder/shared/bundlerPlugins/index.js +3 -0
  50. package/dist/esm-node/builder/shared/index.js +1 -1
  51. package/dist/esm-node/index.js +1 -1
  52. package/dist/esm-node/locale/en.js +1 -0
  53. package/dist/esm-node/locale/zh.js +1 -0
  54. package/dist/types/analyze/templates.d.ts +3 -2
  55. package/dist/types/analyze/utils.d.ts +2 -1
  56. package/dist/types/builder/shared/builderPlugins/adapterBasic.d.ts +7 -0
  57. package/dist/types/builder/shared/builderPlugins/adapterHtml.d.ts +5 -0
  58. package/dist/types/builder/shared/builderPlugins/adapterSSR.d.ts +4 -0
  59. package/dist/types/builder/shared/builderPlugins/index.d.ts +3 -0
  60. package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +5 -0
  61. package/dist/types/builder/shared/bundlerPlugins/index.d.ts +3 -0
  62. package/dist/types/builder/shared/index.d.ts +1 -1
  63. package/dist/types/builder/shared/types.d.ts +7 -4
  64. package/dist/types/locale/en.d.ts +1 -0
  65. package/dist/types/locale/index.d.ts +2 -0
  66. package/dist/types/locale/zh.d.ts +1 -0
  67. package/dist/types/types/config/output.d.ts +2 -15
  68. package/package.json +26 -26
  69. package/dist/cjs/builder/shared/builderPlugins/adapterModern.js +0 -234
  70. package/dist/esm/builder/builder-webpack/webpackPlugins/index.js +0 -1
  71. package/dist/esm/builder/shared/builderPlugins/adapterModern.js +0 -300
  72. package/dist/esm-node/builder/builder-webpack/webpackPlugins/index.js +0 -1
  73. package/dist/esm-node/builder/shared/builderPlugins/adapterModern.js +0 -202
  74. package/dist/types/builder/builder-webpack/webpackPlugins/RouterPlugin.d.ts +0 -4
  75. package/dist/types/builder/builder-webpack/webpackPlugins/index.d.ts +0 -1
  76. package/dist/types/builder/shared/builderPlugins/adapterModern.d.ts +0 -13
@@ -1,202 +0,0 @@
1
- import {
2
- mergeBuilderConfig
3
- } from "@modern-js/builder-shared";
4
- import { getEntryOptions } from "@modern-js/utils";
5
- import HtmlWebpackPlugin from "@modern-js/builder-webpack-provider/html-webpack-plugin";
6
- import { template as lodashTemplate } from "@modern-js/utils/lodash";
7
- import { HtmlAsyncChunkPlugin } from "../bundlerPlugins/HtmlAsyncChunkPlugin";
8
- import { BottomTemplatePlugin } from "../bundlerPlugins/HtmlBottomTemplate";
9
- const isStreamingSSR = (userConfig) => {
10
- const isStreaming = (ssr) => ssr && typeof ssr === "object" && ssr.mode === "stream";
11
- const { server } = userConfig;
12
- if (isStreaming(server.ssr)) {
13
- return true;
14
- }
15
- if ((server == null ? void 0 : server.ssrByEntries) && typeof server.ssrByEntries === "object") {
16
- for (const name of Object.keys(server.ssrByEntries)) {
17
- if (isStreaming(server.ssrByEntries[name])) {
18
- return true;
19
- }
20
- }
21
- }
22
- return false;
23
- };
24
- const builderPluginAdapterModern = (options) => ({
25
- name: "builder-plugin-adapter-modern",
26
- setup(api) {
27
- const { normalizedConfig, appContext } = options;
28
- api.modifyBuilderConfig((config) => {
29
- if (isStreamingSSR(normalizedConfig)) {
30
- return mergeBuilderConfig(config, {
31
- html: {
32
- inject: "body"
33
- }
34
- });
35
- }
36
- return config;
37
- });
38
- api.modifyBundlerChain((chain, { target, CHAIN_ID, isProd }) => {
39
- const builderConfig = api.getNormalizedConfig();
40
- if (target === "node") {
41
- chain.name("server");
42
- } else if (target === "service-worker") {
43
- chain.name("service-worker");
44
- } else if (target === "web-worker") {
45
- chain.name("worker");
46
- } else if (target === "modern-web") {
47
- chain.name("modern");
48
- } else {
49
- chain.name("client");
50
- }
51
- if (target === "node" || target === "service-worker") {
52
- applyNodeCompat(target, chain, normalizedConfig, isProd);
53
- }
54
- if (isHtmlEnabled(builderConfig, target)) {
55
- applyBottomHtmlPlugin({
56
- api,
57
- chain,
58
- modernConfig: normalizedConfig,
59
- appContext,
60
- CHAIN_ID
61
- });
62
- applyAsyncChunkHtmlPlugin({
63
- chain,
64
- modernConfig: normalizedConfig,
65
- CHAIN_ID
66
- });
67
- }
68
- if (target !== "node" && target !== "web-worker" && target !== "service-worker") {
69
- const bareServerModuleReg = /\.(server|node)\.[tj]sx?$/;
70
- chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
71
- chain.module.rule("bare-server-module").test(bareServerModuleReg).use("server-module-loader").loader(require.resolve("../loaders/serverModuleLoader"));
72
- }
73
- });
74
- applyCallbacks(api, options);
75
- function isHtmlEnabled(config, target) {
76
- var _a;
77
- return ((_a = config.tools) == null ? void 0 : _a.htmlPlugin) !== false && target !== "node" && target !== "service-worker" && target !== "web-worker";
78
- }
79
- }
80
- });
81
- function applyCallbacks(api, options) {
82
- options.onAfterBuild && api.onAfterBuild(options.onAfterBuild);
83
- options.onAfterCreateCompiler && api.onAfterCreateCompiler(options.onAfterCreateCompiler);
84
- options.onAfterStartDevServer && api.onAfterStartDevServer(options.onAfterStartDevServer);
85
- options.onBeforeBuild && api.onBeforeBuild(options.onBeforeBuild);
86
- options.onBeforeCreateCompiler && api.onBeforeCreateCompiler(options.onBeforeCreateCompiler);
87
- options.onBeforeStartDevServer && api.onBeforeStartDevServer(options.onBeforeStartDevServer);
88
- options.onDevCompileDone && api.onDevCompileDone(options.onDevCompileDone);
89
- options.onExit && api.onExit(options.onExit);
90
- }
91
- function applyBottomHtmlPlugin({
92
- api,
93
- chain,
94
- modernConfig,
95
- appContext,
96
- CHAIN_ID
97
- }) {
98
- for (const entryName of Object.keys(api.context.entry)) {
99
- const baseTemplateParams = {
100
- entryName,
101
- title: getEntryOptions(
102
- entryName,
103
- modernConfig.html.title,
104
- modernConfig.html.titleByEntries,
105
- appContext.packageName
106
- ),
107
- mountId: modernConfig.html.mountId,
108
- ...getEntryOptions(
109
- entryName,
110
- modernConfig.html.templateParameters,
111
- modernConfig.html.templateParametersByEntries,
112
- appContext.packageName
113
- )
114
- };
115
- chain.plugin(`${CHAIN_ID.PLUGIN.HTML}-${entryName}`).tap((args) => [
116
- {
117
- ...args[0] || {},
118
- __internal__: true,
119
- bottomTemplate: appContext.htmlTemplates[`__${entryName}-bottom__`] && lodashTemplate(appContext.htmlTemplates[`__${entryName}-bottom__`])(
120
- baseTemplateParams
121
- )
122
- }
123
- ]);
124
- }
125
- chain.plugin(CHAIN_ID.PLUGIN.BOTTOM_TEMPLATE).use(BottomTemplatePlugin, [HtmlWebpackPlugin]);
126
- }
127
- function applyAsyncChunkHtmlPlugin({
128
- chain,
129
- modernConfig,
130
- CHAIN_ID
131
- }) {
132
- if (isStreamingSSR(modernConfig)) {
133
- chain.plugin(CHAIN_ID.PLUGIN.HTML_ASYNC_CHUNK).use(HtmlAsyncChunkPlugin, [HtmlWebpackPlugin]);
134
- }
135
- }
136
- function applyNodeCompat(target, chain, modernConfig, isProd) {
137
- const nodeExts = [
138
- ".node.js",
139
- ".node.jsx",
140
- ".node.ts",
141
- ".node.tsx",
142
- ".server.js",
143
- ".server.ts",
144
- ".server.ts",
145
- ".server.tsx"
146
- ];
147
- const webWorkerExts = [
148
- ".worker.js",
149
- ".worker.jsx",
150
- ".worker.ts",
151
- ".worker.tsx"
152
- ];
153
- for (const ext of nodeExts) {
154
- chain.resolve.extensions.prepend(ext);
155
- }
156
- if (target === "service-worker") {
157
- for (const ext of webWorkerExts) {
158
- chain.resolve.extensions.prepend(ext);
159
- }
160
- }
161
- filterEntriesBySSRConfig(
162
- isProd,
163
- chain,
164
- modernConfig.server,
165
- modernConfig.output
166
- );
167
- function filterEntriesBySSRConfig(isProd2, chain2, serverConfig, outputConfig) {
168
- var _a;
169
- const entries = chain2.entryPoints.entries();
170
- if (isProd2 && ((outputConfig == null ? void 0 : outputConfig.ssg) === true || typeof ((_a = outputConfig == null ? void 0 : outputConfig.ssg) == null ? void 0 : _a[0]) === "function")) {
171
- return;
172
- }
173
- if (typeof entries === "undefined") {
174
- throw new Error(
175
- "No entry found, one of src/routes/layout.tsx, src/App.tsx, src/index.tsx is required"
176
- );
177
- }
178
- const entryNames = Object.keys(entries);
179
- if (isProd2 && entryNames.length === 1 && (outputConfig == null ? void 0 : outputConfig.ssg)) {
180
- return;
181
- }
182
- const ssgEntries = [];
183
- if (isProd2 && (outputConfig == null ? void 0 : outputConfig.ssg)) {
184
- const { ssg } = outputConfig;
185
- entryNames.forEach((name) => {
186
- if (ssg[name]) {
187
- ssgEntries.push(name);
188
- }
189
- });
190
- }
191
- const { ssr, ssrByEntries } = serverConfig || {};
192
- entryNames.forEach((name) => {
193
- if (!ssgEntries.includes(name) && (ssr && (ssrByEntries == null ? void 0 : ssrByEntries[name]) === false || !ssr && !(ssrByEntries == null ? void 0 : ssrByEntries[name]))) {
194
- chain2.entryPoints.delete(name);
195
- }
196
- });
197
- }
198
- }
199
- export {
200
- applyCallbacks,
201
- builderPluginAdapterModern
202
- };
@@ -1,4 +0,0 @@
1
- import type { Compiler } from 'webpack';
2
- export declare class RouterPlugin {
3
- apply(compiler: Compiler): void;
4
- }
@@ -1 +0,0 @@
1
- export * from './RouterPlugin';
@@ -1,13 +0,0 @@
1
- import { BuilderPlugin, DefaultBuilderPluginAPI } from '@modern-js/builder-shared';
2
- import { BuilderConfig as RspackBuilderConfig, NormalizedConfig as RspackNormalizedConfig } from '@modern-js/builder-rspack-provider';
3
- import { BuilderConfig as WebpackBuilderConfig, NormalizedConfig as WebpackNormalizedConfig } from '@modern-js/builder-webpack-provider';
4
- import type { BuilderOptions } from '../types';
5
- import type { Bundler } from '../../../types';
6
- type BuilderConfig = RspackBuilderConfig | WebpackBuilderConfig;
7
- type NormalizedConfig = RspackNormalizedConfig | WebpackNormalizedConfig;
8
- type BuilderPluginAPI = DefaultBuilderPluginAPI<BuilderConfig, NormalizedConfig>;
9
- export declare const builderPluginAdapterModern: <B extends Bundler>(options: BuilderOptions<B>) => BuilderPlugin<BuilderPluginAPI>;
10
- /** register builder hooks callback */
11
-
12
- export declare function applyCallbacks<B extends Bundler>(api: BuilderPluginAPI, options: BuilderOptions<B>): void;
13
- export {};