@modern-js/plugin-data-loader 2.35.1 → 2.36.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/cli/createRequest.js +73 -25
- package/dist/cjs/cli/data.js +27 -10
- package/dist/cjs/cli/generateClient.js +49 -30
- package/dist/cjs/cli/loader.js +34 -23
- package/dist/cjs/common/constants.js +27 -18
- package/dist/cjs/runtime/index.js +71 -54
- package/dist/cjs/runtime/response.js +28 -11
- package/dist/cjs/server/index.js +39 -18
- package/dist/esm/cli/createRequest.js +124 -6
- package/dist/esm/cli/data.js +4 -1
- package/dist/esm/cli/generateClient.js +13 -36
- package/dist/esm/cli/loader.js +12 -11
- package/dist/esm/common/constants.js +8 -3
- package/dist/esm/runtime/index.js +28 -15
- package/dist/esm/runtime/response.js +4 -1
- package/dist/esm/server/index.js +7 -4
- package/dist/esm-node/cli/createRequest.js +43 -2
- package/dist/esm-node/cli/data.js +4 -1
- package/dist/esm-node/cli/generateClient.js +16 -20
- package/dist/esm-node/cli/loader.js +12 -11
- package/dist/esm-node/common/constants.js +8 -3
- package/dist/esm-node/runtime/index.js +24 -11
- package/dist/esm-node/runtime/response.js +4 -1
- package/dist/esm-node/server/index.js +4 -1
- package/dist/types/cli/createRequest.d.ts +8 -1
- package/dist/types/cli/generateClient.d.ts +6 -4
- package/dist/types/cli/loader.d.ts +4 -1
- package/package.json +8 -8
|
@@ -1,21 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
9
15
|
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var response_exports = {};
|
|
20
|
+
__export(response_exports, {
|
|
21
|
+
createDeferredReadableStream: () => createDeferredReadableStream
|
|
10
22
|
});
|
|
11
|
-
|
|
12
|
-
|
|
23
|
+
module.exports = __toCommonJS(response_exports);
|
|
24
|
+
var import_util = require("util");
|
|
25
|
+
var import_node = require("@modern-js/runtime-utils/node");
|
|
13
26
|
function isTrackedPromise(value) {
|
|
14
27
|
return value != null && typeof value.then === "function" && value._tracked === true;
|
|
15
28
|
}
|
|
16
29
|
const DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
|
|
17
30
|
function createDeferredReadableStream(deferredData, signal) {
|
|
18
|
-
const encoder = new
|
|
31
|
+
const encoder = new import_util.TextEncoder();
|
|
19
32
|
const stream = new ReadableStream({
|
|
20
33
|
async start(controller) {
|
|
21
34
|
const criticalData = {};
|
|
@@ -51,7 +64,7 @@ function createDeferredReadableStream(deferredData, signal) {
|
|
|
51
64
|
function enqueueTrackedPromise(controller, encoder, settledKey, promise) {
|
|
52
65
|
if ("_error" in promise) {
|
|
53
66
|
const { _error } = promise;
|
|
54
|
-
controller.enqueue(encoder.encode(`error:${(0,
|
|
67
|
+
controller.enqueue(encoder.encode(`error:${(0, import_node.serializeJson)({
|
|
55
68
|
[settledKey]: {
|
|
56
69
|
message: _error.message,
|
|
57
70
|
stack: _error.stack
|
|
@@ -68,3 +81,7 @@ function enqueueTrackedPromise(controller, encoder, settledKey, promise) {
|
|
|
68
81
|
`));
|
|
69
82
|
}
|
|
70
83
|
}
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
createDeferredReadableStream
|
|
87
|
+
});
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -1,33 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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 });
|
|
9
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
|
|
10
32
|
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const _default = () => ({
|
|
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 = () => ({
|
|
18
39
|
name: "@modern-js/plugin-data-loader",
|
|
19
40
|
setup: () => ({
|
|
20
41
|
prepareLoaderHandler({ serverRoutes, distDir }) {
|
|
21
42
|
return async (context) => {
|
|
22
|
-
const entry = (0,
|
|
43
|
+
const entry = (0, import_node.matchEntry)(context.path, serverRoutes);
|
|
23
44
|
if (!entry) {
|
|
24
45
|
return;
|
|
25
46
|
}
|
|
26
|
-
const routesPath =
|
|
27
|
-
if (!
|
|
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)) {
|
|
28
49
|
return;
|
|
29
50
|
}
|
|
30
|
-
const { routes, handleRequest } = await Promise.resolve(
|
|
51
|
+
const { routes, handleRequest } = await Promise.resolve().then(() => __toESM(require(routesPath)));
|
|
31
52
|
if (!routes) {
|
|
32
53
|
return;
|
|
33
54
|
}
|
|
@@ -4,7 +4,7 @@ import { compile } from "path-to-regexp";
|
|
|
4
4
|
import { redirect } from "@modern-js/runtime-utils/router";
|
|
5
5
|
import { LOADER_ID_PARAM, DIRECT_PARAM, CONTENT_TYPE_DEFERRED } from "../common/constants";
|
|
6
6
|
import { parseDeferredReadableStream } from "./data";
|
|
7
|
-
|
|
7
|
+
var getRequestUrl = function(param) {
|
|
8
8
|
var params = param.params, request = param.request, routeId = param.routeId;
|
|
9
9
|
var url = new URL(request.url);
|
|
10
10
|
var toPath = compile(url.pathname, {
|
|
@@ -56,7 +56,7 @@ var handleDeferredResponse = function() {
|
|
|
56
56
|
return _ref.apply(this, arguments);
|
|
57
57
|
};
|
|
58
58
|
}();
|
|
59
|
-
|
|
59
|
+
var createRequest = function(routeId) {
|
|
60
60
|
var method = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "get";
|
|
61
61
|
return function() {
|
|
62
62
|
var _ref = _async_to_generator(function(param) {
|
|
@@ -66,14 +66,14 @@ export var createRequest = function(routeId) {
|
|
|
66
66
|
case 0:
|
|
67
67
|
params = param.params, request = param.request;
|
|
68
68
|
url = getRequestUrl({
|
|
69
|
-
params
|
|
70
|
-
request
|
|
71
|
-
routeId
|
|
69
|
+
params,
|
|
70
|
+
request,
|
|
71
|
+
routeId
|
|
72
72
|
});
|
|
73
73
|
return [
|
|
74
74
|
4,
|
|
75
75
|
fetch(url, {
|
|
76
|
-
method
|
|
76
|
+
method,
|
|
77
77
|
signal: request.signal
|
|
78
78
|
})
|
|
79
79
|
];
|
|
@@ -101,3 +101,121 @@ export var createRequest = function(routeId) {
|
|
|
101
101
|
};
|
|
102
102
|
}();
|
|
103
103
|
};
|
|
104
|
+
var createActionRequest = function(routeId) {
|
|
105
|
+
return function() {
|
|
106
|
+
var _ref = _async_to_generator(function(param) {
|
|
107
|
+
var params, request, url, init, contentType, _, _1, res;
|
|
108
|
+
return _ts_generator(this, function(_state) {
|
|
109
|
+
switch (_state.label) {
|
|
110
|
+
case 0:
|
|
111
|
+
params = param.params, request = param.request;
|
|
112
|
+
url = getRequestUrl({
|
|
113
|
+
params,
|
|
114
|
+
request,
|
|
115
|
+
routeId
|
|
116
|
+
});
|
|
117
|
+
init = {
|
|
118
|
+
signal: request.signal
|
|
119
|
+
};
|
|
120
|
+
if (!(request.method !== "GET"))
|
|
121
|
+
return [
|
|
122
|
+
3,
|
|
123
|
+
8
|
|
124
|
+
];
|
|
125
|
+
init.method = request.method;
|
|
126
|
+
contentType = request.headers.get("Content-Type");
|
|
127
|
+
if (!(contentType && /\bapplication\/json\b/.test(contentType)))
|
|
128
|
+
return [
|
|
129
|
+
3,
|
|
130
|
+
2
|
|
131
|
+
];
|
|
132
|
+
init.headers = {
|
|
133
|
+
"Content-Type": contentType
|
|
134
|
+
};
|
|
135
|
+
_ = JSON.stringify;
|
|
136
|
+
return [
|
|
137
|
+
4,
|
|
138
|
+
request.json()
|
|
139
|
+
];
|
|
140
|
+
case 1:
|
|
141
|
+
init.body = _.apply(JSON, [
|
|
142
|
+
_state.sent()
|
|
143
|
+
]);
|
|
144
|
+
return [
|
|
145
|
+
3,
|
|
146
|
+
8
|
|
147
|
+
];
|
|
148
|
+
case 2:
|
|
149
|
+
if (!(contentType && /\btext\/plain\b/.test(contentType)))
|
|
150
|
+
return [
|
|
151
|
+
3,
|
|
152
|
+
4
|
|
153
|
+
];
|
|
154
|
+
init.headers = {
|
|
155
|
+
"Content-Type": contentType
|
|
156
|
+
};
|
|
157
|
+
return [
|
|
158
|
+
4,
|
|
159
|
+
request.text()
|
|
160
|
+
];
|
|
161
|
+
case 3:
|
|
162
|
+
init.body = _state.sent();
|
|
163
|
+
return [
|
|
164
|
+
3,
|
|
165
|
+
8
|
|
166
|
+
];
|
|
167
|
+
case 4:
|
|
168
|
+
if (!(contentType && /\bapplication\/x-www-form-urlencoded\b/.test(contentType)))
|
|
169
|
+
return [
|
|
170
|
+
3,
|
|
171
|
+
6
|
|
172
|
+
];
|
|
173
|
+
_1 = URLSearchParams.bind;
|
|
174
|
+
return [
|
|
175
|
+
4,
|
|
176
|
+
request.text()
|
|
177
|
+
];
|
|
178
|
+
case 5:
|
|
179
|
+
init.body = new (_1.apply(URLSearchParams, [
|
|
180
|
+
void 0,
|
|
181
|
+
_state.sent()
|
|
182
|
+
]))();
|
|
183
|
+
return [
|
|
184
|
+
3,
|
|
185
|
+
8
|
|
186
|
+
];
|
|
187
|
+
case 6:
|
|
188
|
+
return [
|
|
189
|
+
4,
|
|
190
|
+
request.formData()
|
|
191
|
+
];
|
|
192
|
+
case 7:
|
|
193
|
+
init.body = _state.sent();
|
|
194
|
+
_state.label = 8;
|
|
195
|
+
case 8:
|
|
196
|
+
return [
|
|
197
|
+
4,
|
|
198
|
+
fetch(url, init)
|
|
199
|
+
];
|
|
200
|
+
case 9:
|
|
201
|
+
res = _state.sent();
|
|
202
|
+
if (!res.ok) {
|
|
203
|
+
throw res;
|
|
204
|
+
}
|
|
205
|
+
return [
|
|
206
|
+
2,
|
|
207
|
+
res
|
|
208
|
+
];
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
return function(_) {
|
|
213
|
+
return _ref.apply(this, arguments);
|
|
214
|
+
};
|
|
215
|
+
}();
|
|
216
|
+
};
|
|
217
|
+
export {
|
|
218
|
+
createActionRequest,
|
|
219
|
+
createRequest,
|
|
220
|
+
getRequestUrl
|
|
221
|
+
};
|
package/dist/esm/cli/data.js
CHANGED
|
@@ -9,7 +9,7 @@ import { _ as _wrap_async_generator } from "@swc/helpers/_/_wrap_async_generator
|
|
|
9
9
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
10
10
|
import { UNSAFE_DeferredData as DeferredData, AbortedDeferredError } from "@modern-js/runtime-utils/remix-router";
|
|
11
11
|
var DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
|
|
12
|
-
|
|
12
|
+
function parseDeferredReadableStream(stream) {
|
|
13
13
|
return _parseDeferredReadableStream.apply(this, arguments);
|
|
14
14
|
}
|
|
15
15
|
function _parseDeferredReadableStream() {
|
|
@@ -485,3 +485,6 @@ function mergeArrays() {
|
|
|
485
485
|
}
|
|
486
486
|
return out;
|
|
487
487
|
}
|
|
488
|
+
export {
|
|
489
|
+
parseDeferredReadableStream
|
|
490
|
+
};
|
|
@@ -1,44 +1,21 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
delete require.cache[mapFile];
|
|
5
|
-
var loadersMap = require(mapFile);
|
|
2
|
+
var generateClient = function(param) {
|
|
3
|
+
var inline = param.inline, action = param.action, routeId = param.routeId;
|
|
6
4
|
var requestCode = "";
|
|
7
|
-
var exportsCode = "";
|
|
8
5
|
var requestCreatorPath = path.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
|
|
9
|
-
var importCode = "\n import { createRequest } from '".concat(requestCreatorPath, "';\n ");
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
exportsCode = "export {";
|
|
16
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
|
17
|
-
try {
|
|
18
|
-
for (var _iterator = Object.keys(loadersMap)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
19
|
-
var loader = _step.value;
|
|
20
|
-
exportsCode += "".concat(loader, ",");
|
|
21
|
-
}
|
|
22
|
-
} catch (err) {
|
|
23
|
-
_didIteratorError = true;
|
|
24
|
-
_iteratorError = err;
|
|
25
|
-
} finally {
|
|
26
|
-
try {
|
|
27
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
28
|
-
_iterator.return();
|
|
29
|
-
}
|
|
30
|
-
} finally {
|
|
31
|
-
if (_didIteratorError) {
|
|
32
|
-
throw _iteratorError;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
6
|
+
var importCode = "\n import { createRequest, createActionRequest } from '".concat(requestCreatorPath, "';\n ");
|
|
7
|
+
if (inline) {
|
|
8
|
+
if (action) {
|
|
9
|
+
requestCode = "\n export const loader = createRequest('".concat(routeId, "');\n export const action = createActionRequest('").concat(routeId, "')\n ");
|
|
10
|
+
} else {
|
|
11
|
+
requestCode = "\n export const loader = createRequest('".concat(routeId, "');\n ");
|
|
35
12
|
}
|
|
36
|
-
exportsCode += "}";
|
|
37
13
|
} else {
|
|
38
|
-
|
|
39
|
-
requestCode = "\n const loader = createRequest('".concat(loader1.routeId, "');\n ");
|
|
40
|
-
exportsCode = "export default loader;";
|
|
14
|
+
requestCode = "\n export default createRequest('".concat(routeId, "');\n ");
|
|
41
15
|
}
|
|
42
|
-
var generatedCode = "\n ".concat(importCode, "\n ").concat(requestCode, "\n
|
|
16
|
+
var generatedCode = "\n ".concat(importCode, "\n ").concat(requestCode, "\n ");
|
|
43
17
|
return generatedCode;
|
|
44
18
|
};
|
|
19
|
+
export {
|
|
20
|
+
generateClient
|
|
21
|
+
};
|
package/dist/esm/cli/loader.js
CHANGED
|
@@ -4,7 +4,7 @@ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
|
4
4
|
import { promisify } from "util";
|
|
5
5
|
import { logger } from "@modern-js/utils/logger";
|
|
6
6
|
import { generateClient } from "./generateClient";
|
|
7
|
-
|
|
7
|
+
function loader(source) {
|
|
8
8
|
return _loader.apply(this, arguments);
|
|
9
9
|
}
|
|
10
10
|
function _loader() {
|
|
@@ -28,17 +28,14 @@ function _loader() {
|
|
|
28
28
|
];
|
|
29
29
|
}
|
|
30
30
|
resourceQuery = this.resourceQuery;
|
|
31
|
-
options = resourceQuery.slice(1).split("&").
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (!key || !value) {
|
|
36
|
-
return pre;
|
|
31
|
+
options = resourceQuery.slice(1).split("&").reduce(function(pre, cur) {
|
|
32
|
+
var _cur_split = _sliced_to_array(cur.split("="), 2), key = _cur_split[0], value = _cur_split[1];
|
|
33
|
+
if (key && value) {
|
|
34
|
+
pre[key] = value === "true" ? true : value === "false" ? false : value;
|
|
37
35
|
}
|
|
38
|
-
pre[key] = value;
|
|
39
36
|
return pre;
|
|
40
37
|
}, {});
|
|
41
|
-
if (!options.
|
|
38
|
+
if (!options.loaderId) {
|
|
42
39
|
return [
|
|
43
40
|
2,
|
|
44
41
|
source
|
|
@@ -80,8 +77,9 @@ function _loader() {
|
|
|
80
77
|
];
|
|
81
78
|
case 4:
|
|
82
79
|
code = generateClient({
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
inline: options.inline,
|
|
81
|
+
action: options.action,
|
|
82
|
+
routeId: options.routeId
|
|
85
83
|
});
|
|
86
84
|
return [
|
|
87
85
|
2,
|
|
@@ -92,3 +90,6 @@ function _loader() {
|
|
|
92
90
|
});
|
|
93
91
|
return _loader.apply(this, arguments);
|
|
94
92
|
}
|
|
93
|
+
export {
|
|
94
|
+
loader as default
|
|
95
|
+
};
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var LOADER_ID_PARAM = "__loader";
|
|
2
|
+
var DIRECT_PARAM = "__ssrDirect";
|
|
3
|
+
var CONTENT_TYPE_DEFERRED = "text/modernjs-deferred";
|
|
4
|
+
export {
|
|
5
|
+
CONTENT_TYPE_DEFERRED,
|
|
6
|
+
DIRECT_PARAM,
|
|
7
|
+
LOADER_ID_PARAM
|
|
8
|
+
};
|
|
@@ -19,10 +19,10 @@ var redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
|
19
19
|
307,
|
|
20
20
|
308
|
|
21
21
|
]);
|
|
22
|
-
|
|
22
|
+
function isRedirectResponse(status) {
|
|
23
23
|
return redirectStatusCodes.has(status);
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
function isResponse(value) {
|
|
26
26
|
return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
|
|
27
27
|
}
|
|
28
28
|
function convertModernRedirectResponse(headers, basename) {
|
|
@@ -87,7 +87,7 @@ var createLoaderHeaders = function(requestHeaders) {
|
|
|
87
87
|
}
|
|
88
88
|
return headers;
|
|
89
89
|
};
|
|
90
|
-
var
|
|
90
|
+
var createRequest = function(context) {
|
|
91
91
|
var origin = "".concat(context.protocol, "://").concat(context.host);
|
|
92
92
|
var url = new URL(context.url, origin);
|
|
93
93
|
var controller = new AbortController();
|
|
@@ -96,7 +96,14 @@ var createLoaderRequest = function(context) {
|
|
|
96
96
|
headers: createLoaderHeaders(context.headers),
|
|
97
97
|
signal: controller.signal
|
|
98
98
|
};
|
|
99
|
-
|
|
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;
|
|
100
107
|
};
|
|
101
108
|
var sendLoaderResponse = function() {
|
|
102
109
|
var _ref = _async_to_generator(function(res, nodeResponse) {
|
|
@@ -155,14 +162,14 @@ var sendLoaderResponse = function() {
|
|
|
155
162
|
return _ref.apply(this, arguments);
|
|
156
163
|
};
|
|
157
164
|
}();
|
|
158
|
-
|
|
165
|
+
var handleRequest = function() {
|
|
159
166
|
var _ref = _async_to_generator(function(param) {
|
|
160
|
-
var context, serverRoutes, routesConfig,
|
|
167
|
+
var context, serverRoutes, routesConfig, query, routeId, entry, basename, end, res, logger, reporter, routes, queryRoute, request, requestContext, response, deferredData, body, init, headers, error, message, cost;
|
|
161
168
|
return _ts_generator(this, function(_state) {
|
|
162
169
|
switch (_state.label) {
|
|
163
170
|
case 0:
|
|
164
171
|
context = param.context, serverRoutes = param.serverRoutes, routesConfig = param.routes;
|
|
165
|
-
|
|
172
|
+
query = context.query;
|
|
166
173
|
routeId = query[LOADER_ID_PARAM];
|
|
167
174
|
entry = matchEntry(context.path, serverRoutes);
|
|
168
175
|
if (!routeId || !entry) {
|
|
@@ -170,17 +177,14 @@ export var handleRequest = function() {
|
|
|
170
177
|
2
|
|
171
178
|
];
|
|
172
179
|
}
|
|
173
|
-
if (method.toLowerCase() !== "get") {
|
|
174
|
-
throw new Error("CSR data loader request only support http GET method");
|
|
175
|
-
}
|
|
176
180
|
basename = entry.urlPath;
|
|
177
181
|
end = time();
|
|
178
182
|
res = context.res, logger = context.logger, reporter = context.reporter;
|
|
179
183
|
routes = transformNestedRoutes(routesConfig, reporter);
|
|
180
184
|
queryRoute = createStaticHandler(routes, {
|
|
181
|
-
basename
|
|
185
|
+
basename
|
|
182
186
|
}).queryRoute;
|
|
183
|
-
request =
|
|
187
|
+
request = createRequest(context);
|
|
184
188
|
requestContext = createRequestContext();
|
|
185
189
|
requestContext.set(reporterCtx, reporter);
|
|
186
190
|
_state.label = 1;
|
|
@@ -194,8 +198,8 @@ export var handleRequest = function() {
|
|
|
194
198
|
return [
|
|
195
199
|
4,
|
|
196
200
|
queryRoute(request, {
|
|
197
|
-
routeId
|
|
198
|
-
requestContext
|
|
201
|
+
routeId,
|
|
202
|
+
requestContext
|
|
199
203
|
})
|
|
200
204
|
];
|
|
201
205
|
case 2:
|
|
@@ -231,7 +235,11 @@ export var handleRequest = function() {
|
|
|
231
235
|
case 3:
|
|
232
236
|
error = _state.sent();
|
|
233
237
|
message = _instanceof(error, ErrorResponse) ? error.data : String(error);
|
|
234
|
-
|
|
238
|
+
if (_instanceof(error, Error)) {
|
|
239
|
+
logger === null || logger === void 0 ? void 0 : logger.error(error);
|
|
240
|
+
} else {
|
|
241
|
+
logger === null || logger === void 0 ? void 0 : logger.error(message);
|
|
242
|
+
}
|
|
235
243
|
response = new NodeResponse(message, {
|
|
236
244
|
status: 500,
|
|
237
245
|
headers: {
|
|
@@ -261,3 +269,8 @@ export var handleRequest = function() {
|
|
|
261
269
|
return _ref.apply(this, arguments);
|
|
262
270
|
};
|
|
263
271
|
}();
|
|
272
|
+
export {
|
|
273
|
+
handleRequest,
|
|
274
|
+
isRedirectResponse,
|
|
275
|
+
isResponse
|
|
276
|
+
};
|
|
@@ -8,7 +8,7 @@ function isTrackedPromise(value) {
|
|
|
8
8
|
return value != null && typeof value.then === "function" && value._tracked === true;
|
|
9
9
|
}
|
|
10
10
|
var DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
|
|
11
|
-
|
|
11
|
+
function createDeferredReadableStream(deferredData, signal) {
|
|
12
12
|
var encoder = new TextEncoder();
|
|
13
13
|
var stream = new ReadableStream({
|
|
14
14
|
start: function start(controller) {
|
|
@@ -102,3 +102,6 @@ function enqueueTrackedPromise(controller, encoder, settledKey, promise) {
|
|
|
102
102
|
controller.enqueue(encoder.encode("data:".concat(JSON.stringify(_define_property({}, settledKey, (_promise__data = promise._data) !== null && _promise__data !== void 0 ? _promise__data : null)), "\n\n")));
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
+
export {
|
|
106
|
+
createDeferredReadableStream
|
|
107
|
+
};
|
package/dist/esm/server/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import path from "path";
|
|
|
4
4
|
import fs from "fs";
|
|
5
5
|
import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
6
6
|
import { matchEntry } from "@modern-js/runtime-utils/node";
|
|
7
|
-
|
|
7
|
+
function server_default() {
|
|
8
8
|
return {
|
|
9
9
|
name: "@modern-js/plugin-data-loader",
|
|
10
10
|
setup: function() {
|
|
@@ -43,9 +43,9 @@ export default function() {
|
|
|
43
43
|
return [
|
|
44
44
|
2,
|
|
45
45
|
handleRequest({
|
|
46
|
-
serverRoutes
|
|
47
|
-
context
|
|
48
|
-
routes
|
|
46
|
+
serverRoutes,
|
|
47
|
+
context,
|
|
48
|
+
routes
|
|
49
49
|
})
|
|
50
50
|
];
|
|
51
51
|
}
|
|
@@ -61,3 +61,6 @@ export default function() {
|
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
63
|
;
|
|
64
|
+
export {
|
|
65
|
+
server_default as default
|
|
66
|
+
};
|
|
@@ -2,7 +2,7 @@ import { compile } from "path-to-regexp";
|
|
|
2
2
|
import { redirect } from "@modern-js/runtime-utils/router";
|
|
3
3
|
import { LOADER_ID_PARAM, DIRECT_PARAM, CONTENT_TYPE_DEFERRED } from "../common/constants";
|
|
4
4
|
import { parseDeferredReadableStream } from "./data";
|
|
5
|
-
|
|
5
|
+
const getRequestUrl = ({ params, request, routeId }) => {
|
|
6
6
|
const url = new URL(request.url);
|
|
7
7
|
const toPath = compile(url.pathname, {
|
|
8
8
|
encode: encodeURIComponent
|
|
@@ -28,7 +28,7 @@ const handleDeferredResponse = async (res) => {
|
|
|
28
28
|
}
|
|
29
29
|
return res;
|
|
30
30
|
};
|
|
31
|
-
|
|
31
|
+
const createRequest = (routeId, method = "get") => {
|
|
32
32
|
return async ({ params, request }) => {
|
|
33
33
|
const url = getRequestUrl({
|
|
34
34
|
params,
|
|
@@ -48,3 +48,44 @@ export const createRequest = (routeId, method = "get") => {
|
|
|
48
48
|
return res;
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
|
+
const createActionRequest = (routeId) => {
|
|
52
|
+
return async ({ params, request }) => {
|
|
53
|
+
const url = getRequestUrl({
|
|
54
|
+
params,
|
|
55
|
+
request,
|
|
56
|
+
routeId
|
|
57
|
+
});
|
|
58
|
+
const init = {
|
|
59
|
+
signal: request.signal
|
|
60
|
+
};
|
|
61
|
+
if (request.method !== "GET") {
|
|
62
|
+
init.method = request.method;
|
|
63
|
+
const contentType = request.headers.get("Content-Type");
|
|
64
|
+
if (contentType && /\bapplication\/json\b/.test(contentType)) {
|
|
65
|
+
init.headers = {
|
|
66
|
+
"Content-Type": contentType
|
|
67
|
+
};
|
|
68
|
+
init.body = JSON.stringify(await request.json());
|
|
69
|
+
} else if (contentType && /\btext\/plain\b/.test(contentType)) {
|
|
70
|
+
init.headers = {
|
|
71
|
+
"Content-Type": contentType
|
|
72
|
+
};
|
|
73
|
+
init.body = await request.text();
|
|
74
|
+
} else if (contentType && /\bapplication\/x-www-form-urlencoded\b/.test(contentType)) {
|
|
75
|
+
init.body = new URLSearchParams(await request.text());
|
|
76
|
+
} else {
|
|
77
|
+
init.body = await request.formData();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const res = await fetch(url, init);
|
|
81
|
+
if (!res.ok) {
|
|
82
|
+
throw res;
|
|
83
|
+
}
|
|
84
|
+
return res;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
export {
|
|
88
|
+
createActionRequest,
|
|
89
|
+
createRequest,
|
|
90
|
+
getRequestUrl
|
|
91
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UNSAFE_DeferredData as DeferredData, AbortedDeferredError } from "@modern-js/runtime-utils/remix-router";
|
|
2
2
|
const DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
|
|
3
|
-
|
|
3
|
+
async function parseDeferredReadableStream(stream) {
|
|
4
4
|
if (!stream) {
|
|
5
5
|
throw new Error("parseDeferredReadableStream requires stream argument");
|
|
6
6
|
}
|
|
@@ -135,3 +135,6 @@ function mergeArrays(...arrays) {
|
|
|
135
135
|
}
|
|
136
136
|
return out;
|
|
137
137
|
}
|
|
138
|
+
export {
|
|
139
|
+
parseDeferredReadableStream
|
|
140
|
+
};
|