@modern-js/app-tools 2.30.1-alpha.0 → 2.31.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.
- package/CHANGELOG.md +51 -0
- package/dist/cjs/analyze/getHtmlTemplate.js +6 -0
- package/dist/cjs/analyze/nestedRoutes.js +1 -2
- package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +13 -3
- package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +64 -82
- package/dist/cjs/config/default.js +2 -1
- package/dist/cjs/schema/index.js +3 -0
- package/dist/cjs/types/config/testing.js +4 -0
- package/dist/cjs/types/legacyConfig/testing.js +4 -0
- package/dist/esm/analyze/getHtmlTemplate.js +8 -1
- package/dist/esm/analyze/nestedRoutes.js +1 -4
- package/dist/esm/builder/shared/builderPlugins/adapterSSR.js +13 -3
- package/dist/esm/builder/shared/bundlerPlugins/RouterPlugin.js +189 -249
- package/dist/esm/config/default.js +2 -1
- package/dist/esm/schema/index.js +3 -0
- package/dist/esm/types/config/testing.js +1 -0
- package/dist/esm/types/legacyConfig/testing.js +1 -0
- package/dist/esm-node/analyze/getHtmlTemplate.js +6 -0
- package/dist/esm-node/analyze/nestedRoutes.js +1 -2
- package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.js +13 -3
- package/dist/esm-node/builder/shared/bundlerPlugins/RouterPlugin.js +68 -85
- package/dist/esm-node/config/default.js +2 -1
- package/dist/esm-node/schema/index.js +3 -0
- package/dist/esm-node/types/config/testing.js +1 -0
- package/dist/esm-node/types/legacyConfig/testing.js +1 -0
- package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +24 -0
- package/dist/types/types/config/index.d.ts +4 -1
- package/dist/types/types/config/output.d.ts +1 -0
- package/dist/types/types/config/security.d.ts +3 -1
- package/dist/types/types/config/testing.d.ts +8 -0
- package/dist/types/types/config/tools.d.ts +1 -1
- package/dist/types/types/legacyConfig/index.d.ts +2 -0
- package/dist/types/types/legacyConfig/testing.d.ts +8 -0
- package/dist/types/types/legacyConfig/tools.d.ts +1 -2
- package/package.json +25 -25
- package/dist/js/modern/analyze/constants.js +0 -54
- package/dist/js/modern/analyze/generateCode.js +0 -247
- package/dist/js/modern/analyze/getBundleEntry.js +0 -71
- package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +0 -220
- package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +0 -216
- package/dist/js/modern/analyze/getClientRoutes/index.js +0 -6
- package/dist/js/modern/analyze/getClientRoutes/utils.js +0 -31
- package/dist/js/modern/analyze/getFileSystemEntry.js +0 -109
- package/dist/js/modern/analyze/getHtmlTemplate.js +0 -115
- package/dist/js/modern/analyze/getServerRoutes.js +0 -175
- package/dist/js/modern/analyze/index.js +0 -332
- package/dist/js/modern/analyze/isDefaultExportFunction.js +0 -42
- package/dist/js/modern/analyze/makeLegalIdentifier.js +0 -13
- package/dist/js/modern/analyze/nestedRoutes.js +0 -157
- package/dist/js/modern/analyze/templates.js +0 -334
- package/dist/js/modern/analyze/utils.js +0 -141
- package/dist/js/modern/builder/builderPlugins/compatModern.js +0 -233
- package/dist/js/modern/builder/index.js +0 -159
- package/dist/js/modern/builder/loaders/routerLoader.js +0 -17
- package/dist/js/modern/builder/loaders/serverModuleLoader.js +0 -7
- package/dist/js/modern/builder/share.js +0 -46
- package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -30
- package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +0 -37
- package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +0 -113
- package/dist/js/modern/commands/build.js +0 -91
- package/dist/js/modern/commands/deploy.js +0 -28
- package/dist/js/modern/commands/dev.js +0 -109
- package/dist/js/modern/commands/index.js +0 -3
- package/dist/js/modern/commands/inspect.js +0 -38
- package/dist/js/modern/commands/serve.js +0 -54
- package/dist/js/modern/config/default.js +0 -175
- package/dist/js/modern/config/index.js +0 -8
- package/dist/js/modern/config/initial/createHtmlConfig.js +0 -35
- package/dist/js/modern/config/initial/createOutputConfig.js +0 -68
- package/dist/js/modern/config/initial/createSourceConfig.js +0 -39
- package/dist/js/modern/config/initial/createToolsConfig.js +0 -42
- package/dist/js/modern/config/initial/index.js +0 -16
- package/dist/js/modern/config/initial/inits.js +0 -152
- package/dist/js/modern/config/initial/transformNormalizedConfig.js +0 -47
- package/dist/js/modern/defineConfig.js +0 -27
- package/dist/js/modern/exports/server.js +0 -4
- package/dist/js/modern/hooks.js +0 -35
- package/dist/js/modern/index.js +0 -211
- package/dist/js/modern/initialize/index.js +0 -124
- package/dist/js/modern/locale/en.js +0 -36
- package/dist/js/modern/locale/index.js +0 -9
- package/dist/js/modern/locale/zh.js +0 -36
- package/dist/js/modern/schema/Schema.js +0 -40
- package/dist/js/modern/schema/index.js +0 -88
- package/dist/js/modern/schema/legacy.js +0 -148
- package/dist/js/modern/types/config/deploy.js +0 -0
- package/dist/js/modern/types/config/dev.js +0 -0
- package/dist/js/modern/types/config/experiments.js +0 -0
- package/dist/js/modern/types/config/html.js +0 -0
- package/dist/js/modern/types/config/index.js +0 -1
- package/dist/js/modern/types/config/output.js +0 -0
- package/dist/js/modern/types/config/performance.js +0 -0
- package/dist/js/modern/types/config/security.js +0 -0
- package/dist/js/modern/types/config/source.js +0 -0
- package/dist/js/modern/types/config/tools.js +0 -0
- package/dist/js/modern/types/hooks.js +0 -0
- package/dist/js/modern/types/index.js +0 -3
- package/dist/js/modern/types/legacyConfig/deploy.js +0 -0
- package/dist/js/modern/types/legacyConfig/dev.js +0 -0
- package/dist/js/modern/types/legacyConfig/index.js +0 -0
- package/dist/js/modern/types/legacyConfig/output.js +0 -0
- package/dist/js/modern/types/legacyConfig/source.js +0 -0
- package/dist/js/modern/types/legacyConfig/tools.js +0 -0
- package/dist/js/modern/utils/config.js +0 -128
- package/dist/js/modern/utils/createServer.js +0 -75
- package/dist/js/modern/utils/env.js +0 -15
- package/dist/js/modern/utils/generateWatchFiles.js +0 -55
- package/dist/js/modern/utils/getSelectedEntries.js +0 -58
- package/dist/js/modern/utils/getServerInternalPlugins.js +0 -58
- package/dist/js/modern/utils/language.js +0 -8
- package/dist/js/modern/utils/printInstructions.js +0 -31
- package/dist/js/modern/utils/restart.js +0 -44
- package/dist/js/modern/utils/routes.js +0 -30
- package/dist/js/modern/utils/types.js +0 -0
- package/dist/js/node/analyze/constants.js +0 -98
- package/dist/js/node/analyze/generateCode.js +0 -271
- package/dist/js/node/analyze/getBundleEntry.js +0 -95
- package/dist/js/node/analyze/getClientRoutes/getRoutes.js +0 -242
- package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +0 -238
- package/dist/js/node/analyze/getClientRoutes/index.js +0 -30
- package/dist/js/node/analyze/getClientRoutes/utils.js +0 -58
- package/dist/js/node/analyze/getFileSystemEntry.js +0 -131
- package/dist/js/node/analyze/getHtmlTemplate.js +0 -144
- package/dist/js/node/analyze/getServerRoutes.js +0 -194
- package/dist/js/node/analyze/index.js +0 -339
- package/dist/js/node/analyze/isDefaultExportFunction.js +0 -71
- package/dist/js/node/analyze/makeLegalIdentifier.js +0 -36
- package/dist/js/node/analyze/nestedRoutes.js +0 -184
- package/dist/js/node/analyze/templates.js +0 -365
- package/dist/js/node/analyze/utils.js +0 -172
- package/dist/js/node/builder/builderPlugins/compatModern.js +0 -258
- package/dist/js/node/builder/index.js +0 -177
- package/dist/js/node/builder/loaders/routerLoader.js +0 -38
- package/dist/js/node/builder/loaders/serverModuleLoader.js +0 -28
- package/dist/js/node/builder/share.js +0 -75
- package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -53
- package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +0 -60
- package/dist/js/node/builder/webpackPlugins/routerPlugin.js +0 -135
- package/dist/js/node/commands/build.js +0 -112
- package/dist/js/node/commands/deploy.js +0 -51
- package/dist/js/node/commands/dev.js +0 -126
- package/dist/js/node/commands/index.js +0 -19
- package/dist/js/node/commands/inspect.js +0 -61
- package/dist/js/node/commands/serve.js +0 -83
- package/dist/js/node/config/default.js +0 -197
- package/dist/js/node/config/index.js +0 -34
- package/dist/js/node/config/initial/createHtmlConfig.js +0 -58
- package/dist/js/node/config/initial/createOutputConfig.js +0 -91
- package/dist/js/node/config/initial/createSourceConfig.js +0 -62
- package/dist/js/node/config/initial/createToolsConfig.js +0 -65
- package/dist/js/node/config/initial/index.js +0 -41
- package/dist/js/node/config/initial/inits.js +0 -175
- package/dist/js/node/config/initial/transformNormalizedConfig.js +0 -70
- package/dist/js/node/defineConfig.js +0 -49
- package/dist/js/node/exports/server.js +0 -27
- package/dist/js/node/hooks.js +0 -54
- package/dist/js/node/index.js +0 -235
- package/dist/js/node/initialize/index.js +0 -134
- package/dist/js/node/locale/en.js +0 -59
- package/dist/js/node/locale/index.js +0 -33
- package/dist/js/node/locale/zh.js +0 -59
- package/dist/js/node/schema/Schema.js +0 -63
- package/dist/js/node/schema/index.js +0 -118
- package/dist/js/node/schema/legacy.js +0 -169
- package/dist/js/node/types/config/deploy.js +0 -15
- package/dist/js/node/types/config/dev.js +0 -15
- package/dist/js/node/types/config/experiments.js +0 -15
- package/dist/js/node/types/config/html.js +0 -15
- package/dist/js/node/types/config/index.js +0 -17
- package/dist/js/node/types/config/output.js +0 -15
- package/dist/js/node/types/config/performance.js +0 -15
- package/dist/js/node/types/config/security.js +0 -15
- package/dist/js/node/types/config/source.js +0 -15
- package/dist/js/node/types/config/tools.js +0 -15
- package/dist/js/node/types/hooks.js +0 -15
- package/dist/js/node/types/index.js +0 -19
- package/dist/js/node/types/legacyConfig/deploy.js +0 -15
- package/dist/js/node/types/legacyConfig/dev.js +0 -15
- package/dist/js/node/types/legacyConfig/index.js +0 -15
- package/dist/js/node/types/legacyConfig/output.js +0 -15
- package/dist/js/node/types/legacyConfig/source.js +0 -15
- package/dist/js/node/types/legacyConfig/tools.js +0 -15
- package/dist/js/node/utils/config.js +0 -153
- package/dist/js/node/utils/createServer.js +0 -106
- package/dist/js/node/utils/env.js +0 -38
- package/dist/js/node/utils/generateWatchFiles.js +0 -85
- package/dist/js/node/utils/getSelectedEntries.js +0 -81
- package/dist/js/node/utils/getServerInternalPlugins.js +0 -79
- package/dist/js/node/utils/language.js +0 -31
- package/dist/js/node/utils/printInstructions.js +0 -54
- package/dist/js/node/utils/restart.js +0 -67
- package/dist/js/node/utils/routes.js +0 -59
- package/dist/js/node/utils/types.js +0 -15
- package/dist/js/treeshaking/analyze/constants.js +0 -40
- package/dist/js/treeshaking/analyze/generateCode.js +0 -485
- package/dist/js/treeshaking/analyze/getBundleEntry.js +0 -62
- package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +0 -233
- package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +0 -231
- package/dist/js/treeshaking/analyze/getClientRoutes/index.js +0 -3
- package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +0 -23
- package/dist/js/treeshaking/analyze/getFileSystemEntry.js +0 -107
- package/dist/js/treeshaking/analyze/getHtmlTemplate.js +0 -302
- package/dist/js/treeshaking/analyze/getServerRoutes.js +0 -222
- package/dist/js/treeshaking/analyze/index.js +0 -697
- package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +0 -47
- package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +0 -13
- package/dist/js/treeshaking/analyze/nestedRoutes.js +0 -384
- package/dist/js/treeshaking/analyze/templates.js +0 -468
- package/dist/js/treeshaking/analyze/utils.js +0 -374
- package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +0 -304
- package/dist/js/treeshaking/builder/index.js +0 -374
- package/dist/js/treeshaking/builder/loaders/routerLoader.js +0 -13
- package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +0 -5
- package/dist/js/treeshaking/builder/share.js +0 -40
- package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -110
- package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +0 -72
- package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +0 -343
- package/dist/js/treeshaking/commands/build.js +0 -291
- package/dist/js/treeshaking/commands/deploy.js +0 -154
- package/dist/js/treeshaking/commands/dev.js +0 -301
- package/dist/js/treeshaking/commands/index.js +0 -3
- package/dist/js/treeshaking/commands/inspect.js +0 -149
- package/dist/js/treeshaking/commands/serve.js +0 -199
- package/dist/js/treeshaking/config/default.js +0 -210
- package/dist/js/treeshaking/config/index.js +0 -3
- package/dist/js/treeshaking/config/initial/createHtmlConfig.js +0 -19
- package/dist/js/treeshaking/config/initial/createOutputConfig.js +0 -41
- package/dist/js/treeshaking/config/initial/createSourceConfig.js +0 -42
- package/dist/js/treeshaking/config/initial/createToolsConfig.js +0 -23
- package/dist/js/treeshaking/config/initial/index.js +0 -12
- package/dist/js/treeshaking/config/initial/inits.js +0 -209
- package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +0 -35
- package/dist/js/treeshaking/defineConfig.js +0 -61
- package/dist/js/treeshaking/exports/server.js +0 -2
- package/dist/js/treeshaking/hooks.js +0 -29
- package/dist/js/treeshaking/index.js +0 -706
- package/dist/js/treeshaking/initialize/index.js +0 -276
- package/dist/js/treeshaking/locale/en.js +0 -38
- package/dist/js/treeshaking/locale/index.js +0 -9
- package/dist/js/treeshaking/locale/zh.js +0 -38
- package/dist/js/treeshaking/schema/Schema.js +0 -273
- package/dist/js/treeshaking/schema/index.js +0 -181
- package/dist/js/treeshaking/schema/legacy.js +0 -337
- package/dist/js/treeshaking/types/config/deploy.js +0 -1
- package/dist/js/treeshaking/types/config/dev.js +0 -1
- package/dist/js/treeshaking/types/config/experiments.js +0 -1
- package/dist/js/treeshaking/types/config/html.js +0 -1
- package/dist/js/treeshaking/types/config/index.js +0 -1
- package/dist/js/treeshaking/types/config/output.js +0 -1
- package/dist/js/treeshaking/types/config/performance.js +0 -1
- package/dist/js/treeshaking/types/config/security.js +0 -1
- package/dist/js/treeshaking/types/config/source.js +0 -1
- package/dist/js/treeshaking/types/config/tools.js +0 -1
- package/dist/js/treeshaking/types/hooks.js +0 -1
- package/dist/js/treeshaking/types/index.js +0 -3
- package/dist/js/treeshaking/types/legacyConfig/deploy.js +0 -1
- package/dist/js/treeshaking/types/legacyConfig/dev.js +0 -1
- package/dist/js/treeshaking/types/legacyConfig/index.js +0 -1
- package/dist/js/treeshaking/types/legacyConfig/output.js +0 -1
- package/dist/js/treeshaking/types/legacyConfig/source.js +0 -1
- package/dist/js/treeshaking/types/legacyConfig/tools.js +0 -1
- package/dist/js/treeshaking/utils/config.js +0 -302
- package/dist/js/treeshaking/utils/createServer.js +0 -258
- package/dist/js/treeshaking/utils/env.js +0 -13
- package/dist/js/treeshaking/utils/generateWatchFiles.js +0 -214
- package/dist/js/treeshaking/utils/getSelectedEntries.js +0 -186
- package/dist/js/treeshaking/utils/getServerInternalPlugins.js +0 -210
- package/dist/js/treeshaking/utils/language.js +0 -6
- package/dist/js/treeshaking/utils/printInstructions.js +0 -152
- package/dist/js/treeshaking/utils/restart.js +0 -187
- package/dist/js/treeshaking/utils/routes.js +0 -153
- package/dist/js/treeshaking/utils/types.js +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
|
+
import { createHash } from "crypto";
|
|
2
3
|
import { mergeWith } from "@modern-js/utils/lodash";
|
|
3
4
|
import { ROUTE_MANIFEST_FILE } from "@modern-js/utils";
|
|
4
5
|
import { ROUTE_MANIFEST } from "@modern-js/utils/universal/constants";
|
|
5
|
-
import { transform } from "esbuild";
|
|
6
6
|
const PLUGIN_NAME = "ModernjsRoutePlugin";
|
|
7
|
+
const generateContentHash = (content) => {
|
|
8
|
+
return createHash("md5").update(content).digest("hex").slice(0, 8);
|
|
9
|
+
};
|
|
7
10
|
export class RouterPlugin {
|
|
8
11
|
isTargetNodeOrWebWorker(target) {
|
|
9
12
|
if (target === "node" || Array.isArray(target) && target.includes("node")) {
|
|
@@ -37,76 +40,23 @@ export class RouterPlugin {
|
|
|
37
40
|
}
|
|
38
41
|
const { webpack } = compiler;
|
|
39
42
|
const { Compilation, sources } = webpack;
|
|
40
|
-
const { RawSource
|
|
41
|
-
const normalizePath = (
|
|
42
|
-
if (!
|
|
43
|
-
return `${
|
|
43
|
+
const { RawSource } = sources;
|
|
44
|
+
const normalizePath = (path) => {
|
|
45
|
+
if (!path.endsWith("/")) {
|
|
46
|
+
return `${path}/`;
|
|
44
47
|
}
|
|
45
|
-
return
|
|
48
|
+
return path;
|
|
46
49
|
};
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
+
const chunksToHtmlName = /* @__PURE__ */ new Map();
|
|
51
|
+
const ROUTE_MANIFEST_HOLDER = `route-manifest`;
|
|
52
|
+
const placeholder = `<!--<?- ${ROUTE_MANIFEST_HOLDER} ?>-->`;
|
|
50
53
|
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
51
|
-
compilation.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
chunkGroups: true,
|
|
58
|
-
chunks: true,
|
|
59
|
-
ids: true
|
|
60
|
-
});
|
|
61
|
-
const { chunks = [], namedChunkGroups } = stats;
|
|
62
|
-
if (!namedChunkGroups) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const entryChunks = this.getEntryChunks(compilation, chunks);
|
|
66
|
-
const entryChunkFiles = entryChunks.map((chunk) => [
|
|
67
|
-
...chunk.files || []
|
|
68
|
-
].find((fname) => fname.includes(".js")));
|
|
69
|
-
const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
|
|
70
|
-
for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
|
|
71
|
-
const file = entryChunkFiles[i];
|
|
72
|
-
const chunkId = entryChunkFileIds[i];
|
|
73
|
-
const asset = compilation.assets[file];
|
|
74
|
-
if (!asset) {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
const { map } = asset.sourceAndMap();
|
|
78
|
-
chunkToMap.set(chunkId, map);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
compilation.hooks.processAssets.tapPromise({
|
|
82
|
-
name: PLUGIN_NAME,
|
|
83
|
-
stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER
|
|
84
|
-
}, async () => {
|
|
85
|
-
const stats = compilation.getStats().toJson({
|
|
86
|
-
all: false,
|
|
87
|
-
chunkGroups: true,
|
|
88
|
-
chunks: true,
|
|
89
|
-
ids: true
|
|
90
|
-
});
|
|
91
|
-
const { chunks = [], namedChunkGroups } = stats;
|
|
92
|
-
if (!namedChunkGroups) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const entryChunks = this.getEntryChunks(compilation, chunks);
|
|
96
|
-
const entryChunkFiles = entryChunks.map((chunk) => [
|
|
97
|
-
...chunk.files || []
|
|
98
|
-
].find((fname) => fname.includes(".js")));
|
|
99
|
-
const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
|
|
100
|
-
for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
|
|
101
|
-
const file = entryChunkFiles[i];
|
|
102
|
-
const chunkId = entryChunkFileIds[i];
|
|
103
|
-
const asset = compilation.assets[file];
|
|
104
|
-
if (!asset) {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
const { source } = asset.sourceAndMap();
|
|
108
|
-
chunkToSource.set(chunkId, source);
|
|
109
|
-
}
|
|
54
|
+
this.HtmlBundlerPlugin.getHooks(compilation).beforeEmit.tapAsync("RouterManifestPlugin", (data, callback) => {
|
|
55
|
+
const { outputName } = data;
|
|
56
|
+
const { chunks } = data.plugin.options;
|
|
57
|
+
chunksToHtmlName.set(chunks, outputName);
|
|
58
|
+
data.html = data.html.replace("</script>", `</script>${placeholder}`);
|
|
59
|
+
callback(null, data);
|
|
110
60
|
});
|
|
111
61
|
compilation.hooks.processAssets.tapPromise({
|
|
112
62
|
name: PLUGIN_NAME,
|
|
@@ -153,11 +103,12 @@ export class RouterPlugin {
|
|
|
153
103
|
const manifest = {
|
|
154
104
|
routeAssets
|
|
155
105
|
};
|
|
106
|
+
const entryNames = Array.from(compilation.entrypoints.keys());
|
|
156
107
|
const entryChunks = this.getEntryChunks(compilation, chunks);
|
|
157
108
|
const entryChunkFiles = this.getEntryChunkFiles(entryChunks);
|
|
158
109
|
const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
|
|
159
110
|
for (let i = 0; i < entryChunkFiles.length; i++) {
|
|
160
|
-
|
|
111
|
+
const entryName = entryNames[i];
|
|
161
112
|
const file = entryChunkFiles[i];
|
|
162
113
|
const chunkNames = entryChunks[i].names;
|
|
163
114
|
const chunkId = entryChunkFileIds[i];
|
|
@@ -193,21 +144,39 @@ export class RouterPlugin {
|
|
|
193
144
|
})};
|
|
194
145
|
})();
|
|
195
146
|
`;
|
|
196
|
-
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
147
|
+
let htmlName;
|
|
148
|
+
for (const [chunks2, name] of chunksToHtmlName.entries()) {
|
|
149
|
+
if (Array.isArray(chunkNames) && Array.isArray(chunks2) && chunkNames.every((value, index) => value === chunks2[index])) {
|
|
150
|
+
htmlName = name;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const oldHtml = compilation.assets[htmlName];
|
|
155
|
+
const { enableInlineRouteManifests, disableFilenameHash, staticJsDir, scriptLoading, nonce } = this;
|
|
156
|
+
const nonceAttr = nonce ? `nonce="${nonce}"` : "";
|
|
157
|
+
if (enableInlineRouteManifests) {
|
|
158
|
+
compilation.updateAsset(
|
|
159
|
+
htmlName,
|
|
160
|
+
new RawSource(oldHtml.source().toString().replace(placeholder, `<script ${nonceAttr}>${injectedContent}</script>`)),
|
|
161
|
+
// FIXME: The arguments third of updatgeAsset is a optional function in webpack.
|
|
162
|
+
void 0
|
|
163
|
+
);
|
|
164
|
+
} else {
|
|
165
|
+
const scriptPath = `${staticJsDir}/${ROUTE_MANIFEST_HOLDER}-${entryName}${disableFilenameHash ? ".js" : `.${generateContentHash(injectedContent)}.js`}`;
|
|
166
|
+
const scriptUrl = `${publicPath}${scriptPath}`;
|
|
167
|
+
const scriptLoadingAttr = (
|
|
168
|
+
// eslint-disable-next-line no-nested-ternary
|
|
169
|
+
scriptLoading === "defer" ? scriptLoading : scriptLoading === "module" ? `type="module"` : ""
|
|
170
|
+
);
|
|
171
|
+
const script = `<script ${scriptLoadingAttr} ${nonceAttr} src="${scriptUrl}"></script>`;
|
|
172
|
+
compilation.updateAsset(
|
|
173
|
+
htmlName,
|
|
174
|
+
new RawSource(oldHtml.source().toString().replace(placeholder, script)),
|
|
175
|
+
// FIXME: The arguments third of updatgeAsset is a optional function in webpack.
|
|
176
|
+
void 0
|
|
177
|
+
);
|
|
178
|
+
compilation.emitAsset(scriptPath, new RawSource(injectedContent));
|
|
179
|
+
}
|
|
211
180
|
}
|
|
212
181
|
if (prevManifestAsset) {
|
|
213
182
|
compilation.updateAsset(
|
|
@@ -222,4 +191,18 @@ export class RouterPlugin {
|
|
|
222
191
|
});
|
|
223
192
|
});
|
|
224
193
|
}
|
|
194
|
+
constructor({ staticJsDir = "static/js", HtmlBundlerPlugin, enableInlineRouteManifests, disableFilenameHash = false, scriptLoading = "defer", nonce }) {
|
|
195
|
+
_define_property(this, "HtmlBundlerPlugin", void 0);
|
|
196
|
+
_define_property(this, "enableInlineRouteManifests", void 0);
|
|
197
|
+
_define_property(this, "staticJsDir", void 0);
|
|
198
|
+
_define_property(this, "disableFilenameHash", void 0);
|
|
199
|
+
_define_property(this, "scriptLoading", void 0);
|
|
200
|
+
_define_property(this, "nonce", void 0);
|
|
201
|
+
this.HtmlBundlerPlugin = HtmlBundlerPlugin;
|
|
202
|
+
this.enableInlineRouteManifests = enableInlineRouteManifests;
|
|
203
|
+
this.staticJsDir = staticJsDir;
|
|
204
|
+
this.disableFilenameHash = disableFilenameHash;
|
|
205
|
+
this.scriptLoading = scriptLoading;
|
|
206
|
+
this.nonce = nonce;
|
|
207
|
+
}
|
|
225
208
|
}
|
|
@@ -11,7 +11,8 @@ export function createDefaultConfig(appContext, bundler) {
|
|
|
11
11
|
};
|
|
12
12
|
const output = {
|
|
13
13
|
...defaultBuilderConfig.output,
|
|
14
|
-
disableNodePolyfill: true
|
|
14
|
+
disableNodePolyfill: true,
|
|
15
|
+
enableInlineRouteManifests: true
|
|
15
16
|
};
|
|
16
17
|
const source = {
|
|
17
18
|
...defaultBuilderConfig.source,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { webpack } from '@modern-js/builder-webpack-provider';
|
|
2
2
|
import type { Rspack } from '@modern-js/builder-rspack-provider';
|
|
3
|
+
import type HtmlWebpackPlugin from '@modern-js/builder-webpack-provider/html-webpack-plugin';
|
|
4
|
+
import type { ScriptLoading } from '@modern-js/builder-shared';
|
|
3
5
|
export interface RouteAssets {
|
|
4
6
|
[routeId: string]: {
|
|
5
7
|
chunkIds?: (string | number)[];
|
|
@@ -8,7 +10,29 @@ export interface RouteAssets {
|
|
|
8
10
|
};
|
|
9
11
|
}
|
|
10
12
|
type Compiler = webpack.Compiler | Rspack.Compiler;
|
|
13
|
+
type Options = {
|
|
14
|
+
HtmlBundlerPlugin: typeof HtmlWebpackPlugin;
|
|
15
|
+
staticJsDir: string;
|
|
16
|
+
enableInlineRouteManifests: boolean;
|
|
17
|
+
disableFilenameHash?: boolean;
|
|
18
|
+
scriptLoading?: ScriptLoading;
|
|
19
|
+
nonce?: string;
|
|
20
|
+
};
|
|
11
21
|
export declare class RouterPlugin {
|
|
22
|
+
private HtmlBundlerPlugin;
|
|
23
|
+
private enableInlineRouteManifests;
|
|
24
|
+
private staticJsDir;
|
|
25
|
+
private disableFilenameHash?;
|
|
26
|
+
private scriptLoading?;
|
|
27
|
+
private nonce?;
|
|
28
|
+
constructor({
|
|
29
|
+
staticJsDir,
|
|
30
|
+
HtmlBundlerPlugin,
|
|
31
|
+
enableInlineRouteManifests,
|
|
32
|
+
disableFilenameHash,
|
|
33
|
+
scriptLoading,
|
|
34
|
+
nonce
|
|
35
|
+
}: Options);
|
|
12
36
|
private isTargetNodeOrWebWorker;
|
|
13
37
|
private getEntryChunks;
|
|
14
38
|
private getEntryChunkFiles;
|
|
@@ -2,10 +2,11 @@ import type { ServerUserConfig, BffUserConfig } from '@modern-js/server-core';
|
|
|
2
2
|
import type { BuilderPlugin } from '@modern-js/builder-webpack-provider';
|
|
3
3
|
import type { OutputUserConfig, RsOutputUserConfig, SharedOutputConfig } from './output';
|
|
4
4
|
import type { RsSourceUserConfig, SharedSourceConfig, SourceUserConfig } from './source';
|
|
5
|
+
import type { TestingUserConfig } from './testing';
|
|
5
6
|
import type { DevUserConfig } from './dev';
|
|
6
7
|
import type { RsToolsUserConfig, SharedToolsConfig, ToolsUserConfig } from './tools';
|
|
7
8
|
import type { HtmlUserConfig, RsHtmlUserConfig, SharedHtmlConfig } from './html';
|
|
8
|
-
import type { RsSecurityConfig, SecurityUserConfig } from './security';
|
|
9
|
+
import type { RsSecurityConfig, SecurityUserConfig, SharedSecurityConfig } from './security';
|
|
9
10
|
import type { DeployUserConfig } from './deploy';
|
|
10
11
|
import type { ExperimentsUserConfig } from './experiments';
|
|
11
12
|
import type { PerformanceUserConfig, RsPerformanceConfig, SharedPerformanceConfig } from './performance';
|
|
@@ -32,6 +33,8 @@ export type SharedUserConfig = {
|
|
|
32
33
|
runtimeByEntries?: RuntimeByEntriesUserConfig;
|
|
33
34
|
html?: SharedHtmlConfig;
|
|
34
35
|
tools?: SharedToolsConfig;
|
|
36
|
+
security?: SharedSecurityConfig;
|
|
37
|
+
testing?: TestingUserConfig;
|
|
35
38
|
builderPlugins?: BuilderPlugin[];
|
|
36
39
|
performance?: SharedPerformanceConfig;
|
|
37
40
|
};
|
|
@@ -8,6 +8,7 @@ export interface SharedOutputConfig extends BuilderSharedOutputConfig {
|
|
|
8
8
|
ssg?: SSGConfig;
|
|
9
9
|
splitRouteChunks?: boolean;
|
|
10
10
|
disableNodePolyfill?: boolean;
|
|
11
|
+
enableInlineRouteManifests?: boolean;
|
|
11
12
|
tempDir?: string;
|
|
12
13
|
}
|
|
13
14
|
export interface OutputUserConfig extends BuilderOutputConfig, SharedOutputConfig {}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { SharedSecurityConfig } from '@modern-js/builder-shared';
|
|
1
2
|
import type { WebpackBuilderConfig, RspackBuilderConfig } from '../../builder/shared';
|
|
2
3
|
import { UnwrapBuilderConfig } from '../utils';
|
|
3
4
|
export type BuilderSecurityConfig = UnwrapBuilderConfig<WebpackBuilderConfig, 'security'>;
|
|
4
5
|
export type RsSecurityConfig = UnwrapBuilderConfig<RspackBuilderConfig, 'security'>;
|
|
5
|
-
export type SecurityUserConfig = BuilderSecurityConfig;
|
|
6
|
+
export type SecurityUserConfig = BuilderSecurityConfig;
|
|
7
|
+
export type { SharedSecurityConfig };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { JestConfig } from '@modern-js/
|
|
1
|
+
import type { JestConfig } from '@modern-js/types';
|
|
2
2
|
import type { PluginSwcOptions } from '@modern-js/builder-plugin-swc';
|
|
3
3
|
import type { PluginEsbuildOptions } from '@modern-js/builder-plugin-esbuild';
|
|
4
4
|
import type { SharedToolsConfig as BuilderSharedToolsConfig } from '@modern-js/builder-shared';
|
|
@@ -4,6 +4,7 @@ import type { OutputLegacyUserConfig } from './output';
|
|
|
4
4
|
import type { SourceLegacyUserConfig } from './source';
|
|
5
5
|
import type { DeployLegacyUserConfig } from './deploy';
|
|
6
6
|
import type { ToolsLegacyUserConfig } from './tools';
|
|
7
|
+
import type { TestingLegacyUserConfig } from './testing';
|
|
7
8
|
export type { DevUserLegacyConfig } from './dev';
|
|
8
9
|
export type { OutputLegacyUserConfig } from './output';
|
|
9
10
|
export type { DeployLegacyUserConfig } from './deploy';
|
|
@@ -25,6 +26,7 @@ export type AppToolsLegacyUserConfig = {
|
|
|
25
26
|
runtime?: RuntimeLegacyConfig;
|
|
26
27
|
runtimeByEntries?: RuntimeByEntriesLegacyConfig;
|
|
27
28
|
bff?: LegacyBffUserConfig;
|
|
29
|
+
testing?: TestingLegacyUserConfig;
|
|
28
30
|
legacy?: boolean;
|
|
29
31
|
};
|
|
30
32
|
export interface AppToolsLegacyNormalizedConfig extends Required<AppToolsLegacyUserConfig> {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { DevServerOptions } from '@modern-js/types';
|
|
1
|
+
import type { JestConfig, DevServerOptions } from '@modern-js/types';
|
|
2
2
|
import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
|
|
3
|
-
import type { JestConfig } from '@modern-js/core';
|
|
4
3
|
type BuilderToolsConfig = Required<BuilderConfig>['tools'];
|
|
5
4
|
export type ToolsLegacyUserConfig = BuilderToolsConfig & {
|
|
6
5
|
esbuild?: Record<string, unknown>;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.31.0",
|
|
19
19
|
"jsnext:source": "./src/index.ts",
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -71,26 +71,26 @@
|
|
|
71
71
|
"@babel/types": "^7.21.5",
|
|
72
72
|
"es-module-lexer": "^1.1.0",
|
|
73
73
|
"esbuild": "0.17.19",
|
|
74
|
-
"rspack-plugin-virtual-module": "0.1.
|
|
74
|
+
"rspack-plugin-virtual-module": "0.1.7",
|
|
75
75
|
"@swc/helpers": "0.5.1",
|
|
76
|
-
"@modern-js/builder": "2.
|
|
77
|
-
"@modern-js/builder-
|
|
78
|
-
"@modern-js/builder-
|
|
79
|
-
"@modern-js/
|
|
80
|
-
"@modern-js/
|
|
81
|
-
"@modern-js/
|
|
82
|
-
"@modern-js/
|
|
83
|
-
"@modern-js/
|
|
84
|
-
"@modern-js/
|
|
85
|
-
"@modern-js/plugin-
|
|
86
|
-
"@modern-js/
|
|
87
|
-
"@modern-js/
|
|
88
|
-
"@modern-js/prod-server": "2.
|
|
89
|
-
"@modern-js/
|
|
90
|
-
"@modern-js/
|
|
91
|
-
"@modern-js/
|
|
92
|
-
"@modern-js/
|
|
93
|
-
"@modern-js/
|
|
76
|
+
"@modern-js/builder": "2.31.0",
|
|
77
|
+
"@modern-js/builder-plugin-esbuild": "2.31.0",
|
|
78
|
+
"@modern-js/builder-plugin-node-polyfill": "2.31.0",
|
|
79
|
+
"@modern-js/builder-webpack-provider": "2.31.0",
|
|
80
|
+
"@modern-js/core": "2.31.0",
|
|
81
|
+
"@modern-js/builder-shared": "2.31.0",
|
|
82
|
+
"@modern-js/new-action": "2.31.0",
|
|
83
|
+
"@modern-js/node-bundle-require": "2.31.0",
|
|
84
|
+
"@modern-js/plugin": "2.31.0",
|
|
85
|
+
"@modern-js/plugin-data-loader": "2.31.0",
|
|
86
|
+
"@modern-js/plugin-i18n": "2.31.0",
|
|
87
|
+
"@modern-js/plugin-lint": "2.31.0",
|
|
88
|
+
"@modern-js/prod-server": "2.31.0",
|
|
89
|
+
"@modern-js/server": "2.31.0",
|
|
90
|
+
"@modern-js/types": "2.31.0",
|
|
91
|
+
"@modern-js/upgrade": "2.31.0",
|
|
92
|
+
"@modern-js/server-core": "2.31.0",
|
|
93
|
+
"@modern-js/utils": "2.31.0"
|
|
94
94
|
},
|
|
95
95
|
"devDependencies": {
|
|
96
96
|
"@types/babel__traverse": "^7.14.2",
|
|
@@ -99,13 +99,13 @@
|
|
|
99
99
|
"jest": "^29",
|
|
100
100
|
"typescript": "^5",
|
|
101
101
|
"webpack": "^5.88.1",
|
|
102
|
-
"@
|
|
103
|
-
"@
|
|
104
|
-
"@
|
|
105
|
-
"@
|
|
102
|
+
"@modern-js/builder-plugin-swc": "2.31.0",
|
|
103
|
+
"@modern-js/builder-rspack-provider": "2.31.0",
|
|
104
|
+
"@scripts/jest-config": "2.31.0",
|
|
105
|
+
"@scripts/build": "2.31.0"
|
|
106
106
|
},
|
|
107
107
|
"peerDependencies": {
|
|
108
|
-
"@modern-js/builder-rspack-provider": "^2.
|
|
108
|
+
"@modern-js/builder-rspack-provider": "^2.31.0"
|
|
109
109
|
},
|
|
110
110
|
"peerDependenciesMeta": {
|
|
111
111
|
"@modern-js/builder-rspack-provider": {
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
const JS_EXTENSIONS = [".js", ".ts", ".jsx", ".tsx"];
|
|
2
|
-
const INDEX_FILE_NAME = "index";
|
|
3
|
-
const APP_FILE_NAME = "App";
|
|
4
|
-
const PAGES_DIR_NAME = "pages";
|
|
5
|
-
const NESTED_ROUTES_DIR = "routes";
|
|
6
|
-
const FILE_SYSTEM_ROUTES_FILE_NAME = "routes.js";
|
|
7
|
-
const LOADER_EXPORT_NAME = "loader";
|
|
8
|
-
const TEMP_LOADERS_DIR = "__loaders__";
|
|
9
|
-
const ENTRY_POINT_FILE_NAME = "index.js";
|
|
10
|
-
const ENTRY_BOOTSTRAP_FILE_NAME = "bootstrap.js";
|
|
11
|
-
const FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP = /^\[(\S+)\]([*+?]?)$/;
|
|
12
|
-
const FILE_SYSTEM_ROUTES_LAYOUT = "_layout";
|
|
13
|
-
const FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT = "_app";
|
|
14
|
-
const FILE_SYSTEM_ROUTES_INDEX = "index";
|
|
15
|
-
const FILE_SYSTEM_ROUTES_IGNORED_REGEX = /\.(d|test|spec|e2e)\.(js|jsx|ts|tsx)$/;
|
|
16
|
-
const HTML_PARTIALS_FOLDER = "html";
|
|
17
|
-
const HTML_PARTIALS_EXTENSIONS = [".htm", ".html", ".ejs"];
|
|
18
|
-
const FILE_SYSTEM_ROUTES_COMPONENTS_DIR = "internal_components";
|
|
19
|
-
const NESTED_ROUTE = {
|
|
20
|
-
LAYOUT_FILE: "layout",
|
|
21
|
-
LAYOUT_LOADER_FILE: "layout.loader",
|
|
22
|
-
PAGE_FILE: "page",
|
|
23
|
-
PAGE_LOADER_FILE: "page.loader",
|
|
24
|
-
LOADING_FILE: "loading",
|
|
25
|
-
ERROR_FILE: "error",
|
|
26
|
-
LOADER_FILE: "loader"
|
|
27
|
-
};
|
|
28
|
-
const APP_CONFIG_NAME = "config";
|
|
29
|
-
const APP_INIT_EXPORTED = "init";
|
|
30
|
-
const APP_INIT_IMPORTED = "appInit";
|
|
31
|
-
export {
|
|
32
|
-
APP_CONFIG_NAME,
|
|
33
|
-
APP_FILE_NAME,
|
|
34
|
-
APP_INIT_EXPORTED,
|
|
35
|
-
APP_INIT_IMPORTED,
|
|
36
|
-
ENTRY_BOOTSTRAP_FILE_NAME,
|
|
37
|
-
ENTRY_POINT_FILE_NAME,
|
|
38
|
-
FILE_SYSTEM_ROUTES_COMPONENTS_DIR,
|
|
39
|
-
FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP,
|
|
40
|
-
FILE_SYSTEM_ROUTES_FILE_NAME,
|
|
41
|
-
FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT,
|
|
42
|
-
FILE_SYSTEM_ROUTES_IGNORED_REGEX,
|
|
43
|
-
FILE_SYSTEM_ROUTES_INDEX,
|
|
44
|
-
FILE_SYSTEM_ROUTES_LAYOUT,
|
|
45
|
-
HTML_PARTIALS_EXTENSIONS,
|
|
46
|
-
HTML_PARTIALS_FOLDER,
|
|
47
|
-
INDEX_FILE_NAME,
|
|
48
|
-
JS_EXTENSIONS,
|
|
49
|
-
LOADER_EXPORT_NAME,
|
|
50
|
-
NESTED_ROUTE,
|
|
51
|
-
NESTED_ROUTES_DIR,
|
|
52
|
-
PAGES_DIR_NAME,
|
|
53
|
-
TEMP_LOADERS_DIR
|
|
54
|
-
};
|