@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 +26 -11
- package/dist/cjs/cli/data.js +1 -1
- package/dist/cjs/runtime/index.js +2 -2
- package/dist/cjs/runtime/nestedRoutes.js +114 -0
- package/dist/cjs/runtime/response.js +1 -1
- package/dist/cjs/server/index.js +5 -5
- package/dist/esm/cli/data.js +1 -1
- package/dist/esm/runtime/index.js +2 -2
- package/dist/esm/runtime/nestedRoutes.js +174 -0
- package/dist/esm/runtime/response.js +1 -1
- package/dist/esm/server/index.js +1 -1
- package/dist/esm-node/cli/data.js +1 -1
- package/dist/esm-node/runtime/index.js +2 -2
- package/dist/esm-node/runtime/nestedRoutes.js +93 -0
- package/dist/esm-node/runtime/response.js +1 -1
- package/dist/esm-node/server/index.js +4 -1
- package/dist/types/cli/createRequest.d.ts +1 -1
- package/dist/types/cli/data.d.ts +1 -1
- package/dist/types/runtime/nestedRoutes.d.ts +6 -0
- package/dist/types/runtime/response.d.ts +1 -1
- package/package.json +13 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,26 +1,41 @@
|
|
|
1
1
|
# @modern-js/plugin-data-loader
|
|
2
2
|
|
|
3
|
-
## 0.0.0-next-
|
|
3
|
+
## 0.0.0-next-1679753199581
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
|
-
-
|
|
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
|
-
-
|
|
24
|
+
- 0da32d0: chore: upgrade jest and puppeteer
|
|
10
25
|
chore: 升级 jest 和 puppeteer 到 latest
|
|
11
|
-
-
|
|
26
|
+
- 0d9962b: fix: add types field in package.json
|
|
12
27
|
fix: 添加 package.json 中的 types 字段
|
|
13
|
-
-
|
|
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
|
-
-
|
|
32
|
+
- d6b6e29: fix: split server and runtime code in plugin-data-loader
|
|
18
33
|
fix: 分离 plugin-data-loader 中服务端和客户端运行时的代码
|
|
19
|
-
- Updated dependencies [
|
|
20
|
-
- Updated dependencies [
|
|
21
|
-
- Updated dependencies [
|
|
22
|
-
- Updated dependencies [
|
|
23
|
-
- @modern-js/utils@
|
|
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
|
|
package/dist/cjs/cli/data.js
CHANGED
|
@@ -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
|
|
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
|
}
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -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
|
|
36
|
-
var
|
|
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,
|
|
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
|
-
|
|
52
|
-
`${entry.entryName ||
|
|
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;
|
package/dist/esm/cli/data.js
CHANGED
|
@@ -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 {
|
|
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
|
}
|
package/dist/esm/server/index.js
CHANGED
|
@@ -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 {
|
|
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",
|
package/dist/types/cli/data.d.ts
CHANGED
|
@@ -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-
|
|
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-
|
|
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
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"@modern-js/
|
|
76
|
-
"@
|
|
77
|
-
"@
|
|
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": {
|