@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,49 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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) => {
|
|
6
7
|
for (var name in all)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return getRequestUrl;
|
|
15
|
-
},
|
|
16
|
-
createRequest: function() {
|
|
17
|
-
return createRequest;
|
|
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 });
|
|
18
15
|
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var createRequest_exports = {};
|
|
20
|
+
__export(createRequest_exports, {
|
|
21
|
+
createActionRequest: () => createActionRequest,
|
|
22
|
+
createRequest: () => createRequest,
|
|
23
|
+
getRequestUrl: () => getRequestUrl
|
|
19
24
|
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
module.exports = __toCommonJS(createRequest_exports);
|
|
26
|
+
var import_path_to_regexp = require("path-to-regexp");
|
|
27
|
+
var import_router = require("@modern-js/runtime-utils/router");
|
|
28
|
+
var import_constants = require("../common/constants");
|
|
29
|
+
var import_data = require("./data");
|
|
24
30
|
const getRequestUrl = ({ params, request, routeId }) => {
|
|
25
31
|
const url = new URL(request.url);
|
|
26
|
-
const toPath = (0,
|
|
32
|
+
const toPath = (0, import_path_to_regexp.compile)(url.pathname, {
|
|
27
33
|
encode: encodeURIComponent
|
|
28
34
|
});
|
|
29
35
|
const newPathName = toPath(params);
|
|
30
36
|
url.pathname = newPathName;
|
|
31
|
-
url.searchParams.append(
|
|
32
|
-
url.searchParams.append(
|
|
37
|
+
url.searchParams.append(import_constants.LOADER_ID_PARAM, routeId);
|
|
38
|
+
url.searchParams.append(import_constants.DIRECT_PARAM, "true");
|
|
33
39
|
return url;
|
|
34
40
|
};
|
|
35
41
|
const handleRedirectResponse = (res) => {
|
|
36
42
|
const { headers } = res;
|
|
37
43
|
const location = headers.get("X-Modernjs-Redirect");
|
|
38
44
|
if (location) {
|
|
39
|
-
throw (0,
|
|
45
|
+
throw (0, import_router.redirect)(location);
|
|
40
46
|
}
|
|
41
47
|
return res;
|
|
42
48
|
};
|
|
43
49
|
const handleDeferredResponse = async (res) => {
|
|
44
50
|
var _res_headers_get;
|
|
45
|
-
if (((_res_headers_get = res.headers.get("Content-Type")) === null || _res_headers_get === void 0 ? void 0 : _res_headers_get.match(
|
|
46
|
-
return await (0,
|
|
51
|
+
if (((_res_headers_get = res.headers.get("Content-Type")) === null || _res_headers_get === void 0 ? void 0 : _res_headers_get.match(import_constants.CONTENT_TYPE_DEFERRED)) && res.body) {
|
|
52
|
+
return await (0, import_data.parseDeferredReadableStream)(res.body);
|
|
47
53
|
}
|
|
48
54
|
return res;
|
|
49
55
|
};
|
|
@@ -67,3 +73,45 @@ const createRequest = (routeId, method = "get") => {
|
|
|
67
73
|
return res;
|
|
68
74
|
};
|
|
69
75
|
};
|
|
76
|
+
const createActionRequest = (routeId) => {
|
|
77
|
+
return async ({ params, request }) => {
|
|
78
|
+
const url = getRequestUrl({
|
|
79
|
+
params,
|
|
80
|
+
request,
|
|
81
|
+
routeId
|
|
82
|
+
});
|
|
83
|
+
const init = {
|
|
84
|
+
signal: request.signal
|
|
85
|
+
};
|
|
86
|
+
if (request.method !== "GET") {
|
|
87
|
+
init.method = request.method;
|
|
88
|
+
const contentType = request.headers.get("Content-Type");
|
|
89
|
+
if (contentType && /\bapplication\/json\b/.test(contentType)) {
|
|
90
|
+
init.headers = {
|
|
91
|
+
"Content-Type": contentType
|
|
92
|
+
};
|
|
93
|
+
init.body = JSON.stringify(await request.json());
|
|
94
|
+
} else if (contentType && /\btext\/plain\b/.test(contentType)) {
|
|
95
|
+
init.headers = {
|
|
96
|
+
"Content-Type": contentType
|
|
97
|
+
};
|
|
98
|
+
init.body = await request.text();
|
|
99
|
+
} else if (contentType && /\bapplication\/x-www-form-urlencoded\b/.test(contentType)) {
|
|
100
|
+
init.body = new URLSearchParams(await request.text());
|
|
101
|
+
} else {
|
|
102
|
+
init.body = await request.formData();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const res = await fetch(url, init);
|
|
106
|
+
if (!res.ok) {
|
|
107
|
+
throw res;
|
|
108
|
+
}
|
|
109
|
+
return res;
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
113
|
+
0 && (module.exports = {
|
|
114
|
+
createActionRequest,
|
|
115
|
+
createRequest,
|
|
116
|
+
getRequestUrl
|
|
117
|
+
});
|
package/dist/cjs/cli/data.js
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
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 data_exports = {};
|
|
20
|
+
__export(data_exports, {
|
|
21
|
+
parseDeferredReadableStream: () => parseDeferredReadableStream
|
|
10
22
|
});
|
|
11
|
-
|
|
23
|
+
module.exports = __toCommonJS(data_exports);
|
|
24
|
+
var import_remix_router = require("@modern-js/runtime-utils/remix-router");
|
|
12
25
|
const DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
|
|
13
26
|
async function parseDeferredReadableStream(stream) {
|
|
14
27
|
if (!stream) {
|
|
@@ -67,7 +80,7 @@ async function parseDeferredReadableStream(stream) {
|
|
|
67
80
|
}
|
|
68
81
|
}
|
|
69
82
|
for (const [key, resolver] of Object.entries(deferredResolvers)) {
|
|
70
|
-
resolver.reject(new
|
|
83
|
+
resolver.reject(new import_remix_router.AbortedDeferredError(`Deferred ${key} will never resolved`));
|
|
71
84
|
}
|
|
72
85
|
} catch (error) {
|
|
73
86
|
for (const resolver of Object.values(deferredResolvers)) {
|
|
@@ -75,7 +88,7 @@ async function parseDeferredReadableStream(stream) {
|
|
|
75
88
|
}
|
|
76
89
|
}
|
|
77
90
|
})();
|
|
78
|
-
return new
|
|
91
|
+
return new import_remix_router.UNSAFE_DeferredData({
|
|
79
92
|
...criticalData,
|
|
80
93
|
...deferredData
|
|
81
94
|
});
|
|
@@ -145,3 +158,7 @@ function mergeArrays(...arrays) {
|
|
|
145
158
|
}
|
|
146
159
|
return out;
|
|
147
160
|
}
|
|
161
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
162
|
+
0 && (module.exports = {
|
|
163
|
+
parseDeferredReadableStream
|
|
164
|
+
});
|
|
@@ -1,47 +1,66 @@
|
|
|
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 generateClient_exports = {};
|
|
30
|
+
__export(generateClient_exports, {
|
|
31
|
+
generateClient: () => generateClient
|
|
10
32
|
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const generateClient = ({
|
|
14
|
-
delete require.cache[mapFile];
|
|
15
|
-
const loadersMap = require(mapFile);
|
|
33
|
+
module.exports = __toCommonJS(generateClient_exports);
|
|
34
|
+
var import_path = __toESM(require("path"));
|
|
35
|
+
const generateClient = ({ inline, action, routeId }) => {
|
|
16
36
|
let requestCode = ``;
|
|
17
|
-
|
|
18
|
-
const requestCreatorPath = _path.default.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
|
|
37
|
+
const requestCreatorPath = import_path.default.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
|
|
19
38
|
const importCode = `
|
|
20
|
-
import { createRequest } from '${requestCreatorPath}';
|
|
39
|
+
import { createRequest, createActionRequest } from '${requestCreatorPath}';
|
|
21
40
|
`;
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
41
|
+
if (inline) {
|
|
42
|
+
if (action) {
|
|
43
|
+
requestCode = `
|
|
44
|
+
export const loader = createRequest('${routeId}');
|
|
45
|
+
export const action = createActionRequest('${routeId}')
|
|
46
|
+
`;
|
|
47
|
+
} else {
|
|
48
|
+
requestCode = `
|
|
49
|
+
export const loader = createRequest('${routeId}');
|
|
27
50
|
`;
|
|
28
|
-
}).join("");
|
|
29
|
-
exportsCode = `export {`;
|
|
30
|
-
for (const loader of Object.keys(loadersMap)) {
|
|
31
|
-
exportsCode += `${loader},`;
|
|
32
51
|
}
|
|
33
|
-
exportsCode += "}";
|
|
34
52
|
} else {
|
|
35
|
-
const loader = loadersMap[loaderId];
|
|
36
53
|
requestCode = `
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
exportsCode = `export default loader;`;
|
|
54
|
+
export default createRequest('${routeId}');
|
|
55
|
+
`;
|
|
40
56
|
}
|
|
41
57
|
const generatedCode = `
|
|
42
58
|
${importCode}
|
|
43
59
|
${requestCode}
|
|
44
|
-
${exportsCode}
|
|
45
60
|
`;
|
|
46
61
|
return generatedCode;
|
|
47
62
|
};
|
|
63
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
64
|
+
0 && (module.exports = {
|
|
65
|
+
generateClient
|
|
66
|
+
});
|
package/dist/cjs/cli/loader.js
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
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 loader_exports = {};
|
|
20
|
+
__export(loader_exports, {
|
|
21
|
+
default: () => loader
|
|
10
22
|
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
23
|
+
module.exports = __toCommonJS(loader_exports);
|
|
24
|
+
var import_util = require("util");
|
|
25
|
+
var import_logger = require("@modern-js/utils/logger");
|
|
26
|
+
var import_generateClient = require("./generateClient");
|
|
14
27
|
async function loader(source) {
|
|
15
28
|
var _this__compiler;
|
|
16
29
|
this.cacheable();
|
|
@@ -22,34 +35,32 @@ async function loader(source) {
|
|
|
22
35
|
return source;
|
|
23
36
|
}
|
|
24
37
|
const { resourceQuery } = this;
|
|
25
|
-
const options = resourceQuery.slice(1).split("&").
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (!key || !value) {
|
|
30
|
-
return pre;
|
|
38
|
+
const options = resourceQuery.slice(1).split("&").reduce((pre, cur) => {
|
|
39
|
+
const [key, value] = cur.split("=");
|
|
40
|
+
if (key && value) {
|
|
41
|
+
pre[key] = value === "true" ? true : value === "false" ? false : value;
|
|
31
42
|
}
|
|
32
|
-
pre[key] = value;
|
|
33
43
|
return pre;
|
|
34
44
|
}, {});
|
|
35
|
-
if (!options.
|
|
45
|
+
if (!options.loaderId) {
|
|
36
46
|
return source;
|
|
37
47
|
}
|
|
38
48
|
if (options.clientData) {
|
|
39
|
-
const readFile = (0,
|
|
49
|
+
const readFile = (0, import_util.promisify)(this.fs.readFile);
|
|
40
50
|
try {
|
|
41
51
|
const clientDataPath = this.resourcePath.includes(".loader.") ? this.resourcePath.replace(".loader.", ".data.client.") : this.resourcePath.replace(".data.", ".data.client.");
|
|
42
52
|
const clientDataContent = await readFile(clientDataPath);
|
|
43
53
|
return clientDataContent;
|
|
44
54
|
} catch (error) {
|
|
45
55
|
if (process.env.NODE_ENV === "development") {
|
|
46
|
-
|
|
56
|
+
import_logger.logger.error(`Failed to read the clientData file ${options.clientData}`);
|
|
47
57
|
}
|
|
48
58
|
}
|
|
49
59
|
}
|
|
50
|
-
const code = (0,
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
const code = (0, import_generateClient.generateClient)({
|
|
61
|
+
inline: options.inline,
|
|
62
|
+
action: options.action,
|
|
63
|
+
routeId: options.routeId
|
|
53
64
|
});
|
|
54
65
|
return code;
|
|
55
66
|
}
|
|
@@ -1,25 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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) => {
|
|
6
7
|
for (var name in all)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return LOADER_ID_PARAM;
|
|
15
|
-
},
|
|
16
|
-
DIRECT_PARAM: function() {
|
|
17
|
-
return DIRECT_PARAM;
|
|
18
|
-
},
|
|
19
|
-
CONTENT_TYPE_DEFERRED: function() {
|
|
20
|
-
return CONTENT_TYPE_DEFERRED;
|
|
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 });
|
|
21
15
|
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var constants_exports = {};
|
|
20
|
+
__export(constants_exports, {
|
|
21
|
+
CONTENT_TYPE_DEFERRED: () => CONTENT_TYPE_DEFERRED,
|
|
22
|
+
DIRECT_PARAM: () => DIRECT_PARAM,
|
|
23
|
+
LOADER_ID_PARAM: () => LOADER_ID_PARAM
|
|
22
24
|
});
|
|
25
|
+
module.exports = __toCommonJS(constants_exports);
|
|
23
26
|
const LOADER_ID_PARAM = "__loader";
|
|
24
27
|
const DIRECT_PARAM = "__ssrDirect";
|
|
25
28
|
const CONTENT_TYPE_DEFERRED = "text/modernjs-deferred";
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
CONTENT_TYPE_DEFERRED,
|
|
32
|
+
DIRECT_PARAM,
|
|
33
|
+
LOADER_ID_PARAM
|
|
34
|
+
});
|
|
@@ -1,35 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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) => {
|
|
6
7
|
for (var name in all)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return isRedirectResponse;
|
|
15
|
-
},
|
|
16
|
-
isResponse: function() {
|
|
17
|
-
return isResponse;
|
|
18
|
-
},
|
|
19
|
-
handleRequest: function() {
|
|
20
|
-
return handleRequest;
|
|
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 });
|
|
21
15
|
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var runtime_exports = {};
|
|
20
|
+
__export(runtime_exports, {
|
|
21
|
+
handleRequest: () => handleRequest,
|
|
22
|
+
isRedirectResponse: () => isRedirectResponse,
|
|
23
|
+
isResponse: () => isResponse
|
|
22
24
|
});
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
module.exports = __toCommonJS(runtime_exports);
|
|
26
|
+
var import_node = require("@remix-run/node");
|
|
27
|
+
var import_remix_router = require("@modern-js/runtime-utils/remix-router");
|
|
28
|
+
var import_browser = require("@modern-js/runtime-utils/browser");
|
|
29
|
+
var import_lodash = require("@modern-js/utils/lodash");
|
|
30
|
+
var import_node2 = require("@modern-js/runtime-utils/node");
|
|
31
|
+
var import_time = require("@modern-js/runtime-utils/time");
|
|
32
|
+
var import_constants = require("@modern-js/utils/universal/constants");
|
|
33
|
+
var import_constants2 = require("../common/constants");
|
|
34
|
+
var import_response = require("./response");
|
|
35
|
+
(0, import_node.installGlobals)();
|
|
33
36
|
const redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
34
37
|
301,
|
|
35
38
|
302,
|
|
@@ -51,7 +54,7 @@ function convertModernRedirectResponse(headers, basename) {
|
|
|
51
54
|
}
|
|
52
55
|
newHeaders.set("X-Modernjs-Redirect", redirectUrl);
|
|
53
56
|
newHeaders.delete("Location");
|
|
54
|
-
return new
|
|
57
|
+
return new import_node.Response(null, {
|
|
55
58
|
status: 204,
|
|
56
59
|
headers: newHeaders
|
|
57
60
|
});
|
|
@@ -71,7 +74,7 @@ const createLoaderHeaders = (requestHeaders) => {
|
|
|
71
74
|
}
|
|
72
75
|
return headers;
|
|
73
76
|
};
|
|
74
|
-
const
|
|
77
|
+
const createRequest = (context) => {
|
|
75
78
|
const origin = `${context.protocol}://${context.host}`;
|
|
76
79
|
const url = new URL(context.url, origin);
|
|
77
80
|
const controller = new AbortController();
|
|
@@ -80,7 +83,14 @@ const createLoaderRequest = (context) => {
|
|
|
80
83
|
headers: createLoaderHeaders(context.headers),
|
|
81
84
|
signal: controller.signal
|
|
82
85
|
};
|
|
83
|
-
|
|
86
|
+
if (![
|
|
87
|
+
"GET",
|
|
88
|
+
"HEAD"
|
|
89
|
+
].includes(context.method.toUpperCase())) {
|
|
90
|
+
init.body = context.req;
|
|
91
|
+
}
|
|
92
|
+
const request = new Request(url.href, init);
|
|
93
|
+
return request;
|
|
84
94
|
};
|
|
85
95
|
const sendLoaderResponse = async (res, nodeResponse) => {
|
|
86
96
|
res.statusMessage = nodeResponse.statusText;
|
|
@@ -89,31 +99,28 @@ const sendLoaderResponse = async (res, nodeResponse) => {
|
|
|
89
99
|
res.setHeader(key, value);
|
|
90
100
|
}
|
|
91
101
|
if (nodeResponse.body) {
|
|
92
|
-
await (0,
|
|
102
|
+
await (0, import_node.writeReadableStreamToWritable)(nodeResponse.body, res);
|
|
93
103
|
} else {
|
|
94
104
|
res.end();
|
|
95
105
|
}
|
|
96
106
|
};
|
|
97
107
|
const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
|
|
98
|
-
const {
|
|
99
|
-
const routeId = query[
|
|
100
|
-
const entry = (0,
|
|
108
|
+
const { query } = context;
|
|
109
|
+
const routeId = query[import_constants2.LOADER_ID_PARAM];
|
|
110
|
+
const entry = (0, import_node2.matchEntry)(context.path, serverRoutes);
|
|
101
111
|
if (!routeId || !entry) {
|
|
102
112
|
return;
|
|
103
113
|
}
|
|
104
|
-
if (method.toLowerCase() !== "get") {
|
|
105
|
-
throw new Error("CSR data loader request only support http GET method");
|
|
106
|
-
}
|
|
107
114
|
const basename = entry.urlPath;
|
|
108
|
-
const end = (0,
|
|
115
|
+
const end = (0, import_time.time)();
|
|
109
116
|
const { res, logger, reporter } = context;
|
|
110
|
-
const routes = (0,
|
|
111
|
-
const { queryRoute } = (0,
|
|
117
|
+
const routes = (0, import_browser.transformNestedRoutes)(routesConfig, reporter);
|
|
118
|
+
const { queryRoute } = (0, import_remix_router.createStaticHandler)(routes, {
|
|
112
119
|
basename
|
|
113
120
|
});
|
|
114
|
-
const request =
|
|
115
|
-
const requestContext = (0,
|
|
116
|
-
requestContext.set(
|
|
121
|
+
const request = createRequest(context);
|
|
122
|
+
const requestContext = (0, import_node2.createRequestContext)();
|
|
123
|
+
requestContext.set(import_node2.reporterCtx, reporter);
|
|
117
124
|
let response;
|
|
118
125
|
try {
|
|
119
126
|
response = await queryRoute(request, {
|
|
@@ -122,9 +129,9 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
122
129
|
});
|
|
123
130
|
if (isResponse(response) && isRedirectResponse(response.status)) {
|
|
124
131
|
response = convertModernRedirectResponse(response.headers, basename);
|
|
125
|
-
} else if ((0,
|
|
126
|
-
const deferredData = response[
|
|
127
|
-
const body = (0,
|
|
132
|
+
} else if ((0, import_lodash.isPlainObject)(response) && import_remix_router.UNSAFE_DEFERRED_SYMBOL in response) {
|
|
133
|
+
const deferredData = response[import_remix_router.UNSAFE_DEFERRED_SYMBOL];
|
|
134
|
+
const body = (0, import_response.createDeferredReadableStream)(deferredData, request.signal);
|
|
128
135
|
const init = deferredData.init || {};
|
|
129
136
|
if (init.status && isRedirectResponse(init.status)) {
|
|
130
137
|
if (!init.headers) {
|
|
@@ -133,21 +140,25 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
133
140
|
response = convertModernRedirectResponse(new Headers(init.headers), basename);
|
|
134
141
|
} else {
|
|
135
142
|
const headers = new Headers(init.headers);
|
|
136
|
-
headers.set("Content-Type", `${
|
|
143
|
+
headers.set("Content-Type", `${import_constants2.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
|
|
137
144
|
init.headers = headers;
|
|
138
|
-
response = new
|
|
145
|
+
response = new import_node.Response(body, init);
|
|
139
146
|
}
|
|
140
147
|
} else {
|
|
141
|
-
response = isResponse(response) ? response : new
|
|
148
|
+
response = isResponse(response) ? response : new import_node.Response(JSON.stringify(response), {
|
|
142
149
|
headers: {
|
|
143
150
|
"Content-Type": "application/json; charset=utf-8"
|
|
144
151
|
}
|
|
145
152
|
});
|
|
146
153
|
}
|
|
147
154
|
} catch (error) {
|
|
148
|
-
const message = error instanceof
|
|
149
|
-
|
|
150
|
-
|
|
155
|
+
const message = error instanceof import_remix_router.ErrorResponse ? error.data : String(error);
|
|
156
|
+
if (error instanceof Error) {
|
|
157
|
+
logger === null || logger === void 0 ? void 0 : logger.error(error);
|
|
158
|
+
} else {
|
|
159
|
+
logger === null || logger === void 0 ? void 0 : logger.error(message);
|
|
160
|
+
}
|
|
161
|
+
response = new import_node.Response(message, {
|
|
151
162
|
status: 500,
|
|
152
163
|
headers: {
|
|
153
164
|
"Content-Type": "text/plain"
|
|
@@ -155,6 +166,12 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
155
166
|
});
|
|
156
167
|
}
|
|
157
168
|
const cost = end();
|
|
158
|
-
reporter.reportTiming(`${
|
|
169
|
+
reporter.reportTiming(`${import_constants.LOADER_REPORTER_NAME}-navigation`, cost);
|
|
159
170
|
await sendLoaderResponse(res, response);
|
|
160
171
|
};
|
|
172
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
173
|
+
0 && (module.exports = {
|
|
174
|
+
handleRequest,
|
|
175
|
+
isRedirectResponse,
|
|
176
|
+
isResponse
|
|
177
|
+
});
|