@modern-js/runtime 2.27.0 → 2.28.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 +10 -0
- package/dist/cjs/core/compatible.js +16 -17
- package/dist/cjs/core/loader/useLoader.js +10 -12
- package/dist/cjs/core/plugin.js +3 -2
- package/dist/cjs/document/Html.js +4 -3
- package/dist/cjs/document/cli/index.js +138 -138
- package/dist/cjs/router/cli/index.js +91 -92
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +4 -2
- package/dist/cjs/router/runtime/PrefetchLink.js +8 -4
- package/dist/cjs/router/runtime/plugin.js +4 -3
- package/dist/cjs/router/runtime/plugin.node.js +2 -1
- package/dist/cjs/router/runtime/utils.js +3 -3
- package/dist/cjs/ssr/cli/index.js +122 -123
- package/dist/cjs/ssr/index.js +105 -107
- package/dist/cjs/ssr/index.node.js +37 -38
- package/dist/cjs/ssr/prefetch.js +37 -39
- package/dist/cjs/ssr/react/prerender/util.js +4 -2
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +4 -2
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +8 -7
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +8 -6
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +2 -1
- package/dist/cjs/state/cli/index.js +70 -72
- package/dist/cjs/state/runtime/plugin.js +40 -42
- package/dist/esm/core/compatible.js +10 -9
- package/dist/esm/core/loader/useLoader.js +9 -9
- package/dist/esm/core/plugin.js +3 -2
- package/dist/esm/document/Html.js +4 -3
- package/dist/esm/document/cli/index.js +4 -3
- package/dist/esm/router/cli/index.js +2 -1
- package/dist/esm/router/runtime/DeferredDataScripts.node.js +4 -2
- package/dist/esm/router/runtime/PrefetchLink.js +8 -4
- package/dist/esm/router/runtime/plugin.js +4 -3
- package/dist/esm/router/runtime/plugin.node.js +2 -1
- package/dist/esm/router/runtime/utils.js +3 -3
- package/dist/esm/ssr/cli/index.js +7 -6
- package/dist/esm/ssr/index.js +6 -6
- package/dist/esm/ssr/index.node.js +2 -1
- package/dist/esm/ssr/prefetch.js +2 -2
- package/dist/esm/ssr/react/prerender/util.js +4 -2
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +4 -2
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +8 -7
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +7 -7
- package/dist/esm/ssr/serverRender/renderToString/loadable.js +2 -1
- package/dist/esm/state/runtime/plugin.js +2 -2
- package/dist/esm-node/core/compatible.js +16 -17
- package/dist/esm-node/core/loader/useLoader.js +10 -12
- package/dist/esm-node/core/plugin.js +3 -2
- package/dist/esm-node/document/Html.js +4 -3
- package/dist/esm-node/document/cli/index.js +138 -138
- package/dist/esm-node/router/cli/index.js +91 -92
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +4 -2
- package/dist/esm-node/router/runtime/PrefetchLink.js +8 -4
- package/dist/esm-node/router/runtime/plugin.js +4 -3
- package/dist/esm-node/router/runtime/plugin.node.js +2 -1
- package/dist/esm-node/router/runtime/utils.js +3 -3
- package/dist/esm-node/ssr/cli/index.js +122 -123
- package/dist/esm-node/ssr/cli/loadable-bundler-plugin.js +2 -2
- package/dist/esm-node/ssr/index.js +105 -107
- package/dist/esm-node/ssr/index.node.js +37 -38
- package/dist/esm-node/ssr/prefetch.js +37 -39
- package/dist/esm-node/ssr/react/prerender/util.js +4 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +4 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +8 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +8 -6
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +2 -1
- package/dist/esm-node/state/cli/index.js +70 -72
- package/dist/esm-node/state/runtime/plugin.js +40 -42
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @modern-js/runtime
|
|
2
2
|
|
|
3
|
+
## 2.28.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [4e3ce96]
|
|
8
|
+
- Updated dependencies [00b58a7]
|
|
9
|
+
- @modern-js/types@2.28.0
|
|
10
|
+
- @modern-js/utils@2.28.0
|
|
11
|
+
- @modern-js/plugin@2.28.0
|
|
12
|
+
|
|
3
13
|
## 2.27.0
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
|
@@ -72,15 +72,16 @@ const createApp = ({ plugins, props: globalProps }) => {
|
|
|
72
72
|
}, {
|
|
73
73
|
onLast: ({ App: App2 }) => {
|
|
74
74
|
const WrapComponent = ({ context, ...props }) => {
|
|
75
|
+
var _contextValue;
|
|
75
76
|
let contextValue = context;
|
|
76
|
-
if (!(contextValue === null ||
|
|
77
|
+
if (!((_contextValue = contextValue) === null || _contextValue === void 0 ? void 0 : _contextValue.runner)) {
|
|
77
78
|
contextValue = getInitialContext(runner);
|
|
78
79
|
runner.init({
|
|
79
80
|
context: contextValue
|
|
80
81
|
}, {
|
|
81
82
|
onLast: ({ context: context1 }) => {
|
|
82
|
-
var _App_init;
|
|
83
|
-
return App2 === null ||
|
|
83
|
+
var _App_init, _App;
|
|
84
|
+
return (_App = App2) === null || _App === void 0 ? void 0 : (_App_init = _App.init) === null || _App_init === void 0 ? void 0 : _App_init.call(_App, context1);
|
|
84
85
|
}
|
|
85
86
|
});
|
|
86
87
|
}
|
|
@@ -112,16 +113,14 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
|
|
|
112
113
|
runner = runnerMap.get(App);
|
|
113
114
|
}
|
|
114
115
|
const context = getInitialContext(runner);
|
|
115
|
-
const runInit = (_context) => {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
});
|
|
124
|
-
};
|
|
116
|
+
const runInit = (_context) => runner.init({
|
|
117
|
+
context: _context
|
|
118
|
+
}, {
|
|
119
|
+
onLast: ({ context: context1 }) => {
|
|
120
|
+
var _App_init, _App;
|
|
121
|
+
return (_App = App) === null || _App === void 0 ? void 0 : (_App_init = _App.init) === null || _App_init === void 0 ? void 0 : _App_init.call(_App, context1);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
125
124
|
if (!id) {
|
|
126
125
|
return /* @__PURE__ */ _react.default.createElement(App, {
|
|
127
126
|
context
|
|
@@ -130,9 +129,9 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
|
|
|
130
129
|
const isBrowser = typeof window !== "undefined" && window.name !== "nodejs";
|
|
131
130
|
if (isBrowser) {
|
|
132
131
|
if (isClientArgs(id)) {
|
|
133
|
-
var _ssrData_data, _ssrData_data1;
|
|
132
|
+
var _ssrData_data, _ssrData, _ssrData1, _ssrData_data1, _ssrData2;
|
|
134
133
|
const ssrData = window._SSR_DATA;
|
|
135
|
-
const loadersData = (ssrData === null ||
|
|
134
|
+
const loadersData = ((_ssrData = ssrData) === null || _ssrData === void 0 ? void 0 : (_ssrData_data = _ssrData.data) === null || _ssrData_data === void 0 ? void 0 : _ssrData_data.loadersData) || {};
|
|
136
135
|
const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
|
|
137
136
|
const loaderData = loadersData[key];
|
|
138
137
|
if (loaderData.loading !== false) {
|
|
@@ -146,10 +145,10 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
|
|
|
146
145
|
skipStatic: true
|
|
147
146
|
}),
|
|
148
147
|
...ssrData ? {
|
|
149
|
-
ssrContext: ssrData === null ||
|
|
148
|
+
ssrContext: (_ssrData1 = ssrData) === null || _ssrData1 === void 0 ? void 0 : _ssrData1.context
|
|
150
149
|
} : {}
|
|
151
150
|
});
|
|
152
|
-
context.initialData = ssrData === null ||
|
|
151
|
+
context.initialData = (_ssrData2 = ssrData) === null || _ssrData2 === void 0 ? void 0 : (_ssrData_data1 = _ssrData2.data) === null || _ssrData_data1 === void 0 ? void 0 : _ssrData_data1.initialData;
|
|
153
152
|
const initialData = await runInit(context);
|
|
154
153
|
if (initialData) {
|
|
155
154
|
context.initialData = initialData;
|
|
@@ -25,7 +25,7 @@ const useLoader = (loaderFn, options = {
|
|
|
25
25
|
delete options._cache;
|
|
26
26
|
}
|
|
27
27
|
const load = (0, _react.useCallback)((params) => {
|
|
28
|
-
var _unlistenLoaderChangeRef_current, _window__SSR_DATA_data_loadersData_id, _window__SSR_DATA,
|
|
28
|
+
var _unlistenLoaderChangeRef_current, _unlistenLoaderChangeRef, _window__SSR_DATA_data_loadersData_id, _window__SSR_DATA_data, _window__SSR_DATA, _window, _loaderRef_current;
|
|
29
29
|
if (typeof params === "undefined") {
|
|
30
30
|
var _loaderRef_current1;
|
|
31
31
|
return (_loaderRef_current1 = loaderRef.current) === null || _loaderRef_current1 === void 0 ? void 0 : _loaderRef_current1.load();
|
|
@@ -45,37 +45,35 @@ const useLoader = (loaderFn, options = {
|
|
|
45
45
|
params
|
|
46
46
|
});
|
|
47
47
|
loaderRef.current = loaderManager.get(id);
|
|
48
|
-
(_unlistenLoaderChangeRef_current = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChangeRef_current === void 0 ? void 0 : _unlistenLoaderChangeRef_current.call(
|
|
48
|
+
(_unlistenLoaderChangeRef_current = (_unlistenLoaderChangeRef = unlistenLoaderChangeRef).current) === null || _unlistenLoaderChangeRef_current === void 0 ? void 0 : _unlistenLoaderChangeRef_current.call(_unlistenLoaderChangeRef);
|
|
49
49
|
if (isSSRRender) {
|
|
50
50
|
return void 0;
|
|
51
51
|
}
|
|
52
52
|
if (options.skip) {
|
|
53
53
|
return void 0;
|
|
54
54
|
}
|
|
55
|
-
if (context._hydration && ((
|
|
55
|
+
if (context._hydration && ((_window = window) === null || _window === void 0 ? void 0 : (_window__SSR_DATA = _window._SSR_DATA) === null || _window__SSR_DATA === void 0 ? void 0 : (_window__SSR_DATA_data = _window__SSR_DATA.data) === null || _window__SSR_DATA_data === void 0 ? void 0 : (_window__SSR_DATA_data_loadersData_id = _window__SSR_DATA_data.loadersData[id]) === null || _window__SSR_DATA_data_loadersData_id === void 0 ? void 0 : _window__SSR_DATA_data_loadersData_id.error) === null) {
|
|
56
56
|
return void 0;
|
|
57
57
|
}
|
|
58
58
|
const res = loaderRef.current.load();
|
|
59
59
|
unlistenLoaderChangeRef.current = (_loaderRef_current = loaderRef.current) === null || _loaderRef_current === void 0 ? void 0 : _loaderRef_current.onChange((_status, _result) => {
|
|
60
60
|
setResult(_result);
|
|
61
61
|
if (_status === _loaderManager.LoaderStatus.fulfilled) {
|
|
62
|
-
var _options_onSuccess;
|
|
63
|
-
options === null ||
|
|
62
|
+
var _options_onSuccess, _options;
|
|
63
|
+
(_options = options) === null || _options === void 0 ? void 0 : (_options_onSuccess = _options.onSuccess) === null || _options_onSuccess === void 0 ? void 0 : _options_onSuccess.call(_options, _result.data);
|
|
64
64
|
}
|
|
65
65
|
if (_status === _loaderManager.LoaderStatus.rejected) {
|
|
66
|
-
var _options_onError;
|
|
67
|
-
options === null ||
|
|
66
|
+
var _options_onError, _options1;
|
|
67
|
+
(_options1 = options) === null || _options1 === void 0 ? void 0 : (_options_onError = _options1.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(_options1, _result.error);
|
|
68
68
|
}
|
|
69
69
|
});
|
|
70
70
|
return res;
|
|
71
71
|
}, [
|
|
72
72
|
options.skip
|
|
73
73
|
]);
|
|
74
|
-
(0, _react.useEffect)(() => {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
(_unlistenLoaderChangeRef_current = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChangeRef_current === void 0 ? void 0 : _unlistenLoaderChangeRef_current.call(unlistenLoaderChangeRef);
|
|
78
|
-
};
|
|
74
|
+
(0, _react.useEffect)(() => () => {
|
|
75
|
+
var _unlistenLoaderChangeRef_current, _unlistenLoaderChangeRef;
|
|
76
|
+
(_unlistenLoaderChangeRef_current = (_unlistenLoaderChangeRef = unlistenLoaderChangeRef).current) === null || _unlistenLoaderChangeRef_current === void 0 ? void 0 : _unlistenLoaderChangeRef_current.call(_unlistenLoaderChangeRef);
|
|
79
77
|
}, []);
|
|
80
78
|
(0, _react.useMemo)(() => {
|
|
81
79
|
var _options_params;
|
package/dist/cjs/core/plugin.js
CHANGED
|
@@ -43,12 +43,13 @@ const createRuntime = () => (0, _plugin.createManager)(runtimeHooks);
|
|
|
43
43
|
const registerInit = (App, _init) => {
|
|
44
44
|
const originalInit = App.init;
|
|
45
45
|
App.init = async (context) => {
|
|
46
|
+
var _originalInit, _init1;
|
|
46
47
|
if (!context.loaderManager) {
|
|
47
48
|
context.loaderManager = (0, _loaderManager.createLoaderManager)({});
|
|
48
49
|
}
|
|
49
50
|
await Promise.all([
|
|
50
|
-
originalInit === null ||
|
|
51
|
-
_init === null ||
|
|
51
|
+
(_originalInit = originalInit) === null || _originalInit === void 0 ? void 0 : _originalInit(context),
|
|
52
|
+
(_init1 = _init) === null || _init1 === void 0 ? void 0 : _init1(context)
|
|
52
53
|
]);
|
|
53
54
|
};
|
|
54
55
|
};
|
|
@@ -18,7 +18,8 @@ function findTargetChild(tag, children) {
|
|
|
18
18
|
return children.find((item) => getEleType(item) === tag);
|
|
19
19
|
}
|
|
20
20
|
function getEleType(ele) {
|
|
21
|
-
|
|
21
|
+
var _ele, _ele1;
|
|
22
|
+
return typeof ((_ele = ele) === null || _ele === void 0 ? void 0 : _ele.type) === "function" ? ele.type.name : (_ele1 = ele) === null || _ele1 === void 0 ? void 0 : _ele1.type;
|
|
22
23
|
}
|
|
23
24
|
function findTargetElement(tag, children) {
|
|
24
25
|
if (children.length === 0) {
|
|
@@ -26,11 +27,11 @@ function findTargetElement(tag, children) {
|
|
|
26
27
|
}
|
|
27
28
|
let nextChildren = [];
|
|
28
29
|
for (const item of children) {
|
|
29
|
-
var _item_props;
|
|
30
|
+
var _item_props, _item;
|
|
30
31
|
if (tag === getEleType(item)) {
|
|
31
32
|
return item;
|
|
32
33
|
}
|
|
33
|
-
if (item === null ||
|
|
34
|
+
if ((_item = item) === null || _item === void 0 ? void 0 : (_item_props = _item.props) === null || _item_props === void 0 ? void 0 : _item_props.children) {
|
|
34
35
|
nextChildren = nextChildren.concat(item.props.children);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
@@ -44,148 +44,148 @@ const getDocumenByEntryName = function(entrypoints, entryName, fallbackDir) {
|
|
|
44
44
|
]);
|
|
45
45
|
return docFile || void 0;
|
|
46
46
|
};
|
|
47
|
-
const documentPlugin = () => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
47
|
+
const documentPlugin = () => ({
|
|
48
|
+
name: "@modern-js/plugin-document",
|
|
49
|
+
pre: [
|
|
50
|
+
"@modern-js/plugin-analyze"
|
|
51
|
+
],
|
|
52
|
+
setup: async (api) => {
|
|
53
|
+
function getDocParams(params) {
|
|
54
|
+
const { config, templateParameters, entryName } = params;
|
|
55
|
+
return {
|
|
56
|
+
processEnv: process.env,
|
|
57
|
+
config: {
|
|
58
|
+
output: config.output
|
|
59
|
+
},
|
|
60
|
+
entryName,
|
|
61
|
+
templateParams: templateParameters
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const documentEntry = (entryName, templateParameters) => {
|
|
65
|
+
const { entrypoints, internalDirectory, appDirectory } = api.useAppContext();
|
|
66
|
+
const documentFilePath = getDocumenByEntryName(entrypoints, entryName, appDirectory);
|
|
67
|
+
if (!documentFilePath) {
|
|
68
|
+
return null;
|
|
64
69
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
return async ({ htmlWebpackPlugin }) => {
|
|
71
|
+
var _tsConfig;
|
|
72
|
+
const config = api.useResolvedConfigContext();
|
|
73
|
+
const documentParams = getDocParams({
|
|
74
|
+
config,
|
|
75
|
+
entryName,
|
|
76
|
+
templateParameters
|
|
77
|
+
});
|
|
78
|
+
const tempTsConfigFile = _path.default.join(internalDirectory, `./document/_tempTsconfig.json`);
|
|
79
|
+
const userTsConfigFilePath = _path.default.join(appDirectory, "tsconfig.json");
|
|
80
|
+
let tsConfig;
|
|
81
|
+
try {
|
|
82
|
+
tsConfig = await require(userTsConfigFilePath);
|
|
83
|
+
} catch (err) {
|
|
84
|
+
tsConfig = {};
|
|
70
85
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
{
|
|
111
|
-
name: "make-all-packages-external",
|
|
112
|
-
setup(build) {
|
|
113
|
-
build.onResolve({
|
|
114
|
-
filter: /^[^./]|^\.[^./]|^\.\.[^/]/
|
|
115
|
-
}, (args) => {
|
|
116
|
-
let external = true;
|
|
117
|
-
if (args.kind === "entry-point") {
|
|
118
|
-
external = false;
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
path: args.path,
|
|
122
|
-
external
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
]
|
|
128
|
-
});
|
|
129
|
-
delete require.cache[require.resolve(htmlOutputFile)];
|
|
130
|
-
const Document = (await require(htmlOutputFile)).default;
|
|
131
|
-
const HTMLElement = _react.default.createElement(_DocumentContext.DocumentContext.Provider, {
|
|
132
|
-
value: documentParams
|
|
133
|
-
}, _react.default.createElement(Document, null));
|
|
134
|
-
let html = _server.default.renderToStaticMarkup(HTMLElement);
|
|
135
|
-
debug("entry %s's document jsx rendered html: %o", entryName, html);
|
|
136
|
-
const scripts = [
|
|
137
|
-
htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "script").join(""),
|
|
138
|
-
htmlWebpackPlugin.tags.bodyTags.toString()
|
|
139
|
-
].join("");
|
|
140
|
-
const links = [
|
|
141
|
-
htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "link").join("")
|
|
142
|
-
].join("");
|
|
143
|
-
const metas = [
|
|
144
|
-
templateParameters.meta,
|
|
145
|
-
htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName !== "script" && item.tagName !== "link").join("")
|
|
146
|
-
].join("");
|
|
147
|
-
if (html.includes(_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
|
|
148
|
-
const { nonce } = config.security;
|
|
149
|
-
const nonceAttr = nonce ? `nonce=${nonce}` : "";
|
|
150
|
-
html = html.replace(new RegExp(`${_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `<script ${nonceAttr}>${decodeURIComponent($1)}</script>`);
|
|
151
|
-
}
|
|
152
|
-
if (html.includes(_constants.DOCUMENT_STYLE_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_STYLE_PLACEHOLDER_END)) {
|
|
153
|
-
html = html.replace(new RegExp(`${_constants.DOCUMENT_STYLE_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_STYLE_PLACEHOLDER_END}`, "g"), (_styleStr, $1) => `<style>${decodeURIComponent($1)}</style>`);
|
|
154
|
-
}
|
|
155
|
-
if (html.includes(_constants.DOCUMENT_COMMENT_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_COMMENT_PLACEHOLDER_END)) {
|
|
156
|
-
html = html.replace(new RegExp(`${_constants.DOCUMENT_COMMENT_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_COMMENT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `${decodeURIComponent($1)}`);
|
|
157
|
-
}
|
|
158
|
-
const finalHtml = `<!DOCTYPE html>${html}`.replace(_constants.DOCUMENT_META_PLACEHOLDER, metas).replace(_constants.DOCUMENT_SSR_PLACEHOLDER, _constants.HTML_SEPARATOR).replace(_constants.DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(_constants.DOCUMENT_LINKS_PLACEHOLDER, links).replace(_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER, _constants.PLACEHOLDER_REPLACER_MAP[_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, _constants.PLACEHOLDER_REPLACER_MAP[_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]);
|
|
159
|
-
return finalHtml;
|
|
160
|
-
};
|
|
161
|
-
};
|
|
162
|
-
return {
|
|
163
|
-
config: () => {
|
|
164
|
-
return {
|
|
165
|
-
tools: {
|
|
166
|
-
htmlPlugin: (options, entry) => {
|
|
167
|
-
const hackParameters = typeof (options === null || options === void 0 ? void 0 : options.templateParameters) === "function" ? options === null || options === void 0 ? void 0 : options.templateParameters({}, {}, {}, {}) : {
|
|
168
|
-
...options === null || options === void 0 ? void 0 : options.templateParameters
|
|
169
|
-
};
|
|
170
|
-
const templateContent = documentEntry(
|
|
171
|
-
entry.entryName,
|
|
172
|
-
// options,
|
|
173
|
-
hackParameters
|
|
174
|
-
);
|
|
175
|
-
const documentHtmlOptions = templateContent ? {
|
|
176
|
-
templateContent,
|
|
177
|
-
inject: false
|
|
178
|
-
} : {};
|
|
179
|
-
return {
|
|
180
|
-
...options,
|
|
181
|
-
...documentHtmlOptions
|
|
182
|
-
};
|
|
86
|
+
if ((_tsConfig = tsConfig) === null || _tsConfig === void 0 ? void 0 : _tsConfig.compilerOptions) {
|
|
87
|
+
tsConfig.compilerOptions.jsx = "react-jsx";
|
|
88
|
+
} else {
|
|
89
|
+
tsConfig.compilerOptions = {
|
|
90
|
+
jsx: "react-jsx"
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
_utils.fs.outputFileSync(tempTsConfigFile, JSON.stringify(tsConfig));
|
|
94
|
+
const htmlOutputFile = _path.default.join(internalDirectory, `./document/_${entryName}.html.js`);
|
|
95
|
+
await (0, _esbuild.build)({
|
|
96
|
+
entryPoints: [
|
|
97
|
+
documentFilePath
|
|
98
|
+
],
|
|
99
|
+
outfile: htmlOutputFile,
|
|
100
|
+
platform: "node",
|
|
101
|
+
// change esbuild use the rootDir tsconfig.json as default to tempTsConfigFile
|
|
102
|
+
tsconfig: tempTsConfigFile,
|
|
103
|
+
target: "es6",
|
|
104
|
+
loader: {
|
|
105
|
+
".ts": "ts",
|
|
106
|
+
".tsx": "tsx"
|
|
107
|
+
},
|
|
108
|
+
bundle: true,
|
|
109
|
+
plugins: [
|
|
110
|
+
{
|
|
111
|
+
name: "make-all-packages-external",
|
|
112
|
+
setup(build) {
|
|
113
|
+
build.onResolve({
|
|
114
|
+
filter: /^[^./]|^\.[^./]|^\.\.[^/]/
|
|
115
|
+
}, (args) => {
|
|
116
|
+
let external = true;
|
|
117
|
+
if (args.kind === "entry-point") {
|
|
118
|
+
external = false;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
path: args.path,
|
|
122
|
+
external
|
|
123
|
+
};
|
|
124
|
+
});
|
|
183
125
|
}
|
|
184
126
|
}
|
|
185
|
-
|
|
127
|
+
]
|
|
128
|
+
});
|
|
129
|
+
delete require.cache[require.resolve(htmlOutputFile)];
|
|
130
|
+
const Document = (await require(htmlOutputFile)).default;
|
|
131
|
+
const HTMLElement = _react.default.createElement(_DocumentContext.DocumentContext.Provider, {
|
|
132
|
+
value: documentParams
|
|
133
|
+
}, _react.default.createElement(Document, null));
|
|
134
|
+
let html = _server.default.renderToStaticMarkup(HTMLElement);
|
|
135
|
+
debug("entry %s's document jsx rendered html: %o", entryName, html);
|
|
136
|
+
const scripts = [
|
|
137
|
+
htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "script").join(""),
|
|
138
|
+
htmlWebpackPlugin.tags.bodyTags.toString()
|
|
139
|
+
].join("");
|
|
140
|
+
const links = [
|
|
141
|
+
htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "link").join("")
|
|
142
|
+
].join("");
|
|
143
|
+
const metas = [
|
|
144
|
+
templateParameters.meta,
|
|
145
|
+
htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName !== "script" && item.tagName !== "link").join("")
|
|
146
|
+
].join("");
|
|
147
|
+
if (html.includes(_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
|
|
148
|
+
const { nonce } = config.security;
|
|
149
|
+
const nonceAttr = nonce ? `nonce=${nonce}` : "";
|
|
150
|
+
html = html.replace(new RegExp(`${_constants.DOCUMENT_SCRIPT_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_SCRIPT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `<script ${nonceAttr}>${decodeURIComponent($1)}</script>`);
|
|
151
|
+
}
|
|
152
|
+
if (html.includes(_constants.DOCUMENT_STYLE_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_STYLE_PLACEHOLDER_END)) {
|
|
153
|
+
html = html.replace(new RegExp(`${_constants.DOCUMENT_STYLE_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_STYLE_PLACEHOLDER_END}`, "g"), (_styleStr, $1) => `<style>${decodeURIComponent($1)}</style>`);
|
|
186
154
|
}
|
|
155
|
+
if (html.includes(_constants.DOCUMENT_COMMENT_PLACEHOLDER_START) && html.includes(_constants.DOCUMENT_COMMENT_PLACEHOLDER_END)) {
|
|
156
|
+
html = html.replace(new RegExp(`${_constants.DOCUMENT_COMMENT_PLACEHOLDER_START}(.*?)${_constants.DOCUMENT_COMMENT_PLACEHOLDER_END}`, "g"), (_scriptStr, $1) => `${decodeURIComponent($1)}`);
|
|
157
|
+
}
|
|
158
|
+
const finalHtml = `<!DOCTYPE html>${html}`.replace(_constants.DOCUMENT_META_PLACEHOLDER, metas).replace(_constants.DOCUMENT_SSR_PLACEHOLDER, _constants.HTML_SEPARATOR).replace(_constants.DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(_constants.DOCUMENT_LINKS_PLACEHOLDER, links).replace(_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER, _constants.PLACEHOLDER_REPLACER_MAP[_constants.DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, _constants.PLACEHOLDER_REPLACER_MAP[_constants.DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]);
|
|
159
|
+
return finalHtml;
|
|
187
160
|
};
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
161
|
+
};
|
|
162
|
+
return {
|
|
163
|
+
config: () => {
|
|
164
|
+
return {
|
|
165
|
+
tools: {
|
|
166
|
+
htmlPlugin: (options, entry) => {
|
|
167
|
+
var _options, _options1, _options2;
|
|
168
|
+
const hackParameters = typeof ((_options = options) === null || _options === void 0 ? void 0 : _options.templateParameters) === "function" ? (_options1 = options) === null || _options1 === void 0 ? void 0 : _options1.templateParameters({}, {}, {}, {}) : {
|
|
169
|
+
...(_options2 = options) === null || _options2 === void 0 ? void 0 : _options2.templateParameters
|
|
170
|
+
};
|
|
171
|
+
const templateContent = documentEntry(
|
|
172
|
+
entry.entryName,
|
|
173
|
+
// options,
|
|
174
|
+
hackParameters
|
|
175
|
+
);
|
|
176
|
+
const documentHtmlOptions = templateContent ? {
|
|
177
|
+
templateContent,
|
|
178
|
+
inject: false
|
|
179
|
+
} : {};
|
|
180
|
+
return {
|
|
181
|
+
...options,
|
|
182
|
+
...documentHtmlOptions
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
191
|
const _default = documentPlugin;
|