@modern-js/app-tools 2.30.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.
Files changed (32) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/cjs/analyze/getHtmlTemplate.js +6 -0
  3. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +13 -3
  4. package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +64 -82
  5. package/dist/cjs/config/default.js +2 -1
  6. package/dist/cjs/schema/index.js +3 -0
  7. package/dist/cjs/types/config/testing.js +4 -0
  8. package/dist/cjs/types/legacyConfig/testing.js +4 -0
  9. package/dist/esm/analyze/getHtmlTemplate.js +8 -1
  10. package/dist/esm/builder/shared/builderPlugins/adapterSSR.js +13 -3
  11. package/dist/esm/builder/shared/bundlerPlugins/RouterPlugin.js +189 -249
  12. package/dist/esm/config/default.js +2 -1
  13. package/dist/esm/schema/index.js +3 -0
  14. package/dist/esm/types/config/testing.js +1 -0
  15. package/dist/esm/types/legacyConfig/testing.js +1 -0
  16. package/dist/esm-node/analyze/getHtmlTemplate.js +6 -0
  17. package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.js +13 -3
  18. package/dist/esm-node/builder/shared/bundlerPlugins/RouterPlugin.js +68 -85
  19. package/dist/esm-node/config/default.js +2 -1
  20. package/dist/esm-node/schema/index.js +3 -0
  21. package/dist/esm-node/types/config/testing.js +1 -0
  22. package/dist/esm-node/types/legacyConfig/testing.js +1 -0
  23. package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +24 -0
  24. package/dist/types/types/config/index.d.ts +4 -1
  25. package/dist/types/types/config/output.d.ts +1 -0
  26. package/dist/types/types/config/security.d.ts +3 -1
  27. package/dist/types/types/config/testing.d.ts +8 -0
  28. package/dist/types/types/config/tools.d.ts +1 -1
  29. package/dist/types/types/legacyConfig/index.d.ts +2 -0
  30. package/dist/types/types/legacyConfig/testing.d.ts +8 -0
  31. package/dist/types/types/legacyConfig/tools.d.ts +1 -2
  32. package/package.json +25 -25
package/CHANGELOG.md CHANGED
@@ -1,5 +1,56 @@
1
1
  # @modern-js/app-tools
2
2
 
3
+ ## 2.31.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 71bcc55: fix: inline the route manifests into the html
8
+ fix: 内联路由信息到 html 中
9
+ - 2361ce8: feat: support partials html in Document
10
+ feat: 支持 partials html 在 Document 中也生效
11
+ - 30be1ad: fix(app-tools): inject nonce attr to route manifest script
12
+
13
+ fix(app-tools): 向 route manifest 脚本注入 nonce 属性
14
+
15
+ - 4c03d9a: fix(core): remove testing config type and schema
16
+
17
+ fix(core): 移除 testing 配置类型和 schema
18
+
19
+ - 1882366: chore(deps): bump build dependencies
20
+
21
+ chore(deps): 升级构建相关依赖
22
+
23
+ - Updated dependencies [0f09d7c]
24
+ - Updated dependencies [bfdf7b4]
25
+ - Updated dependencies [56eaa0b]
26
+ - Updated dependencies [2361ce8]
27
+ - Updated dependencies [8ab3e2a]
28
+ - Updated dependencies [4c03d9a]
29
+ - Updated dependencies [1eece3e]
30
+ - Updated dependencies [fa8e948]
31
+ - Updated dependencies [83bf560]
32
+ - Updated dependencies [d9cc4d8]
33
+ - Updated dependencies [1882366]
34
+ - @modern-js/builder-rspack-provider@2.31.0
35
+ - @modern-js/builder-webpack-provider@2.31.0
36
+ - @modern-js/builder-shared@2.31.0
37
+ - @modern-js/prod-server@2.31.0
38
+ - @modern-js/core@2.31.0
39
+ - @modern-js/builder@2.31.0
40
+ - @modern-js/utils@2.31.0
41
+ - @modern-js/builder-plugin-node-polyfill@2.31.0
42
+ - @modern-js/builder-plugin-esbuild@2.31.0
43
+ - @modern-js/server@2.31.0
44
+ - @modern-js/plugin-data-loader@2.31.0
45
+ - @modern-js/plugin-lint@2.31.0
46
+ - @modern-js/plugin-i18n@2.31.0
47
+ - @modern-js/new-action@2.31.0
48
+ - @modern-js/server-core@2.31.0
49
+ - @modern-js/node-bundle-require@2.31.0
50
+ - @modern-js/plugin@2.31.0
51
+ - @modern-js/upgrade@2.31.0
52
+ - @modern-js/types@2.31.0
53
+
3
54
  ## 2.30.0
4
55
 
5
56
  ### Patch Changes
@@ -38,6 +38,7 @@ const getHtmlTemplate = async (entrypoints, api, { appContext, config }) => {
38
38
  const { source: { configDir } } = config;
39
39
  const htmlDir = _path.default.resolve(appDirectory, configDir || "", _constants.HTML_PARTIALS_FOLDER);
40
40
  const htmlTemplates = {};
41
+ const partialsByEntrypoint = {};
41
42
  for (const entrypoint of entrypoints) {
42
43
  const { entryName, isMainEntry } = entrypoint;
43
44
  const name = entrypoints.length === 1 && isMainEntry ? "" : entryName;
@@ -67,11 +68,16 @@ const getHtmlTemplate = async (entrypoints, api, { appContext, config }) => {
67
68
  const templatePath = _path.default.resolve(internalDirectory, entryName, "index.html");
68
69
  _utils.fs.outputFileSync(templatePath, _templates.html(partials), "utf8");
69
70
  htmlTemplates[entryName] = templatePath;
71
+ partialsByEntrypoint[entryName] = partials;
70
72
  const bottomTemplate = findPartials(htmlDir, name, PartialPosition.BOTTOM);
71
73
  if (bottomTemplate) {
72
74
  htmlTemplates[`__${entryName}-bottom__`] = bottomTemplate.content;
73
75
  }
74
76
  }
75
77
  }
78
+ api.setAppContext({
79
+ ...api.useAppContext(),
80
+ partialsByEntrypoint
81
+ });
76
82
  return htmlTemplates;
77
83
  };
@@ -31,7 +31,7 @@ const builderPluginAdapterSSR = (options) => ({
31
31
  api.modifyBundlerChain(async (chain, { target, CHAIN_ID, isProd, HtmlPlugin: HtmlBundlerPlugin, isServer }) => {
32
32
  const builderConfig = api.getNormalizedConfig();
33
33
  const { normalizedConfig: normalizedConfig2 } = options;
34
- applyRouterPlugin(chain, options);
34
+ applyRouterPlugin(chain, options, HtmlBundlerPlugin);
35
35
  if ((0, _utils.isSSR)(normalizedConfig2)) {
36
36
  await applySSRLoaderEntry(chain, options, isServer);
37
37
  applySSRDataLoader(chain, options);
@@ -80,7 +80,7 @@ function applyAsyncChunkHtmlPlugin({ chain, modernConfig, CHAIN_ID, HtmlBundlerP
80
80
  ]);
81
81
  }
82
82
  }
83
- function applyRouterPlugin(chain, options) {
83
+ function applyRouterPlugin(chain, options, HtmlBundlerPlugin) {
84
84
  var _normalizedConfig_runtime, _normalizedConfig, _routerConfig, _normalizedConfig_deploy_worker;
85
85
  const { appContext, normalizedConfig } = options;
86
86
  const { entrypoints } = appContext;
@@ -89,7 +89,17 @@ function applyRouterPlugin(chain, options) {
89
89
  const routerManifest = Boolean((_routerConfig = routerConfig) === null || _routerConfig === void 0 ? void 0 : _routerConfig.manifest);
90
90
  const workerSSR = Boolean((_normalizedConfig_deploy_worker = normalizedConfig.deploy.worker) === null || _normalizedConfig_deploy_worker === void 0 ? void 0 : _normalizedConfig_deploy_worker.ssr);
91
91
  if (existNestedRoutes || routerManifest || workerSSR) {
92
- chain.plugin("route-plugin").use(_bundlerPlugins.RouterPlugin);
92
+ var _normalizedConfig_output_distPath, _normalizedConfig_output, _normalizedConfig_output1, _normalizedConfig_html, _normalizedConfig_security;
93
+ chain.plugin("route-plugin").use(_bundlerPlugins.RouterPlugin, [
94
+ {
95
+ HtmlBundlerPlugin,
96
+ enableInlineRouteManifests: normalizedConfig.output.enableInlineRouteManifests,
97
+ staticJsDir: (_normalizedConfig_output = normalizedConfig.output) === null || _normalizedConfig_output === void 0 ? void 0 : (_normalizedConfig_output_distPath = _normalizedConfig_output.distPath) === null || _normalizedConfig_output_distPath === void 0 ? void 0 : _normalizedConfig_output_distPath.js,
98
+ disableFilenameHash: (_normalizedConfig_output1 = normalizedConfig.output) === null || _normalizedConfig_output1 === void 0 ? void 0 : _normalizedConfig_output1.disableFilenameHash,
99
+ scriptLoading: (_normalizedConfig_html = normalizedConfig.html) === null || _normalizedConfig_html === void 0 ? void 0 : _normalizedConfig_html.scriptLoading,
100
+ nonce: (_normalizedConfig_security = normalizedConfig.security) === null || _normalizedConfig_security === void 0 ? void 0 : _normalizedConfig_security.nonce
101
+ }
102
+ ]);
93
103
  }
94
104
  }
95
105
  function applyFilterEntriesBySSRConfig({ isProd, chain, appNormalizedConfig }) {
@@ -8,13 +8,15 @@ Object.defineProperty(exports, "RouterPlugin", {
8
8
  return RouterPlugin;
9
9
  }
10
10
  });
11
- const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
12
- const _path = /* @__PURE__ */ _interop_require_default._(require("path"));
11
+ const _define_property = require("@swc/helpers/_/_define_property");
12
+ const _crypto = require("crypto");
13
13
  const _lodash = require("@modern-js/utils/lodash");
14
14
  const _utils = require("@modern-js/utils");
15
15
  const _constants = require("@modern-js/utils/universal/constants");
16
- const _esbuild = require("esbuild");
17
16
  const PLUGIN_NAME = "ModernjsRoutePlugin";
17
+ const generateContentHash = (content) => {
18
+ return (0, _crypto.createHash)("md5").update(content).digest("hex").slice(0, 8);
19
+ };
18
20
  class RouterPlugin {
19
21
  isTargetNodeOrWebWorker(target) {
20
22
  if (target === "node" || Array.isArray(target) && target.includes("node")) {
@@ -48,76 +50,23 @@ class RouterPlugin {
48
50
  }
49
51
  const { webpack } = compiler;
50
52
  const { Compilation, sources } = webpack;
51
- const { RawSource, SourceMapSource } = sources;
53
+ const { RawSource } = sources;
52
54
  const normalizePath = (path) => {
53
55
  if (!path.endsWith("/")) {
54
56
  return `${path}/`;
55
57
  }
56
58
  return path;
57
59
  };
58
- const chunkToSource = /* @__PURE__ */ new Map();
59
- const chunkToMap = /* @__PURE__ */ new Map();
60
- const { minimize } = compiler.options.optimization;
60
+ const chunksToHtmlName = /* @__PURE__ */ new Map();
61
+ const ROUTE_MANIFEST_HOLDER = `route-manifest`;
62
+ const placeholder = `<!--<?- ${ROUTE_MANIFEST_HOLDER} ?>-->`;
61
63
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
62
- compilation.hooks.processAssets.tapPromise({
63
- name: PLUGIN_NAME,
64
- stage: Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING
65
- }, async () => {
66
- const stats = compilation.getStats().toJson({
67
- all: false,
68
- chunkGroups: true,
69
- chunks: true,
70
- ids: true
71
- });
72
- const { chunks = [], namedChunkGroups } = stats;
73
- if (!namedChunkGroups) {
74
- return;
75
- }
76
- const entryChunks = this.getEntryChunks(compilation, chunks);
77
- const entryChunkFiles = entryChunks.map((chunk) => [
78
- ...chunk.files || []
79
- ].find((fname) => fname.includes(".js")));
80
- const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
81
- for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
82
- const file = entryChunkFiles[i];
83
- const chunkId = entryChunkFileIds[i];
84
- const asset = compilation.assets[file];
85
- if (!asset) {
86
- continue;
87
- }
88
- const { map } = asset.sourceAndMap();
89
- chunkToMap.set(chunkId, map);
90
- }
91
- });
92
- compilation.hooks.processAssets.tapPromise({
93
- name: PLUGIN_NAME,
94
- stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER
95
- }, async () => {
96
- const stats = compilation.getStats().toJson({
97
- all: false,
98
- chunkGroups: true,
99
- chunks: true,
100
- ids: true
101
- });
102
- const { chunks = [], namedChunkGroups } = stats;
103
- if (!namedChunkGroups) {
104
- return;
105
- }
106
- const entryChunks = this.getEntryChunks(compilation, chunks);
107
- const entryChunkFiles = entryChunks.map((chunk) => [
108
- ...chunk.files || []
109
- ].find((fname) => fname.includes(".js")));
110
- const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
111
- for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
112
- const file = entryChunkFiles[i];
113
- const chunkId = entryChunkFileIds[i];
114
- const asset = compilation.assets[file];
115
- if (!asset) {
116
- continue;
117
- }
118
- const { source } = asset.sourceAndMap();
119
- chunkToSource.set(chunkId, source);
120
- }
64
+ this.HtmlBundlerPlugin.getHooks(compilation).beforeEmit.tapAsync("RouterManifestPlugin", (data, callback) => {
65
+ const { outputName } = data;
66
+ const { chunks } = data.plugin.options;
67
+ chunksToHtmlName.set(chunks, outputName);
68
+ data.html = data.html.replace("</script>", `</script>${placeholder}`);
69
+ callback(null, data);
121
70
  });
122
71
  compilation.hooks.processAssets.tapPromise({
123
72
  name: PLUGIN_NAME,
@@ -164,11 +113,12 @@ class RouterPlugin {
164
113
  const manifest = {
165
114
  routeAssets
166
115
  };
116
+ const entryNames = Array.from(compilation.entrypoints.keys());
167
117
  const entryChunks = this.getEntryChunks(compilation, chunks);
168
118
  const entryChunkFiles = this.getEntryChunkFiles(entryChunks);
169
119
  const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
170
120
  for (let i = 0; i < entryChunkFiles.length; i++) {
171
- var _source, _source1;
121
+ const entryName = entryNames[i];
172
122
  const file = entryChunkFiles[i];
173
123
  const chunkNames = entryChunks[i].names;
174
124
  const chunkId = entryChunkFileIds[i];
@@ -204,21 +154,39 @@ class RouterPlugin {
204
154
  })};
205
155
  })();
206
156
  `;
207
- const source = chunkToSource.get(chunkId);
208
- const map = chunkToMap.get(chunkId);
209
- const newContent = `${injectedContent}${(_source = source) === null || _source === void 0 ? void 0 : _source.toString()}`;
210
- const result = await (0, _esbuild.transform)(newContent, {
211
- loader: _path.default.extname(file).slice(1),
212
- sourcemap: true,
213
- minify: minimize
214
- });
215
- const newSource = new SourceMapSource(result.code, file, result.map, (_source1 = source) === null || _source1 === void 0 ? void 0 : _source1.toString(), map);
216
- compilation.updateAsset(
217
- file,
218
- newSource,
219
- // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
220
- void 0
221
- );
157
+ let htmlName;
158
+ for (const [chunks2, name] of chunksToHtmlName.entries()) {
159
+ if (Array.isArray(chunkNames) && Array.isArray(chunks2) && chunkNames.every((value, index) => value === chunks2[index])) {
160
+ htmlName = name;
161
+ break;
162
+ }
163
+ }
164
+ const oldHtml = compilation.assets[htmlName];
165
+ const { enableInlineRouteManifests, disableFilenameHash, staticJsDir, scriptLoading, nonce } = this;
166
+ const nonceAttr = nonce ? `nonce="${nonce}"` : "";
167
+ if (enableInlineRouteManifests) {
168
+ compilation.updateAsset(
169
+ htmlName,
170
+ new RawSource(oldHtml.source().toString().replace(placeholder, `<script ${nonceAttr}>${injectedContent}</script>`)),
171
+ // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
172
+ void 0
173
+ );
174
+ } else {
175
+ const scriptPath = `${staticJsDir}/${ROUTE_MANIFEST_HOLDER}-${entryName}${disableFilenameHash ? ".js" : `.${generateContentHash(injectedContent)}.js`}`;
176
+ const scriptUrl = `${publicPath}${scriptPath}`;
177
+ const scriptLoadingAttr = (
178
+ // eslint-disable-next-line no-nested-ternary
179
+ scriptLoading === "defer" ? scriptLoading : scriptLoading === "module" ? `type="module"` : ""
180
+ );
181
+ const script = `<script ${scriptLoadingAttr} ${nonceAttr} src="${scriptUrl}"></script>`;
182
+ compilation.updateAsset(
183
+ htmlName,
184
+ new RawSource(oldHtml.source().toString().replace(placeholder, script)),
185
+ // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
186
+ void 0
187
+ );
188
+ compilation.emitAsset(scriptPath, new RawSource(injectedContent));
189
+ }
222
190
  }
223
191
  if (prevManifestAsset) {
224
192
  compilation.updateAsset(
@@ -233,4 +201,18 @@ class RouterPlugin {
233
201
  });
234
202
  });
235
203
  }
204
+ constructor({ staticJsDir = "static/js", HtmlBundlerPlugin, enableInlineRouteManifests, disableFilenameHash = false, scriptLoading = "defer", nonce }) {
205
+ _define_property._(this, "HtmlBundlerPlugin", void 0);
206
+ _define_property._(this, "enableInlineRouteManifests", void 0);
207
+ _define_property._(this, "staticJsDir", void 0);
208
+ _define_property._(this, "disableFilenameHash", void 0);
209
+ _define_property._(this, "scriptLoading", void 0);
210
+ _define_property._(this, "nonce", void 0);
211
+ this.HtmlBundlerPlugin = HtmlBundlerPlugin;
212
+ this.enableInlineRouteManifests = enableInlineRouteManifests;
213
+ this.staticJsDir = staticJsDir;
214
+ this.disableFilenameHash = disableFilenameHash;
215
+ this.scriptLoading = scriptLoading;
216
+ this.nonce = nonce;
217
+ }
236
218
  }
@@ -30,7 +30,8 @@ function createDefaultConfig(appContext, bundler) {
30
30
  };
31
31
  const output = {
32
32
  ...defaultBuilderConfig.output,
33
- disableNodePolyfill: true
33
+ disableNodePolyfill: true,
34
+ enableInlineRouteManifests: true
34
35
  };
35
36
  const source = {
36
37
  ...defaultBuilderConfig.source,
@@ -108,6 +108,9 @@ const output = {
108
108
  },
109
109
  disableNodePolyfill: {
110
110
  type: "boolean"
111
+ },
112
+ enableInlineRouteManifests: {
113
+ type: "boolean"
111
114
  }
112
115
  };
113
116
  const dev = {};
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -1,4 +1,6 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
+ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
2
4
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
5
  import { _ as _ts_values } from "@swc/helpers/_/_ts_values";
4
6
  import path from "path";
@@ -30,7 +32,7 @@ var findPartials = function(dir, entryName, position) {
30
32
  };
31
33
  export var getHtmlTemplate = function() {
32
34
  var _ref = _async_to_generator(function(entrypoints, api, param) {
33
- var appContext, config, appDirectory, internalDirectory, configDir, htmlDir, htmlTemplates, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err;
35
+ var appContext, config, appDirectory, internalDirectory, configDir, htmlDir, htmlTemplates, partialsByEntrypoint, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err;
34
36
  return _ts_generator(this, function(_state) {
35
37
  switch (_state.label) {
36
38
  case 0:
@@ -39,6 +41,7 @@ export var getHtmlTemplate = function() {
39
41
  configDir = config.source.configDir;
40
42
  htmlDir = path.resolve(appDirectory, configDir || "", HTML_PARTIALS_FOLDER);
41
43
  htmlTemplates = {};
44
+ partialsByEntrypoint = {};
42
45
  _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
43
46
  _state.label = 1;
44
47
  case 1:
@@ -95,6 +98,7 @@ export var getHtmlTemplate = function() {
95
98
  templatePath = path.resolve(internalDirectory, entryName, "index.html");
96
99
  fs.outputFileSync(templatePath, templates.html(partials), "utf8");
97
100
  htmlTemplates[entryName] = templatePath;
101
+ partialsByEntrypoint[entryName] = partials;
98
102
  bottomTemplate = findPartials(htmlDir, name, PartialPosition.BOTTOM);
99
103
  if (bottomTemplate) {
100
104
  htmlTemplates["__".concat(entryName, "-bottom__")] = bottomTemplate.content;
@@ -155,6 +159,9 @@ export var getHtmlTemplate = function() {
155
159
  7
156
160
  ];
157
161
  case 8:
162
+ api.setAppContext(_object_spread_props(_object_spread({}, api.useAppContext()), {
163
+ partialsByEntrypoint: partialsByEntrypoint
164
+ }));
158
165
  return [
159
166
  2,
160
167
  htmlTemplates
@@ -29,7 +29,7 @@ export var builderPluginAdapterSSR = function(options) {
29
29
  target = param.target, CHAIN_ID = param.CHAIN_ID, isProd = param.isProd, HtmlBundlerPlugin = param.HtmlPlugin, isServer = param.isServer;
30
30
  builderConfig = api.getNormalizedConfig();
31
31
  normalizedConfig2 = options.normalizedConfig;
32
- applyRouterPlugin(chain, options);
32
+ applyRouterPlugin(chain, options, HtmlBundlerPlugin);
33
33
  if (!isSSR(normalizedConfig2))
34
34
  return [
35
35
  3,
@@ -118,7 +118,7 @@ function applyAsyncChunkHtmlPlugin(param) {
118
118
  ]);
119
119
  }
120
120
  }
121
- function applyRouterPlugin(chain, options) {
121
+ function applyRouterPlugin(chain, options, HtmlBundlerPlugin) {
122
122
  var _normalizedConfig_runtime, _normalizedConfig, _routerConfig, _normalizedConfig_deploy_worker;
123
123
  var appContext = options.appContext, normalizedConfig = options.normalizedConfig;
124
124
  var entrypoints = appContext.entrypoints;
@@ -129,7 +129,17 @@ function applyRouterPlugin(chain, options) {
129
129
  var routerManifest = Boolean((_routerConfig = routerConfig) === null || _routerConfig === void 0 ? void 0 : _routerConfig.manifest);
130
130
  var workerSSR = Boolean((_normalizedConfig_deploy_worker = normalizedConfig.deploy.worker) === null || _normalizedConfig_deploy_worker === void 0 ? void 0 : _normalizedConfig_deploy_worker.ssr);
131
131
  if (existNestedRoutes || routerManifest || workerSSR) {
132
- chain.plugin("route-plugin").use(RouterPlugin);
132
+ var _normalizedConfig_output_distPath, _normalizedConfig_output, _normalizedConfig_output1, _normalizedConfig_html, _normalizedConfig_security;
133
+ chain.plugin("route-plugin").use(RouterPlugin, [
134
+ {
135
+ HtmlBundlerPlugin: HtmlBundlerPlugin,
136
+ enableInlineRouteManifests: normalizedConfig.output.enableInlineRouteManifests,
137
+ staticJsDir: (_normalizedConfig_output = normalizedConfig.output) === null || _normalizedConfig_output === void 0 ? void 0 : (_normalizedConfig_output_distPath = _normalizedConfig_output.distPath) === null || _normalizedConfig_output_distPath === void 0 ? void 0 : _normalizedConfig_output_distPath.js,
138
+ disableFilenameHash: (_normalizedConfig_output1 = normalizedConfig.output) === null || _normalizedConfig_output1 === void 0 ? void 0 : _normalizedConfig_output1.disableFilenameHash,
139
+ scriptLoading: (_normalizedConfig_html = normalizedConfig.html) === null || _normalizedConfig_html === void 0 ? void 0 : _normalizedConfig_html.scriptLoading,
140
+ nonce: (_normalizedConfig_security = normalizedConfig.security) === null || _normalizedConfig_security === void 0 ? void 0 : _normalizedConfig_security.nonce
141
+ }
142
+ ]);
133
143
  }
134
144
  }
135
145
  function applyFilterEntriesBySSRConfig(param) {