@modern-js/runtime 2.4.0 → 2.4.1-beta.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 (86) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/js/modern/core/compatible.js +1 -0
  3. package/dist/js/modern/router/runtime/fetch.js +5 -0
  4. package/dist/js/modern/router/runtime/fetch.node.js +4 -0
  5. package/dist/js/modern/router/runtime/fetch.worker.js +5 -0
  6. package/dist/js/modern/router/runtime/plugin.node.js +2 -2
  7. package/dist/js/modern/ssr/cli/index.js +2 -2
  8. package/dist/js/modern/ssr/prefetch.worker.js +66 -0
  9. package/dist/js/modern/ssr/react/nossr/index.js +6 -2
  10. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +1 -1
  11. package/dist/js/modern/ssr/serverRender/renderToStream/index.worker.js +35 -0
  12. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.worker.js +110 -0
  13. package/dist/js/modern/ssr/serverRender/renderToString/entry.js +5 -4
  14. package/dist/js/modern/ssr/serverRender/renderToString/index.js +1 -1
  15. package/dist/js/modern/ssr/serverRender/renderToString/index.worker.js +49 -0
  16. package/dist/js/modern/ssr/serverRender/time.js +13 -0
  17. package/dist/js/modern/ssr/serverRender/time.worker.js +28 -0
  18. package/dist/js/modern/ssr/serverRender/utils.js +1 -12
  19. package/dist/js/node/core/compatible.js +1 -0
  20. package/dist/js/node/router/runtime/fetch.js +28 -0
  21. package/dist/js/node/router/runtime/fetch.node.js +27 -0
  22. package/dist/js/node/router/runtime/fetch.worker.js +28 -0
  23. package/dist/js/node/router/runtime/plugin.node.js +3 -3
  24. package/dist/js/node/ssr/cli/index.js +2 -2
  25. package/dist/js/node/ssr/prefetch.worker.js +87 -0
  26. package/dist/js/node/ssr/react/nossr/index.js +6 -2
  27. package/dist/js/node/ssr/serverRender/renderToStream/index.js +2 -2
  28. package/dist/js/node/ssr/serverRender/renderToStream/index.worker.js +64 -0
  29. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.worker.js +129 -0
  30. package/dist/js/node/ssr/serverRender/renderToString/entry.js +7 -6
  31. package/dist/js/node/ssr/serverRender/renderToString/index.js +2 -2
  32. package/dist/js/node/ssr/serverRender/renderToString/index.worker.js +78 -0
  33. package/dist/js/node/ssr/serverRender/time.js +36 -0
  34. package/dist/js/node/ssr/serverRender/time.worker.js +51 -0
  35. package/dist/js/node/ssr/serverRender/utils.js +2 -14
  36. package/dist/js/treeshaking/core/compatible.js +8 -7
  37. package/dist/js/treeshaking/core/loader/loaderManager.js +3 -3
  38. package/dist/js/treeshaking/core/loader/useLoader.js +15 -15
  39. package/dist/js/treeshaking/document/Head.js +1 -1
  40. package/dist/js/treeshaking/document/Html.js +2 -2
  41. package/dist/js/treeshaking/document/Root.js +2 -2
  42. package/dist/js/treeshaking/document/cli/index.js +4 -4
  43. package/dist/js/treeshaking/router/cli/index.js +2 -2
  44. package/dist/js/treeshaking/router/runtime/fetch.js +2 -0
  45. package/dist/js/treeshaking/router/runtime/fetch.node.js +2 -0
  46. package/dist/js/treeshaking/router/runtime/fetch.worker.js +2 -0
  47. package/dist/js/treeshaking/router/runtime/plugin.js +3 -3
  48. package/dist/js/treeshaking/router/runtime/plugin.node.js +5 -5
  49. package/dist/js/treeshaking/router/runtime/utils.js +3 -3
  50. package/dist/js/treeshaking/ssr/cli/index.js +5 -5
  51. package/dist/js/treeshaking/ssr/index.js +6 -6
  52. package/dist/js/treeshaking/ssr/index.node.js +1 -1
  53. package/dist/js/treeshaking/ssr/prefetch.js +2 -2
  54. package/dist/js/treeshaking/ssr/prefetch.worker.js +191 -0
  55. package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -3
  56. package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -2
  57. package/dist/js/treeshaking/ssr/react/prerender/util.js +2 -2
  58. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
  59. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +1 -1
  60. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.worker.js +32 -0
  61. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +1 -1
  62. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +8 -8
  63. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.worker.js +280 -0
  64. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +1 -1
  65. package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +5 -5
  66. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +1 -1
  67. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.worker.js +167 -0
  68. package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +1 -1
  69. package/dist/js/treeshaking/ssr/serverRender/time.js +57 -0
  70. package/dist/js/treeshaking/ssr/serverRender/time.worker.js +75 -0
  71. package/dist/js/treeshaking/ssr/serverRender/utils.js +1 -57
  72. package/dist/js/treeshaking/ssr/utils.js +5 -5
  73. package/dist/js/treeshaking/state/cli/index.js +2 -2
  74. package/dist/js/treeshaking/state/runtime/plugin.js +3 -3
  75. package/dist/types/router/runtime/fetch.d.ts +2 -0
  76. package/dist/types/router/runtime/fetch.node.d.ts +2 -0
  77. package/dist/types/router/runtime/fetch.worker.d.ts +2 -0
  78. package/dist/types/ssr/prefetch.worker.d.ts +13 -0
  79. package/dist/types/ssr/react/nossr/index.d.ts +4 -2
  80. package/dist/types/ssr/serverRender/renderToStream/index.worker.d.ts +6 -0
  81. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +8 -0
  82. package/dist/types/ssr/serverRender/renderToString/index.worker.d.ts +6 -0
  83. package/dist/types/ssr/serverRender/time.d.ts +1 -0
  84. package/dist/types/ssr/serverRender/time.worker.d.ts +1 -0
  85. package/dist/types/ssr/serverRender/utils.d.ts +2 -3
  86. package/package.json +6 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @modern-js/runtime
2
2
 
3
+ ## 2.4.1-beta.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 7a25271: feat: support NoSSR component fallback UI
8
+ feat: 支持 NoSSR 组件 fallback UI
9
+ - 11c053b: feat: ssr support deploy worker
10
+
11
+ feat: ssr 支持边缘部署
12
+
13
+ - a0f2ab1: fix: ssg new Headers() error
14
+
15
+ fix: 修复 ssg 渲染是 new Headers() 报错问题
16
+
17
+ - Updated dependencies [11c053b]
18
+ - @modern-js/utils@2.4.1-beta.0
19
+
3
20
  ## 2.4.0
4
21
 
5
22
  ### Patch Changes
@@ -248,6 +248,7 @@ const bootstrap = (BootApp, id, root, ReactDOM) => __async(void 0, null, functio
248
248
  if (ssrContext) {
249
249
  ssrContext.res.statusCode = status;
250
250
  ssrContext.res.setHeader("Location", redirectUrl);
251
+ ssrContext.redirection = ssrContext.redirection || {};
251
252
  ssrContext.redirection.status = status;
252
253
  ssrContext.redirection.url = redirectUrl;
253
254
  }
@@ -0,0 +1,5 @@
1
+ function installGlobals() {
2
+ }
3
+ export {
4
+ installGlobals
5
+ };
@@ -0,0 +1,4 @@
1
+ import { installGlobals } from "@remix-run/node";
2
+ export {
3
+ installGlobals
4
+ };
@@ -0,0 +1,5 @@
1
+ function installGlobals() {
2
+ }
3
+ export {
4
+ installGlobals
5
+ };
@@ -45,10 +45,10 @@ import {
45
45
  StaticRouterProvider
46
46
  } from "react-router-dom/server";
47
47
  import hoistNonReactStatics from "hoist-non-react-statics";
48
- import { installGlobals } from "@remix-run/node";
49
48
  import { createRoutesFromElements } from "react-router-dom";
50
49
  import { RuntimeReactContext } from "../../core";
51
50
  import { renderRoutes, urlJoin } from "./utils";
51
+ import { installGlobals } from "./fetch";
52
52
  installGlobals();
53
53
  function createFetchRequest(req) {
54
54
  const origin = `${req.protocol}://${req.host}`;
@@ -63,7 +63,7 @@ function createFetchRequest(req) {
63
63
  }
64
64
  function createFetchHeaders(requestHeaders) {
65
65
  const headers = new Headers();
66
- for (const [key, values] of Object.entries(requestHeaders)) {
66
+ for (const [key, values] of Object.entries(requestHeaders || {})) {
67
67
  if (values) {
68
68
  if (Array.isArray(values)) {
69
69
  for (const value of values) {
@@ -59,7 +59,7 @@ var cli_default = () => ({
59
59
  }
60
60
  },
61
61
  tools: {
62
- webpackChain: (chain, { name, isServer, CHAIN_ID }) => {
62
+ webpackChain: (chain, { name, isServer, isServiceWorker, CHAIN_ID }) => {
63
63
  const userConfig = api.useResolvedConfigContext();
64
64
  if (isUseSSRBundle(userConfig) && name !== "server" && hasStringSSREntry(userConfig)) {
65
65
  const LoadableWebpackPlugin = require("@loadable/webpack-plugin");
@@ -69,7 +69,7 @@ var cli_default = () => ({
69
69
  }
70
70
  const modernVars = {
71
71
  [`process.env.MODERN_TARGET`]: JSON.stringify(
72
- isServer ? "node" : "browser"
72
+ isServer || isServiceWorker ? "node" : "browser"
73
73
  )
74
74
  };
75
75
  chain.plugin(CHAIN_ID.PLUGIN.DEFINE).tap((args) => {
@@ -0,0 +1,66 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { jsx } from "react/jsx-runtime";
22
+ import { renderToStaticMarkup } from "react-dom/server";
23
+ import { ChunkExtractor } from "@loadable/server";
24
+ const prefetch = (App, context) => __async(void 0, null, function* () {
25
+ var _a;
26
+ const { ssrContext } = context;
27
+ const { loadableStats } = ssrContext;
28
+ if (loadableStats) {
29
+ const extractor = new ChunkExtractor({
30
+ stats: loadableStats,
31
+ entrypoints: [ssrContext.entryName].filter(Boolean)
32
+ });
33
+ renderToStaticMarkup(extractor.collectChunks(/* @__PURE__ */ jsx(App, {
34
+ context
35
+ })));
36
+ } else {
37
+ renderToStaticMarkup(/* @__PURE__ */ jsx(App, {
38
+ context
39
+ }));
40
+ }
41
+ if (!context.loaderManager.hasPendingLoaders()) {
42
+ return {
43
+ initialData: context.initialData,
44
+ i18nData: context.__i18nData__
45
+ };
46
+ }
47
+ const loadersData = yield context.loaderManager.awaitPendingLoaders();
48
+ Object.keys(loadersData).forEach((id) => {
49
+ const data = loadersData[id];
50
+ if (data._error) {
51
+ ssrContext.logger.error("App Prefetch Loader", data._error);
52
+ ssrContext.metrics.emitCounter("app.prefetch.loader.error", 1);
53
+ delete data._error;
54
+ }
55
+ });
56
+ return {
57
+ loadersData,
58
+ initialData: context.initialData,
59
+ i18nData: context.__i18nData__,
60
+ storeState: (_a = context == null ? void 0 : context.store) == null ? void 0 : _a.getState()
61
+ };
62
+ });
63
+ var prefetch_worker_default = prefetch;
64
+ export {
65
+ prefetch_worker_default as default
66
+ };
@@ -6,8 +6,12 @@ const NoSSR = (props) => {
6
6
  csr = true;
7
7
  setMounted(true);
8
8
  });
9
- const { children } = props;
10
- return React.createElement(React.Fragment, null, isMounted ? children : null);
9
+ const { children, fallback = null } = props;
10
+ return React.createElement(
11
+ React.Fragment,
12
+ null,
13
+ isMounted ? children : fallback
14
+ );
11
15
  };
12
16
  export {
13
17
  NoSSR
@@ -21,7 +21,7 @@ var __async = (__this, __arguments, generator) => {
21
21
  import { createElement } from "react";
22
22
  import { run } from "@modern-js/utils/ssr";
23
23
  import { PreRender } from "../../react/prerender";
24
- import { time } from "../utils";
24
+ import { time } from "../time";
25
25
  import renderToPipe from "./renderToPipe";
26
26
  const render = ({ App, context }) => {
27
27
  const { ssrContext } = context;
@@ -0,0 +1,35 @@
1
+ import { createElement } from "react";
2
+ import { PreRender } from "../../react/prerender";
3
+ import { time } from "../time";
4
+ import renderToPipe from "./renderToPipe";
5
+ const render = ({ App, context }) => {
6
+ const { ssrContext } = context;
7
+ if (!ssrContext) {
8
+ throw new Error(
9
+ 'The "ssrContext" must not be undefined, but received undefined'
10
+ );
11
+ }
12
+ const end = time();
13
+ const rootElement = createElement(App, {
14
+ context: Object.assign(context || {}, {
15
+ ssr: true
16
+ })
17
+ });
18
+ const pipe = renderToPipe(rootElement, context, {
19
+ onShellReady() {
20
+ const cacheConfig = PreRender.config();
21
+ if (cacheConfig) {
22
+ ssrContext.cacheConfig = cacheConfig;
23
+ }
24
+ },
25
+ onAllReady() {
26
+ const cost = end();
27
+ ssrContext.logger.debug("App Render To HTML cost = %d ms", cost);
28
+ ssrContext.metrics.emitTimer("app.render.html.cost", cost);
29
+ }
30
+ });
31
+ return pipe;
32
+ };
33
+ export {
34
+ render
35
+ };
@@ -0,0 +1,110 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __async = (__this, __arguments, generator) => {
21
+ return new Promise((resolve, reject) => {
22
+ var fulfilled = (value) => {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ };
29
+ var rejected = (value) => {
30
+ try {
31
+ step(generator.throw(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
+ step((generator = generator.apply(__this, __arguments)).next());
38
+ });
39
+ };
40
+ import { RenderLevel } from "../types";
41
+ import { getTemplates } from "./template";
42
+ function renderToPipe(rootElement, context, options) {
43
+ let isShellStream = true;
44
+ const { ssrContext } = context;
45
+ const forUserPipe = (stream) => __async(this, null, function* () {
46
+ let renderToReadableStream;
47
+ try {
48
+ ({ renderToReadableStream } = require("react-dom/server"));
49
+ } catch (e) {
50
+ }
51
+ const { shellAfter, shellBefore } = getTemplates(
52
+ context,
53
+ RenderLevel.SERVER_RENDER
54
+ );
55
+ try {
56
+ let _a;
57
+ const readableOriginal = yield renderToReadableStream(rootElement, __spreadProps(__spreadValues({}, options), {
58
+ onError(error) {
59
+ var _a2;
60
+ ssrContext.logger.error(
61
+ "An error occurs during streaming SSR",
62
+ error
63
+ );
64
+ ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
65
+ (_a2 = options == null ? void 0 : options.onError) == null ? void 0 : _a2.call(options, error);
66
+ }
67
+ }));
68
+ const reader = readableOriginal.getReader();
69
+ const injectableStream = new ReadableStream({
70
+ start(controller) {
71
+ return __async(this, null, function* () {
72
+ const { value } = yield reader.read();
73
+ if (isShellStream) {
74
+ controller.enqueue(encodeForWebStream(shellBefore));
75
+ controller.enqueue(value);
76
+ controller.enqueue(encodeForWebStream(shellAfter));
77
+ isShellStream = false;
78
+ } else {
79
+ controller.enqueue(value);
80
+ }
81
+ });
82
+ }
83
+ });
84
+ return readableOriginal(injectableStream).readableOriginal(stream);
85
+ } catch (err) {
86
+ ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
87
+ const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = getTemplates(
88
+ context,
89
+ RenderLevel.CLIENT_RENDER
90
+ );
91
+ const fallbackHtml = `${shellBefore2}${shellAfter2}`;
92
+ return fallbackHtml;
93
+ }
94
+ });
95
+ return forUserPipe;
96
+ }
97
+ let encoder;
98
+ function encodeForWebStream(thing) {
99
+ if (!encoder) {
100
+ encoder = new TextEncoder();
101
+ }
102
+ if (typeof thing === "string") {
103
+ return encoder.encode(thing);
104
+ }
105
+ return thing;
106
+ }
107
+ var renderToPipe_worker_default = renderToPipe;
108
+ export {
109
+ renderToPipe_worker_default as default
110
+ };
@@ -26,7 +26,7 @@ import helmetReplace from "../helmet";
26
26
  import {
27
27
  RenderLevel
28
28
  } from "../types";
29
- import { time } from "../utils";
29
+ import { time } from "../time";
30
30
  import prefetch from "../../prefetch";
31
31
  import { toFragments } from "./template";
32
32
  import { reduce } from "./reduce";
@@ -76,18 +76,19 @@ class Entry {
76
76
  }
77
77
  renderToHtml(context) {
78
78
  return __async(this, null, function* () {
79
+ var _a, _b, _c;
79
80
  const ssrContext = context.ssrContext;
80
- if (ssrContext.redirection.url) {
81
+ if ((_a = ssrContext.redirection) == null ? void 0 : _a.url) {
81
82
  return "";
82
83
  }
83
84
  const prefetchData = yield this.prefetch(context);
84
- if (ssrContext.redirection.url) {
85
+ if ((_b = ssrContext.redirection) == null ? void 0 : _b.url) {
85
86
  return "";
86
87
  }
87
88
  if (this.result.renderLevel >= RenderLevel.SERVER_PREFETCH) {
88
89
  this.result.html = this.renderToString(context);
89
90
  }
90
- if (ssrContext.redirection.url) {
91
+ if ((_c = ssrContext.redirection) == null ? void 0 : _c.url) {
91
92
  return "";
92
93
  }
93
94
  let html = "";
@@ -20,7 +20,7 @@ var __async = (__this, __arguments, generator) => {
20
20
  };
21
21
  import { run } from "@modern-js/utils/ssr";
22
22
  import { PreRender } from "../../react/prerender";
23
- import { time } from "../utils";
23
+ import { time } from "../time";
24
24
  import SSREntry from "./entry";
25
25
  const render = ({
26
26
  App,
@@ -0,0 +1,49 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { PreRender } from "../../react/prerender";
22
+ import { time } from "../time";
23
+ import SSREntry from "./entry";
24
+ const render = (_0) => __async(void 0, [_0], function* ({
25
+ App,
26
+ context,
27
+ config
28
+ }) {
29
+ const ssrContext = context.ssrContext;
30
+ const entry = new SSREntry({
31
+ ctx: ssrContext,
32
+ App,
33
+ config
34
+ });
35
+ entry.metrics.emitCounter("app.visit.count", 1);
36
+ const end = time();
37
+ const html = yield entry.renderToHtml(context);
38
+ const cost = end();
39
+ entry.logger.info("App Render Total cost = %d ms", cost);
40
+ entry.metrics.emitTimer("app.render.cost", cost);
41
+ const cacheConfig = PreRender.config();
42
+ if (cacheConfig) {
43
+ context.ssrContext.cacheConfig = cacheConfig;
44
+ }
45
+ return html;
46
+ });
47
+ export {
48
+ render
49
+ };
@@ -0,0 +1,13 @@
1
+ const getLatency = (hrtime) => {
2
+ const [s, ns] = process.hrtime(hrtime);
3
+ return s * 1e3 + ns / 1e6;
4
+ };
5
+ const time = () => {
6
+ const hrtime = process.hrtime();
7
+ return () => {
8
+ return getLatency(hrtime);
9
+ };
10
+ };
11
+ export {
12
+ time
13
+ };
@@ -0,0 +1,28 @@
1
+ function processHrtime(previousTimestamp) {
2
+ const now = new Date().getTime();
3
+ const clocktime = now * 1e-3;
4
+ let seconds = Math.floor(clocktime);
5
+ let nanoseconds = Math.floor(clocktime % 1 * 1e9);
6
+ if (previousTimestamp) {
7
+ seconds -= previousTimestamp[0];
8
+ nanoseconds -= previousTimestamp[1];
9
+ if (nanoseconds < 0) {
10
+ seconds--;
11
+ nanoseconds += 1e9;
12
+ }
13
+ }
14
+ return [seconds, nanoseconds];
15
+ }
16
+ const getLatency = (hrtime) => {
17
+ const [s, ns] = processHrtime(hrtime);
18
+ return s * 1e3 + ns / 1e6;
19
+ };
20
+ const time = () => {
21
+ const hrtime = processHrtime();
22
+ return () => {
23
+ return getLatency(hrtime);
24
+ };
25
+ };
26
+ export {
27
+ time
28
+ };
@@ -6,17 +6,6 @@ function getLoadableScripts(extractor) {
6
6
  }
7
7
  return scripts.split("<\/script>").slice(0, 2).map((i) => `${i}<\/script>`).join("");
8
8
  }
9
- const getLatency = (hrtime) => {
10
- const [s, ns] = process.hrtime(hrtime);
11
- return s * 1e3 + ns / 1e6;
12
- };
13
- const time = () => {
14
- const hrtime = process.hrtime();
15
- return () => {
16
- return getLatency(hrtime);
17
- };
18
- };
19
9
  export {
20
- getLoadableScripts,
21
- time
10
+ getLoadableScripts
22
11
  };
@@ -274,6 +274,7 @@ const bootstrap = (BootApp, id, root, ReactDOM) => __async(void 0, null, functio
274
274
  if (ssrContext) {
275
275
  ssrContext.res.statusCode = status;
276
276
  ssrContext.res.setHeader("Location", redirectUrl);
277
+ ssrContext.redirection = ssrContext.redirection || {};
277
278
  ssrContext.redirection.status = status;
278
279
  ssrContext.redirection.url = redirectUrl;
279
280
  }
@@ -0,0 +1,28 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var fetch_exports = {};
19
+ __export(fetch_exports, {
20
+ installGlobals: () => installGlobals
21
+ });
22
+ module.exports = __toCommonJS(fetch_exports);
23
+ function installGlobals() {
24
+ }
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ installGlobals
28
+ });
@@ -0,0 +1,27 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var fetch_node_exports = {};
19
+ __export(fetch_node_exports, {
20
+ installGlobals: () => import_node.installGlobals
21
+ });
22
+ module.exports = __toCommonJS(fetch_node_exports);
23
+ var import_node = require("@remix-run/node");
24
+ // Annotate the CommonJS export names for ESM import in node:
25
+ 0 && (module.exports = {
26
+ installGlobals
27
+ });
@@ -0,0 +1,28 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var fetch_worker_exports = {};
19
+ __export(fetch_worker_exports, {
20
+ installGlobals: () => installGlobals
21
+ });
22
+ module.exports = __toCommonJS(fetch_worker_exports);
23
+ function installGlobals() {
24
+ }
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ installGlobals
28
+ });
@@ -70,11 +70,11 @@ var import_react = require("react");
70
70
  var import_router = require("@remix-run/router");
71
71
  var import_server = require("react-router-dom/server");
72
72
  var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
73
- var import_node = require("@remix-run/node");
74
73
  var import_react_router_dom = require("react-router-dom");
75
74
  var import_core = require("../../core");
76
75
  var import_utils = require("./utils");
77
- (0, import_node.installGlobals)();
76
+ var import_fetch = require("./fetch");
77
+ (0, import_fetch.installGlobals)();
78
78
  function createFetchRequest(req) {
79
79
  const origin = `${req.protocol}://${req.host}`;
80
80
  const url = new URL(req.originalUrl || req.url, origin);
@@ -88,7 +88,7 @@ function createFetchRequest(req) {
88
88
  }
89
89
  function createFetchHeaders(requestHeaders) {
90
90
  const headers = new Headers();
91
- for (const [key, values] of Object.entries(requestHeaders)) {
91
+ for (const [key, values] of Object.entries(requestHeaders || {})) {
92
92
  if (values) {
93
93
  if (Array.isArray(values)) {
94
94
  for (const value of values) {
@@ -78,7 +78,7 @@ var cli_default = () => ({
78
78
  }
79
79
  },
80
80
  tools: {
81
- webpackChain: (chain, { name, isServer, CHAIN_ID }) => {
81
+ webpackChain: (chain, { name, isServer, isServiceWorker, CHAIN_ID }) => {
82
82
  const userConfig = api.useResolvedConfigContext();
83
83
  if ((0, import_utils.isUseSSRBundle)(userConfig) && name !== "server" && hasStringSSREntry(userConfig)) {
84
84
  const LoadableWebpackPlugin = require("@loadable/webpack-plugin");
@@ -88,7 +88,7 @@ var cli_default = () => ({
88
88
  }
89
89
  const modernVars = {
90
90
  [`process.env.MODERN_TARGET`]: JSON.stringify(
91
- isServer ? "node" : "browser"
91
+ isServer || isServiceWorker ? "node" : "browser"
92
92
  )
93
93
  };
94
94
  chain.plugin(CHAIN_ID.PLUGIN.DEFINE).tap((args) => {