@modern-js/plugin-data-loader 0.0.0-next-1679563983140 → 0.0.0-next-1679753199581

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,26 +1,41 @@
1
1
  # @modern-js/plugin-data-loader
2
2
 
3
- ## 0.0.0-next-1679563983140
3
+ ## 0.0.0-next-1679753199581
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - 3e0bd5084: feat: when enable bff handle render, support use `useContext` to get framework plugin context in data loader.
7
+ - e2466a107: fix: remove nestedRoutes file from @modern-js/utils
8
+ fix: 将 nestedRoutes 从 @modern-js/utils 中移除
9
+ - 381a3b9f3: feat(utils): move universal utils to the universal folder
10
+
11
+ feat(utils): 将运行时使用的 utils 移动到 universal 目录
12
+
13
+ - Updated dependencies [e2466a107]
14
+ - Updated dependencies [02bb383cb]
15
+ - Updated dependencies [381a3b9f3]
16
+ - @modern-js/utils@0.0.0-next-1679753199581
17
+
18
+ ## 2.10.0
19
+
20
+ ### Patch Changes
21
+
22
+ - 3e0bd50: feat: when enable bff handle render, support use `useContext` to get framework plugin context in data loader.
8
23
  feat: 当开启 BFF 托管渲染时,支持在 data loader 中使用 `useContext` 获取框架插件提供的上下文。
9
- - 0da32d0ae: chore: upgrade jest and puppeteer
24
+ - 0da32d0: chore: upgrade jest and puppeteer
10
25
  chore: 升级 jest 和 puppeteer 到 latest
11
- - 0d9962bf4: fix: add types field in package.json
26
+ - 0d9962b: fix: add types field in package.json
12
27
  fix: 添加 package.json 中的 types 字段
13
- - fbefa7ecf: chore(deps): bump webpack from 5.75.0 to 5.76.2
28
+ - fbefa7e: chore(deps): bump webpack from 5.75.0 to 5.76.2
14
29
 
15
30
  chore(deps): 将 webpack 从 5.75.0 升级至 5.76.2
16
31
 
17
- - d6b6e29bb: fix: split server and runtime code in plugin-data-loader
32
+ - d6b6e29: fix: split server and runtime code in plugin-data-loader
18
33
  fix: 分离 plugin-data-loader 中服务端和客户端运行时的代码
19
- - Updated dependencies [0da32d0ae]
20
- - Updated dependencies [fbefa7ecf]
21
- - Updated dependencies [4d542339b]
22
- - Updated dependencies [6db486404]
23
- - @modern-js/utils@0.0.0-next-1679563983140
34
+ - Updated dependencies [0da32d0]
35
+ - Updated dependencies [fbefa7e]
36
+ - Updated dependencies [4d54233]
37
+ - Updated dependencies [6db4864]
38
+ - @modern-js/utils@2.10.0
24
39
 
25
40
  ## 2.9.0
26
41
 
@@ -20,7 +20,7 @@ __export(data_exports, {
20
20
  parseDeferredReadableStream: () => parseDeferredReadableStream
21
21
  });
22
22
  module.exports = __toCommonJS(data_exports);
23
- var import_remix_router = require("@modern-js/utils/remix-router");
23
+ var import_remix_router = require("@modern-js/utils/universal/remix-router");
24
24
  const DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
25
25
  async function parseDeferredReadableStream(stream) {
26
26
  if (!stream) {
@@ -23,11 +23,11 @@ __export(runtime_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(runtime_exports);
25
25
  var import_node = require("@remix-run/node");
26
- var import_nestedRoutes = require("@modern-js/utils/nestedRoutes");
27
- var import_remix_router = require("@modern-js/utils/remix-router");
26
+ var import_remix_router = require("@modern-js/utils/universal/remix-router");
28
27
  var import_lodash = require("@modern-js/utils/lodash");
29
28
  var import_constants = require("../common/constants");
30
29
  var import_utils = require("../common/utils");
30
+ var import_nestedRoutes = require("./nestedRoutes");
31
31
  var import_response = require("./response");
32
32
  (0, import_node.installGlobals)();
33
33
  const redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
@@ -0,0 +1,114 @@
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 nestedRoutes_exports = {};
19
+ __export(nestedRoutes_exports, {
20
+ renderNestedRoute: () => renderNestedRoute,
21
+ transformNestedRoutes: () => transformNestedRoutes
22
+ });
23
+ module.exports = __toCommonJS(nestedRoutes_exports);
24
+ var import_jsx_runtime = require("react/jsx-runtime");
25
+ var import_react = require("react");
26
+ var import_react_router_dom = require("react-router-dom");
27
+ const transformNestedRoutes = (routes) => {
28
+ const routeElements = [];
29
+ for (const route of routes) {
30
+ const routeElement = renderNestedRoute(route);
31
+ routeElements.push(routeElement);
32
+ }
33
+ return (0, import_react_router_dom.createRoutesFromElements)(routeElements);
34
+ };
35
+ const renderNestedRoute = (nestedRoute, options = {}) => {
36
+ const { children, index, id, component, isRoot, lazyImport } = nestedRoute;
37
+ const Component = component;
38
+ const { parent, DeferredDataComponent } = options;
39
+ const routeProps = {
40
+ caseSensitive: nestedRoute.caseSensitive,
41
+ path: nestedRoute.path,
42
+ id: nestedRoute.id,
43
+ loader: createLoader(nestedRoute),
44
+ action: nestedRoute.action,
45
+ hasErrorBoundary: nestedRoute.hasErrorBoundary,
46
+ shouldRevalidate: nestedRoute.shouldRevalidate,
47
+ handle: nestedRoute.handle,
48
+ index: nestedRoute.index,
49
+ element: nestedRoute.element,
50
+ errorElement: nestedRoute.errorElement
51
+ };
52
+ if (nestedRoute.error) {
53
+ const errorElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(nestedRoute.error, {});
54
+ routeProps.errorElement = errorElement;
55
+ }
56
+ let element;
57
+ if (Component) {
58
+ if ((parent == null ? void 0 : parent.loading) && lazyImport) {
59
+ const Loading = parent.loading;
60
+ if (isLoadableComponent(Component)) {
61
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loading, {}) });
62
+ } else {
63
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loading, {}), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}) });
64
+ }
65
+ } else if (isLoadableComponent(Component) && lazyImport) {
66
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {});
67
+ } else if (isRoot) {
68
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}),
70
+ typeof document === "undefined" && DeferredDataComponent && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DeferredDataComponent, {})
71
+ ] });
72
+ } else if (lazyImport) {
73
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { fallback: null, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}) });
74
+ } else {
75
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {});
76
+ }
77
+ } else {
78
+ nestedRoute.loading = parent == null ? void 0 : parent.loading;
79
+ }
80
+ if (element) {
81
+ routeProps.element = element;
82
+ }
83
+ const childElements = children == null ? void 0 : children.map((childRoute) => {
84
+ return renderNestedRoute(childRoute, { parent: nestedRoute });
85
+ });
86
+ const routeElement = index ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, { ...routeProps, index: true }, id) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, { ...routeProps, index: false, children: childElements }, id);
87
+ return routeElement;
88
+ };
89
+ function createLoader(route) {
90
+ const { loader } = route;
91
+ if (loader) {
92
+ return (args) => {
93
+ if (typeof route.lazyImport === "function") {
94
+ route.lazyImport();
95
+ }
96
+ return loader(args);
97
+ };
98
+ } else {
99
+ return () => {
100
+ if (typeof route.lazyImport === "function") {
101
+ route.lazyImport();
102
+ }
103
+ return null;
104
+ };
105
+ }
106
+ }
107
+ function isLoadableComponent(component) {
108
+ return component && component.displayName === "Loadable" && component.preload && typeof component.preload === "function";
109
+ }
110
+ // Annotate the CommonJS export names for ESM import in node:
111
+ 0 && (module.exports = {
112
+ renderNestedRoute,
113
+ transformNestedRoutes
114
+ });
@@ -21,7 +21,7 @@ __export(response_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(response_exports);
23
23
  var import_util = require("util");
24
- var import_serialize = require("@modern-js/utils/serialize");
24
+ var import_serialize = require("@modern-js/utils/universal/serialize");
25
25
  function isTrackedPromise(value) {
26
26
  return value != null && typeof value.then === "function" && value._tracked === true;
27
27
  }
@@ -32,8 +32,8 @@ __export(server_exports, {
32
32
  module.exports = __toCommonJS(server_exports);
33
33
  var import_path = __toESM(require("path"));
34
34
  var import_fs = __toESM(require("fs"));
35
- var import_utils = require("@modern-js/utils");
36
- var import_utils2 = require("../common/utils");
35
+ var import_constants = require("@modern-js/utils/constants");
36
+ var import_utils = require("../common/utils");
37
37
  var server_default = () => ({
38
38
  name: "@modern-js/plugin-data-loader",
39
39
  setup: () => ({
@@ -42,14 +42,14 @@ var server_default = () => ({
42
42
  distDir
43
43
  }) {
44
44
  return async (context) => {
45
- const entry = (0, import_utils2.matchEntry)(context.path, serverRoutes);
45
+ const entry = (0, import_utils.matchEntry)(context.path, serverRoutes);
46
46
  if (!entry) {
47
47
  return;
48
48
  }
49
49
  const routesPath = import_path.default.join(
50
50
  distDir,
51
- import_utils.SERVER_BUNDLE_DIRECTORY,
52
- `${entry.entryName || import_utils.MAIN_ENTRY_NAME}-server-loaders.js`
51
+ import_constants.SERVER_BUNDLE_DIRECTORY,
52
+ `${entry.entryName || import_constants.MAIN_ENTRY_NAME}-server-loaders.js`
53
53
  );
54
54
  if (!import_fs.default.existsSync(routesPath)) {
55
55
  return;
@@ -344,7 +344,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
344
344
  };
345
345
  }
346
346
  };
347
- import { UNSAFE_DeferredData as DeferredData, AbortedDeferredError } from "@modern-js/utils/remix-router";
347
+ import { UNSAFE_DeferredData as DeferredData, AbortedDeferredError } from "@modern-js/utils/universal/remix-router";
348
348
  var DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
349
349
  function parseDeferredReadableStream(stream) {
350
350
  return _parseDeferredReadableStream.apply(this, arguments);
@@ -176,11 +176,11 @@ var __generator = this && this.__generator || function(thisArg, body) {
176
176
  }
177
177
  };
178
178
  import { installGlobals, writeReadableStreamToWritable, Response as NodeResponse } from "@remix-run/node";
179
- import { transformNestedRoutes } from "@modern-js/utils/nestedRoutes";
180
- import { createStaticHandler, ErrorResponse, UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL } from "@modern-js/utils/remix-router";
179
+ import { createStaticHandler, ErrorResponse, UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL } from "@modern-js/utils/universal/remix-router";
181
180
  import { isPlainObject } from "@modern-js/utils/lodash";
182
181
  import { CONTENT_TYPE_DEFERRED, LOADER_ID_PARAM } from "../common/constants";
183
182
  import { matchEntry } from "../common/utils";
183
+ import { transformNestedRoutes } from "./nestedRoutes";
184
184
  import { createDeferredReadableStream } from "./response";
185
185
  installGlobals();
186
186
  var redirectStatusCodes = /* @__PURE__ */ new Set([
@@ -0,0 +1,174 @@
1
+ function _defineProperty(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _objectSpread(target) {
15
+ for(var i = 1; i < arguments.length; i++){
16
+ var source = arguments[i] != null ? arguments[i] : {};
17
+ var ownKeys = Object.keys(source);
18
+ if (typeof Object.getOwnPropertySymbols === "function") {
19
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
+ }));
22
+ }
23
+ ownKeys.forEach(function(key) {
24
+ _defineProperty(target, key, source[key]);
25
+ });
26
+ }
27
+ return target;
28
+ }
29
+ function ownKeys(object, enumerableOnly) {
30
+ var keys = Object.keys(object);
31
+ if (Object.getOwnPropertySymbols) {
32
+ var symbols = Object.getOwnPropertySymbols(object);
33
+ if (enumerableOnly) {
34
+ symbols = symbols.filter(function(sym) {
35
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
36
+ });
37
+ }
38
+ keys.push.apply(keys, symbols);
39
+ }
40
+ return keys;
41
+ }
42
+ function _objectSpreadProps(target, source) {
43
+ source = source != null ? source : {};
44
+ if (Object.getOwnPropertyDescriptors) {
45
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
46
+ } else {
47
+ ownKeys(Object(source)).forEach(function(key) {
48
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
49
+ });
50
+ }
51
+ return target;
52
+ }
53
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
54
+ import { Suspense } from "react";
55
+ import { createRoutesFromElements, Route } from "react-router-dom";
56
+ var transformNestedRoutes = function(routes) {
57
+ var routeElements = [];
58
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
59
+ try {
60
+ for(var _iterator = routes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
61
+ var route = _step.value;
62
+ var routeElement = renderNestedRoute(route);
63
+ routeElements.push(routeElement);
64
+ }
65
+ } catch (err) {
66
+ _didIteratorError = true;
67
+ _iteratorError = err;
68
+ } finally{
69
+ try {
70
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
71
+ _iterator.return();
72
+ }
73
+ } finally{
74
+ if (_didIteratorError) {
75
+ throw _iteratorError;
76
+ }
77
+ }
78
+ }
79
+ return createRoutesFromElements(routeElements);
80
+ };
81
+ var renderNestedRoute = function(nestedRoute) {
82
+ var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
83
+ var children = nestedRoute.children, index = nestedRoute.index, id = nestedRoute.id, component = nestedRoute.component, isRoot = nestedRoute.isRoot, lazyImport = nestedRoute.lazyImport;
84
+ var Component = component;
85
+ var parent = options.parent, DeferredDataComponent = options.DeferredDataComponent;
86
+ var routeProps = {
87
+ caseSensitive: nestedRoute.caseSensitive,
88
+ path: nestedRoute.path,
89
+ id: nestedRoute.id,
90
+ loader: createLoader(nestedRoute),
91
+ action: nestedRoute.action,
92
+ hasErrorBoundary: nestedRoute.hasErrorBoundary,
93
+ shouldRevalidate: nestedRoute.shouldRevalidate,
94
+ handle: nestedRoute.handle,
95
+ index: nestedRoute.index,
96
+ element: nestedRoute.element,
97
+ errorElement: nestedRoute.errorElement
98
+ };
99
+ if (nestedRoute.error) {
100
+ var errorElement = /* @__PURE__ */ jsx(nestedRoute.error, {});
101
+ routeProps.errorElement = errorElement;
102
+ }
103
+ var element;
104
+ if (Component) {
105
+ if ((parent === null || parent === void 0 ? void 0 : parent.loading) && lazyImport) {
106
+ var Loading = parent.loading;
107
+ if (isLoadableComponent(Component)) {
108
+ element = /* @__PURE__ */ jsx(Component, {
109
+ fallback: /* @__PURE__ */ jsx(Loading, {})
110
+ });
111
+ } else {
112
+ element = /* @__PURE__ */ jsx(Suspense, {
113
+ fallback: /* @__PURE__ */ jsx(Loading, {}),
114
+ children: /* @__PURE__ */ jsx(Component, {})
115
+ });
116
+ }
117
+ } else if (isLoadableComponent(Component) && lazyImport) {
118
+ element = /* @__PURE__ */ jsx(Component, {});
119
+ } else if (isRoot) {
120
+ element = /* @__PURE__ */ jsxs(Fragment, {
121
+ children: [
122
+ /* @__PURE__ */ jsx(Component, {}),
123
+ typeof document === "undefined" && DeferredDataComponent && /* @__PURE__ */ jsx(DeferredDataComponent, {})
124
+ ]
125
+ });
126
+ } else if (lazyImport) {
127
+ element = /* @__PURE__ */ jsx(Suspense, {
128
+ fallback: null,
129
+ children: /* @__PURE__ */ jsx(Component, {})
130
+ });
131
+ } else {
132
+ element = /* @__PURE__ */ jsx(Component, {});
133
+ }
134
+ } else {
135
+ nestedRoute.loading = parent === null || parent === void 0 ? void 0 : parent.loading;
136
+ }
137
+ if (element) {
138
+ routeProps.element = element;
139
+ }
140
+ var childElements = children === null || children === void 0 ? void 0 : children.map(function(childRoute) {
141
+ return renderNestedRoute(childRoute, {
142
+ parent: nestedRoute
143
+ });
144
+ });
145
+ var routeElement = index ? /* @__PURE__ */ jsx(Route, _objectSpreadProps(_objectSpread({}, routeProps), {
146
+ index: true
147
+ }), id) : /* @__PURE__ */ jsx(Route, _objectSpreadProps(_objectSpread({}, routeProps), {
148
+ index: false,
149
+ children: childElements
150
+ }), id);
151
+ return routeElement;
152
+ };
153
+ function createLoader(route) {
154
+ var loader = route.loader;
155
+ if (loader) {
156
+ return function(args) {
157
+ if (typeof route.lazyImport === "function") {
158
+ route.lazyImport();
159
+ }
160
+ return loader(args);
161
+ };
162
+ } else {
163
+ return function() {
164
+ if (typeof route.lazyImport === "function") {
165
+ route.lazyImport();
166
+ }
167
+ return null;
168
+ };
169
+ }
170
+ }
171
+ function isLoadableComponent(component) {
172
+ return component && component.displayName === "Loadable" && component.preload && typeof component.preload === "function";
173
+ }
174
+ export { renderNestedRoute, transformNestedRoutes };
@@ -182,7 +182,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
182
182
  }
183
183
  };
184
184
  import { TextEncoder } from "util";
185
- import { serializeJson } from "@modern-js/utils/serialize";
185
+ import { serializeJson } from "@modern-js/utils/universal/serialize";
186
186
  function isTrackedPromise(value) {
187
187
  return value != null && typeof value.then === "function" && value._tracked === true;
188
188
  }
@@ -124,7 +124,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
124
124
  };
125
125
  import path from "path";
126
126
  import fs from "fs";
127
- import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
127
+ import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils/constants";
128
128
  import { matchEntry } from "../common/utils";
129
129
  var server_default = function() {
130
130
  return {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  UNSAFE_DeferredData as DeferredData,
3
3
  AbortedDeferredError
4
- } from "@modern-js/utils/remix-router";
4
+ } from "@modern-js/utils/universal/remix-router";
5
5
  const DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
6
6
  async function parseDeferredReadableStream(stream) {
7
7
  if (!stream) {
@@ -3,15 +3,15 @@ import {
3
3
  writeReadableStreamToWritable,
4
4
  Response as NodeResponse
5
5
  } from "@remix-run/node";
6
- import { transformNestedRoutes } from "@modern-js/utils/nestedRoutes";
7
6
  import {
8
7
  createStaticHandler,
9
8
  ErrorResponse,
10
9
  UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL
11
- } from "@modern-js/utils/remix-router";
10
+ } from "@modern-js/utils/universal/remix-router";
12
11
  import { isPlainObject } from "@modern-js/utils/lodash";
13
12
  import { CONTENT_TYPE_DEFERRED, LOADER_ID_PARAM } from "../common/constants";
14
13
  import { matchEntry } from "../common/utils";
14
+ import { transformNestedRoutes } from "./nestedRoutes";
15
15
  import { createDeferredReadableStream } from "./response";
16
16
  installGlobals();
17
17
  const redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
@@ -0,0 +1,93 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { Suspense } from "react";
3
+ import {
4
+ createRoutesFromElements,
5
+ Route
6
+ } from "react-router-dom";
7
+ const transformNestedRoutes = (routes) => {
8
+ const routeElements = [];
9
+ for (const route of routes) {
10
+ const routeElement = renderNestedRoute(route);
11
+ routeElements.push(routeElement);
12
+ }
13
+ return createRoutesFromElements(routeElements);
14
+ };
15
+ const renderNestedRoute = (nestedRoute, options = {}) => {
16
+ const { children, index, id, component, isRoot, lazyImport } = nestedRoute;
17
+ const Component = component;
18
+ const { parent, DeferredDataComponent } = options;
19
+ const routeProps = {
20
+ caseSensitive: nestedRoute.caseSensitive,
21
+ path: nestedRoute.path,
22
+ id: nestedRoute.id,
23
+ loader: createLoader(nestedRoute),
24
+ action: nestedRoute.action,
25
+ hasErrorBoundary: nestedRoute.hasErrorBoundary,
26
+ shouldRevalidate: nestedRoute.shouldRevalidate,
27
+ handle: nestedRoute.handle,
28
+ index: nestedRoute.index,
29
+ element: nestedRoute.element,
30
+ errorElement: nestedRoute.errorElement
31
+ };
32
+ if (nestedRoute.error) {
33
+ const errorElement = /* @__PURE__ */ jsx(nestedRoute.error, {});
34
+ routeProps.errorElement = errorElement;
35
+ }
36
+ let element;
37
+ if (Component) {
38
+ if ((parent == null ? void 0 : parent.loading) && lazyImport) {
39
+ const Loading = parent.loading;
40
+ if (isLoadableComponent(Component)) {
41
+ element = /* @__PURE__ */ jsx(Component, { fallback: /* @__PURE__ */ jsx(Loading, {}) });
42
+ } else {
43
+ element = /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Loading, {}), children: /* @__PURE__ */ jsx(Component, {}) });
44
+ }
45
+ } else if (isLoadableComponent(Component) && lazyImport) {
46
+ element = /* @__PURE__ */ jsx(Component, {});
47
+ } else if (isRoot) {
48
+ element = /* @__PURE__ */ jsxs(Fragment, { children: [
49
+ /* @__PURE__ */ jsx(Component, {}),
50
+ typeof document === "undefined" && DeferredDataComponent && /* @__PURE__ */ jsx(DeferredDataComponent, {})
51
+ ] });
52
+ } else if (lazyImport) {
53
+ element = /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Component, {}) });
54
+ } else {
55
+ element = /* @__PURE__ */ jsx(Component, {});
56
+ }
57
+ } else {
58
+ nestedRoute.loading = parent == null ? void 0 : parent.loading;
59
+ }
60
+ if (element) {
61
+ routeProps.element = element;
62
+ }
63
+ const childElements = children == null ? void 0 : children.map((childRoute) => {
64
+ return renderNestedRoute(childRoute, { parent: nestedRoute });
65
+ });
66
+ const routeElement = index ? /* @__PURE__ */ jsx(Route, { ...routeProps, index: true }, id) : /* @__PURE__ */ jsx(Route, { ...routeProps, index: false, children: childElements }, id);
67
+ return routeElement;
68
+ };
69
+ function createLoader(route) {
70
+ const { loader } = route;
71
+ if (loader) {
72
+ return (args) => {
73
+ if (typeof route.lazyImport === "function") {
74
+ route.lazyImport();
75
+ }
76
+ return loader(args);
77
+ };
78
+ } else {
79
+ return () => {
80
+ if (typeof route.lazyImport === "function") {
81
+ route.lazyImport();
82
+ }
83
+ return null;
84
+ };
85
+ }
86
+ }
87
+ function isLoadableComponent(component) {
88
+ return component && component.displayName === "Loadable" && component.preload && typeof component.preload === "function";
89
+ }
90
+ export {
91
+ renderNestedRoute,
92
+ transformNestedRoutes
93
+ };
@@ -1,5 +1,5 @@
1
1
  import { TextEncoder } from "util";
2
- import { serializeJson } from "@modern-js/utils/serialize";
2
+ import { serializeJson } from "@modern-js/utils/universal/serialize";
3
3
  function isTrackedPromise(value) {
4
4
  return value != null && typeof value.then === "function" && value._tracked === true;
5
5
  }
@@ -1,6 +1,9 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
- import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
3
+ import {
4
+ MAIN_ENTRY_NAME,
5
+ SERVER_BUNDLE_DIRECTORY
6
+ } from "@modern-js/utils/constants";
4
7
  import { matchEntry } from "../common/utils";
5
8
  var server_default = () => ({
6
9
  name: "@modern-js/plugin-data-loader",
@@ -1,4 +1,4 @@
1
- import { type UNSAFE_DeferredData as DeferredData } from '@modern-js/utils/remix-router';
1
+ import { type UNSAFE_DeferredData as DeferredData } from '@modern-js/utils/universal/remix-router';
2
2
  export declare const getRequestUrl: ({
3
3
  params,
4
4
  request,
@@ -7,5 +7,5 @@
7
7
  * Copyright 2021 Remix Software Inc.
8
8
  * https://github.com/remix-run/remix/blob/2b5e1a72fc628d0408e27cf4d72e537762f1dc5b/LICENSE.md
9
9
  */
10
- import { UNSAFE_DeferredData as DeferredData } from '@modern-js/utils/remix-router';
10
+ import { UNSAFE_DeferredData as DeferredData } from '@modern-js/utils/universal/remix-router';
11
11
  export declare function parseDeferredReadableStream(stream: ReadableStream<Uint8Array>): Promise<DeferredData>;
@@ -0,0 +1,6 @@
1
+ import type { NestedRoute } from '@modern-js/types';
2
+ export declare const transformNestedRoutes: (routes: NestedRoute[]) => import("react-router-dom").RouteObject[];
3
+ export declare const renderNestedRoute: (nestedRoute: NestedRoute, options?: {
4
+ parent?: NestedRoute;
5
+ DeferredDataComponent?: () => JSX.Element | null;
6
+ }) => JSX.Element;
@@ -1,2 +1,2 @@
1
- import { type UNSAFE_DeferredData as DeferredData } from '@modern-js/utils/remix-router';
1
+ import { type UNSAFE_DeferredData as DeferredData } from '@modern-js/utils/universal/remix-router';
2
2
  export declare function createDeferredReadableStream(deferredData: DeferredData, signal: AbortSignal): any;
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "0.0.0-next-1679563983140",
14
+ "version": "0.0.0-next-1679753199581",
15
15
  "engines": {
16
16
  "node": ">=14.17.6"
17
17
  },
@@ -55,7 +55,7 @@
55
55
  "@remix-run/node": "^1.12.0",
56
56
  "path-to-regexp": "^6.2.0",
57
57
  "react-router-dom": "^6.8.1",
58
- "@modern-js/utils": "0.0.0-next-1679563983140"
58
+ "@modern-js/utils": "0.0.0-next-1679753199581"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/babel__core": "^7.1.15",
@@ -70,11 +70,17 @@
70
70
  "typescript": "^4",
71
71
  "webpack": "^5.76.2",
72
72
  "webpack-chain": "^6.5.1",
73
- "@modern-js/core": "0.0.0-next-1679563983140",
74
- "@modern-js/server-core": "0.0.0-next-1679563983140",
75
- "@modern-js/types": "0.0.0-next-1679563983140",
76
- "@scripts/build": "0.0.0-next-1679563983140",
77
- "@scripts/jest-config": "0.0.0-next-1679563983140"
73
+ "react": ">=17.0.0",
74
+ "react-router-dom": "^6.8.1",
75
+ "@modern-js/server-core": "0.0.0-next-1679753199581",
76
+ "@modern-js/core": "0.0.0-next-1679753199581",
77
+ "@modern-js/types": "0.0.0-next-1679753199581",
78
+ "@scripts/jest-config": "0.0.0-next-1679753199581",
79
+ "@scripts/build": "0.0.0-next-1679753199581"
80
+ },
81
+ "peerDependencies": {
82
+ "react": ">=17.0.0",
83
+ "react-router-dom": "^6.8.1"
78
84
  },
79
85
  "sideEffects": false,
80
86
  "publishConfig": {