@modern-js/plugin-data-loader 0.0.0-next-20230921083429 → 0.0.0-next-20230922063312
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 +35 -25
- package/dist/cjs/cli/data.js +27 -10
- package/dist/cjs/cli/generateClient.js +36 -10
- package/dist/cjs/cli/loader.js +26 -13
- package/dist/cjs/common/constants.js +27 -18
- package/dist/cjs/runtime/index.js +57 -47
- package/dist/cjs/runtime/response.js +28 -11
- package/dist/cjs/server/index.js +39 -18
- package/dist/esm/cli/createRequest.js +10 -6
- package/dist/esm/cli/data.js +4 -1
- package/dist/esm/cli/generateClient.js +4 -1
- package/dist/esm/cli/loader.js +4 -1
- package/dist/esm/common/constants.js +8 -3
- package/dist/esm/runtime/index.js +13 -8
- package/dist/esm/runtime/response.js +4 -1
- package/dist/esm/server/index.js +7 -4
- package/dist/esm-node/cli/createRequest.js +6 -2
- package/dist/esm-node/cli/data.js +4 -1
- package/dist/esm-node/cli/generateClient.js +4 -1
- package/dist/esm-node/cli/loader.js +4 -1
- package/dist/esm-node/common/constants.js +8 -3
- package/dist/esm-node/runtime/index.js +10 -4
- package/dist/esm-node/runtime/response.js +4 -1
- package/dist/esm-node/server/index.js +4 -1
- package/package.json +8 -8
|
@@ -1,49 +1,54 @@
|
|
|
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
|
+
createRequest: () => createRequest,
|
|
22
|
+
getRequestUrl: () => getRequestUrl
|
|
19
23
|
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
module.exports = __toCommonJS(createRequest_exports);
|
|
25
|
+
var import_path_to_regexp = require("path-to-regexp");
|
|
26
|
+
var import_router = require("@modern-js/runtime-utils/router");
|
|
27
|
+
var import_constants = require("../common/constants");
|
|
28
|
+
var import_data = require("./data");
|
|
24
29
|
const getRequestUrl = ({ params, request, routeId }) => {
|
|
25
30
|
const url = new URL(request.url);
|
|
26
|
-
const toPath = (0,
|
|
31
|
+
const toPath = (0, import_path_to_regexp.compile)(url.pathname, {
|
|
27
32
|
encode: encodeURIComponent
|
|
28
33
|
});
|
|
29
34
|
const newPathName = toPath(params);
|
|
30
35
|
url.pathname = newPathName;
|
|
31
|
-
url.searchParams.append(
|
|
32
|
-
url.searchParams.append(
|
|
36
|
+
url.searchParams.append(import_constants.LOADER_ID_PARAM, routeId);
|
|
37
|
+
url.searchParams.append(import_constants.DIRECT_PARAM, "true");
|
|
33
38
|
return url;
|
|
34
39
|
};
|
|
35
40
|
const handleRedirectResponse = (res) => {
|
|
36
41
|
const { headers } = res;
|
|
37
42
|
const location = headers.get("X-Modernjs-Redirect");
|
|
38
43
|
if (location) {
|
|
39
|
-
throw (0,
|
|
44
|
+
throw (0, import_router.redirect)(location);
|
|
40
45
|
}
|
|
41
46
|
return res;
|
|
42
47
|
};
|
|
43
48
|
const handleDeferredResponse = async (res) => {
|
|
44
49
|
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,
|
|
50
|
+
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) {
|
|
51
|
+
return await (0, import_data.parseDeferredReadableStream)(res.body);
|
|
47
52
|
}
|
|
48
53
|
return res;
|
|
49
54
|
};
|
|
@@ -67,3 +72,8 @@ const createRequest = (routeId, method = "get") => {
|
|
|
67
72
|
return res;
|
|
68
73
|
};
|
|
69
74
|
};
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
createRequest,
|
|
78
|
+
getRequestUrl
|
|
79
|
+
});
|
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,21 +1,43 @@
|
|
|
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
|
-
|
|
33
|
+
module.exports = __toCommonJS(generateClient_exports);
|
|
34
|
+
var import_path = __toESM(require("path"));
|
|
13
35
|
const generateClient = ({ mapFile, loaderId }) => {
|
|
14
36
|
delete require.cache[mapFile];
|
|
15
37
|
const loadersMap = require(mapFile);
|
|
16
38
|
let requestCode = ``;
|
|
17
39
|
let exportsCode = ``;
|
|
18
|
-
const requestCreatorPath =
|
|
40
|
+
const requestCreatorPath = import_path.default.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
|
|
19
41
|
const importCode = `
|
|
20
42
|
import { createRequest } from '${requestCreatorPath}';
|
|
21
43
|
`;
|
|
@@ -45,3 +67,7 @@ const generateClient = ({ mapFile, loaderId }) => {
|
|
|
45
67
|
`;
|
|
46
68
|
return generatedCode;
|
|
47
69
|
};
|
|
70
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
71
|
+
0 && (module.exports = {
|
|
72
|
+
generateClient
|
|
73
|
+
});
|
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();
|
|
@@ -36,18 +49,18 @@ async function loader(source) {
|
|
|
36
49
|
return source;
|
|
37
50
|
}
|
|
38
51
|
if (options.clientData) {
|
|
39
|
-
const readFile = (0,
|
|
52
|
+
const readFile = (0, import_util.promisify)(this.fs.readFile);
|
|
40
53
|
try {
|
|
41
54
|
const clientDataPath = this.resourcePath.includes(".loader.") ? this.resourcePath.replace(".loader.", ".data.client.") : this.resourcePath.replace(".data.", ".data.client.");
|
|
42
55
|
const clientDataContent = await readFile(clientDataPath);
|
|
43
56
|
return clientDataContent;
|
|
44
57
|
} catch (error) {
|
|
45
58
|
if (process.env.NODE_ENV === "development") {
|
|
46
|
-
|
|
59
|
+
import_logger.logger.error(`Failed to read the clientData file ${options.clientData}`);
|
|
47
60
|
}
|
|
48
61
|
}
|
|
49
62
|
}
|
|
50
|
-
const code = (0,
|
|
63
|
+
const code = (0, import_generateClient.generateClient)({
|
|
51
64
|
mapFile: options.mapFile,
|
|
52
65
|
loaderId: options.loaderId
|
|
53
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
|
});
|
|
@@ -89,15 +92,15 @@ const sendLoaderResponse = async (res, nodeResponse) => {
|
|
|
89
92
|
res.setHeader(key, value);
|
|
90
93
|
}
|
|
91
94
|
if (nodeResponse.body) {
|
|
92
|
-
await (0,
|
|
95
|
+
await (0, import_node.writeReadableStreamToWritable)(nodeResponse.body, res);
|
|
93
96
|
} else {
|
|
94
97
|
res.end();
|
|
95
98
|
}
|
|
96
99
|
};
|
|
97
100
|
const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
|
|
98
101
|
const { method, query } = context;
|
|
99
|
-
const routeId = query[
|
|
100
|
-
const entry = (0,
|
|
102
|
+
const routeId = query[import_constants2.LOADER_ID_PARAM];
|
|
103
|
+
const entry = (0, import_node2.matchEntry)(context.path, serverRoutes);
|
|
101
104
|
if (!routeId || !entry) {
|
|
102
105
|
return;
|
|
103
106
|
}
|
|
@@ -105,15 +108,15 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
105
108
|
throw new Error("CSR data loader request only support http GET method");
|
|
106
109
|
}
|
|
107
110
|
const basename = entry.urlPath;
|
|
108
|
-
const end = (0,
|
|
111
|
+
const end = (0, import_time.time)();
|
|
109
112
|
const { res, logger, reporter } = context;
|
|
110
|
-
const routes = (0,
|
|
111
|
-
const { queryRoute } = (0,
|
|
113
|
+
const routes = (0, import_browser.transformNestedRoutes)(routesConfig, reporter);
|
|
114
|
+
const { queryRoute } = (0, import_remix_router.createStaticHandler)(routes, {
|
|
112
115
|
basename
|
|
113
116
|
});
|
|
114
117
|
const request = createLoaderRequest(context);
|
|
115
|
-
const requestContext = (0,
|
|
116
|
-
requestContext.set(
|
|
118
|
+
const requestContext = (0, import_node2.createRequestContext)();
|
|
119
|
+
requestContext.set(import_node2.reporterCtx, reporter);
|
|
117
120
|
let response;
|
|
118
121
|
try {
|
|
119
122
|
response = await queryRoute(request, {
|
|
@@ -122,9 +125,9 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
122
125
|
});
|
|
123
126
|
if (isResponse(response) && isRedirectResponse(response.status)) {
|
|
124
127
|
response = convertModernRedirectResponse(response.headers, basename);
|
|
125
|
-
} else if ((0,
|
|
126
|
-
const deferredData = response[
|
|
127
|
-
const body = (0,
|
|
128
|
+
} else if ((0, import_lodash.isPlainObject)(response) && import_remix_router.UNSAFE_DEFERRED_SYMBOL in response) {
|
|
129
|
+
const deferredData = response[import_remix_router.UNSAFE_DEFERRED_SYMBOL];
|
|
130
|
+
const body = (0, import_response.createDeferredReadableStream)(deferredData, request.signal);
|
|
128
131
|
const init = deferredData.init || {};
|
|
129
132
|
if (init.status && isRedirectResponse(init.status)) {
|
|
130
133
|
if (!init.headers) {
|
|
@@ -133,21 +136,22 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
133
136
|
response = convertModernRedirectResponse(new Headers(init.headers), basename);
|
|
134
137
|
} else {
|
|
135
138
|
const headers = new Headers(init.headers);
|
|
136
|
-
headers.set("Content-Type", `${
|
|
139
|
+
headers.set("Content-Type", `${import_constants2.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
|
|
137
140
|
init.headers = headers;
|
|
138
|
-
response = new
|
|
141
|
+
response = new import_node.Response(body, init);
|
|
139
142
|
}
|
|
140
143
|
} else {
|
|
141
|
-
response = isResponse(response) ? response : new
|
|
144
|
+
response = isResponse(response) ? response : new import_node.Response(JSON.stringify(response), {
|
|
142
145
|
headers: {
|
|
143
146
|
"Content-Type": "application/json; charset=utf-8"
|
|
144
147
|
}
|
|
145
148
|
});
|
|
146
149
|
}
|
|
147
150
|
} catch (error) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
+
var _logger;
|
|
152
|
+
const message = error instanceof import_remix_router.ErrorResponse ? error.data : String(error);
|
|
153
|
+
(_logger = logger) === null || _logger === void 0 ? void 0 : _logger.error(message);
|
|
154
|
+
response = new import_node.Response(message, {
|
|
151
155
|
status: 500,
|
|
152
156
|
headers: {
|
|
153
157
|
"Content-Type": "text/plain"
|
|
@@ -155,6 +159,12 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
|
|
|
155
159
|
});
|
|
156
160
|
}
|
|
157
161
|
const cost = end();
|
|
158
|
-
reporter.reportTiming(`${
|
|
162
|
+
reporter.reportTiming(`${import_constants.LOADER_REPORTER_NAME}-navigation`, cost);
|
|
159
163
|
await sendLoaderResponse(res, response);
|
|
160
164
|
};
|
|
165
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
166
|
+
0 && (module.exports = {
|
|
167
|
+
handleRequest,
|
|
168
|
+
isRedirectResponse,
|
|
169
|
+
isResponse
|
|
170
|
+
});
|
|
@@ -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,7 @@ export var createRequest = function(routeId) {
|
|
|
101
101
|
};
|
|
102
102
|
}();
|
|
103
103
|
};
|
|
104
|
+
export {
|
|
105
|
+
createRequest,
|
|
106
|
+
getRequestUrl
|
|
107
|
+
};
|
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,5 +1,5 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
|
|
2
|
+
var generateClient = function(param) {
|
|
3
3
|
var mapFile = param.mapFile, loaderId = param.loaderId;
|
|
4
4
|
delete require.cache[mapFile];
|
|
5
5
|
var loadersMap = require(mapFile);
|
|
@@ -42,3 +42,6 @@ export var generateClient = function(param) {
|
|
|
42
42
|
var generatedCode = "\n ".concat(importCode, "\n ").concat(requestCode, "\n ").concat(exportsCode, "\n ");
|
|
43
43
|
return generatedCode;
|
|
44
44
|
};
|
|
45
|
+
export {
|
|
46
|
+
generateClient
|
|
47
|
+
};
|
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() {
|
|
@@ -92,3 +92,6 @@ function _loader() {
|
|
|
92
92
|
});
|
|
93
93
|
return _loader.apply(this, arguments);
|
|
94
94
|
}
|
|
95
|
+
export {
|
|
96
|
+
loader as default
|
|
97
|
+
};
|
|
@@ -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) {
|
|
@@ -155,9 +155,9 @@ var sendLoaderResponse = function() {
|
|
|
155
155
|
return _ref.apply(this, arguments);
|
|
156
156
|
};
|
|
157
157
|
}();
|
|
158
|
-
|
|
158
|
+
var handleRequest = function() {
|
|
159
159
|
var _ref = _async_to_generator(function(param) {
|
|
160
|
-
var context, serverRoutes, routesConfig, method, query, routeId, entry, basename, end, res, logger, reporter, routes, queryRoute, request, requestContext, response, deferredData, body, init, headers, error, message, cost;
|
|
160
|
+
var context, serverRoutes, routesConfig, method, query, routeId, entry, basename, end, res, logger, reporter, routes, queryRoute, request, requestContext, response, deferredData, body, init, headers, error, _logger, message, cost;
|
|
161
161
|
return _ts_generator(this, function(_state) {
|
|
162
162
|
switch (_state.label) {
|
|
163
163
|
case 0:
|
|
@@ -178,7 +178,7 @@ export var handleRequest = function() {
|
|
|
178
178
|
res = context.res, logger = context.logger, reporter = context.reporter;
|
|
179
179
|
routes = transformNestedRoutes(routesConfig, reporter);
|
|
180
180
|
queryRoute = createStaticHandler(routes, {
|
|
181
|
-
basename
|
|
181
|
+
basename
|
|
182
182
|
}).queryRoute;
|
|
183
183
|
request = createLoaderRequest(context);
|
|
184
184
|
requestContext = createRequestContext();
|
|
@@ -194,8 +194,8 @@ export var handleRequest = function() {
|
|
|
194
194
|
return [
|
|
195
195
|
4,
|
|
196
196
|
queryRoute(request, {
|
|
197
|
-
routeId
|
|
198
|
-
requestContext
|
|
197
|
+
routeId,
|
|
198
|
+
requestContext
|
|
199
199
|
})
|
|
200
200
|
];
|
|
201
201
|
case 2:
|
|
@@ -231,7 +231,7 @@ export var handleRequest = function() {
|
|
|
231
231
|
case 3:
|
|
232
232
|
error = _state.sent();
|
|
233
233
|
message = _instanceof(error, ErrorResponse) ? error.data : String(error);
|
|
234
|
-
logger === null ||
|
|
234
|
+
(_logger = logger) === null || _logger === void 0 ? void 0 : _logger.error(message);
|
|
235
235
|
response = new NodeResponse(message, {
|
|
236
236
|
status: 500,
|
|
237
237
|
headers: {
|
|
@@ -261,3 +261,8 @@ export var handleRequest = function() {
|
|
|
261
261
|
return _ref.apply(this, arguments);
|
|
262
262
|
};
|
|
263
263
|
}();
|
|
264
|
+
export {
|
|
265
|
+
handleRequest,
|
|
266
|
+
isRedirectResponse,
|
|
267
|
+
isResponse
|
|
268
|
+
};
|
|
@@ -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,7 @@ export const createRequest = (routeId, method = "get") => {
|
|
|
48
48
|
return res;
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
|
+
export {
|
|
52
|
+
createRequest,
|
|
53
|
+
getRequestUrl
|
|
54
|
+
};
|
|
@@ -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
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
|
|
2
|
+
const generateClient = ({ mapFile, loaderId }) => {
|
|
3
3
|
delete require.cache[mapFile];
|
|
4
4
|
const loadersMap = require(mapFile);
|
|
5
5
|
let requestCode = ``;
|
|
@@ -34,3 +34,6 @@ export const generateClient = ({ mapFile, loaderId }) => {
|
|
|
34
34
|
`;
|
|
35
35
|
return generatedCode;
|
|
36
36
|
};
|
|
37
|
+
export {
|
|
38
|
+
generateClient
|
|
39
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { promisify } from "util";
|
|
2
2
|
import { logger } from "@modern-js/utils/logger";
|
|
3
3
|
import { generateClient } from "./generateClient";
|
|
4
|
-
|
|
4
|
+
async function loader(source) {
|
|
5
5
|
var _this__compiler;
|
|
6
6
|
this.cacheable();
|
|
7
7
|
const target = (_this__compiler = this._compiler) === null || _this__compiler === void 0 ? void 0 : _this__compiler.options.target;
|
|
@@ -43,3 +43,6 @@ export default async function loader(source) {
|
|
|
43
43
|
});
|
|
44
44
|
return code;
|
|
45
45
|
}
|
|
46
|
+
export {
|
|
47
|
+
loader as default
|
|
48
|
+
};
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const LOADER_ID_PARAM = "__loader";
|
|
2
|
+
const DIRECT_PARAM = "__ssrDirect";
|
|
3
|
+
const CONTENT_TYPE_DEFERRED = "text/modernjs-deferred";
|
|
4
|
+
export {
|
|
5
|
+
CONTENT_TYPE_DEFERRED,
|
|
6
|
+
DIRECT_PARAM,
|
|
7
|
+
LOADER_ID_PARAM
|
|
8
|
+
};
|
|
@@ -15,10 +15,10 @@ const redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
|
15
15
|
307,
|
|
16
16
|
308
|
|
17
17
|
]);
|
|
18
|
-
|
|
18
|
+
function isRedirectResponse(status) {
|
|
19
19
|
return redirectStatusCodes.has(status);
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
function isResponse(value) {
|
|
22
22
|
return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
|
|
23
23
|
}
|
|
24
24
|
function convertModernRedirectResponse(headers, basename) {
|
|
@@ -72,7 +72,7 @@ const sendLoaderResponse = async (res, nodeResponse) => {
|
|
|
72
72
|
res.end();
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
|
-
|
|
75
|
+
const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
|
|
76
76
|
const { method, query } = context;
|
|
77
77
|
const routeId = query[LOADER_ID_PARAM];
|
|
78
78
|
const entry = matchEntry(context.path, serverRoutes);
|
|
@@ -123,8 +123,9 @@ export const handleRequest = async ({ context, serverRoutes, routes: routesConfi
|
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
125
|
} catch (error) {
|
|
126
|
+
var _logger;
|
|
126
127
|
const message = error instanceof ErrorResponse ? error.data : String(error);
|
|
127
|
-
logger === null ||
|
|
128
|
+
(_logger = logger) === null || _logger === void 0 ? void 0 : _logger.error(message);
|
|
128
129
|
response = new NodeResponse(message, {
|
|
129
130
|
status: 500,
|
|
130
131
|
headers: {
|
|
@@ -136,3 +137,8 @@ export const handleRequest = async ({ context, serverRoutes, routes: routesConfi
|
|
|
136
137
|
reporter.reportTiming(`${LOADER_REPORTER_NAME}-navigation`, cost);
|
|
137
138
|
await sendLoaderResponse(res, response);
|
|
138
139
|
};
|
|
140
|
+
export {
|
|
141
|
+
handleRequest,
|
|
142
|
+
isRedirectResponse,
|
|
143
|
+
isResponse
|
|
144
|
+
};
|
|
@@ -4,7 +4,7 @@ function isTrackedPromise(value) {
|
|
|
4
4
|
return value != null && typeof value.then === "function" && value._tracked === true;
|
|
5
5
|
}
|
|
6
6
|
const DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
|
|
7
|
-
|
|
7
|
+
function createDeferredReadableStream(deferredData, signal) {
|
|
8
8
|
const encoder = new TextEncoder();
|
|
9
9
|
const stream = new ReadableStream({
|
|
10
10
|
async start(controller) {
|
|
@@ -58,3 +58,6 @@ function enqueueTrackedPromise(controller, encoder, settledKey, promise) {
|
|
|
58
58
|
`));
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
+
export {
|
|
62
|
+
createDeferredReadableStream
|
|
63
|
+
};
|
|
@@ -2,7 +2,7 @@ import path from "path";
|
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
4
4
|
import { matchEntry } from "@modern-js/runtime-utils/node";
|
|
5
|
-
|
|
5
|
+
var server_default = () => ({
|
|
6
6
|
name: "@modern-js/plugin-data-loader",
|
|
7
7
|
setup: () => ({
|
|
8
8
|
prepareLoaderHandler({ serverRoutes, distDir }) {
|
|
@@ -28,3 +28,6 @@ export default () => ({
|
|
|
28
28
|
}
|
|
29
29
|
})
|
|
30
30
|
});
|
|
31
|
+
export {
|
|
32
|
+
server_default as default
|
|
33
|
+
};
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "0.0.0-next-
|
|
18
|
+
"version": "0.0.0-next-20230922063312",
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14.17.6"
|
|
21
21
|
},
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"@remix-run/node": "^1.12.0",
|
|
59
59
|
"path-to-regexp": "^6.2.0",
|
|
60
60
|
"@swc/helpers": "0.5.1",
|
|
61
|
-
"@modern-js/utils": "0.0.0-next-
|
|
62
|
-
"@modern-js/runtime-utils": "0.0.0-next-
|
|
61
|
+
"@modern-js/utils": "0.0.0-next-20230922063312",
|
|
62
|
+
"@modern-js/runtime-utils": "0.0.0-next-20230922063312"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@types/babel__core": "^7.20.0",
|
|
@@ -75,11 +75,11 @@
|
|
|
75
75
|
"webpack": "^5.88.1",
|
|
76
76
|
"react": "^18",
|
|
77
77
|
"react-dom": "^18",
|
|
78
|
-
"@modern-js/core": "0.0.0-next-
|
|
79
|
-
"@modern-js/
|
|
80
|
-
"@modern-js/
|
|
81
|
-
"@scripts/
|
|
82
|
-
"@scripts/
|
|
78
|
+
"@modern-js/server-core": "0.0.0-next-20230922063312",
|
|
79
|
+
"@modern-js/types": "0.0.0-next-20230922063312",
|
|
80
|
+
"@modern-js/core": "0.0.0-next-20230922063312",
|
|
81
|
+
"@scripts/jest-config": "0.0.0-next-20230922063312",
|
|
82
|
+
"@scripts/build": "0.0.0-next-20230922063312"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"react": ">=17.0.0"
|