@modern-js/runtime 1.3.4-alpha.0 → 1.4.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 (156) hide show
  1. package/CHANGELOG.md +77 -19
  2. package/dist/js/modern/cli/index.js +4 -4
  3. package/dist/js/modern/common.js +1 -0
  4. package/dist/js/modern/exports/model.js +2 -1
  5. package/dist/js/modern/exports/router.js +2 -1
  6. package/dist/js/modern/exports/server.js +0 -1
  7. package/dist/js/modern/exports/ssr.js +2 -1
  8. package/dist/js/modern/router/cli/index.js +106 -0
  9. package/dist/js/modern/router/index.js +2 -0
  10. package/dist/js/modern/router/runtime/DefaultNotFound.js +13 -0
  11. package/dist/js/modern/router/runtime/index.js +4 -0
  12. package/dist/js/modern/router/runtime/plugin.js +88 -0
  13. package/dist/js/modern/router/runtime/utils.js +108 -0
  14. package/dist/js/modern/ssr/cli/index.js +120 -0
  15. package/dist/js/modern/ssr/index.js +109 -0
  16. package/dist/js/modern/ssr/index.node.js +78 -0
  17. package/dist/js/modern/ssr/prefetch.js +58 -0
  18. package/dist/js/modern/ssr/react/index.js +2 -0
  19. package/dist/js/modern/ssr/react/nossr/index.js +13 -0
  20. package/dist/js/modern/ssr/react/prerender/index.js +104 -0
  21. package/dist/js/modern/ssr/react/prerender/type.js +0 -0
  22. package/dist/js/modern/ssr/react/prerender/util.js +99 -0
  23. package/dist/js/modern/ssr/serverRender/entry.js +179 -0
  24. package/dist/js/modern/ssr/serverRender/helmet.js +46 -0
  25. package/dist/js/modern/ssr/serverRender/index.js +29 -0
  26. package/dist/js/modern/ssr/serverRender/loadable.js +48 -0
  27. package/dist/js/modern/ssr/serverRender/measure.js +11 -0
  28. package/dist/js/modern/ssr/serverRender/reduce.js +7 -0
  29. package/dist/js/modern/ssr/serverRender/styledComponent.js +8 -0
  30. package/dist/js/modern/ssr/serverRender/template.js +90 -0
  31. package/dist/js/modern/ssr/serverRender/type.js +8 -0
  32. package/dist/js/modern/ssr/utils.js +51 -0
  33. package/dist/js/modern/state/cli/index.js +110 -0
  34. package/dist/js/modern/state/index.js +2 -0
  35. package/dist/js/modern/state/plugins.js +7 -0
  36. package/dist/js/modern/state/runtime/index.js +4 -0
  37. package/dist/js/modern/state/runtime/plugin.js +71 -0
  38. package/dist/js/modern/state/types.js +1 -0
  39. package/dist/js/node/cli/index.js +5 -5
  40. package/dist/js/node/common.js +10 -0
  41. package/dist/js/node/exports/model.js +19 -5
  42. package/dist/js/node/exports/router.js +19 -5
  43. package/dist/js/node/exports/server.js +0 -17
  44. package/dist/js/node/exports/ssr.js +19 -5
  45. package/dist/js/node/router/cli/index.js +122 -0
  46. package/dist/js/node/router/index.js +30 -0
  47. package/dist/js/node/router/runtime/DefaultNotFound.js +26 -0
  48. package/dist/js/node/router/runtime/index.js +39 -0
  49. package/dist/js/node/router/runtime/plugin.js +111 -0
  50. package/dist/js/node/router/runtime/utils.js +128 -0
  51. package/dist/js/node/ssr/cli/index.js +136 -0
  52. package/dist/js/node/ssr/index.js +138 -0
  53. package/dist/js/node/ssr/index.node.js +105 -0
  54. package/dist/js/node/ssr/prefetch.js +75 -0
  55. package/dist/js/node/ssr/react/index.js +21 -0
  56. package/dist/js/node/ssr/react/nossr/index.js +28 -0
  57. package/dist/js/node/ssr/react/prerender/index.js +121 -0
  58. package/dist/js/node/ssr/react/prerender/type.js +0 -0
  59. package/dist/js/node/ssr/react/prerender/util.js +119 -0
  60. package/dist/js/node/ssr/serverRender/entry.js +208 -0
  61. package/dist/js/node/ssr/serverRender/helmet.js +52 -0
  62. package/dist/js/node/ssr/serverRender/index.js +46 -0
  63. package/dist/js/node/ssr/serverRender/loadable.js +60 -0
  64. package/dist/js/node/ssr/serverRender/measure.js +20 -0
  65. package/dist/js/node/ssr/serverRender/reduce.js +14 -0
  66. package/dist/js/node/ssr/serverRender/styledComponent.js +18 -0
  67. package/dist/js/node/ssr/serverRender/template.js +103 -0
  68. package/dist/js/node/ssr/serverRender/type.js +15 -0
  69. package/dist/js/node/ssr/utils.js +65 -0
  70. package/dist/js/node/state/cli/index.js +127 -0
  71. package/dist/js/node/state/index.js +30 -0
  72. package/dist/js/node/state/plugins.js +35 -0
  73. package/dist/js/node/state/runtime/index.js +61 -0
  74. package/dist/js/node/state/runtime/plugin.js +101 -0
  75. package/dist/js/node/state/types.js +5 -0
  76. package/dist/js/treeshaking/cli/index.js +4 -4
  77. package/dist/js/treeshaking/common.js +3 -0
  78. package/dist/js/treeshaking/exports/model.js +2 -1
  79. package/dist/js/treeshaking/exports/router.js +2 -1
  80. package/dist/js/treeshaking/exports/server.js +0 -1
  81. package/dist/js/treeshaking/exports/ssr.js +2 -1
  82. package/dist/js/treeshaking/router/cli/index.js +100 -0
  83. package/dist/js/treeshaking/router/index.js +2 -0
  84. package/dist/js/treeshaking/router/runtime/DefaultNotFound.js +15 -0
  85. package/dist/js/treeshaking/router/runtime/index.js +4 -0
  86. package/dist/js/treeshaking/router/runtime/plugin.js +89 -0
  87. package/dist/js/treeshaking/router/runtime/utils.js +106 -0
  88. package/dist/js/treeshaking/ssr/cli/index.js +113 -0
  89. package/dist/js/treeshaking/ssr/index.js +129 -0
  90. package/dist/js/treeshaking/ssr/index.node.js +100 -0
  91. package/dist/js/treeshaking/ssr/prefetch.js +97 -0
  92. package/dist/js/treeshaking/ssr/react/index.js +2 -0
  93. package/dist/js/treeshaking/ssr/react/nossr/index.js +16 -0
  94. package/dist/js/treeshaking/ssr/react/prerender/index.js +119 -0
  95. package/dist/js/treeshaking/ssr/react/prerender/type.js +0 -0
  96. package/dist/js/treeshaking/ssr/react/prerender/util.js +115 -0
  97. package/dist/js/treeshaking/ssr/serverRender/entry.js +267 -0
  98. package/dist/js/treeshaking/ssr/serverRender/helmet.js +37 -0
  99. package/dist/js/treeshaking/ssr/serverRender/index.js +69 -0
  100. package/dist/js/treeshaking/ssr/serverRender/loadable.js +59 -0
  101. package/dist/js/treeshaking/ssr/serverRender/measure.js +17 -0
  102. package/dist/js/treeshaking/ssr/serverRender/reduce.js +11 -0
  103. package/dist/js/treeshaking/ssr/serverRender/styledComponent.js +8 -0
  104. package/dist/js/treeshaking/ssr/serverRender/template.js +111 -0
  105. package/dist/js/treeshaking/ssr/serverRender/type.js +8 -0
  106. package/dist/js/treeshaking/ssr/utils.js +53 -0
  107. package/dist/js/treeshaking/state/cli/index.js +100 -0
  108. package/dist/js/treeshaking/state/index.js +2 -0
  109. package/dist/js/treeshaking/state/plugins.js +13 -0
  110. package/dist/js/treeshaking/state/runtime/index.js +4 -0
  111. package/dist/js/treeshaking/state/runtime/plugin.js +63 -0
  112. package/dist/js/treeshaking/state/types.js +1 -0
  113. package/dist/types/common.d.ts +1 -0
  114. package/dist/types/exports/model.d.ts +2 -1
  115. package/dist/types/exports/router.d.ts +2 -1
  116. package/dist/types/exports/server.d.ts +0 -1
  117. package/dist/types/exports/ssr.d.ts +2 -1
  118. package/dist/types/index.d.ts +8 -2
  119. package/dist/types/router/cli/index.d.ts +5 -0
  120. package/dist/types/router/index.d.ts +2 -0
  121. package/dist/types/router/runtime/DefaultNotFound.d.ts +2 -0
  122. package/dist/types/router/runtime/index.d.ts +6 -0
  123. package/dist/types/router/runtime/plugin.d.ts +51 -0
  124. package/dist/types/router/runtime/utils.d.ts +6 -0
  125. package/dist/types/ssr/cli/index.d.ts +5 -0
  126. package/dist/types/ssr/index.d.ts +18 -0
  127. package/dist/types/ssr/index.node.d.ts +4 -0
  128. package/dist/types/ssr/prefetch.d.ts +13 -0
  129. package/dist/types/ssr/react/index.d.ts +2 -0
  130. package/dist/types/ssr/react/nossr/index.d.ts +2 -0
  131. package/dist/types/ssr/react/prerender/index.d.ts +1 -0
  132. package/dist/types/ssr/react/prerender/type.d.ts +29 -0
  133. package/dist/types/ssr/react/prerender/util.d.ts +6 -0
  134. package/dist/types/ssr/serverRender/entry.d.ts +20 -0
  135. package/dist/types/ssr/serverRender/helmet.d.ts +2 -0
  136. package/dist/types/ssr/serverRender/index.d.ts +8 -0
  137. package/dist/types/ssr/serverRender/loadable.d.ts +2 -0
  138. package/dist/types/ssr/serverRender/measure.d.ts +1 -0
  139. package/dist/types/ssr/serverRender/reduce.d.ts +3 -0
  140. package/dist/types/ssr/serverRender/styledComponent.d.ts +2 -0
  141. package/dist/types/ssr/serverRender/template.d.ts +14 -0
  142. package/dist/types/ssr/serverRender/type.d.ts +32 -0
  143. package/dist/types/ssr/utils.d.ts +8 -0
  144. package/dist/types/state/cli/index.d.ts +5 -0
  145. package/dist/types/state/index.d.ts +2 -0
  146. package/dist/types/state/plugins.d.ts +4 -0
  147. package/dist/types/state/runtime/index.d.ts +4 -0
  148. package/dist/types/state/runtime/plugin.d.ts +17 -0
  149. package/dist/types/state/types.d.ts +17 -0
  150. package/package.json +37 -20
  151. package/types/model.d.ts +1 -1
  152. package/types/state.d.ts +4 -0
  153. package/dist/js/modern/exports/request.js +0 -1
  154. package/dist/js/node/exports/request.js +0 -13
  155. package/dist/js/treeshaking/exports/request.js +0 -1
  156. package/dist/types/exports/request.d.ts +0 -1
@@ -0,0 +1,106 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ var _excluded = ["Component"];
4
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
+ import React from 'react';
6
+ import { Route, matchPath } from 'react-router-dom';
7
+ import { DefaultNotFound } from "./DefaultNotFound";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ export function renderRoutes(routesConfig) {
10
+ var extraProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
11
+
12
+ var Layout = function Layout(_ref) {
13
+ var Component = _ref.Component,
14
+ props = _objectWithoutProperties(_ref, _excluded);
15
+
16
+ var GlobalLayout = routesConfig === null || routesConfig === void 0 ? void 0 : routesConfig.globalApp;
17
+
18
+ if (!GlobalLayout) {
19
+ return /*#__PURE__*/_jsx(Component, _objectSpread({}, props));
20
+ }
21
+
22
+ return /*#__PURE__*/_jsx(GlobalLayout, _objectSpread({
23
+ Component: Component
24
+ }, props));
25
+ };
26
+
27
+ var findMatchedRoute = function findMatchedRoute(pathname) {
28
+ var _routesConfig$routes;
29
+
30
+ return routesConfig === null || routesConfig === void 0 ? void 0 : (_routesConfig$routes = routesConfig.routes) === null || _routesConfig$routes === void 0 ? void 0 : _routesConfig$routes.find(function (route) {
31
+ var info = matchPath(pathname, {
32
+ path: route.path,
33
+ exact: route.exact,
34
+ sensitive: route.sensitive
35
+ });
36
+ return Boolean(info);
37
+ });
38
+ };
39
+
40
+ return /*#__PURE__*/_jsx(Route, {
41
+ path: "/",
42
+ render: function render(props) {
43
+ var matchedRoute = findMatchedRoute(props.location.pathname);
44
+
45
+ if (!matchedRoute) {
46
+ return /*#__PURE__*/_jsx(DefaultNotFound, {});
47
+ }
48
+
49
+ return /*#__PURE__*/_jsx(Route, {
50
+ path: matchedRoute.path,
51
+ exact: matchedRoute.exact,
52
+ sensitive: matchedRoute.sensitive,
53
+ render: function render(routeProps) {
54
+ return /*#__PURE__*/_jsx(Layout, _objectSpread(_objectSpread({
55
+ Component: matchedRoute.component
56
+ }, routeProps), extraProps));
57
+ }
58
+ });
59
+ }
60
+ });
61
+ }
62
+ export function getLocation(serverContext) {
63
+ var _ref2 = (serverContext === null || serverContext === void 0 ? void 0 : serverContext.request) || {},
64
+ pathname = _ref2.pathname,
65
+ url = _ref2.url;
66
+
67
+ var cleanUrl = url.replace('http://', '').replace('https://', '');
68
+ var index = (cleanUrl || '').indexOf(pathname);
69
+
70
+ if (index === -1) {
71
+ return pathname;
72
+ }
73
+
74
+ return cleanUrl.substring(index);
75
+ }
76
+ export var urlJoin = function urlJoin() {
77
+ var separator = '/';
78
+ var replace = new RegExp("".concat(separator, "{1,}"), 'g');
79
+
80
+ for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {
81
+ parts[_key] = arguments[_key];
82
+ }
83
+
84
+ return standardSlash(parts.join(separator).replace(replace, separator));
85
+ };
86
+ export function standardSlash(str) {
87
+ var addr = str;
88
+
89
+ if (!addr || typeof addr !== 'string') {
90
+ return addr;
91
+ }
92
+
93
+ if (addr.startsWith('.')) {
94
+ addr = addr.slice(1);
95
+ }
96
+
97
+ if (!addr.startsWith('/')) {
98
+ addr = "/".concat(addr);
99
+ }
100
+
101
+ if (addr.endsWith('/') && addr !== '/') {
102
+ addr = addr.slice(0, addr.length - 1);
103
+ }
104
+
105
+ return addr;
106
+ }
@@ -0,0 +1,113 @@
1
+ import path from 'path';
2
+ import { getEntryOptions, SERVER_RENDER_FUNCTION_NAME, LOADABLE_STATS_FILE, isUseSSRBundle, createRuntimeExportsUtils, isSingleEntry } from '@modern-js/utils';
3
+ var PLUGIN_IDENTIFIER = 'ssr';
4
+ export default (function () {
5
+ return {
6
+ name: '@modern-js/plugin-ssr',
7
+ required: ['@modern-js/runtime'],
8
+ setup: function setup(api) {
9
+ var ssrConfigMap = new Map();
10
+ var pluginsExportsUtils;
11
+ var ssrModulePath = path.resolve(__dirname, '../');
12
+ return {
13
+ config: function config() {
14
+ var appContext = api.useAppContext();
15
+ pluginsExportsUtils = createRuntimeExportsUtils(appContext.internalDirectory, 'plugins');
16
+ return {
17
+ source: {
18
+ alias: {
19
+ '@modern-js/runtime/plugins': pluginsExportsUtils.getPath()
20
+ }
21
+ },
22
+ tools: {
23
+ webpackChain: function webpackChain(chain, _ref) {
24
+ var name = _ref.name,
25
+ CHAIN_ID = _ref.CHAIN_ID;
26
+ var userConfig = api.useResolvedConfigContext();
27
+
28
+ if (isUseSSRBundle(userConfig) && name !== 'server') {
29
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
30
+ var LoadableWebpackPlugin = require('@modern-js/webpack/@loadable/webpack-plugin');
31
+
32
+ chain.plugin(CHAIN_ID.PLUGIN.LOADABLE).use(LoadableWebpackPlugin, [{
33
+ filename: LOADABLE_STATS_FILE
34
+ }]);
35
+ }
36
+ },
37
+ babel: function babel(config) {
38
+ var userConfig = api.useResolvedConfigContext();
39
+
40
+ if (isUseSSRBundle(userConfig)) {
41
+ config.plugins.push(require.resolve('@loadable/babel-plugin'));
42
+ }
43
+ }
44
+ }
45
+ };
46
+ },
47
+ modifyEntryImports: function modifyEntryImports(_ref2) {
48
+ var entrypoint = _ref2.entrypoint,
49
+ imports = _ref2.imports;
50
+ var entryName = entrypoint.entryName;
51
+ var userConfig = api.useResolvedConfigContext();
52
+
53
+ var _api$useAppContext = api.useAppContext(),
54
+ packageName = _api$useAppContext.packageName,
55
+ entrypoints = _api$useAppContext.entrypoints;
56
+
57
+ pluginsExportsUtils.addExport("export { default as ssr } from '".concat(ssrModulePath, "'")); // if use ssg then set ssr config to true
58
+
59
+ var ssrConfig = getEntryOptions(entryName, userConfig.server.ssr, userConfig.server.ssrByEntries, packageName);
60
+ var ssgConfig = userConfig.output.ssg;
61
+ var useSSG = isSingleEntry(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[0]) === 'function' || Boolean(ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[entryName]);
62
+ ssrConfigMap.set(entryName, ssrConfig || useSSG);
63
+
64
+ if (ssrConfig || useSSG) {
65
+ imports.push({
66
+ value: '@modern-js/runtime/plugins',
67
+ specifiers: [{
68
+ imported: PLUGIN_IDENTIFIER
69
+ }]
70
+ });
71
+ }
72
+
73
+ return {
74
+ entrypoint: entrypoint,
75
+ imports: imports
76
+ };
77
+ },
78
+ modifyEntryRuntimePlugins: function modifyEntryRuntimePlugins(_ref3) {
79
+ var entrypoint = _ref3.entrypoint,
80
+ plugins = _ref3.plugins;
81
+
82
+ if (ssrConfigMap.get(entrypoint.entryName)) {
83
+ plugins.push({
84
+ name: PLUGIN_IDENTIFIER,
85
+ options: ssrConfigMap.get(entrypoint.entryName)
86
+ });
87
+ }
88
+
89
+ return {
90
+ entrypoint: entrypoint,
91
+ plugins: plugins
92
+ };
93
+ },
94
+ modifyEntryExport: function modifyEntryExport(_ref4) {
95
+ var entrypoint = _ref4.entrypoint,
96
+ exportStatement = _ref4.exportStatement;
97
+
98
+ if (ssrConfigMap.get(entrypoint.entryName)) {
99
+ return {
100
+ entrypoint: entrypoint,
101
+ exportStatement: ["export function ".concat(SERVER_RENDER_FUNCTION_NAME, "(context) {\n return bootstrap(AppWrapper, context)\n }"), exportStatement].join('\n')
102
+ };
103
+ }
104
+
105
+ return {
106
+ entrypoint: entrypoint,
107
+ exportStatement: exportStatement
108
+ };
109
+ }
110
+ };
111
+ }
112
+ };
113
+ });
@@ -0,0 +1,129 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
+ import ReactDOM from 'react-dom';
5
+ import { loadableReady } from '@loadable/component';
6
+ import { RenderLevel } from "./serverRender/type";
7
+ import { formatClient, mockResponse } from "./utils";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+
10
+ var ssr = function ssr() {
11
+ return {
12
+ name: '@modern-js/plugin-ssr',
13
+ setup: function setup() {
14
+ var mockResp = mockResponse();
15
+ return {
16
+ client: function () {
17
+ var _client = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
18
+ var _window, _window$_SSR_DATA;
19
+
20
+ var App, context, rootElement, renderLevel, _prefetch, _ref2;
21
+
22
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
23
+ while (1) {
24
+ switch (_context.prev = _context.next) {
25
+ case 0:
26
+ App = _ref.App, context = _ref.context, rootElement = _ref.rootElement;
27
+ 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;
28
+
29
+ if (!(renderLevel === RenderLevel.CLIENT_RENDER)) {
30
+ _context.next = 8;
31
+ break;
32
+ }
33
+
34
+ _context.next = 5;
35
+ return App === null || App === void 0 ? void 0 : (_prefetch = (_ref2 = App).prefetch) === null || _prefetch === void 0 ? void 0 : _prefetch.call(_ref2, context);
36
+
37
+ case 5:
38
+ ReactDOM.render( /*#__PURE__*/_jsx(App, {
39
+ context: context
40
+ }), rootElement);
41
+ _context.next = 9;
42
+ break;
43
+
44
+ case 8:
45
+ if (renderLevel === RenderLevel.SERVER_RENDER) {
46
+ loadableReady(function () {
47
+ var hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
48
+ _hydration: true
49
+ });
50
+
51
+ ReactDOM.hydrate( /*#__PURE__*/_jsx(App, {
52
+ context: hydrateContext
53
+ }), rootElement, function () {
54
+ // won't cause component re-render because context's reference identity doesn't change
55
+ delete hydrateContext._hydration;
56
+ });
57
+ });
58
+ } else {
59
+ // unknown renderlevel or renderlevel is server prefetch.
60
+ ReactDOM.render( /*#__PURE__*/_jsx(App, {
61
+ context: context
62
+ }), rootElement);
63
+ }
64
+
65
+ case 9:
66
+ case "end":
67
+ return _context.stop();
68
+ }
69
+ }
70
+ }, _callee);
71
+ }));
72
+
73
+ function client(_x) {
74
+ return _client.apply(this, arguments);
75
+ }
76
+
77
+ return client;
78
+ }(),
79
+ init: function init(_ref3, next) {
80
+ var _window2, _window2$_SSR_DATA, _window2$_SSR_DATA$co;
81
+
82
+ var context = _ref3.context;
83
+ var request = (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$_SSR_DATA = _window2._SSR_DATA) === null || _window2$_SSR_DATA === void 0 ? void 0 : (_window2$_SSR_DATA$co = _window2$_SSR_DATA.context) === null || _window2$_SSR_DATA$co === void 0 ? void 0 : _window2$_SSR_DATA$co.request;
84
+
85
+ if (!request) {
86
+ return next({
87
+ context: context
88
+ });
89
+ }
90
+
91
+ context.ssrContext.response = mockResp;
92
+ context.ssrContext.request = formatClient(request);
93
+ return next({
94
+ context: context
95
+ });
96
+ },
97
+ pickContext: function pickContext(_ref4, next) {
98
+ var _window3, _window3$_SSR_DATA, _window3$_SSR_DATA$co;
99
+
100
+ var context = _ref4.context,
101
+ pickedContext = _ref4.pickedContext;
102
+ var request = (_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$_SSR_DATA = _window3._SSR_DATA) === null || _window3$_SSR_DATA === void 0 ? void 0 : (_window3$_SSR_DATA$co = _window3$_SSR_DATA.context) === null || _window3$_SSR_DATA$co === void 0 ? void 0 : _window3$_SSR_DATA$co.request;
103
+ var initialData = context.initialData;
104
+
105
+ if (!request) {
106
+ return next({
107
+ context: context,
108
+ pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
109
+ initialData: initialData
110
+ })
111
+ });
112
+ }
113
+
114
+ return next({
115
+ context: context,
116
+ pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
117
+ initialData: initialData,
118
+ request: request,
119
+ response: mockResp
120
+ })
121
+ });
122
+ }
123
+ };
124
+ }
125
+ };
126
+ };
127
+
128
+ export default ssr;
129
+ export * from "./react";
@@ -0,0 +1,100 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
+
5
+ /* eslint-disable @typescript-eslint/no-var-requires */
6
+
7
+ /* eslint-disable @typescript-eslint/no-require-imports */
8
+ import path from 'path';
9
+ import { registerPrefetch } from '@modern-js/runtime-core';
10
+ import { isBrowser } from "../common";
11
+ import prefetch from "./prefetch";
12
+ import { formatServer } from "./utils";
13
+ var registeredApps = new WeakSet();
14
+
15
+ var plugin = function plugin() {
16
+ return {
17
+ name: '@modern-js/plugin-ssr',
18
+ setup: function setup() {
19
+ return {
20
+ server: function () {
21
+ var _server = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
22
+ var App, context, html;
23
+ return _regeneratorRuntime().wrap(function _callee$(_context2) {
24
+ while (1) {
25
+ switch (_context2.prev = _context2.next) {
26
+ case 0:
27
+ App = _ref.App, context = _ref.context;
28
+
29
+ if (!registeredApps.has(App)) {
30
+ registerPrefetch(App, function (_context) {
31
+ return prefetch(App, _context);
32
+ });
33
+ registeredApps.add(App);
34
+ }
35
+
36
+ if (isBrowser()) {
37
+ _context2.next = 7;
38
+ break;
39
+ }
40
+
41
+ _context2.next = 5;
42
+ return require("./serverRender").render(context, (context === null || context === void 0 ? void 0 : context.ssrContext.distDir) || path.join(process.cwd(), 'dist'), App);
43
+
44
+ case 5:
45
+ html = _context2.sent;
46
+ return _context2.abrupt("return", html);
47
+
48
+ case 7:
49
+ return _context2.abrupt("return", null);
50
+
51
+ case 8:
52
+ case "end":
53
+ return _context2.stop();
54
+ }
55
+ }
56
+ }, _callee);
57
+ }));
58
+
59
+ function server(_x) {
60
+ return _server.apply(this, arguments);
61
+ }
62
+
63
+ return server;
64
+ }(),
65
+ init: function init(_ref2, next) {
66
+ var context = _ref2.context;
67
+ var request = context.ssrContext.request;
68
+ context.ssrContext.request = formatServer(request);
69
+ return next({
70
+ context: context
71
+ });
72
+ },
73
+ pickContext: function pickContext(_ref3, next) {
74
+ var context = _ref3.context,
75
+ pickedContext = _ref3.pickedContext;
76
+
77
+ var _context$ssrContext = context === null || context === void 0 ? void 0 : context.ssrContext,
78
+ request = _context$ssrContext.request,
79
+ response = _context$ssrContext.response;
80
+
81
+ var initialData = context.initialData;
82
+ return next({
83
+ context: context,
84
+ pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
85
+ initialData: initialData,
86
+ request: request,
87
+ response: response
88
+ })
89
+ });
90
+ }
91
+ };
92
+ }
93
+ };
94
+ };
95
+
96
+ export default plugin;
97
+ export * from "./react";
98
+ /* eslint-enable @typescript-eslint/no-require-imports */
99
+
100
+ /* eslint-enable @typescript-eslint/no-var-requires */
@@ -0,0 +1,97 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import path from 'path';
4
+ import fs from 'fs';
5
+ import { renderToStaticMarkup } from 'react-dom/server';
6
+ import { run } from '@modern-js/utils/ssr';
7
+ import { LOADABLE_STATS_FILE } from '@modern-js/utils/constants';
8
+ import { ChunkExtractor } from '@loadable/server'; // todo: SSRContext
9
+
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+
12
+ var prefetch = /*#__PURE__*/function () {
13
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(App, context) {
14
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
15
+ while (1) {
16
+ switch (_context2.prev = _context2.next) {
17
+ case 0:
18
+ return _context2.abrupt("return", run(context.ssrContext.request.headers, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
19
+ var _context$store;
20
+
21
+ var ssrContext, loadablefile, extractor, loadersData;
22
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
23
+ while (1) {
24
+ switch (_context.prev = _context.next) {
25
+ case 0:
26
+ ssrContext = context.ssrContext;
27
+ loadablefile = path.resolve(ssrContext.distDir, LOADABLE_STATS_FILE);
28
+
29
+ if (fs.existsSync(loadablefile)) {
30
+ extractor = new ChunkExtractor({
31
+ statsFile: path.resolve(ssrContext.distDir, LOADABLE_STATS_FILE),
32
+ entrypoints: [ssrContext.entryName].filter(Boolean)
33
+ });
34
+ renderToStaticMarkup(extractor.collectChunks( /*#__PURE__*/_jsx(App, {
35
+ context: context
36
+ })));
37
+ } else {
38
+ renderToStaticMarkup( /*#__PURE__*/_jsx(App, {
39
+ context: context
40
+ }));
41
+ }
42
+
43
+ if (context.loaderManager.hasPendingLoaders()) {
44
+ _context.next = 5;
45
+ break;
46
+ }
47
+
48
+ return _context.abrupt("return", {
49
+ initialData: context.initialData,
50
+ i18nData: context.__i18nData__
51
+ });
52
+
53
+ case 5:
54
+ _context.next = 7;
55
+ return context.loaderManager.awaitPendingLoaders();
56
+
57
+ case 7:
58
+ loadersData = _context.sent;
59
+ Object.keys(loadersData).forEach(function (id) {
60
+ var data = loadersData[id];
61
+
62
+ if (data._error) {
63
+ ssrContext.logger.error('App Prefetch Loader', data._error);
64
+ ssrContext.metrics.emitCounter('app.prefetch.loader.error', 1);
65
+ delete data._error;
66
+ }
67
+ });
68
+ return _context.abrupt("return", {
69
+ loadersData: loadersData,
70
+ initialData: context.initialData,
71
+ i18nData: context.__i18nData__,
72
+ // todo: move to plugin state
73
+ storeState: context === null || context === void 0 ? void 0 : (_context$store = context.store) === null || _context$store === void 0 ? void 0 : _context$store.getState()
74
+ });
75
+
76
+ case 10:
77
+ case "end":
78
+ return _context.stop();
79
+ }
80
+ }
81
+ }, _callee);
82
+ }))));
83
+
84
+ case 1:
85
+ case "end":
86
+ return _context2.stop();
87
+ }
88
+ }
89
+ }, _callee2);
90
+ }));
91
+
92
+ return function prefetch(_x, _x2) {
93
+ return _ref.apply(this, arguments);
94
+ };
95
+ }();
96
+
97
+ export default prefetch;
@@ -0,0 +1,2 @@
1
+ export { PreRender } from "./prerender";
2
+ export { NoSSR } from "./nossr";
@@ -0,0 +1,16 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useEffect, useState } from 'react';
3
+ var csr = false;
4
+ export var NoSSR = function NoSSR(props) {
5
+ var _useState = useState(csr),
6
+ _useState2 = _slicedToArray(_useState, 2),
7
+ isMounted = _useState2[0],
8
+ setMounted = _useState2[1];
9
+
10
+ useEffect(function () {
11
+ csr = true;
12
+ setMounted(true);
13
+ });
14
+ var children = props.children;
15
+ return /*#__PURE__*/React.createElement(React.Fragment, null, isMounted ? children : null);
16
+ };
@@ -0,0 +1,119 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
4
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
6
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
7
+ import withSideEffect from 'react-side-effect';
8
+ import React, { createElement } from 'react';
9
+ import { getOutermostProperty, aggKeysFromPropsList, exist, aggMatchesFromPropsList } from "./util";
10
+ var PROP_NAMES = {
11
+ INTERVAL: 'interval',
12
+ STALE_LIMIT: 'staleLimit',
13
+ LEVEL: 'level',
14
+ INCLUDES: 'includes',
15
+ EXCLUDES: 'excludes',
16
+ FALLBACK: 'fallback',
17
+ MATCHES: 'matches'
18
+ };
19
+
20
+ var handleClientStateChange = function handleClientStateChange() {// not used
21
+ };
22
+
23
+ var mapStateOnServer = function mapStateOnServer(reduceProps) {
24
+ var defaultProps = {
25
+ interval: 10,
26
+ staleLimit: false,
27
+ level: 0,
28
+ includes: null,
29
+ excludes: null,
30
+ fallback: false,
31
+ matches: null
32
+ };
33
+ return Object.keys(defaultProps).reduce(function (props, key) {
34
+ var propKey = key;
35
+ var reduceProp = reduceProps[propKey];
36
+ var nextProps = props;
37
+
38
+ if (exist(reduceProp)) {
39
+ nextProps = _objectSpread(_objectSpread({}, props), {}, _defineProperty({}, propKey, reduceProp));
40
+ }
41
+
42
+ return nextProps;
43
+ }, defaultProps);
44
+ };
45
+
46
+ var reducePropsToState = function reducePropsToState(propsList) {
47
+ var reduceProps = {
48
+ interval: getOutermostProperty(propsList, PROP_NAMES.INTERVAL),
49
+ staleLimit: getOutermostProperty(propsList, PROP_NAMES.STALE_LIMIT),
50
+ level: getOutermostProperty(propsList, PROP_NAMES.LEVEL),
51
+ includes: aggKeysFromPropsList(propsList, PROP_NAMES.INCLUDES),
52
+ excludes: aggKeysFromPropsList(propsList, PROP_NAMES.EXCLUDES),
53
+ fallback: getOutermostProperty(propsList, PROP_NAMES.FALLBACK),
54
+ matches: aggMatchesFromPropsList(propsList, PROP_NAMES.MATCHES)
55
+ };
56
+ return reduceProps;
57
+ };
58
+
59
+ function factory(Component) {
60
+ var Spr = /*#__PURE__*/function (_React$Component) {
61
+ _inherits(Spr, _React$Component);
62
+
63
+ var _super = _createSuper(Spr);
64
+
65
+ function Spr() {
66
+ _classCallCheck(this, Spr);
67
+
68
+ return _super.apply(this, arguments);
69
+ }
70
+
71
+ _createClass(Spr, [{
72
+ key: "verify",
73
+ value: function verify() {
74
+ return true;
75
+ }
76
+ }, {
77
+ key: "render",
78
+ value: function render() {
79
+ var newProps = _objectSpread({}, this.props);
80
+
81
+ var validate = this.verify();
82
+
83
+ if (!validate) {
84
+ throw new Error('invalid props, check usage');
85
+ }
86
+
87
+ return /*#__PURE__*/createElement(Component, _objectSpread({}, newProps));
88
+ }
89
+ }], [{
90
+ key: "canUseDOM",
91
+ get: function get() {
92
+ return Component.canUseDOM;
93
+ },
94
+ set: function set(canUseDOM) {
95
+ Component.canUseDOM = canUseDOM;
96
+ }
97
+ }]);
98
+
99
+ return Spr;
100
+ }(React.Component);
101
+
102
+ _defineProperty(Spr, "peek", Component.peek);
103
+
104
+ _defineProperty(Spr, "rewind", Component.rewind);
105
+
106
+ _defineProperty(Spr, "config", function () {
107
+ var mappedState = Component.rewind();
108
+ return mappedState;
109
+ });
110
+
111
+ return Spr;
112
+ }
113
+
114
+ var NullComponent = function NullComponent() {
115
+ return null;
116
+ };
117
+
118
+ var SprSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
119
+ export var PreRender = factory(SprSideEffects);