@modern-js/runtime 2.27.1-alpha.0 → 2.29.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 (95) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/cjs/core/compatible.js +16 -17
  3. package/dist/cjs/core/loader/useLoader.js +10 -12
  4. package/dist/cjs/core/plugin.js +3 -2
  5. package/dist/cjs/document/Html.js +4 -3
  6. package/dist/cjs/document/cli/index.js +139 -138
  7. package/dist/cjs/router/cli/index.js +91 -92
  8. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +4 -2
  9. package/dist/cjs/router/runtime/PrefetchLink.js +8 -4
  10. package/dist/cjs/router/runtime/plugin.js +10 -3
  11. package/dist/cjs/router/runtime/plugin.node.js +2 -1
  12. package/dist/cjs/router/runtime/utils.js +3 -3
  13. package/dist/cjs/ssr/cli/index.js +122 -123
  14. package/dist/cjs/ssr/index.js +105 -107
  15. package/dist/cjs/ssr/index.node.js +37 -38
  16. package/dist/cjs/ssr/prefetch.js +37 -39
  17. package/dist/cjs/ssr/react/prerender/util.js +4 -2
  18. package/dist/cjs/ssr/serverRender/constants.js +16 -0
  19. package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +4 -2
  20. package/dist/cjs/ssr/serverRender/renderToStream/index.js +1 -1
  21. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +8 -7
  22. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +8 -6
  23. package/dist/cjs/ssr/serverRender/renderToString/entry.js +18 -3
  24. package/dist/cjs/ssr/serverRender/renderToString/index.js +4 -1
  25. package/dist/cjs/ssr/serverRender/renderToString/loadable.js +2 -1
  26. package/dist/cjs/ssr/serverRender/reporter.js +27 -0
  27. package/dist/cjs/state/cli/index.js +70 -72
  28. package/dist/cjs/state/runtime/plugin.js +40 -42
  29. package/dist/esm/core/compatible.js +10 -9
  30. package/dist/esm/core/loader/useLoader.js +9 -9
  31. package/dist/esm/core/plugin.js +3 -2
  32. package/dist/esm/document/Html.js +4 -3
  33. package/dist/esm/document/cli/index.js +5 -3
  34. package/dist/esm/router/cli/index.js +2 -1
  35. package/dist/esm/router/runtime/DeferredDataScripts.node.js +4 -2
  36. package/dist/esm/router/runtime/PrefetchLink.js +8 -4
  37. package/dist/esm/router/runtime/plugin.js +10 -3
  38. package/dist/esm/router/runtime/plugin.node.js +2 -1
  39. package/dist/esm/router/runtime/utils.js +3 -3
  40. package/dist/esm/ssr/cli/index.js +7 -6
  41. package/dist/esm/ssr/index.js +6 -6
  42. package/dist/esm/ssr/index.node.js +2 -1
  43. package/dist/esm/ssr/prefetch.js +2 -2
  44. package/dist/esm/ssr/react/prerender/util.js +4 -2
  45. package/dist/esm/ssr/serverRender/constants.js +6 -0
  46. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +4 -2
  47. package/dist/esm/ssr/serverRender/renderToStream/index.js +1 -1
  48. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +8 -7
  49. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +7 -7
  50. package/dist/esm/ssr/serverRender/renderToString/entry.js +19 -4
  51. package/dist/esm/ssr/serverRender/renderToString/index.js +4 -1
  52. package/dist/esm/ssr/serverRender/renderToString/loadable.js +2 -1
  53. package/dist/esm/ssr/serverRender/reporter.js +17 -0
  54. package/dist/esm/state/runtime/plugin.js +2 -2
  55. package/dist/esm-node/core/compatible.js +16 -17
  56. package/dist/esm-node/core/loader/useLoader.js +10 -12
  57. package/dist/esm-node/core/plugin.js +3 -2
  58. package/dist/esm-node/document/Html.js +4 -3
  59. package/dist/esm-node/document/cli/index.js +139 -138
  60. package/dist/esm-node/router/cli/index.js +91 -92
  61. package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +4 -2
  62. package/dist/esm-node/router/runtime/PrefetchLink.js +8 -4
  63. package/dist/esm-node/router/runtime/plugin.js +10 -3
  64. package/dist/esm-node/router/runtime/plugin.node.js +2 -1
  65. package/dist/esm-node/router/runtime/utils.js +3 -3
  66. package/dist/esm-node/ssr/cli/index.js +122 -123
  67. package/dist/esm-node/ssr/cli/loadable-bundler-plugin.js +2 -2
  68. package/dist/esm-node/ssr/index.js +105 -107
  69. package/dist/esm-node/ssr/index.node.js +37 -38
  70. package/dist/esm-node/ssr/prefetch.js +37 -39
  71. package/dist/esm-node/ssr/react/prerender/util.js +4 -2
  72. package/dist/esm-node/ssr/serverRender/constants.js +6 -0
  73. package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +4 -2
  74. package/dist/esm-node/ssr/serverRender/renderToStream/index.js +1 -1
  75. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +8 -7
  76. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +8 -6
  77. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +18 -3
  78. package/dist/esm-node/ssr/serverRender/renderToString/index.js +4 -1
  79. package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +2 -1
  80. package/dist/esm-node/ssr/serverRender/reporter.js +17 -0
  81. package/dist/esm-node/state/cli/index.js +70 -72
  82. package/dist/esm-node/state/runtime/plugin.js +40 -42
  83. package/dist/types/router/runtime/types.d.ts +3 -0
  84. package/dist/types/ssr/serverRender/constants.d.ts +5 -0
  85. package/dist/types/ssr/serverRender/renderToString/entry.d.ts +3 -0
  86. package/dist/types/ssr/serverRender/reporter.d.ts +8 -0
  87. package/package.json +9 -9
  88. package/dist/cjs/ssr/serverRender/time.js +0 -20
  89. package/dist/cjs/ssr/serverRender/time.worker.js +0 -38
  90. package/dist/esm/ssr/serverRender/time.js +0 -11
  91. package/dist/esm/ssr/serverRender/time.worker.js +0 -29
  92. package/dist/esm-node/ssr/serverRender/time.js +0 -10
  93. package/dist/esm-node/ssr/serverRender/time.worker.js +0 -28
  94. package/dist/types/ssr/serverRender/time.d.ts +0 -1
  95. package/dist/types/ssr/serverRender/time.worker.d.ts +0 -1
@@ -28,128 +28,126 @@ const _withCallback = require("./react/withCallback");
28
28
  const _utils = require("./utils");
29
29
  const _utils1 = require("./serverRender/utils");
30
30
  _export_star._(require("./react"), exports);
31
- const ssr = (config) => {
32
- return {
33
- name: "@modern-js/plugin-ssr",
34
- setup: () => {
35
- const mockResp = (0, _utils.mockResponse)();
36
- if (config.inlineScript === false) {
37
- window._SSR_DATA = (0, _runtimebrowser.parsedJSONFromElement)(_utils1.SSR_DATA_JSON_ID);
38
- window._ROUTER_DATA = (0, _runtimebrowser.parsedJSONFromElement)(_utils1.ROUTER_DATA_JSON_ID);
39
- }
40
- return {
41
- client: async ({ App, context, ModernRender, ModernHydrate }) => {
42
- var _window__SSR_DATA;
43
- const hydrateContext = {
44
- ...context,
45
- get routes() {
46
- return context.routes;
47
- },
48
- _hydration: true
49
- };
50
- const callback = () => {
51
- delete hydrateContext._hydration;
52
- };
53
- const renderLevel = (window === null || window === void 0 ? void 0 : (_window__SSR_DATA = window._SSR_DATA) === null || _window__SSR_DATA === void 0 ? void 0 : _window__SSR_DATA.renderLevel) || _types.RenderLevel.CLIENT_RENDER;
54
- if ((0, _utils.isReact18)() && config.mode === "stream") {
55
- return streamSSRHydrate();
56
- }
57
- return stringSSRHydrate();
58
- function stringSSRHydrate() {
59
- if (renderLevel === _types.RenderLevel.CLIENT_RENDER || renderLevel === _types.RenderLevel.SERVER_PREFETCH) {
60
- ModernRender(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
61
- context
62
- }));
63
- } else if (renderLevel === _types.RenderLevel.SERVER_RENDER) {
64
- const loadableReadyOptions = {
65
- chunkLoadingGlobal: config.chunkLoadingGlobal
66
- };
67
- if ((0, _utils.isReact18)()) {
68
- (0, _component.loadableReady)(() => {
69
- let SSRApp = () => /* @__PURE__ */ (0, _jsxruntime.jsx)(_withCallback.WithCallback, {
70
- callback,
71
- children: /* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
72
- context: hydrateContext
73
- })
74
- });
75
- SSRApp = (0, _hoistnonreactstatics.default)(SSRApp, App);
76
- ModernHydrate(/* @__PURE__ */ (0, _jsxruntime.jsx)(SSRApp, {}));
77
- }, loadableReadyOptions);
78
- } else {
79
- (0, _component.loadableReady)(() => {
80
- ModernHydrate(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
31
+ const ssr = (config) => ({
32
+ name: "@modern-js/plugin-ssr",
33
+ setup: () => {
34
+ const mockResp = (0, _utils.mockResponse)();
35
+ if (config.inlineScript === false) {
36
+ window._SSR_DATA = (0, _runtimebrowser.parsedJSONFromElement)(_utils1.SSR_DATA_JSON_ID);
37
+ window._ROUTER_DATA = (0, _runtimebrowser.parsedJSONFromElement)(_utils1.ROUTER_DATA_JSON_ID);
38
+ }
39
+ return {
40
+ client: async ({ App, context, ModernRender, ModernHydrate }) => {
41
+ var _window__SSR_DATA, _window;
42
+ const hydrateContext = {
43
+ ...context,
44
+ get routes() {
45
+ return context.routes;
46
+ },
47
+ _hydration: true
48
+ };
49
+ const callback = () => {
50
+ delete hydrateContext._hydration;
51
+ };
52
+ const renderLevel = ((_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.renderLevel) || _types.RenderLevel.CLIENT_RENDER;
53
+ if ((0, _utils.isReact18)() && config.mode === "stream") {
54
+ return streamSSRHydrate();
55
+ }
56
+ return stringSSRHydrate();
57
+ function stringSSRHydrate() {
58
+ if (renderLevel === _types.RenderLevel.CLIENT_RENDER || renderLevel === _types.RenderLevel.SERVER_PREFETCH) {
59
+ ModernRender(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
60
+ context
61
+ }));
62
+ } else if (renderLevel === _types.RenderLevel.SERVER_RENDER) {
63
+ const loadableReadyOptions = {
64
+ chunkLoadingGlobal: config.chunkLoadingGlobal
65
+ };
66
+ if ((0, _utils.isReact18)()) {
67
+ (0, _component.loadableReady)(() => {
68
+ let SSRApp = () => /* @__PURE__ */ (0, _jsxruntime.jsx)(_withCallback.WithCallback, {
69
+ callback,
70
+ children: /* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
81
71
  context: hydrateContext
82
- }), callback);
83
- }, loadableReadyOptions);
84
- }
72
+ })
73
+ });
74
+ SSRApp = (0, _hoistnonreactstatics.default)(SSRApp, App);
75
+ ModernHydrate(/* @__PURE__ */ (0, _jsxruntime.jsx)(SSRApp, {}));
76
+ }, loadableReadyOptions);
85
77
  } else {
86
- console.warn(`unknow render level: ${renderLevel}, execute render()`);
87
- ModernRender(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
88
- context
89
- }));
90
- }
91
- }
92
- function streamSSRHydrate() {
93
- if (renderLevel === _types.RenderLevel.SERVER_RENDER) {
94
- let SSRApp = () => /* @__PURE__ */ (0, _jsxruntime.jsx)(_withCallback.WithCallback, {
95
- callback,
96
- children: /* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
78
+ (0, _component.loadableReady)(() => {
79
+ ModernHydrate(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
97
80
  context: hydrateContext
98
- })
99
- });
100
- SSRApp = (0, _hoistnonreactstatics.default)(SSRApp, App);
101
- ModernHydrate(/* @__PURE__ */ (0, _jsxruntime.jsx)(SSRApp, {}));
102
- } else {
103
- ModernRender(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
104
- context
105
- }));
81
+ }), callback);
82
+ }, loadableReadyOptions);
106
83
  }
107
- }
108
- },
109
- init({ context }, next) {
110
- var _window__SSR_DATA, _window__SSR_DATA_context;
111
- const request = window === null || window === void 0 ? void 0 : (_window__SSR_DATA = window._SSR_DATA) === null || _window__SSR_DATA === void 0 ? void 0 : (_window__SSR_DATA_context = _window__SSR_DATA.context) === null || _window__SSR_DATA_context === void 0 ? void 0 : _window__SSR_DATA_context.request;
112
- if (!request) {
113
- context.ssrContext = {
114
- ...context.ssrContext,
115
- response: mockResp,
116
- request: (0, _utils.formatClient)({})
117
- };
118
- return next({
84
+ } else {
85
+ console.warn(`unknow render level: ${renderLevel}, execute render()`);
86
+ ModernRender(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
119
87
  context
88
+ }));
89
+ }
90
+ }
91
+ function streamSSRHydrate() {
92
+ if (renderLevel === _types.RenderLevel.SERVER_RENDER) {
93
+ let SSRApp = () => /* @__PURE__ */ (0, _jsxruntime.jsx)(_withCallback.WithCallback, {
94
+ callback,
95
+ children: /* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
96
+ context: hydrateContext
97
+ })
120
98
  });
99
+ SSRApp = (0, _hoistnonreactstatics.default)(SSRApp, App);
100
+ ModernHydrate(/* @__PURE__ */ (0, _jsxruntime.jsx)(SSRApp, {}));
101
+ } else {
102
+ ModernRender(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
103
+ context
104
+ }));
121
105
  }
122
- context.ssrContext.response = mockResp;
123
- context.ssrContext.request = (0, _utils.formatClient)(request);
106
+ }
107
+ },
108
+ init({ context }, next) {
109
+ var _window__SSR_DATA_context, _window__SSR_DATA, _window;
110
+ const request = (_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_context = _window__SSR_DATA.context) === null || _window__SSR_DATA_context === void 0 ? void 0 : _window__SSR_DATA_context.request;
111
+ if (!request) {
112
+ context.ssrContext = {
113
+ ...context.ssrContext,
114
+ response: mockResp,
115
+ request: (0, _utils.formatClient)({})
116
+ };
124
117
  return next({
125
118
  context
126
119
  });
127
- },
128
- pickContext: ({ context, pickedContext }, next) => {
129
- var _window__SSR_DATA, _window__SSR_DATA_context;
130
- const request = window === null || window === void 0 ? void 0 : (_window__SSR_DATA = window._SSR_DATA) === null || _window__SSR_DATA === void 0 ? void 0 : (_window__SSR_DATA_context = _window__SSR_DATA.context) === null || _window__SSR_DATA_context === void 0 ? void 0 : _window__SSR_DATA_context.request;
131
- const { initialData } = context;
132
- if (!request) {
133
- return next({
134
- context,
135
- pickedContext: {
136
- ...pickedContext,
137
- initialData
138
- }
139
- });
140
- }
120
+ }
121
+ context.ssrContext.response = mockResp;
122
+ context.ssrContext.request = (0, _utils.formatClient)(request);
123
+ return next({
124
+ context
125
+ });
126
+ },
127
+ pickContext: ({ context, pickedContext }, next) => {
128
+ var _window__SSR_DATA_context, _window__SSR_DATA, _window;
129
+ const request = (_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_context = _window__SSR_DATA.context) === null || _window__SSR_DATA_context === void 0 ? void 0 : _window__SSR_DATA_context.request;
130
+ const { initialData } = context;
131
+ if (!request) {
141
132
  return next({
142
133
  context,
143
134
  pickedContext: {
144
135
  ...pickedContext,
145
- initialData,
146
- request,
147
- response: mockResp
136
+ initialData
148
137
  }
149
138
  });
150
139
  }
151
- };
152
- }
153
- };
154
- };
140
+ return next({
141
+ context,
142
+ pickedContext: {
143
+ ...pickedContext,
144
+ initialData,
145
+ request,
146
+ response: mockResp
147
+ }
148
+ });
149
+ }
150
+ };
151
+ }
152
+ });
155
153
  const _default = ssr;
@@ -22,42 +22,41 @@ const _interop_require_default = require("@swc/helpers/_/_interop_require_defaul
22
22
  const _utils = require("./utils");
23
23
  const _serverRender = /* @__PURE__ */ _interop_require_default._(require("./serverRender"));
24
24
  _export_star._(require("./react"), exports);
25
- const ssr = (config = {}) => {
26
- return {
27
- name: "@modern-js/plugin-ssr",
28
- setup: () => {
29
- return {
30
- server: async ({ App, context }) => {
31
- const html = await (0, _serverRender.default)({
32
- context,
33
- App,
34
- config
35
- });
36
- return html;
37
- },
38
- init({ context }, next) {
39
- const { request } = context.ssrContext;
40
- context.ssrContext.request = (0, _utils.formatServer)(request);
41
- context.ssrContext.mode = config.mode;
42
- return next({
43
- context
44
- });
45
- },
46
- pickContext: ({ context, pickedContext }, next) => {
47
- const { request, response } = context === null || context === void 0 ? void 0 : context.ssrContext;
48
- const { initialData } = context;
49
- return next({
50
- context,
51
- pickedContext: {
52
- ...pickedContext,
53
- initialData,
54
- request,
55
- response
56
- }
57
- });
58
- }
59
- };
60
- }
61
- };
62
- };
25
+ const ssr = (config = {}) => ({
26
+ name: "@modern-js/plugin-ssr",
27
+ setup: () => {
28
+ return {
29
+ server: async ({ App, context }) => {
30
+ const html = await (0, _serverRender.default)({
31
+ context,
32
+ App,
33
+ config
34
+ });
35
+ return html;
36
+ },
37
+ init({ context }, next) {
38
+ const { request } = context.ssrContext;
39
+ context.ssrContext.request = (0, _utils.formatServer)(request);
40
+ context.ssrContext.mode = config.mode;
41
+ return next({
42
+ context
43
+ });
44
+ },
45
+ pickContext: ({ context, pickedContext }, next) => {
46
+ var _context;
47
+ const { request, response } = (_context = context) === null || _context === void 0 ? void 0 : _context.ssrContext;
48
+ const { initialData } = context;
49
+ return next({
50
+ context,
51
+ pickedContext: {
52
+ ...pickedContext,
53
+ initialData,
54
+ request,
55
+ response
56
+ }
57
+ });
58
+ }
59
+ };
60
+ }
61
+ });
63
62
  const _default = ssr;
@@ -12,48 +12,46 @@ const _jsxruntime = require("react/jsx-runtime");
12
12
  const _server = require("react-dom/server");
13
13
  const _runtimenode = require("@modern-js/utils/runtime-node");
14
14
  const _server1 = require("@loadable/server");
15
- const prefetch = async (App, context) => {
16
- return (0, _runtimenode.run)(context.ssrContext.request.headers, async () => {
17
- var _context_store;
18
- const { ssrContext } = context;
19
- const { loadableStats } = ssrContext;
20
- if (loadableStats) {
21
- const extractor = new _server1.ChunkExtractor({
22
- stats: loadableStats,
23
- entrypoints: [
24
- ssrContext.entryName
25
- ].filter(Boolean)
26
- });
27
- (0, _server.renderToStaticMarkup)(extractor.collectChunks(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
28
- context
29
- })));
30
- } else {
31
- (0, _server.renderToStaticMarkup)(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
32
- context
33
- }));
34
- }
35
- if (!context.loaderManager.hasPendingLoaders()) {
36
- return {
37
- initialData: context.initialData,
38
- i18nData: context.__i18nData__
39
- };
40
- }
41
- const loadersData = await context.loaderManager.awaitPendingLoaders();
42
- Object.keys(loadersData).forEach((id) => {
43
- const data = loadersData[id];
44
- if (data._error) {
45
- ssrContext.logger.error("App Prefetch Loader", data._error);
46
- ssrContext.metrics.emitCounter("app.prefetch.loader.error", 1);
47
- delete data._error;
48
- }
15
+ const prefetch = async (App, context) => (0, _runtimenode.run)(context.ssrContext.request.headers, async () => {
16
+ var _context_store, _context;
17
+ const { ssrContext } = context;
18
+ const { loadableStats } = ssrContext;
19
+ if (loadableStats) {
20
+ const extractor = new _server1.ChunkExtractor({
21
+ stats: loadableStats,
22
+ entrypoints: [
23
+ ssrContext.entryName
24
+ ].filter(Boolean)
49
25
  });
26
+ (0, _server.renderToStaticMarkup)(extractor.collectChunks(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
27
+ context
28
+ })));
29
+ } else {
30
+ (0, _server.renderToStaticMarkup)(/* @__PURE__ */ (0, _jsxruntime.jsx)(App, {
31
+ context
32
+ }));
33
+ }
34
+ if (!context.loaderManager.hasPendingLoaders()) {
50
35
  return {
51
- loadersData,
52
36
  initialData: context.initialData,
53
- i18nData: context.__i18nData__,
54
- // todo: move to plugin state
55
- storeState: context === null || context === void 0 ? void 0 : (_context_store = context.store) === null || _context_store === void 0 ? void 0 : _context_store.getState()
37
+ i18nData: context.__i18nData__
56
38
  };
39
+ }
40
+ const loadersData = await context.loaderManager.awaitPendingLoaders();
41
+ Object.keys(loadersData).forEach((id) => {
42
+ const data = loadersData[id];
43
+ if (data._error) {
44
+ ssrContext.logger.error("App Prefetch Loader", data._error);
45
+ ssrContext.metrics.emitCounter("app.prefetch.loader.error", 1);
46
+ delete data._error;
47
+ }
57
48
  });
58
- };
49
+ return {
50
+ loadersData,
51
+ initialData: context.initialData,
52
+ i18nData: context.__i18nData__,
53
+ // todo: move to plugin state
54
+ storeState: (_context = context) === null || _context === void 0 ? void 0 : (_context_store = _context.store) === null || _context_store === void 0 ? void 0 : _context_store.getState()
55
+ };
56
+ });
59
57
  const _default = prefetch;
@@ -55,8 +55,9 @@ const aggKeysFromPropsList = function aggKeysFromPropsList2(propsList, propName)
55
55
  }, {});
56
56
  const res = propsList.filter((props) => usefulObject(props[propName])).reduce((result, next) => {
57
57
  REQUEST_META.forEach((key) => {
58
+ var _prop;
58
59
  const prop = next[propName];
59
- if ((prop === null || prop === void 0 ? void 0 : prop.hasOwnProperty(key)) && usefulArray(prop[key])) {
60
+ if (((_prop = prop) === null || _prop === void 0 ? void 0 : _prop.hasOwnProperty(key)) && usefulArray(prop[key])) {
60
61
  result[key] = unique(result[key].concat(prop[key]));
61
62
  }
62
63
  });
@@ -79,8 +80,9 @@ const aggMatchesFromPropsList = function aggMatchesFromPropsList2(propsList, pro
79
80
  }, {});
80
81
  const res = propsList.filter((props) => usefulObject(props[propName])).reduce((result, next) => {
81
82
  REQUEST_META.forEach((key) => {
83
+ var _prop;
82
84
  const prop = next[propName];
83
- if ((prop === null || prop === void 0 ? void 0 : prop.hasOwnProperty(key)) && usefulObject(prop[key])) {
85
+ if (((_prop = prop) === null || _prop === void 0 ? void 0 : _prop.hasOwnProperty(key)) && usefulObject(prop[key])) {
84
86
  result[key] = Object.assign(result[key], prop[key]);
85
87
  }
86
88
  });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ServerTimingNames", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ServerTimingNames;
9
+ }
10
+ });
11
+ var ServerTimingNames;
12
+ (function(ServerTimingNames2) {
13
+ ServerTimingNames2["SSR_RENDER_TOTAL"] = "ssr-render-total";
14
+ ServerTimingNames2["SSR_PREFETCH"] = "ssr-prefetch";
15
+ ServerTimingNames2["SSR_RENDER_HTML"] = "ssr-render-html";
16
+ })(ServerTimingNames || (ServerTimingNames = {}));
@@ -31,6 +31,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
31
31
  function injectCss(headTemplate2) {
32
32
  return headTemplate2.replace(_utils.CSS_CHUNKS_PLACEHOLDER, getCssChunks());
33
33
  function getCssChunks() {
34
+ var _matches;
34
35
  const { routeManifest, routerContext, routes } = context;
35
36
  if (!routeManifest || !routerContext || !routes) {
36
37
  return "";
@@ -38,7 +39,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
38
39
  const { routeAssets } = routeManifest;
39
40
  const cssChunks = [];
40
41
  const matches = (0, _router.matchRoutes)(routes, routerContext.location, routerContext.basename);
41
- matches === null || matches === void 0 ? void 0 : matches.forEach((match, index) => {
42
+ (_matches = matches) === null || _matches === void 0 ? void 0 : _matches.forEach((match, index) => {
42
43
  if (!index) {
43
44
  return;
44
45
  }
@@ -48,7 +49,8 @@ function getHeadTemplate(beforeEntryTemplate, context) {
48
49
  if (routeManifest2) {
49
50
  const { referenceCssAssets = [] } = routeManifest2;
50
51
  const _cssChunks = referenceCssAssets.filter((asset) => {
51
- return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !headTemplate2.includes(asset);
52
+ var _asset;
53
+ return ((_asset = asset) === null || _asset === void 0 ? void 0 : _asset.endsWith(".css")) && !headTemplate2.includes(asset);
52
54
  });
53
55
  cssChunks.push(..._cssChunks);
54
56
  }
@@ -11,8 +11,8 @@ Object.defineProperty(exports, "render", {
11
11
  const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
12
12
  const _react = require("react");
13
13
  const _runtimenode = require("@modern-js/utils/runtime-node");
14
+ const _time = require("@modern-js/utils/universal/time");
14
15
  const _prerender = require("../../react/prerender");
15
- const _time = require("../time");
16
16
  const _renderToPipe = /* @__PURE__ */ _interop_require_default._(require("./renderToPipe"));
17
17
  const render = ({ App, context }) => {
18
18
  const { ssrContext } = context;
@@ -23,6 +23,7 @@ function renderToPipe(rootElement, context, options) {
23
23
  const chunkVec = [];
24
24
  const forUserPipe = (stream) => {
25
25
  return new Promise((resolve) => {
26
+ var _ssrContext;
26
27
  let renderToPipeableStream;
27
28
  try {
28
29
  ({ renderToPipeableStream } = require("react-dom/server"));
@@ -30,11 +31,11 @@ function renderToPipe(rootElement, context, options) {
30
31
  }
31
32
  const { pipe } = renderToPipeableStream(rootElement, {
32
33
  ...options,
33
- nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
34
+ nonce: (_ssrContext = ssrContext) === null || _ssrContext === void 0 ? void 0 : _ssrContext.nonce,
34
35
  onShellReady() {
35
- var _options_onShellReady;
36
+ var _options_onShellReady, _options;
36
37
  const { shellAfter, shellBefore } = (0, _template.getTemplates)(context, _types.RenderLevel.SERVER_RENDER);
37
- options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
38
+ (_options = options) === null || _options === void 0 ? void 0 : (_options_onShellReady = _options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(_options);
38
39
  const injectableTransform = new _stream.Transform({
39
40
  transform(chunk, _encoding, callback) {
40
41
  try {
@@ -62,18 +63,18 @@ function renderToPipe(rootElement, context, options) {
62
63
  resolve(pipe(injectableTransform).pipe(stream));
63
64
  },
64
65
  onShellError(error) {
65
- var _options_onShellError;
66
+ var _options_onShellError, _options;
66
67
  ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
67
68
  const { shellAfter, shellBefore } = (0, _template.getTemplates)(context, _types.RenderLevel.CLIENT_RENDER);
68
69
  const fallbackHtml = `${shellBefore}${shellAfter}`;
69
70
  resolve(fallbackHtml);
70
- options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
71
+ (_options = options) === null || _options === void 0 ? void 0 : (_options_onShellError = _options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(_options, error);
71
72
  },
72
73
  onError(error) {
73
- var _options_onError;
74
+ var _options_onError, _options;
74
75
  ssrContext.logger.error("An error occurs during streaming SSR", error);
75
76
  ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
76
- options === null || options === void 0 ? void 0 : (_options_onError = options.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(options, error);
77
+ (_options = options) === null || _options === void 0 ? void 0 : (_options_onError = _options.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(_options, error);
77
78
  }
78
79
  });
79
80
  });
@@ -28,14 +28,15 @@ function renderToPipe(rootElement, context, options) {
28
28
  }
29
29
  const { shellAfter, shellBefore } = (0, _template.getTemplates)(context, _types.RenderLevel.SERVER_RENDER);
30
30
  try {
31
+ var _ssrContext;
31
32
  const readableOriginal = await renderToReadableStream(rootElement, {
32
33
  ...options,
33
- nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
34
+ nonce: (_ssrContext = ssrContext) === null || _ssrContext === void 0 ? void 0 : _ssrContext.nonce,
34
35
  onError(error) {
35
- var _options_onError;
36
- ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.logger.error("An error occurs during streaming SSR", error);
37
- ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
38
- options === null || options === void 0 ? void 0 : (_options_onError = options.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(options, error);
36
+ var _ssrContext2, _ssrContext12, _options_onError, _options;
37
+ (_ssrContext2 = ssrContext) === null || _ssrContext2 === void 0 ? void 0 : _ssrContext2.logger.error("An error occurs during streaming SSR", error);
38
+ (_ssrContext12 = ssrContext) === null || _ssrContext12 === void 0 ? void 0 : _ssrContext12.metrics.emitCounter("app.render.streaming.error", 1);
39
+ (_options = options) === null || _options === void 0 ? void 0 : (_options_onError = _options.onError) === null || _options_onError === void 0 ? void 0 : _options_onError.call(_options, error);
39
40
  }
40
41
  });
41
42
  const reader = readableOriginal.getReader();
@@ -66,7 +67,8 @@ function renderToPipe(rootElement, context, options) {
66
67
  });
67
68
  return injectableStream;
68
69
  } catch (err) {
69
- ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
70
+ var _ssrContext1;
71
+ (_ssrContext1 = ssrContext) === null || _ssrContext1 === void 0 ? void 0 : _ssrContext1.metrics.emitCounter("app.render.streaming.shell.error", 1);
70
72
  const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = (0, _template.getTemplates)(context, _types.RenderLevel.CLIENT_RENDER);
71
73
  const fallbackHtml = `${shellBefore2}${shellAfter2}`;
72
74
  return fallbackHtml;
@@ -15,17 +15,19 @@ const _react = /* @__PURE__ */ _interop_require_default._(require("react"));
15
15
  const _server = /* @__PURE__ */ _interop_require_default._(require("react-dom/server"));
16
16
  const _runtimenode = require("@modern-js/utils/runtime-node");
17
17
  const _reacthelmet = /* @__PURE__ */ _interop_require_default._(require("react-helmet"));
18
+ const _time = require("@modern-js/utils/universal/time");
18
19
  const _utils = require("../../../router/runtime/utils");
19
20
  const _helmet = /* @__PURE__ */ _interop_require_default._(require("../helmet"));
20
21
  const _types = require("../types");
21
- const _time = require("../time");
22
22
  const _prefetch = /* @__PURE__ */ _interop_require_default._(require("../../prefetch"));
23
23
  const _utils1 = require("../utils");
24
+ const _reporter = require("../reporter");
25
+ const _constants = require("../constants");
24
26
  const _template = require("./template");
25
27
  const _reduce = require("./reduce");
26
28
  const _loadable = /* @__PURE__ */ _interop_require_wildcard._(require("./loadable"));
27
29
  const _styledComponent = /* @__PURE__ */ _interop_require_wildcard._(require("./styledComponent"));
28
- const buildTemplateData = (context, data, renderLevel) => {
30
+ const buildTemplateData = (context, data, renderLevel, reporter) => {
29
31
  const { request, enableUnsafeCtx } = context;
30
32
  const unsafeContext = {
31
33
  headers: request.headers
@@ -40,6 +42,9 @@ const buildTemplateData = (context, data, renderLevel) => {
40
42
  host: request.host,
41
43
  url: request.url,
42
44
  ...enableUnsafeCtx ? unsafeContext : {}
45
+ },
46
+ reporter: {
47
+ sessionId: reporter.sessionId
43
48
  }
44
49
  },
45
50
  renderLevel
@@ -68,7 +73,7 @@ class Entry {
68
73
  errors: (0, _utils.serializeErrors)(routerContext.errors)
69
74
  } : void 0;
70
75
  let html = "";
71
- const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel);
76
+ const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel, this.reporter);
72
77
  const SSRData = this.getSSRDataScript(templateData, routerData);
73
78
  for (const fragment of this.fragments) {
74
79
  if (fragment.isVariable && fragment.content === "SSRDataScript") {
@@ -89,9 +94,12 @@ class Entry {
89
94
  const prefetchCost = end();
90
95
  this.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
91
96
  this.metrics.emitTimer("app.prefetch.cost", prefetchCost);
97
+ this.reporter.reportTime("app_prefetch_cost", prefetchCost);
98
+ this.severTiming.addServeTiming(_constants.ServerTimingNames.SSR_PREFETCH, prefetchCost);
92
99
  } catch (e) {
93
100
  this.result.renderLevel = _types.RenderLevel.CLIENT_RENDER;
94
101
  this.logger.error("App Prefetch Render", e);
102
+ this.reporter.reportError("App Prefetch Render", e);
95
103
  this.metrics.emitCounter("app.prefetch.render.error", 1);
96
104
  }
97
105
  return prefetchData || {};
@@ -123,9 +131,12 @@ class Entry {
123
131
  const cost = end();
124
132
  this.logger.debug("App Render To HTML cost = %d ms", cost);
125
133
  this.metrics.emitTimer("app.render.html.cost", cost);
134
+ this.reporter.reportTime("app_render_html_cost", cost);
135
+ this.severTiming.addServeTiming(_constants.ServerTimingNames.SSR_RENDER_HTML, cost);
126
136
  this.result.renderLevel = _types.RenderLevel.SERVER_RENDER;
127
137
  } catch (e) {
128
138
  this.logger.error("App Render To HTML", e);
139
+ this.reporter.reportError("App Render To HTML", e);
129
140
  this.metrics.emitCounter("app.render.html.error", 1);
130
141
  }
131
142
  return html;
@@ -152,6 +163,8 @@ class Entry {
152
163
  _define_property._(this, "result", void 0);
153
164
  _define_property._(this, "metrics", void 0);
154
165
  _define_property._(this, "logger", void 0);
166
+ _define_property._(this, "severTiming", void 0);
167
+ _define_property._(this, "reporter", void 0);
155
168
  _define_property._(this, "template", void 0);
156
169
  _define_property._(this, "App", void 0);
157
170
  _define_property._(this, "fragments", void 0);
@@ -166,6 +179,8 @@ class Entry {
166
179
  this.host = host;
167
180
  this.App = options.App;
168
181
  this.pluginConfig = config;
182
+ this.reporter = (0, _reporter.createSSRReporter)(ctx.reporter);
183
+ this.severTiming = ctx.serverTiming;
169
184
  this.metrics = ctx.metrics;
170
185
  this.logger = ctx.logger;
171
186
  this.nonce = nonce;