@modern-js/plugin-data-loader 2.35.0 → 2.35.2-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/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 +68 -55
- package/dist/cjs/runtime/response.js +28 -11
- package/dist/cjs/server/index.js +39 -18
- package/dist/esm/cli/createRequest.js +125 -7
- package/dist/esm/cli/data.js +5 -2
- 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 +29 -19
- package/dist/esm/runtime/response.js +5 -2
- package/dist/esm/server/index.js +8 -5
- package/dist/esm-node/cli/createRequest.js +44 -3
- package/dist/esm-node/cli/data.js +5 -2
- 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 +25 -16
- package/dist/esm-node/runtime/response.js +5 -2
- package/dist/esm-node/server/index.js +5 -2
- package/dist/js/modern/cli/create-request.js +66 -0
- package/dist/js/modern/cli/generate-client.js +42 -0
- package/dist/js/modern/cli/loader.js +40 -0
- package/dist/js/modern/common/constants.js +6 -0
- package/dist/js/modern/server/index.js +237 -0
- package/dist/js/node/cli/create-request.js +90 -0
- package/dist/js/node/cli/generate-client.js +71 -0
- package/dist/js/node/cli/loader.js +61 -0
- package/dist/js/node/common/constants.js +30 -0
- package/dist/js/node/server/index.js +261 -0
- package/dist/js/treeshaking/cli/create-request.js +186 -0
- package/dist/js/treeshaking/cli/generate-client.js +45 -0
- package/dist/js/treeshaking/cli/loader.js +154 -0
- package/dist/js/treeshaking/common/constants.js +3 -0
- package/dist/js/treeshaking/server/index.js +578 -0
- package/dist/types/cli/createRequest.d.ts +9 -2
- package/dist/types/cli/data.d.ts +1 -1
- package/dist/types/cli/generateClient.d.ts +6 -4
- package/dist/types/cli/loader.d.ts +4 -1
- package/dist/types/runtime/index.d.ts +1 -1
- package/dist/types/runtime/response.d.ts +1 -1
- package/package.json +8 -7
|
@@ -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,11 @@ const createLoaderRequest = (context) => {
|
|
|
80
83
|
headers: createLoaderHeaders(context.headers),
|
|
81
84
|
signal: controller.signal
|
|
82
85
|
};
|
|
83
|
-
|
|
86
|
+
if (context.method.toUpperCase() !== "GET" && context.method !== "HEAD") {
|
|
87
|
+
init.body = context.req;
|
|
88
|
+
}
|
|
89
|
+
const request = new Request(url.href, init);
|
|
90
|
+
return request;
|
|
84
91
|
};
|
|
85
92
|
const sendLoaderResponse = async (res, nodeResponse) => {
|
|
86
93
|
res.statusMessage = nodeResponse.statusText;
|
|
@@ -89,31 +96,28 @@ const sendLoaderResponse = async (res, nodeResponse) => {
|
|
|
89
96
|
res.setHeader(key, value);
|
|
90
97
|
}
|
|
91
98
|
if (nodeResponse.body) {
|
|
92
|
-
await (0,
|
|
99
|
+
await (0, import_node.writeReadableStreamToWritable)(nodeResponse.body, res);
|
|
93
100
|
} else {
|
|
94
101
|
res.end();
|
|
95
102
|
}
|
|
96
103
|
};
|
|
97
104
|
const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
|
|
98
|
-
const {
|
|
99
|
-
const routeId = query[
|
|
100
|
-
const entry = (0,
|
|
105
|
+
const { query } = context;
|
|
106
|
+
const routeId = query[import_constants2.LOADER_ID_PARAM];
|
|
107
|
+
const entry = (0, import_node2.matchEntry)(context.path, serverRoutes);
|
|
101
108
|
if (!routeId || !entry) {
|
|
102
109
|
return;
|
|
103
110
|
}
|
|
104
|
-
if (method.toLowerCase() !== "get") {
|
|
105
|
-
throw new Error("CSR data loader request only support http GET method");
|
|
106
|
-
}
|
|
107
111
|
const basename = entry.urlPath;
|
|
108
|
-
const end = (0,
|
|
112
|
+
const end = (0, import_time.time)();
|
|
109
113
|
const { res, logger, reporter } = context;
|
|
110
|
-
const routes = (0,
|
|
111
|
-
const { queryRoute } = (0,
|
|
114
|
+
const routes = (0, import_browser.transformNestedRoutes)(routesConfig, reporter);
|
|
115
|
+
const { queryRoute } = (0, import_remix_router.createStaticHandler)(routes, {
|
|
112
116
|
basename
|
|
113
117
|
});
|
|
114
|
-
const request =
|
|
115
|
-
const requestContext = (0,
|
|
116
|
-
requestContext.set(
|
|
118
|
+
const request = createRequest(context);
|
|
119
|
+
const requestContext = (0, import_node2.createRequestContext)();
|
|
120
|
+
requestContext.set(import_node2.reporterCtx, reporter);
|
|
117
121
|
let response;
|
|
118
122
|
try {
|
|
119
123
|
response = await queryRoute(request, {
|
|
@@ -122,9 +126,9 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
122
126
|
});
|
|
123
127
|
if (isResponse(response) && isRedirectResponse(response.status)) {
|
|
124
128
|
response = convertModernRedirectResponse(response.headers, basename);
|
|
125
|
-
} else if ((0,
|
|
126
|
-
const deferredData = response[
|
|
127
|
-
const body = (0,
|
|
129
|
+
} else if ((0, import_lodash.isPlainObject)(response) && import_remix_router.UNSAFE_DEFERRED_SYMBOL in response) {
|
|
130
|
+
const deferredData = response[import_remix_router.UNSAFE_DEFERRED_SYMBOL];
|
|
131
|
+
const body = (0, import_response.createDeferredReadableStream)(deferredData, request.signal);
|
|
128
132
|
const init = deferredData.init || {};
|
|
129
133
|
if (init.status && isRedirectResponse(init.status)) {
|
|
130
134
|
if (!init.headers) {
|
|
@@ -133,22 +137,25 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
133
137
|
response = convertModernRedirectResponse(new Headers(init.headers), basename);
|
|
134
138
|
} else {
|
|
135
139
|
const headers = new Headers(init.headers);
|
|
136
|
-
headers.set("Content-Type", `${
|
|
140
|
+
headers.set("Content-Type", `${import_constants2.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
|
|
137
141
|
init.headers = headers;
|
|
138
|
-
response = new
|
|
142
|
+
response = new import_node.Response(body, init);
|
|
139
143
|
}
|
|
140
144
|
} else {
|
|
141
|
-
response = isResponse(response) ? response : new
|
|
145
|
+
response = isResponse(response) ? response : new import_node.Response(JSON.stringify(response), {
|
|
142
146
|
headers: {
|
|
143
147
|
"Content-Type": "application/json; charset=utf-8"
|
|
144
148
|
}
|
|
145
149
|
});
|
|
146
150
|
}
|
|
147
151
|
} catch (error) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
const message = error instanceof import_remix_router.ErrorResponse ? error.data : String(error);
|
|
153
|
+
if (error instanceof Error) {
|
|
154
|
+
logger === null || logger === void 0 ? void 0 : logger.error(error);
|
|
155
|
+
} else {
|
|
156
|
+
logger === null || logger === void 0 ? void 0 : logger.error(message);
|
|
157
|
+
}
|
|
158
|
+
response = new import_node.Response(message, {
|
|
152
159
|
status: 500,
|
|
153
160
|
headers: {
|
|
154
161
|
"Content-Type": "text/plain"
|
|
@@ -156,6 +163,12 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
156
163
|
});
|
|
157
164
|
}
|
|
158
165
|
const cost = end();
|
|
159
|
-
reporter.reportTiming(`${
|
|
166
|
+
reporter.reportTiming(`${import_constants.LOADER_REPORTER_NAME}-navigation`, cost);
|
|
160
167
|
await sendLoaderResponse(res, response);
|
|
161
168
|
};
|
|
169
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
170
|
+
0 && (module.exports = {
|
|
171
|
+
handleRequest,
|
|
172
|
+
isRedirectResponse,
|
|
173
|
+
isResponse
|
|
174
|
+
});
|