@modern-js/plugin-data-loader 2.46.1 → 2.47.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/runtime/index.js +23 -58
- package/dist/esm/runtime/index.js +28 -149
- package/dist/esm-node/runtime/index.js +24 -59
- package/dist/types/cli/createRequest.d.ts +1 -1
- package/dist/types/runtime/index.d.ts +15 -5
- package/package.json +8 -16
- package/dist/cjs/server/index.js +0 -63
- package/dist/esm/server/index.js +0 -66
- package/dist/esm-node/server/index.js +0 -33
- package/dist/types/server/index.d.ts +0 -3
|
@@ -59,66 +59,31 @@ function convertModernRedirectResponse(headers, basename) {
|
|
|
59
59
|
headers: newHeaders
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
65
|
-
if (values) {
|
|
66
|
-
if (Array.isArray(values)) {
|
|
67
|
-
for (const value of values) {
|
|
68
|
-
headers.append(key, value);
|
|
69
|
-
}
|
|
70
|
-
} else {
|
|
71
|
-
headers.set(key, values);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return headers;
|
|
76
|
-
};
|
|
77
|
-
const createRequest = (context) => {
|
|
78
|
-
const origin = `${context.protocol}://${context.host}`;
|
|
79
|
-
const url = new URL(context.url, origin);
|
|
80
|
-
const controller = new AbortController();
|
|
62
|
+
const handleRequest = async ({ request: originRequest, serverRoutes, routes: routesConfig, context }) => {
|
|
63
|
+
var _originRequest_url;
|
|
81
64
|
const init = {
|
|
82
|
-
method:
|
|
83
|
-
headers:
|
|
84
|
-
signal:
|
|
65
|
+
method: originRequest.method,
|
|
66
|
+
headers: originRequest.headers,
|
|
67
|
+
signal: originRequest.signal
|
|
85
68
|
};
|
|
86
|
-
if (!
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
].includes(context.method.toUpperCase())) {
|
|
90
|
-
init.body = context.req;
|
|
91
|
-
}
|
|
92
|
-
const request = new Request(url.href, init);
|
|
93
|
-
return request;
|
|
94
|
-
};
|
|
95
|
-
const sendLoaderResponse = async (res, nodeResponse) => {
|
|
96
|
-
res.statusMessage = nodeResponse.statusText;
|
|
97
|
-
res.statusCode = nodeResponse.status;
|
|
98
|
-
for (const [key, value] of nodeResponse.headers.entries()) {
|
|
99
|
-
res.setHeader(key, value);
|
|
69
|
+
if (!(originRequest.method === "GET" || originRequest.method === "HEAD") && ((_originRequest_url = originRequest.url) === null || _originRequest_url === void 0 ? void 0 : _originRequest_url.includes("__loader"))) {
|
|
70
|
+
init.body = originRequest.__rawReq;
|
|
71
|
+
init.duplex = "half";
|
|
100
72
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
|
|
108
|
-
const { query } = context;
|
|
109
|
-
const routeId = query[import_constants2.LOADER_ID_PARAM];
|
|
110
|
-
const entry = (0, import_node2.matchEntry)(context.path, serverRoutes);
|
|
73
|
+
const request = new Request(originRequest.url, init);
|
|
74
|
+
const url = new URL(request.url);
|
|
75
|
+
const routeId = url.searchParams.get(import_constants2.LOADER_ID_PARAM);
|
|
76
|
+
const entry = (0, import_node2.matchEntry)(url.pathname, serverRoutes);
|
|
111
77
|
if (!routeId || !entry) {
|
|
112
78
|
return;
|
|
113
79
|
}
|
|
114
80
|
const basename = entry.urlPath;
|
|
115
81
|
const end = (0, import_time.time)();
|
|
116
|
-
const {
|
|
82
|
+
const { logger, reporter } = context;
|
|
117
83
|
const routes = (0, import_browser.transformNestedRoutes)(routesConfig, reporter);
|
|
118
84
|
const { queryRoute } = (0, import_remix_router.createStaticHandler)(routes, {
|
|
119
85
|
basename
|
|
120
86
|
});
|
|
121
|
-
const request = createRequest(context);
|
|
122
87
|
const requestContext = (0, import_node2.createRequestContext)();
|
|
123
88
|
requestContext.set(import_node2.reporterCtx, reporter);
|
|
124
89
|
let response;
|
|
@@ -132,17 +97,17 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
132
97
|
} else if ((0, import_lodash.isPlainObject)(response) && import_remix_router.UNSAFE_DEFERRED_SYMBOL in response) {
|
|
133
98
|
const deferredData = response[import_remix_router.UNSAFE_DEFERRED_SYMBOL];
|
|
134
99
|
const body = (0, import_response.createDeferredReadableStream)(deferredData, request.signal);
|
|
135
|
-
const
|
|
136
|
-
if (
|
|
137
|
-
if (!
|
|
100
|
+
const init2 = deferredData.init || {};
|
|
101
|
+
if (init2.status && isRedirectResponse(init2.status)) {
|
|
102
|
+
if (!init2.headers) {
|
|
138
103
|
throw new Error("redirect response includes no headers");
|
|
139
104
|
}
|
|
140
|
-
response = convertModernRedirectResponse(new Headers(
|
|
105
|
+
response = convertModernRedirectResponse(new Headers(init2.headers), basename);
|
|
141
106
|
} else {
|
|
142
|
-
const headers = new Headers(
|
|
107
|
+
const headers = new Headers(init2.headers);
|
|
143
108
|
headers.set("Content-Type", `${import_constants2.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
|
|
144
|
-
|
|
145
|
-
response = new import_node.Response(body,
|
|
109
|
+
init2.headers = headers;
|
|
110
|
+
response = new import_node.Response(body, init2);
|
|
146
111
|
}
|
|
147
112
|
} else {
|
|
148
113
|
response = isResponse(response) ? response : new import_node.Response(JSON.stringify(response), {
|
|
@@ -151,6 +116,8 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
151
116
|
}
|
|
152
117
|
});
|
|
153
118
|
}
|
|
119
|
+
const cost = end();
|
|
120
|
+
reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(`${import_constants.LOADER_REPORTER_NAME}-navigation`, cost);
|
|
154
121
|
} catch (error) {
|
|
155
122
|
const message = (0, import_remix_router.isRouteErrorResponse)(error) ? error.data : String(error);
|
|
156
123
|
if (error instanceof Error) {
|
|
@@ -165,9 +132,7 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
165
132
|
}
|
|
166
133
|
});
|
|
167
134
|
}
|
|
168
|
-
|
|
169
|
-
reporter.reportTiming(`${import_constants.LOADER_REPORTER_NAME}-navigation`, cost);
|
|
170
|
-
await sendLoaderResponse(res, response);
|
|
135
|
+
return response;
|
|
171
136
|
};
|
|
172
137
|
// Annotate the CommonJS export names for ESM import in node:
|
|
173
138
|
0 && (module.exports = {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
2
|
import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
3
|
-
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
4
3
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
|
-
import { installGlobals,
|
|
4
|
+
import { installGlobals, Response as NodeResponse } from "@remix-run/node";
|
|
6
5
|
import { createStaticHandler, UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL, isRouteErrorResponse } from "@modern-js/runtime-utils/remix-router";
|
|
7
6
|
import { transformNestedRoutes } from "@modern-js/runtime-utils/browser";
|
|
8
7
|
import { isPlainObject } from "@modern-js/utils/lodash";
|
|
@@ -38,140 +37,26 @@ function convertModernRedirectResponse(headers, basename) {
|
|
|
38
37
|
headers: newHeaders
|
|
39
38
|
});
|
|
40
39
|
}
|
|
41
|
-
var createLoaderHeaders = function(requestHeaders) {
|
|
42
|
-
var headers = new Headers();
|
|
43
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
44
|
-
try {
|
|
45
|
-
for (var _iterator = Object.entries(requestHeaders)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
46
|
-
var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], values = _step_value[1];
|
|
47
|
-
if (values) {
|
|
48
|
-
if (Array.isArray(values)) {
|
|
49
|
-
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
|
|
50
|
-
try {
|
|
51
|
-
for (var _iterator1 = values[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
|
|
52
|
-
var value = _step1.value;
|
|
53
|
-
headers.append(key, value);
|
|
54
|
-
}
|
|
55
|
-
} catch (err) {
|
|
56
|
-
_didIteratorError1 = true;
|
|
57
|
-
_iteratorError1 = err;
|
|
58
|
-
} finally {
|
|
59
|
-
try {
|
|
60
|
-
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
61
|
-
_iterator1.return();
|
|
62
|
-
}
|
|
63
|
-
} finally {
|
|
64
|
-
if (_didIteratorError1) {
|
|
65
|
-
throw _iteratorError1;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
} else {
|
|
70
|
-
headers.set(key, values);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
} catch (err) {
|
|
75
|
-
_didIteratorError = true;
|
|
76
|
-
_iteratorError = err;
|
|
77
|
-
} finally {
|
|
78
|
-
try {
|
|
79
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
80
|
-
_iterator.return();
|
|
81
|
-
}
|
|
82
|
-
} finally {
|
|
83
|
-
if (_didIteratorError) {
|
|
84
|
-
throw _iteratorError;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return headers;
|
|
89
|
-
};
|
|
90
|
-
var createRequest = function(context) {
|
|
91
|
-
var origin = "".concat(context.protocol, "://").concat(context.host);
|
|
92
|
-
var url = new URL(context.url, origin);
|
|
93
|
-
var controller = new AbortController();
|
|
94
|
-
var init = {
|
|
95
|
-
method: context.method,
|
|
96
|
-
headers: createLoaderHeaders(context.headers),
|
|
97
|
-
signal: controller.signal
|
|
98
|
-
};
|
|
99
|
-
if (![
|
|
100
|
-
"GET",
|
|
101
|
-
"HEAD"
|
|
102
|
-
].includes(context.method.toUpperCase())) {
|
|
103
|
-
init.body = context.req;
|
|
104
|
-
}
|
|
105
|
-
var request = new Request(url.href, init);
|
|
106
|
-
return request;
|
|
107
|
-
};
|
|
108
|
-
var sendLoaderResponse = function() {
|
|
109
|
-
var _ref = _async_to_generator(function(res, nodeResponse) {
|
|
110
|
-
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, key, value;
|
|
111
|
-
return _ts_generator(this, function(_state) {
|
|
112
|
-
switch (_state.label) {
|
|
113
|
-
case 0:
|
|
114
|
-
res.statusMessage = nodeResponse.statusText;
|
|
115
|
-
res.statusCode = nodeResponse.status;
|
|
116
|
-
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
117
|
-
try {
|
|
118
|
-
for (_iterator = nodeResponse.headers.entries()[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
119
|
-
_step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
|
|
120
|
-
res.setHeader(key, value);
|
|
121
|
-
}
|
|
122
|
-
} catch (err) {
|
|
123
|
-
_didIteratorError = true;
|
|
124
|
-
_iteratorError = err;
|
|
125
|
-
} finally {
|
|
126
|
-
try {
|
|
127
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
128
|
-
_iterator.return();
|
|
129
|
-
}
|
|
130
|
-
} finally {
|
|
131
|
-
if (_didIteratorError) {
|
|
132
|
-
throw _iteratorError;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
if (!nodeResponse.body)
|
|
137
|
-
return [
|
|
138
|
-
3,
|
|
139
|
-
2
|
|
140
|
-
];
|
|
141
|
-
return [
|
|
142
|
-
4,
|
|
143
|
-
writeReadableStreamToWritable(nodeResponse.body, res)
|
|
144
|
-
];
|
|
145
|
-
case 1:
|
|
146
|
-
_state.sent();
|
|
147
|
-
return [
|
|
148
|
-
3,
|
|
149
|
-
3
|
|
150
|
-
];
|
|
151
|
-
case 2:
|
|
152
|
-
res.end();
|
|
153
|
-
_state.label = 3;
|
|
154
|
-
case 3:
|
|
155
|
-
return [
|
|
156
|
-
2
|
|
157
|
-
];
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
return function sendLoaderResponse2(res, nodeResponse) {
|
|
162
|
-
return _ref.apply(this, arguments);
|
|
163
|
-
};
|
|
164
|
-
}();
|
|
165
40
|
var handleRequest = function() {
|
|
166
41
|
var _ref = _async_to_generator(function(param) {
|
|
167
|
-
var
|
|
42
|
+
var originRequest, serverRoutes, routesConfig, context, _originRequest_url, init, request, url, routeId, entry, basename, end, logger, reporter, routes, queryRoute, requestContext, response, deferredData, body, init1, headers, cost, error, message;
|
|
168
43
|
return _ts_generator(this, function(_state) {
|
|
169
44
|
switch (_state.label) {
|
|
170
45
|
case 0:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
46
|
+
originRequest = param.request, serverRoutes = param.serverRoutes, routesConfig = param.routes, context = param.context;
|
|
47
|
+
init = {
|
|
48
|
+
method: originRequest.method,
|
|
49
|
+
headers: originRequest.headers,
|
|
50
|
+
signal: originRequest.signal
|
|
51
|
+
};
|
|
52
|
+
if (!(originRequest.method === "GET" || originRequest.method === "HEAD") && ((_originRequest_url = originRequest.url) === null || _originRequest_url === void 0 ? void 0 : _originRequest_url.includes("__loader"))) {
|
|
53
|
+
init.body = originRequest.__rawReq;
|
|
54
|
+
init.duplex = "half";
|
|
55
|
+
}
|
|
56
|
+
request = new Request(originRequest.url, init);
|
|
57
|
+
url = new URL(request.url);
|
|
58
|
+
routeId = url.searchParams.get(LOADER_ID_PARAM);
|
|
59
|
+
entry = matchEntry(url.pathname, serverRoutes);
|
|
175
60
|
if (!routeId || !entry) {
|
|
176
61
|
return [
|
|
177
62
|
2
|
|
@@ -179,12 +64,11 @@ var handleRequest = function() {
|
|
|
179
64
|
}
|
|
180
65
|
basename = entry.urlPath;
|
|
181
66
|
end = time();
|
|
182
|
-
|
|
67
|
+
logger = context.logger, reporter = context.reporter;
|
|
183
68
|
routes = transformNestedRoutes(routesConfig, reporter);
|
|
184
69
|
queryRoute = createStaticHandler(routes, {
|
|
185
70
|
basename
|
|
186
71
|
}).queryRoute;
|
|
187
|
-
request = createRequest(context);
|
|
188
72
|
requestContext = createRequestContext();
|
|
189
73
|
requestContext.set(reporterCtx, reporter);
|
|
190
74
|
_state.label = 1;
|
|
@@ -209,17 +93,17 @@ var handleRequest = function() {
|
|
|
209
93
|
} else if (isPlainObject(response) && DEFERRED_SYMBOL in response) {
|
|
210
94
|
deferredData = response[DEFERRED_SYMBOL];
|
|
211
95
|
body = createDeferredReadableStream(deferredData, request.signal);
|
|
212
|
-
|
|
213
|
-
if (
|
|
214
|
-
if (!
|
|
96
|
+
init1 = deferredData.init || {};
|
|
97
|
+
if (init1.status && isRedirectResponse(init1.status)) {
|
|
98
|
+
if (!init1.headers) {
|
|
215
99
|
throw new Error("redirect response includes no headers");
|
|
216
100
|
}
|
|
217
|
-
response = convertModernRedirectResponse(new Headers(
|
|
101
|
+
response = convertModernRedirectResponse(new Headers(init1.headers), basename);
|
|
218
102
|
} else {
|
|
219
|
-
headers = new Headers(
|
|
103
|
+
headers = new Headers(init1.headers);
|
|
220
104
|
headers.set("Content-Type", "".concat(CONTENT_TYPE_DEFERRED, "; charset=UTF-8"));
|
|
221
|
-
|
|
222
|
-
response = new NodeResponse(body,
|
|
105
|
+
init1.headers = headers;
|
|
106
|
+
response = new NodeResponse(body, init1);
|
|
223
107
|
}
|
|
224
108
|
} else {
|
|
225
109
|
response = isResponse(response) ? response : new NodeResponse(JSON.stringify(response), {
|
|
@@ -228,6 +112,8 @@ var handleRequest = function() {
|
|
|
228
112
|
}
|
|
229
113
|
});
|
|
230
114
|
}
|
|
115
|
+
cost = end();
|
|
116
|
+
reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming("".concat(LOADER_REPORTER_NAME, "-navigation"), cost);
|
|
231
117
|
return [
|
|
232
118
|
3,
|
|
233
119
|
4
|
|
@@ -251,16 +137,9 @@ var handleRequest = function() {
|
|
|
251
137
|
4
|
|
252
138
|
];
|
|
253
139
|
case 4:
|
|
254
|
-
cost = end();
|
|
255
|
-
reporter.reportTiming("".concat(LOADER_REPORTER_NAME, "-navigation"), cost);
|
|
256
|
-
return [
|
|
257
|
-
4,
|
|
258
|
-
sendLoaderResponse(res, response)
|
|
259
|
-
];
|
|
260
|
-
case 5:
|
|
261
|
-
_state.sent();
|
|
262
140
|
return [
|
|
263
|
-
2
|
|
141
|
+
2,
|
|
142
|
+
response
|
|
264
143
|
];
|
|
265
144
|
}
|
|
266
145
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { installGlobals,
|
|
1
|
+
import { installGlobals, Response as NodeResponse } from "@remix-run/node";
|
|
2
2
|
import { createStaticHandler, UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL, isRouteErrorResponse } from "@modern-js/runtime-utils/remix-router";
|
|
3
3
|
import { transformNestedRoutes } from "@modern-js/runtime-utils/browser";
|
|
4
4
|
import { isPlainObject } from "@modern-js/utils/lodash";
|
|
@@ -34,66 +34,31 @@ function convertModernRedirectResponse(headers, basename) {
|
|
|
34
34
|
headers: newHeaders
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
40
|
-
if (values) {
|
|
41
|
-
if (Array.isArray(values)) {
|
|
42
|
-
for (const value of values) {
|
|
43
|
-
headers.append(key, value);
|
|
44
|
-
}
|
|
45
|
-
} else {
|
|
46
|
-
headers.set(key, values);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return headers;
|
|
51
|
-
};
|
|
52
|
-
const createRequest = (context) => {
|
|
53
|
-
const origin = `${context.protocol}://${context.host}`;
|
|
54
|
-
const url = new URL(context.url, origin);
|
|
55
|
-
const controller = new AbortController();
|
|
37
|
+
const handleRequest = async ({ request: originRequest, serverRoutes, routes: routesConfig, context }) => {
|
|
38
|
+
var _originRequest_url;
|
|
56
39
|
const init = {
|
|
57
|
-
method:
|
|
58
|
-
headers:
|
|
59
|
-
signal:
|
|
40
|
+
method: originRequest.method,
|
|
41
|
+
headers: originRequest.headers,
|
|
42
|
+
signal: originRequest.signal
|
|
60
43
|
};
|
|
61
|
-
if (!
|
|
62
|
-
|
|
63
|
-
"
|
|
64
|
-
].includes(context.method.toUpperCase())) {
|
|
65
|
-
init.body = context.req;
|
|
66
|
-
}
|
|
67
|
-
const request = new Request(url.href, init);
|
|
68
|
-
return request;
|
|
69
|
-
};
|
|
70
|
-
const sendLoaderResponse = async (res, nodeResponse) => {
|
|
71
|
-
res.statusMessage = nodeResponse.statusText;
|
|
72
|
-
res.statusCode = nodeResponse.status;
|
|
73
|
-
for (const [key, value] of nodeResponse.headers.entries()) {
|
|
74
|
-
res.setHeader(key, value);
|
|
44
|
+
if (!(originRequest.method === "GET" || originRequest.method === "HEAD") && ((_originRequest_url = originRequest.url) === null || _originRequest_url === void 0 ? void 0 : _originRequest_url.includes("__loader"))) {
|
|
45
|
+
init.body = originRequest.__rawReq;
|
|
46
|
+
init.duplex = "half";
|
|
75
47
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
|
|
83
|
-
const { query } = context;
|
|
84
|
-
const routeId = query[LOADER_ID_PARAM];
|
|
85
|
-
const entry = matchEntry(context.path, serverRoutes);
|
|
48
|
+
const request = new Request(originRequest.url, init);
|
|
49
|
+
const url = new URL(request.url);
|
|
50
|
+
const routeId = url.searchParams.get(LOADER_ID_PARAM);
|
|
51
|
+
const entry = matchEntry(url.pathname, serverRoutes);
|
|
86
52
|
if (!routeId || !entry) {
|
|
87
53
|
return;
|
|
88
54
|
}
|
|
89
55
|
const basename = entry.urlPath;
|
|
90
56
|
const end = time();
|
|
91
|
-
const {
|
|
57
|
+
const { logger, reporter } = context;
|
|
92
58
|
const routes = transformNestedRoutes(routesConfig, reporter);
|
|
93
59
|
const { queryRoute } = createStaticHandler(routes, {
|
|
94
60
|
basename
|
|
95
61
|
});
|
|
96
|
-
const request = createRequest(context);
|
|
97
62
|
const requestContext = createRequestContext();
|
|
98
63
|
requestContext.set(reporterCtx, reporter);
|
|
99
64
|
let response;
|
|
@@ -107,17 +72,17 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
107
72
|
} else if (isPlainObject(response) && DEFERRED_SYMBOL in response) {
|
|
108
73
|
const deferredData = response[DEFERRED_SYMBOL];
|
|
109
74
|
const body = createDeferredReadableStream(deferredData, request.signal);
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
if (!
|
|
75
|
+
const init2 = deferredData.init || {};
|
|
76
|
+
if (init2.status && isRedirectResponse(init2.status)) {
|
|
77
|
+
if (!init2.headers) {
|
|
113
78
|
throw new Error("redirect response includes no headers");
|
|
114
79
|
}
|
|
115
|
-
response = convertModernRedirectResponse(new Headers(
|
|
80
|
+
response = convertModernRedirectResponse(new Headers(init2.headers), basename);
|
|
116
81
|
} else {
|
|
117
|
-
const headers = new Headers(
|
|
82
|
+
const headers = new Headers(init2.headers);
|
|
118
83
|
headers.set("Content-Type", `${CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
|
|
119
|
-
|
|
120
|
-
response = new NodeResponse(body,
|
|
84
|
+
init2.headers = headers;
|
|
85
|
+
response = new NodeResponse(body, init2);
|
|
121
86
|
}
|
|
122
87
|
} else {
|
|
123
88
|
response = isResponse(response) ? response : new NodeResponse(JSON.stringify(response), {
|
|
@@ -126,6 +91,8 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
126
91
|
}
|
|
127
92
|
});
|
|
128
93
|
}
|
|
94
|
+
const cost = end();
|
|
95
|
+
reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(`${LOADER_REPORTER_NAME}-navigation`, cost);
|
|
129
96
|
} catch (error) {
|
|
130
97
|
const message = isRouteErrorResponse(error) ? error.data : String(error);
|
|
131
98
|
if (error instanceof Error) {
|
|
@@ -140,9 +107,7 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
140
107
|
}
|
|
141
108
|
});
|
|
142
109
|
}
|
|
143
|
-
|
|
144
|
-
reporter.reportTiming(`${LOADER_REPORTER_NAME}-navigation`, cost);
|
|
145
|
-
await sendLoaderResponse(res, response);
|
|
110
|
+
return response;
|
|
146
111
|
};
|
|
147
112
|
export {
|
|
148
113
|
handleRequest,
|
|
@@ -7,7 +7,7 @@ export declare const getRequestUrl: ({ params, request, routeId, }: {
|
|
|
7
7
|
export declare const createRequest: (routeId: string, method?: string) => ({ params, request, }: {
|
|
8
8
|
params: Record<string, string>;
|
|
9
9
|
request: Request;
|
|
10
|
-
}) => Promise<
|
|
10
|
+
}) => Promise<Response | DeferredData>;
|
|
11
11
|
export declare const createActionRequest: (routeId: string) => ({ params, request, }: {
|
|
12
12
|
params: Record<string, string>;
|
|
13
13
|
request: Request;
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { IncomingMessage } from 'node:http';
|
|
3
|
+
import type { Logger, NestedRoute, Reporter, ServerRoute } from '@modern-js/types';
|
|
2
4
|
import { Response as NodeResponse } from '@remix-run/node';
|
|
3
|
-
|
|
5
|
+
declare global {
|
|
6
|
+
interface Request {
|
|
7
|
+
__rawReq?: IncomingMessage;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
4
10
|
export declare function isRedirectResponse(status: number): boolean;
|
|
5
11
|
export declare function isResponse(value: any): value is NodeResponse;
|
|
6
|
-
export declare const handleRequest: ({
|
|
7
|
-
|
|
12
|
+
export declare const handleRequest: ({ request: originRequest, serverRoutes, routes: routesConfig, context, }: {
|
|
13
|
+
request: Request;
|
|
8
14
|
serverRoutes: ServerRoute[];
|
|
9
15
|
routes: NestedRoute[];
|
|
10
|
-
|
|
16
|
+
context: {
|
|
17
|
+
logger: Logger;
|
|
18
|
+
reporter?: Reporter;
|
|
19
|
+
};
|
|
20
|
+
}) => Promise<Response | void>;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.47.1-alpha.0",
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14.17.6"
|
|
21
21
|
},
|
|
@@ -29,11 +29,6 @@
|
|
|
29
29
|
"jsnext:source": "./src/cli/loader.ts",
|
|
30
30
|
"default": "./dist/cjs/cli/loader.js"
|
|
31
31
|
},
|
|
32
|
-
"./server": {
|
|
33
|
-
"types": "./dist/types/server/index.d.ts",
|
|
34
|
-
"jsnext:source": "./src/server/index.ts",
|
|
35
|
-
"default": "./dist/cjs/server/index.js"
|
|
36
|
-
},
|
|
37
32
|
"./runtime": {
|
|
38
33
|
"types": "./dist/types/runtime/index.d.ts",
|
|
39
34
|
"jsnext:source": "./src/runtime/index.ts",
|
|
@@ -45,9 +40,6 @@
|
|
|
45
40
|
"loader": [
|
|
46
41
|
"./dist/types/cli/loader.d.ts"
|
|
47
42
|
],
|
|
48
|
-
"server": [
|
|
49
|
-
"./dist/types/server/index.d.ts"
|
|
50
|
-
],
|
|
51
43
|
"runtime": [
|
|
52
44
|
"./dist/types/runtime/index.d.ts"
|
|
53
45
|
]
|
|
@@ -58,8 +50,8 @@
|
|
|
58
50
|
"@remix-run/node": "^1.12.0",
|
|
59
51
|
"path-to-regexp": "^6.2.0",
|
|
60
52
|
"@swc/helpers": "0.5.3",
|
|
61
|
-
"@modern-js/utils": "2.
|
|
62
|
-
"@modern-js/
|
|
53
|
+
"@modern-js/runtime-utils": "2.47.0",
|
|
54
|
+
"@modern-js/utils": "2.47.0"
|
|
63
55
|
},
|
|
64
56
|
"devDependencies": {
|
|
65
57
|
"@types/babel__core": "^7.20.1",
|
|
@@ -75,11 +67,11 @@
|
|
|
75
67
|
"webpack": "^5.89.0",
|
|
76
68
|
"react": "^18",
|
|
77
69
|
"react-dom": "^18",
|
|
78
|
-
"@modern-js/core": "2.
|
|
79
|
-
"@
|
|
80
|
-
"@modern-js/
|
|
81
|
-
"@
|
|
82
|
-
"@scripts/jest-config": "2.
|
|
70
|
+
"@modern-js/core": "2.47.0",
|
|
71
|
+
"@scripts/build": "2.47.0",
|
|
72
|
+
"@modern-js/server-core": "2.47.1-alpha.6",
|
|
73
|
+
"@modern-js/types": "2.47.0",
|
|
74
|
+
"@scripts/jest-config": "2.47.0"
|
|
83
75
|
},
|
|
84
76
|
"peerDependencies": {
|
|
85
77
|
"react": ">=17.0.0"
|
package/dist/cjs/server/index.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var server_exports = {};
|
|
30
|
-
__export(server_exports, {
|
|
31
|
-
default: () => server_default
|
|
32
|
-
});
|
|
33
|
-
module.exports = __toCommonJS(server_exports);
|
|
34
|
-
var import_path = __toESM(require("path"));
|
|
35
|
-
var import_fs = __toESM(require("fs"));
|
|
36
|
-
var import_utils = require("@modern-js/utils");
|
|
37
|
-
var import_node = require("@modern-js/runtime-utils/node");
|
|
38
|
-
var server_default = () => ({
|
|
39
|
-
name: "@modern-js/plugin-data-loader",
|
|
40
|
-
setup: () => ({
|
|
41
|
-
prepareLoaderHandler({ serverRoutes, distDir }) {
|
|
42
|
-
return async (context) => {
|
|
43
|
-
const entry = (0, import_node.matchEntry)(context.path, serverRoutes);
|
|
44
|
-
if (!entry) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const routesPath = import_path.default.join(distDir, import_utils.SERVER_BUNDLE_DIRECTORY, `${entry.entryName || import_utils.MAIN_ENTRY_NAME}-server-loaders.js`);
|
|
48
|
-
if (!import_fs.default.existsSync(routesPath)) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
const { routes, handleRequest } = await Promise.resolve().then(() => __toESM(require(routesPath)));
|
|
52
|
-
if (!routes) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
return handleRequest({
|
|
56
|
-
serverRoutes,
|
|
57
|
-
context,
|
|
58
|
-
routes
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
})
|
|
63
|
-
});
|
package/dist/esm/server/index.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
-
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import fs from "fs";
|
|
5
|
-
import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
6
|
-
import { matchEntry } from "@modern-js/runtime-utils/node";
|
|
7
|
-
function server_default() {
|
|
8
|
-
return {
|
|
9
|
-
name: "@modern-js/plugin-data-loader",
|
|
10
|
-
setup: function() {
|
|
11
|
-
return {
|
|
12
|
-
prepareLoaderHandler: function prepareLoaderHandler(param) {
|
|
13
|
-
var serverRoutes = param.serverRoutes, distDir = param.distDir;
|
|
14
|
-
return function() {
|
|
15
|
-
var _ref = _async_to_generator(function(context) {
|
|
16
|
-
var entry, routesPath, _ref2, routes, handleRequest;
|
|
17
|
-
return _ts_generator(this, function(_state) {
|
|
18
|
-
switch (_state.label) {
|
|
19
|
-
case 0:
|
|
20
|
-
entry = matchEntry(context.path, serverRoutes);
|
|
21
|
-
if (!entry) {
|
|
22
|
-
return [
|
|
23
|
-
2
|
|
24
|
-
];
|
|
25
|
-
}
|
|
26
|
-
routesPath = path.join(distDir, SERVER_BUNDLE_DIRECTORY, "".concat(entry.entryName || MAIN_ENTRY_NAME, "-server-loaders.js"));
|
|
27
|
-
if (!fs.existsSync(routesPath)) {
|
|
28
|
-
return [
|
|
29
|
-
2
|
|
30
|
-
];
|
|
31
|
-
}
|
|
32
|
-
return [
|
|
33
|
-
4,
|
|
34
|
-
import(routesPath)
|
|
35
|
-
];
|
|
36
|
-
case 1:
|
|
37
|
-
_ref2 = _state.sent(), routes = _ref2.routes, handleRequest = _ref2.handleRequest;
|
|
38
|
-
if (!routes) {
|
|
39
|
-
return [
|
|
40
|
-
2
|
|
41
|
-
];
|
|
42
|
-
}
|
|
43
|
-
return [
|
|
44
|
-
2,
|
|
45
|
-
handleRequest({
|
|
46
|
-
serverRoutes,
|
|
47
|
-
context,
|
|
48
|
-
routes
|
|
49
|
-
})
|
|
50
|
-
];
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
return function(context) {
|
|
55
|
-
return _ref.apply(this, arguments);
|
|
56
|
-
};
|
|
57
|
-
}();
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
;
|
|
64
|
-
export {
|
|
65
|
-
server_default as default
|
|
66
|
-
};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import path from "path";
|
|
2
|
-
import fs from "fs";
|
|
3
|
-
import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
4
|
-
import { matchEntry } from "@modern-js/runtime-utils/node";
|
|
5
|
-
var server_default = () => ({
|
|
6
|
-
name: "@modern-js/plugin-data-loader",
|
|
7
|
-
setup: () => ({
|
|
8
|
-
prepareLoaderHandler({ serverRoutes, distDir }) {
|
|
9
|
-
return async (context) => {
|
|
10
|
-
const entry = matchEntry(context.path, serverRoutes);
|
|
11
|
-
if (!entry) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
const routesPath = path.join(distDir, SERVER_BUNDLE_DIRECTORY, `${entry.entryName || MAIN_ENTRY_NAME}-server-loaders.js`);
|
|
15
|
-
if (!fs.existsSync(routesPath)) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
const { routes, handleRequest } = await import(routesPath);
|
|
19
|
-
if (!routes) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
return handleRequest({
|
|
23
|
-
serverRoutes,
|
|
24
|
-
context,
|
|
25
|
-
routes
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
})
|
|
30
|
-
});
|
|
31
|
-
export {
|
|
32
|
-
server_default as default
|
|
33
|
-
};
|