@modern-js/runtime 2.57.2-alpha.0 → 2.57.2-alpha.1

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.
@@ -86,7 +86,6 @@ const ssrPlugin = () => ({
86
86
  "@modern-js/runtime"
87
87
  ],
88
88
  setup: (api) => {
89
- const appContext = api.useAppContext();
90
89
  return {
91
90
  // for bundle
92
91
  config() {
@@ -124,19 +123,7 @@ const ssrPlugin = () => ({
124
123
  }
125
124
  },
126
125
  tools: {
127
- babel: babelHandler,
128
- bundlerChain: (chain, { isServer }) => {
129
- if (isServer && appContext.moduleType === "module") {
130
- chain.output.libraryTarget("module").set("chunkFormat", "module");
131
- chain.output.library({
132
- type: "module"
133
- });
134
- chain.experiments({
135
- ...chain.get("experiments"),
136
- outputModule: true
137
- });
138
- }
139
- }
126
+ babel: babelHandler
140
127
  }
141
128
  };
142
129
  }
@@ -32,11 +32,13 @@ __export(browser_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(browser_exports);
34
34
  var import_cookie = __toESM(require("cookie"));
35
+ var import_parsed = require("@modern-js/runtime-utils/parsed");
35
36
  var import_context = require("../context");
36
37
  var import_runtime = require("../context/runtime");
37
38
  var import_loaderManager = require("../loader/loaderManager");
38
39
  var import_runner = require("../plugin/runner");
39
40
  var import_wrapper = require("../react/wrapper");
41
+ var import_constants = require("../constants");
40
42
  var import_hydrate = require("./hydrate");
41
43
  const IS_REACT18 = process.env.IS_REACT18 === "true";
42
44
  function getSSRData() {
@@ -71,6 +73,9 @@ async function render(App, id) {
71
73
  };
72
74
  if (isClientArgs(id)) {
73
75
  var _ssrData_data, _ssrData_data1;
76
+ window._SSR_DATA = window._SSR_DATA || (0, import_parsed.parsedJSONFromElement)(import_constants.SSR_DATA_JSON_ID);
77
+ const routeData = (0, import_parsed.parsedJSONFromElement)(import_constants.ROUTER_DATA_JSON_ID);
78
+ window._ROUTER_DATA = window._ROUTER_DATA || routeData;
74
79
  const ssrData = getSSRData();
75
80
  const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData_data = ssrData.data) === null || _ssrData_data === void 0 ? void 0 : _ssrData_data.loadersData) || {};
76
81
  const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
@@ -18,7 +18,9 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var constants_exports = {};
20
20
  __export(constants_exports, {
21
- RenderLevel: () => RenderLevel
21
+ ROUTER_DATA_JSON_ID: () => ROUTER_DATA_JSON_ID,
22
+ RenderLevel: () => RenderLevel,
23
+ SSR_DATA_JSON_ID: () => SSR_DATA_JSON_ID
22
24
  });
23
25
  module.exports = __toCommonJS(constants_exports);
24
26
  var RenderLevel;
@@ -27,7 +29,11 @@ var RenderLevel;
27
29
  RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
28
30
  RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
29
31
  })(RenderLevel || (RenderLevel = {}));
32
+ const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
33
+ const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
30
34
  // Annotate the CommonJS export names for ESM import in node:
31
35
  0 && (module.exports = {
32
- RenderLevel
36
+ ROUTER_DATA_JSON_ID,
37
+ RenderLevel,
38
+ SSR_DATA_JSON_ID
33
39
  });
@@ -24,6 +24,7 @@ __export(context_exports, {
24
24
  getGlobalAppInit: () => getGlobalAppInit,
25
25
  getGlobalLayoutApp: () => getGlobalLayoutApp,
26
26
  getGlobalRoutes: () => getGlobalRoutes,
27
+ getInitialContext: () => import_runtime.getInitialContext,
27
28
  setGlobalContext: () => setGlobalContext
28
29
  });
29
30
  module.exports = __toCommonJS(context_exports);
@@ -61,5 +62,6 @@ function getGlobalLayoutApp() {
61
62
  getGlobalAppInit,
62
63
  getGlobalLayoutApp,
63
64
  getGlobalRoutes,
65
+ getInitialContext,
64
66
  setGlobalContext
65
67
  });
@@ -21,8 +21,6 @@ __export(constants_exports, {
21
21
  CHUNK_CSS_PLACEHOLDER: () => CHUNK_CSS_PLACEHOLDER,
22
22
  CHUNK_JS_PLACEHOLDER: () => CHUNK_JS_PLACEHOLDER,
23
23
  HTML_PLACEHOLDER: () => HTML_PLACEHOLDER,
24
- ROUTER_DATA_JSON_ID: () => ROUTER_DATA_JSON_ID,
25
- SSR_DATA_JSON_ID: () => SSR_DATA_JSON_ID,
26
24
  SSR_DATA_PLACEHOLDER: () => SSR_DATA_PLACEHOLDER
27
25
  });
28
26
  module.exports = __toCommonJS(constants_exports);
@@ -30,14 +28,10 @@ const HTML_PLACEHOLDER = "<!--<?- html ?>-->";
30
28
  const SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
31
29
  const CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
32
30
  const CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
33
- const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
34
- const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
35
31
  // Annotate the CommonJS export names for ESM import in node:
36
32
  0 && (module.exports = {
37
33
  CHUNK_CSS_PLACEHOLDER,
38
34
  CHUNK_JS_PLACEHOLDER,
39
35
  HTML_PLACEHOLDER,
40
- ROUTER_DATA_JSON_ID,
41
- SSR_DATA_JSON_ID,
42
36
  SSR_DATA_PLACEHOLDER
43
37
  });
@@ -28,7 +28,7 @@ var import_class_private_method_get = require("@swc/helpers/_/_class_private_met
28
28
  var import_class_private_method_init = require("@swc/helpers/_/_class_private_method_init");
29
29
  var import_node = require("@modern-js/runtime-utils/node");
30
30
  var import_utils = require("../utils");
31
- var import_constants = require("../constants");
31
+ var import_constants = require("../../constants");
32
32
  var _options = /* @__PURE__ */ new WeakMap(), _getSSRData = /* @__PURE__ */ new WeakSet(), _getSSRDataScripts = /* @__PURE__ */ new WeakSet();
33
33
  class SSRDataCollector {
34
34
  effect() {
@@ -1,5 +1,3 @@
1
- import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
- import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
3
1
  import path from "path";
4
2
  import { LOADABLE_STATS_FILE, isUseSSRBundle } from "@modern-js/utils";
5
3
  var hasStringSSREntry = function(userConfig) {
@@ -77,7 +75,6 @@ var ssrPlugin = function() {
77
75
  "@modern-js/runtime"
78
76
  ],
79
77
  setup: function(api) {
80
- var appContext = api.useAppContext();
81
78
  return {
82
79
  // for bundle
83
80
  config: function config() {
@@ -115,19 +112,7 @@ var ssrPlugin = function() {
115
112
  }
116
113
  },
117
114
  tools: {
118
- babel: babelHandler,
119
- bundlerChain: function(chain, param) {
120
- var isServer = param.isServer;
121
- if (isServer && appContext.moduleType === "module") {
122
- chain.output.libraryTarget("module").set("chunkFormat", "module");
123
- chain.output.library({
124
- type: "module"
125
- });
126
- chain.experiments(_object_spread_props(_object_spread({}, chain.get("experiments")), {
127
- outputModule: true
128
- }));
129
- }
130
- }
115
+ babel: babelHandler
131
116
  }
132
117
  };
133
118
  }
@@ -4,11 +4,13 @@ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
4
4
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
5
5
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
6
6
  import cookieTool from "cookie";
7
+ import { parsedJSONFromElement } from "@modern-js/runtime-utils/parsed";
7
8
  import { getGlobalAppInit } from "../context";
8
9
  import { getInitialContext } from "../context/runtime";
9
10
  import { createLoaderManager } from "../loader/loaderManager";
10
11
  import { getGlobalRunner } from "../plugin/runner";
11
12
  import { wrapRuntimeContextProvider } from "../react/wrapper";
13
+ import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../constants";
12
14
  import { hydrateRoot } from "./hydrate";
13
15
  var IS_REACT18 = process.env.IS_REACT18 === "true";
14
16
  function getSSRData() {
@@ -35,7 +37,7 @@ function render(App, id) {
35
37
  }
36
38
  function _render() {
37
39
  _render = _async_to_generator(function(App, id) {
38
- var runner, context, runBeforeRender, ModernRender, ModernHydrate, _ssrData_data, _ssrData_data1, ssrData, loadersData, initialLoadersState, initialData, rootElement;
40
+ var runner, context, runBeforeRender, ModernRender, ModernHydrate, _ssrData_data, _ssrData_data1, routeData, ssrData, loadersData, initialLoadersState, initialData, rootElement;
39
41
  function _ModernRender() {
40
42
  _ModernRender = _async_to_generator(function(App2) {
41
43
  var renderFunc;
@@ -102,6 +104,9 @@ function _render() {
102
104
  ModernHydrate = function ModernHydrate2(App2, callback) {
103
105
  return _ModernHydrate.apply(this, arguments);
104
106
  };
107
+ window._SSR_DATA = window._SSR_DATA || parsedJSONFromElement(SSR_DATA_JSON_ID);
108
+ routeData = parsedJSONFromElement(ROUTER_DATA_JSON_ID);
109
+ window._ROUTER_DATA = window._ROUTER_DATA || routeData;
105
110
  ssrData = getSSRData();
106
111
  loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData_data = ssrData.data) === null || _ssrData_data === void 0 ? void 0 : _ssrData_data.loadersData) || {};
107
112
  initialLoadersState = Object.keys(loadersData).reduce(function(res, key) {
@@ -4,6 +4,10 @@ var RenderLevel;
4
4
  RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
5
5
  RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
6
6
  })(RenderLevel || (RenderLevel = {}));
7
+ var SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
8
+ var ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
7
9
  export {
8
- RenderLevel
10
+ ROUTER_DATA_JSON_ID,
11
+ RenderLevel,
12
+ SSR_DATA_JSON_ID
9
13
  };
@@ -1,4 +1,4 @@
1
- import { RuntimeReactContext } from "./runtime";
1
+ import { RuntimeReactContext, getInitialContext } from "./runtime";
2
2
  var globalContext = {};
3
3
  function setGlobalContext(context) {
4
4
  globalContext.App = context.App;
@@ -31,5 +31,6 @@ export {
31
31
  getGlobalAppInit,
32
32
  getGlobalLayoutApp,
33
33
  getGlobalRoutes,
34
+ getInitialContext,
34
35
  setGlobalContext
35
36
  };
@@ -2,13 +2,9 @@ var HTML_PLACEHOLDER = "<!--<?- html ?>-->";
2
2
  var SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
3
3
  var CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
4
4
  var CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
5
- var SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
6
- var ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
7
5
  export {
8
6
  CHUNK_CSS_PLACEHOLDER,
9
7
  CHUNK_JS_PLACEHOLDER,
10
8
  HTML_PLACEHOLDER,
11
- ROUTER_DATA_JSON_ID,
12
- SSR_DATA_JSON_ID,
13
9
  SSR_DATA_PLACEHOLDER
14
10
  };
@@ -7,7 +7,7 @@ import { _ as _class_private_method_init } from "@swc/helpers/_/_class_private_m
7
7
  import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
8
8
  import { serializeJson } from "@modern-js/runtime-utils/node";
9
9
  import { attributesToString, serializeErrors } from "../utils";
10
- import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../constants";
10
+ import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../../constants";
11
11
  var _options = /* @__PURE__ */ new WeakMap(), _getSSRData = /* @__PURE__ */ new WeakSet(), _getSSRDataScripts = /* @__PURE__ */ new WeakSet();
12
12
  var SSRDataCollector = /* @__PURE__ */ function() {
13
13
  "use strict";
@@ -52,7 +52,6 @@ const ssrPlugin = () => ({
52
52
  "@modern-js/runtime"
53
53
  ],
54
54
  setup: (api) => {
55
- const appContext = api.useAppContext();
56
55
  return {
57
56
  // for bundle
58
57
  config() {
@@ -90,19 +89,7 @@ const ssrPlugin = () => ({
90
89
  }
91
90
  },
92
91
  tools: {
93
- babel: babelHandler,
94
- bundlerChain: (chain, { isServer }) => {
95
- if (isServer && appContext.moduleType === "module") {
96
- chain.output.libraryTarget("module").set("chunkFormat", "module");
97
- chain.output.library({
98
- type: "module"
99
- });
100
- chain.experiments({
101
- ...chain.get("experiments"),
102
- outputModule: true
103
- });
104
- }
105
- }
92
+ babel: babelHandler
106
93
  }
107
94
  };
108
95
  }
@@ -1,9 +1,11 @@
1
1
  import cookieTool from "cookie";
2
+ import { parsedJSONFromElement } from "@modern-js/runtime-utils/parsed";
2
3
  import { getGlobalAppInit } from "../context";
3
4
  import { getInitialContext } from "../context/runtime";
4
5
  import { createLoaderManager } from "../loader/loaderManager";
5
6
  import { getGlobalRunner } from "../plugin/runner";
6
7
  import { wrapRuntimeContextProvider } from "../react/wrapper";
8
+ import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../constants";
7
9
  import { hydrateRoot } from "./hydrate";
8
10
  const IS_REACT18 = process.env.IS_REACT18 === "true";
9
11
  function getSSRData() {
@@ -38,6 +40,9 @@ async function render(App, id) {
38
40
  };
39
41
  if (isClientArgs(id)) {
40
42
  var _ssrData_data, _ssrData_data1;
43
+ window._SSR_DATA = window._SSR_DATA || parsedJSONFromElement(SSR_DATA_JSON_ID);
44
+ const routeData = parsedJSONFromElement(ROUTER_DATA_JSON_ID);
45
+ window._ROUTER_DATA = window._ROUTER_DATA || routeData;
41
46
  const ssrData = getSSRData();
42
47
  const loadersData = (ssrData === null || ssrData === void 0 ? void 0 : (_ssrData_data = ssrData.data) === null || _ssrData_data === void 0 ? void 0 : _ssrData_data.loadersData) || {};
43
48
  const initialLoadersState = Object.keys(loadersData).reduce((res, key) => {
@@ -4,6 +4,10 @@ var RenderLevel;
4
4
  RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
5
5
  RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
6
6
  })(RenderLevel || (RenderLevel = {}));
7
+ const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
8
+ const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
7
9
  export {
8
- RenderLevel
10
+ ROUTER_DATA_JSON_ID,
11
+ RenderLevel,
12
+ SSR_DATA_JSON_ID
9
13
  };
@@ -1,4 +1,4 @@
1
- import { RuntimeReactContext } from "./runtime";
1
+ import { RuntimeReactContext, getInitialContext } from "./runtime";
2
2
  const globalContext = {};
3
3
  function setGlobalContext(context) {
4
4
  globalContext.App = context.App;
@@ -31,5 +31,6 @@ export {
31
31
  getGlobalAppInit,
32
32
  getGlobalLayoutApp,
33
33
  getGlobalRoutes,
34
+ getInitialContext,
34
35
  setGlobalContext
35
36
  };
@@ -2,13 +2,9 @@ const HTML_PLACEHOLDER = "<!--<?- html ?>-->";
2
2
  const SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
3
3
  const CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
4
4
  const CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
5
- const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
6
- const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
7
5
  export {
8
6
  CHUNK_CSS_PLACEHOLDER,
9
7
  CHUNK_JS_PLACEHOLDER,
10
8
  HTML_PLACEHOLDER,
11
- ROUTER_DATA_JSON_ID,
12
- SSR_DATA_JSON_ID,
13
9
  SSR_DATA_PLACEHOLDER
14
10
  };
@@ -5,7 +5,7 @@ import { _ as _class_private_method_get } from "@swc/helpers/_/_class_private_me
5
5
  import { _ as _class_private_method_init } from "@swc/helpers/_/_class_private_method_init";
6
6
  import { serializeJson } from "@modern-js/runtime-utils/node";
7
7
  import { attributesToString, serializeErrors } from "../utils";
8
- import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../constants";
8
+ import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../../constants";
9
9
  var _options = /* @__PURE__ */ new WeakMap(), _getSSRData = /* @__PURE__ */ new WeakSet(), _getSSRDataScripts = /* @__PURE__ */ new WeakSet();
10
10
  class SSRDataCollector {
11
11
  effect() {
@@ -3,3 +3,5 @@ export declare enum RenderLevel {
3
3
  SERVER_PREFETCH = 1,
4
4
  SERVER_RENDER = 2
5
5
  }
6
+ export declare const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
7
+ export declare const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import type { NestedRoute, PageRoute } from '@modern-js/types';
3
3
  import { AppConfig } from '../../common';
4
- export { RuntimeReactContext, type RuntimeContext } from './runtime';
4
+ export { RuntimeReactContext, type RuntimeContext, getInitialContext, } from './runtime';
5
5
  interface GlobalContext {
6
6
  /**
7
7
  * App.tsx export default component
@@ -2,5 +2,3 @@ export declare const HTML_PLACEHOLDER = "<!--<?- html ?>-->";
2
2
  export declare const SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
3
3
  export declare const CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
4
4
  export declare const CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
5
- export declare const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
6
- export declare const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.57.2-alpha.0",
18
+ "version": "2.57.2-alpha.1",
19
19
  "engines": {
20
20
  "node": ">=14.17.6"
21
21
  },
@@ -200,10 +200,10 @@
200
200
  "styled-components": "^5.3.1",
201
201
  "@swc/helpers": "0.5.3",
202
202
  "@modern-js/plugin": "2.57.1",
203
- "@modern-js/utils": "2.57.1",
204
203
  "@modern-js/types": "2.57.1",
204
+ "@modern-js/runtime-utils": "2.57.1",
205
205
  "@modern-js/plugin-data-loader": "2.57.1",
206
- "@modern-js/runtime-utils": "2.57.1"
206
+ "@modern-js/utils": "2.57.1"
207
207
  },
208
208
  "peerDependencies": {
209
209
  "react": ">=17",
@@ -227,15 +227,14 @@
227
227
  "typescript": "^5",
228
228
  "webpack": "^5.93.0",
229
229
  "@modern-js/app-tools": "2.57.1",
230
- "@modern-js/core": "2.57.1",
231
230
  "@scripts/build": "2.57.1",
232
- "@scripts/jest-config": "2.57.1"
231
+ "@scripts/jest-config": "2.57.1",
232
+ "@modern-js/core": "2.57.1"
233
233
  },
234
234
  "sideEffects": false,
235
235
  "publishConfig": {
236
236
  "registry": "https://registry.npmjs.org/",
237
- "access": "public",
238
- "provenance": true
237
+ "access": "public"
239
238
  },
240
239
  "scripts": {
241
240
  "dev": "modern-lib build --watch",
package/dist/index.js DELETED
@@ -1,635 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __defProps = Object.defineProperties;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
- var __getOwnPropNames = Object.getOwnPropertyNames;
8
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
- var __getProtoOf = Object.getPrototypeOf;
10
- var __hasOwnProp = Object.prototype.hasOwnProperty;
11
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
- var __spreadValues = (a, b) => {
14
- for (var prop in b || (b = {}))
15
- if (__hasOwnProp.call(b, prop))
16
- __defNormalProp(a, prop, b[prop]);
17
- if (__getOwnPropSymbols)
18
- for (var prop of __getOwnPropSymbols(b)) {
19
- if (__propIsEnum.call(b, prop))
20
- __defNormalProp(a, prop, b[prop]);
21
- }
22
- return a;
23
- };
24
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
- var __objRest = (source, exclude) => {
26
- var target = {};
27
- for (var prop in source)
28
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
29
- target[prop] = source[prop];
30
- if (source != null && __getOwnPropSymbols)
31
- for (var prop of __getOwnPropSymbols(source)) {
32
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
33
- target[prop] = source[prop];
34
- }
35
- return target;
36
- };
37
- var __export = (target, all) => {
38
- for (var name in all)
39
- __defProp(target, name, { get: all[name], enumerable: true });
40
- };
41
- var __copyProps = (to, from, except, desc) => {
42
- if (from && typeof from === "object" || typeof from === "function") {
43
- for (let key of __getOwnPropNames(from))
44
- if (!__hasOwnProp.call(to, key) && key !== except)
45
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
46
- }
47
- return to;
48
- };
49
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
50
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
51
- // If the importer is in node compatibility mode or this is not an ESM
52
- // file that has been converted to a CommonJS file using a Babel-
53
- // compatible transform (i.e. "__esModule" has not been set), then set
54
- // "default" to the CommonJS "module.exports" for node compatibility.
55
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
56
- mod
57
- ));
58
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
59
- var __async = (__this, __arguments, generator) => {
60
- return new Promise((resolve, reject) => {
61
- var fulfilled = (value) => {
62
- try {
63
- step(generator.next(value));
64
- } catch (e) {
65
- reject(e);
66
- }
67
- };
68
- var rejected = (value) => {
69
- try {
70
- step(generator.throw(value));
71
- } catch (e) {
72
- reject(e);
73
- }
74
- };
75
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
76
- step((generator = generator.apply(__this, __arguments)).next());
77
- });
78
- };
79
-
80
- // src/index.ts
81
- var src_exports = {};
82
- __export(src_exports, {
83
- RuntimeReactContext: () => RuntimeReactContext,
84
- bootstrap: () => bootstrap,
85
- createApp: () => createApp,
86
- defineConfig: () => defineConfig,
87
- defineRuntimeConfig: () => defineRuntimeConfig,
88
- isBrowser: () => isBrowser,
89
- useLoader: () => useLoader_default,
90
- useRuntimeContext: () => useRuntimeContext
91
- });
92
- module.exports = __toCommonJS(src_exports);
93
-
94
- // src/common.ts
95
- var isBrowser = () => typeof window !== "undefined" && window.name !== "nodejs";
96
-
97
- // src/core/index.ts
98
- var core_exports = {};
99
- __export(core_exports, {
100
- RuntimeReactContext: () => RuntimeReactContext,
101
- ServerRouterContext: () => ServerRouterContext,
102
- bootstrap: () => bootstrap,
103
- createApp: () => createApp,
104
- defineConfig: () => defineConfig,
105
- defineRuntimeConfig: () => defineRuntimeConfig,
106
- getConfig: () => getConfig,
107
- runtime: () => runtime,
108
- useLoader: () => useLoader_default,
109
- useRuntimeContext: () => useRuntimeContext
110
- });
111
-
112
- // src/core/plugin/base.ts
113
- var import_plugin = require("@modern-js/plugin");
114
- var client = (0, import_plugin.createAsyncPipeline)();
115
- var server = (0, import_plugin.createAsyncPipeline)();
116
- var hoc = (0, import_plugin.createPipeline)();
117
- var init = (0, import_plugin.createAsyncPipeline)();
118
- var pickContext = (0, import_plugin.createPipeline)();
119
- var runtimeHooks = {
120
- hoc,
121
- init,
122
- client,
123
- server,
124
- pickContext
125
- };
126
- var createRuntime = () => (0, import_plugin.createManager)(runtimeHooks);
127
- var runtime = createRuntime();
128
-
129
- // src/core/plugin/runner.ts
130
- var globalRunner;
131
- function setGlobalRunner(runner) {
132
- globalRunner = runner;
133
- }
134
- function getGlobalRunner() {
135
- if (globalRunner) {
136
- return globalRunner;
137
- }
138
- const runner = runtime.init();
139
- setGlobalRunner(runner);
140
- return runner;
141
- }
142
-
143
- // src/core/plugin/index.ts
144
- function registerPlugin(internalPlugins, runtimeConfig, customRuntime) {
145
- const { plugins = [] } = runtimeConfig || {};
146
- (customRuntime || runtime).usePlugin(...internalPlugins, ...plugins);
147
- const runner = (customRuntime || runtime).init();
148
- setGlobalRunner(runner);
149
- return runner;
150
- }
151
-
152
- // src/core/config.ts
153
- var APP_CONFIG_SYMBOL = "config";
154
- var getConfig = (Component) => (
155
- // @ts-expect-error
156
- Component[APP_CONFIG_SYMBOL]
157
- );
158
- var defineConfig = (Component, config) => {
159
- Component[APP_CONFIG_SYMBOL] = config;
160
- return Component;
161
- };
162
- var defineRuntimeConfig = (config) => config;
163
-
164
- // src/core/compatible.tsx
165
- var import_react2 = __toESM(require("react"));
166
- var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
167
- var import_constants2 = require("@modern-js/utils/universal/constants");
168
-
169
- // src/core/context/runtime.ts
170
- var import_react = require("react");
171
- var import_constants = require("@modern-js/utils/universal/constants");
172
-
173
- // src/core/loader/loaderManager.ts
174
- var import_invariant = __toESM(require("invariant"));
175
- var createGetId = () => {
176
- const idCache = /* @__PURE__ */ new Map();
177
- return (objectId) => {
178
- const cachedId = idCache.get(objectId);
179
- if (cachedId) {
180
- return cachedId;
181
- }
182
- const id = JSON.stringify(objectId);
183
- (0, import_invariant.default)(id, "params should be not null value");
184
- idCache.set(objectId, id);
185
- return id;
186
- };
187
- };
188
- var createLoader = (id, initialData = {
189
- loading: false,
190
- reloading: false,
191
- data: void 0,
192
- error: void 0
193
- }, loaderFn, skip = false) => {
194
- let promise;
195
- let status = 0 /* idle */;
196
- let { data, error } = initialData;
197
- let hasLoaded = false;
198
- const handlers = /* @__PURE__ */ new Set();
199
- const load = () => __async(void 0, null, function* () {
200
- if (skip) {
201
- return promise;
202
- }
203
- if (status === 1 /* loading */) {
204
- return promise;
205
- }
206
- status = 1 /* loading */;
207
- notify();
208
- promise = loaderFn().then((value) => {
209
- data = value;
210
- error = null;
211
- status = 2 /* fulfilled */;
212
- }).catch((e) => {
213
- error = e;
214
- data = null;
215
- status = 3 /* rejected */;
216
- }).finally(() => {
217
- promise = null;
218
- hasLoaded = true;
219
- notify();
220
- });
221
- return promise;
222
- });
223
- const getResult = () => ({
224
- loading: !hasLoaded && status === 1 /* loading */,
225
- reloading: hasLoaded && status === 1 /* loading */,
226
- data,
227
- error: error instanceof Error ? `${error.message}` : error,
228
- // redundant fields for ssr log
229
- _error: error
230
- });
231
- const notify = () => {
232
- [...handlers].forEach((handler) => {
233
- handler(status, getResult());
234
- });
235
- };
236
- const onChange = (handler) => {
237
- handlers.add(handler);
238
- return () => {
239
- handlers.delete(handler);
240
- };
241
- };
242
- return {
243
- get result() {
244
- return getResult();
245
- },
246
- get promise() {
247
- return promise;
248
- },
249
- onChange,
250
- load
251
- };
252
- };
253
- var createLoaderManager = (initialDataMap, managerOptions = {}) => {
254
- const { skipStatic = false, skipNonStatic = false } = managerOptions;
255
- const loadersMap = /* @__PURE__ */ new Map();
256
- const getId = createGetId();
257
- const add = (loaderFn, loaderOptions) => {
258
- const id = getId(loaderOptions.params);
259
- let loader = loadersMap.get(id);
260
- const cache = loaderOptions._cache;
261
- if (!loader || cache === false) {
262
- const ignoreNonStatic = skipNonStatic && !loaderOptions.static;
263
- const ignoreStatic = skipStatic && loaderOptions.static;
264
- const skipExec = ignoreNonStatic || ignoreStatic;
265
- loader = createLoader(
266
- id,
267
- typeof initialDataMap[id] !== "undefined" ? initialDataMap[id] : { data: loaderOptions.initialData },
268
- loaderFn,
269
- // Todo whether static loader is exec when CSR
270
- skipExec
271
- );
272
- loadersMap.set(id, loader);
273
- }
274
- return id;
275
- };
276
- const get = (id) => loadersMap.get(id);
277
- const hasPendingLoaders = () => {
278
- for (const loader of loadersMap.values()) {
279
- const { promise } = loader;
280
- if (promise instanceof Promise) {
281
- return true;
282
- }
283
- }
284
- return false;
285
- };
286
- const awaitPendingLoaders = () => __async(void 0, null, function* () {
287
- const pendingLoaders = [];
288
- for (const [id, loader] of loadersMap) {
289
- const { promise } = loader;
290
- if (promise instanceof Promise) {
291
- pendingLoaders.push([id, loader]);
292
- }
293
- }
294
- yield Promise.all(pendingLoaders.map((item) => item[1].promise));
295
- return pendingLoaders.reduce(
296
- (res, [id, loader]) => {
297
- res[id] = loader.result;
298
- return res;
299
- },
300
- {}
301
- );
302
- });
303
- return {
304
- hasPendingLoaders,
305
- awaitPendingLoaders,
306
- add,
307
- get
308
- };
309
- };
310
-
311
- // src/core/context/runtime.ts
312
- var RuntimeReactContext = (0, import_react.createContext)({});
313
- var ServerRouterContext = (0, import_react.createContext)({});
314
-
315
- // src/core/compatible.tsx
316
- var import_jsx_runtime = require("react/jsx-runtime");
317
- var IS_REACT18 = process.env.IS_REACT18 === "true";
318
- function isClientArgs(id) {
319
- return typeof id === "string" || typeof HTMLElement !== "undefined" && id instanceof HTMLElement;
320
- }
321
- var getInitialContext = (runner) => ({
322
- loaderManager: createLoaderManager({}),
323
- runner,
324
- isBrowser: true,
325
- routeManifest: typeof window !== "undefined" && window[import_constants2.ROUTE_MANIFEST]
326
- });
327
- var createApp = ({
328
- plugins,
329
- runtime: runtime3,
330
- props: globalProps
331
- }) => {
332
- const runner = registerPlugin(plugins, { plugins: [] }, runtime3);
333
- return (App) => {
334
- const WrapperComponent = (props) => {
335
- return import_react2.default.createElement(
336
- App || import_react2.default.Fragment,
337
- App ? __spreadValues({}, props) : null,
338
- App ? props.children : import_react2.default.Children.map(
339
- props.children,
340
- (child) => import_react2.default.isValidElement(child) ? import_react2.default.cloneElement(child, __spreadValues(__spreadValues({}, child.props), props)) : child
341
- )
342
- );
343
- };
344
- if (App) {
345
- (0, import_hoist_non_react_statics.default)(WrapperComponent, App);
346
- }
347
- const HOCApp = runner.hoc(
348
- { App: WrapperComponent, config: globalProps || {} },
349
- {
350
- onLast: ({ App: App2 }) => {
351
- const WrapComponent = (_a) => {
352
- var _b = _a, { context } = _b, props = __objRest(_b, ["context"]);
353
- let contextValue = context;
354
- if (!(contextValue == null ? void 0 : contextValue.runner)) {
355
- contextValue = getInitialContext(runner);
356
- runner.init(
357
- { context: contextValue },
358
- {
359
- onLast: ({ context: context1 }) => {
360
- var _a2;
361
- return (_a2 = App2 == null ? void 0 : App2.init) == null ? void 0 : _a2.call(App2, context1);
362
- }
363
- }
364
- );
365
- }
366
- const mergedProps = __spreadValues(__spreadValues({}, props), globalProps);
367
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RuntimeReactContext.Provider, { value: contextValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App2, __spreadValues({}, mergedProps)) });
368
- };
369
- return (0, import_hoist_non_react_statics.default)(WrapComponent, App2);
370
- }
371
- }
372
- );
373
- return HOCApp;
374
- };
375
- };
376
- var bootstrap = (BootApp, id, root, ReactDOM) => __async(void 0, null, function* () {
377
- var _a, _b, _c, _d, _e, _f;
378
- const App = BootApp;
379
- const runner = getGlobalRunner();
380
- const context = getInitialContext(runner);
381
- const runInit = (_context) => runner.init(
382
- { context: _context },
383
- {
384
- onLast: ({ context: context1 }) => {
385
- var _a2;
386
- return (_a2 = App == null ? void 0 : App.init) == null ? void 0 : _a2.call(App, context1);
387
- }
388
- }
389
- );
390
- if (!id) {
391
- return import_react2.default.createElement(App, {
392
- context
393
- });
394
- }
395
- const isBrowser2 = typeof window !== "undefined" && window.name !== "nodejs";
396
- if (isBrowser2) {
397
- if (isClientArgs(id)) {
398
- const ssrData = window._SSR_DATA;
399
- const loadersData = ((_a = ssrData == null ? void 0 : ssrData.data) == null ? void 0 : _a.loadersData) || {};
400
- const initialLoadersState = Object.keys(loadersData).reduce(
401
- (res, key) => {
402
- const loaderData = loadersData[key];
403
- if (loaderData.loading !== false) {
404
- return res;
405
- }
406
- res[key] = loaderData;
407
- return res;
408
- },
409
- {}
410
- );
411
- Object.assign(context, __spreadValues({
412
- loaderManager: createLoaderManager(initialLoadersState, {
413
- skipStatic: true
414
- })
415
- }, ssrData ? { ssrContext: ssrData == null ? void 0 : ssrData.context } : {}));
416
- context.initialData = (_b = ssrData == null ? void 0 : ssrData.data) == null ? void 0 : _b.initialData;
417
- const initialData = yield runInit(context);
418
- if (initialData) {
419
- context.initialData = initialData;
420
- }
421
- const rootElement = typeof id !== "string" ? id : document.getElementById(id || "root");
422
- if (!ReactDOM) {
423
- throw Error("The `bootstrap` need provide `ReactDOM` parameter");
424
- }
425
- const ModernRender = (App2) => {
426
- if (IS_REACT18) {
427
- if (root) {
428
- root.render(App2);
429
- } else if (ReactDOM.createRoot) {
430
- ReactDOM.createRoot(rootElement).render(App2);
431
- } else {
432
- throw Error(
433
- "The `bootstrap` `ReactDOM` parameter needs to provide the `createRoot` method"
434
- );
435
- }
436
- } else {
437
- if (!ReactDOM.render) {
438
- throw Error(
439
- "The `bootstrap` `ReactDOM` parameter needs to provide the `render` method"
440
- );
441
- }
442
- ReactDOM.render(App2, rootElement);
443
- }
444
- };
445
- const ModernHydrate = (App2, callback) => {
446
- if (IS_REACT18) {
447
- if (!ReactDOM.hydrateRoot) {
448
- throw Error(
449
- "The `bootstrap` `ReactDOM` parameter needs to provide the `hydrateRoot` method"
450
- );
451
- }
452
- ReactDOM.hydrateRoot(rootElement, App2);
453
- } else {
454
- if (!ReactDOM.hydrate) {
455
- throw Error(
456
- "The `bootstrap` `ReactDOM` parameter needs to provide the `hydrate` method"
457
- );
458
- }
459
- ReactDOM.hydrate(App2, rootElement, callback);
460
- }
461
- };
462
- return runner.client(
463
- {
464
- App,
465
- context,
466
- ModernRender,
467
- ModernHydrate
468
- },
469
- {
470
- onLast: ({ App: App2 }) => {
471
- ModernRender(import_react2.default.createElement(App2, { context }));
472
- }
473
- }
474
- );
475
- } else {
476
- throw Error(
477
- "`bootstrap` needs id in browser environment, it needs to be string or element"
478
- );
479
- }
480
- } else {
481
- Object.assign(context, {
482
- ssrContext: id,
483
- isBrowser: false,
484
- loaderManager: createLoaderManager(
485
- {},
486
- {
487
- skipNonStatic: id.staticGenerate,
488
- // if not static generate, only non-static loader can exec on prod env
489
- skipStatic: process.env.NODE_ENV === "production" && !id.staticGenerate
490
- }
491
- )
492
- });
493
- const isRedirectResponse = (result) => {
494
- var _a2;
495
- if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
496
- result instanceof Response && result.status >= 300 && result.status <= 399) {
497
- const { status } = result;
498
- const redirectUrl = result.headers.get("Location") || "/";
499
- const { ssrContext } = context;
500
- if (ssrContext) {
501
- ssrContext.res && (ssrContext.res.statusCode = status);
502
- (_a2 = ssrContext.res) == null ? void 0 : _a2.setHeader("Location", redirectUrl);
503
- ssrContext.redirection = ssrContext.redirection || {};
504
- ssrContext.redirection.status = status;
505
- ssrContext.redirection.url = redirectUrl;
506
- }
507
- return true;
508
- }
509
- return false;
510
- };
511
- const initialData = yield runInit(context);
512
- if (!isRedirectResponse(initialData)) {
513
- context.initialData = initialData;
514
- if (((_c = context.routerContext) == null ? void 0 : _c.statusCode) && ((_d = context.routerContext) == null ? void 0 : _d.statusCode) !== 200) {
515
- (_f = context.ssrContext) == null ? void 0 : _f.response.status((_e = context.routerContext) == null ? void 0 : _e.statusCode);
516
- }
517
- return runner.server({
518
- App,
519
- context
520
- });
521
- }
522
- }
523
- });
524
- var useRuntimeContext = () => {
525
- const context = (0, import_react2.useContext)(RuntimeReactContext);
526
- const memoizedContext = (0, import_react2.useMemo)(
527
- () => context.runner.pickContext(
528
- { context, pickedContext: {} },
529
- {
530
- onLast: ({ pickedContext }) => pickedContext
531
- }
532
- ),
533
- [context]
534
- );
535
- return memoizedContext;
536
- };
537
-
538
- // src/core/loader/useLoader.ts
539
- var import_react3 = require("react");
540
- var import_invariant2 = __toESM(require("invariant"));
541
- var useLoader = (loaderFn, options = { params: void 0 }) => {
542
- const context = (0, import_react3.useContext)(RuntimeReactContext);
543
- const isSSRRender = Boolean(context.ssr);
544
- const { loaderManager } = context;
545
- const loaderRef = (0, import_react3.useRef)();
546
- const unlistenLoaderChangeRef = (0, import_react3.useRef)(null);
547
- if (isSSRRender && Object.prototype.hasOwnProperty.call(options, "_cache")) {
548
- delete options._cache;
549
- }
550
- const load = (0, import_react3.useCallback)(
551
- (params) => {
552
- var _a, _b, _c, _d, _e, _f;
553
- if (typeof params === "undefined") {
554
- return (_a = loaderRef.current) == null ? void 0 : _a.load();
555
- }
556
- const id = loaderManager.add(
557
- () => {
558
- try {
559
- const res2 = loaderFn(context, params);
560
- if (res2 instanceof Promise) {
561
- return res2;
562
- }
563
- return Promise.resolve(res2);
564
- } catch (e) {
565
- return Promise.reject(e);
566
- }
567
- },
568
- __spreadProps(__spreadValues({}, options), {
569
- params
570
- })
571
- );
572
- loaderRef.current = loaderManager.get(id);
573
- (_b = unlistenLoaderChangeRef.current) == null ? void 0 : _b.call(unlistenLoaderChangeRef);
574
- if (isSSRRender) {
575
- return void 0;
576
- }
577
- if (options.skip) {
578
- return void 0;
579
- }
580
- if (context._hydration && ((_e = (_d = (_c = window == null ? void 0 : window._SSR_DATA) == null ? void 0 : _c.data) == null ? void 0 : _d.loadersData[id]) == null ? void 0 : _e.error) === null) {
581
- return void 0;
582
- }
583
- const res = loaderRef.current.load();
584
- unlistenLoaderChangeRef.current = (_f = loaderRef.current) == null ? void 0 : _f.onChange(
585
- (_status, _result) => {
586
- var _a2, _b2;
587
- setResult(_result);
588
- if (_status === 2 /* fulfilled */) {
589
- (_a2 = options == null ? void 0 : options.onSuccess) == null ? void 0 : _a2.call(options, _result.data);
590
- }
591
- if (_status === 3 /* rejected */) {
592
- (_b2 = options == null ? void 0 : options.onError) == null ? void 0 : _b2.call(options, _result.error);
593
- }
594
- }
595
- );
596
- return res;
597
- },
598
- [options.skip]
599
- );
600
- (0, import_react3.useEffect)(
601
- () => () => {
602
- var _a;
603
- (_a = unlistenLoaderChangeRef.current) == null ? void 0 : _a.call(unlistenLoaderChangeRef);
604
- },
605
- []
606
- );
607
- (0, import_react3.useMemo)(() => {
608
- var _a;
609
- const p = (_a = options.params) != null ? _a : loaderFn.id;
610
- (0, import_invariant2.default)(
611
- typeof p !== "undefined" && p !== null,
612
- "Params is required in useLoader"
613
- );
614
- load(p);
615
- }, [options.params]);
616
- const [result, setResult] = (0, import_react3.useState)(loaderRef.current.result);
617
- return __spreadProps(__spreadValues({}, result), {
618
- reload: load
619
- });
620
- };
621
- var useLoader_default = useLoader;
622
-
623
- // src/core/index.ts
624
- __reExport(core_exports, require("@modern-js/plugin"));
625
- // Annotate the CommonJS export names for ESM import in node:
626
- 0 && (module.exports = {
627
- RuntimeReactContext,
628
- bootstrap,
629
- createApp,
630
- defineConfig,
631
- defineRuntimeConfig,
632
- isBrowser,
633
- useLoader,
634
- useRuntimeContext
635
- });