@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.
Files changed (46) hide show
  1. package/dist/cjs/cli/createRequest.js +73 -25
  2. package/dist/cjs/cli/data.js +27 -10
  3. package/dist/cjs/cli/generateClient.js +49 -30
  4. package/dist/cjs/cli/loader.js +34 -23
  5. package/dist/cjs/common/constants.js +27 -18
  6. package/dist/cjs/runtime/index.js +68 -55
  7. package/dist/cjs/runtime/response.js +28 -11
  8. package/dist/cjs/server/index.js +39 -18
  9. package/dist/esm/cli/createRequest.js +125 -7
  10. package/dist/esm/cli/data.js +5 -2
  11. package/dist/esm/cli/generateClient.js +13 -36
  12. package/dist/esm/cli/loader.js +12 -11
  13. package/dist/esm/common/constants.js +8 -3
  14. package/dist/esm/runtime/index.js +29 -19
  15. package/dist/esm/runtime/response.js +5 -2
  16. package/dist/esm/server/index.js +8 -5
  17. package/dist/esm-node/cli/createRequest.js +44 -3
  18. package/dist/esm-node/cli/data.js +5 -2
  19. package/dist/esm-node/cli/generateClient.js +16 -20
  20. package/dist/esm-node/cli/loader.js +12 -11
  21. package/dist/esm-node/common/constants.js +8 -3
  22. package/dist/esm-node/runtime/index.js +25 -16
  23. package/dist/esm-node/runtime/response.js +5 -2
  24. package/dist/esm-node/server/index.js +5 -2
  25. package/dist/js/modern/cli/create-request.js +66 -0
  26. package/dist/js/modern/cli/generate-client.js +42 -0
  27. package/dist/js/modern/cli/loader.js +40 -0
  28. package/dist/js/modern/common/constants.js +6 -0
  29. package/dist/js/modern/server/index.js +237 -0
  30. package/dist/js/node/cli/create-request.js +90 -0
  31. package/dist/js/node/cli/generate-client.js +71 -0
  32. package/dist/js/node/cli/loader.js +61 -0
  33. package/dist/js/node/common/constants.js +30 -0
  34. package/dist/js/node/server/index.js +261 -0
  35. package/dist/js/treeshaking/cli/create-request.js +186 -0
  36. package/dist/js/treeshaking/cli/generate-client.js +45 -0
  37. package/dist/js/treeshaking/cli/loader.js +154 -0
  38. package/dist/js/treeshaking/common/constants.js +3 -0
  39. package/dist/js/treeshaking/server/index.js +578 -0
  40. package/dist/types/cli/createRequest.d.ts +9 -2
  41. package/dist/types/cli/data.d.ts +1 -1
  42. package/dist/types/cli/generateClient.d.ts +6 -4
  43. package/dist/types/cli/loader.d.ts +4 -1
  44. package/dist/types/runtime/index.d.ts +1 -1
  45. package/dist/types/runtime/response.d.ts +1 -1
  46. package/package.json +8 -7
@@ -1,49 +1,55 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
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
- Object.defineProperty(target, name, {
8
- enumerable: true,
9
- get: all[name]
10
- });
11
- }
12
- _export(exports, {
13
- getRequestUrl: function() {
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
- const _pathtoregexp = require("path-to-regexp");
21
- const _router = require("@modern-js/utils/runtime/router");
22
- const _constants = require("../common/constants");
23
- const _data = require("./data");
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, _pathtoregexp.compile)(url.pathname, {
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(_constants.LOADER_ID_PARAM, routeId);
32
- url.searchParams.append(_constants.DIRECT_PARAM, "true");
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, _router.redirect)(location);
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(_constants.CONTENT_TYPE_DEFERRED)) && res.body) {
46
- return await (0, _data.parseDeferredReadableStream)(res.body);
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
+ });
@@ -1,14 +1,27 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "parseDeferredReadableStream", {
6
- enumerable: true,
7
- get: function() {
8
- return parseDeferredReadableStream;
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
- const _remixrouter = require("@modern-js/utils/runtime/remix-router");
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 _remixrouter.AbortedDeferredError(`Deferred ${key} will never resolved`));
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 _remixrouter.UNSAFE_DeferredData({
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.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "generateClient", {
6
- enumerable: true,
7
- get: function() {
8
- return generateClient;
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
- const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
12
- const _path = /* @__PURE__ */ _interop_require_default._(require("path"));
13
- const generateClient = ({ mapFile, loaderId }) => {
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
- let exportsCode = ``;
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 (!loaderId) {
23
- requestCode = Object.keys(loadersMap).map((loaderId2) => {
24
- const { routeId } = loadersMap[loaderId2];
25
- return `
26
- const ${loaderId2} = createRequest('${routeId}');
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
- const loader = createRequest('${loader.routeId}');
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
+ });
@@ -1,16 +1,29 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return loader;
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
- const _util = require("util");
12
- const _logger = require("@modern-js/utils/logger");
13
- const _generateClient = require("./generateClient");
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("&").map((item) => {
26
- return item.split("=");
27
- }).reduce((pre, cur) => {
28
- const [key, value] = cur;
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.mapFile) {
45
+ if (!options.loaderId) {
36
46
  return source;
37
47
  }
38
48
  if (options.clientData) {
39
- const readFile = (0, _util.promisify)(this.fs.readFile);
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
- _logger.logger.error(`Failed to read the clientData file ${options.clientData}`);
56
+ import_logger.logger.error(`Failed to read the clientData file ${options.clientData}`);
47
57
  }
48
58
  }
49
59
  }
50
- const code = (0, _generateClient.generateClient)({
51
- mapFile: options.mapFile,
52
- loaderId: options.loaderId
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(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
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
- Object.defineProperty(target, name, {
8
- enumerable: true,
9
- get: all[name]
10
- });
11
- }
12
- _export(exports, {
13
- LOADER_ID_PARAM: function() {
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(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
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
- Object.defineProperty(target, name, {
8
- enumerable: true,
9
- get: all[name]
10
- });
11
- }
12
- _export(exports, {
13
- isRedirectResponse: function() {
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
- const _node = require("@remix-run/node");
24
- const _remixrouter = require("@modern-js/utils/runtime/remix-router");
25
- const _nestedroutes = require("@modern-js/utils/runtime/nested-routes");
26
- const _lodash = require("@modern-js/utils/lodash");
27
- const _runtimenode = require("@modern-js/utils/runtime-node");
28
- const _time = require("@modern-js/utils/universal/time");
29
- const _constants = require("@modern-js/utils/universal/constants");
30
- const _constants1 = require("../common/constants");
31
- const _response = require("./response");
32
- (0, _node.installGlobals)();
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 _node.Response(null, {
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 createLoaderRequest = (context) => {
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
- return new Request(url.href, init);
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, _node.writeReadableStreamToWritable)(nodeResponse.body, res);
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 { method, query } = context;
99
- const routeId = query[_constants1.LOADER_ID_PARAM];
100
- const entry = (0, _runtimenode.matchEntry)(context.path, serverRoutes);
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, _time.time)();
112
+ const end = (0, import_time.time)();
109
113
  const { res, logger, reporter } = context;
110
- const routes = (0, _nestedroutes.transformNestedRoutes)(routesConfig, reporter);
111
- const { queryRoute } = (0, _remixrouter.createStaticHandler)(routes, {
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 = createLoaderRequest(context);
115
- const requestContext = (0, _runtimenode.createRequestContext)();
116
- requestContext.set(_runtimenode.reporterCtx, reporter);
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, _lodash.isPlainObject)(response) && _remixrouter.UNSAFE_DEFERRED_SYMBOL in response) {
126
- const deferredData = response[_remixrouter.UNSAFE_DEFERRED_SYMBOL];
127
- const body = (0, _response.createDeferredReadableStream)(deferredData, request.signal);
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", `${_constants1.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
140
+ headers.set("Content-Type", `${import_constants2.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
137
141
  init.headers = headers;
138
- response = new _node.Response(body, init);
142
+ response = new import_node.Response(body, init);
139
143
  }
140
144
  } else {
141
- response = isResponse(response) ? response : new _node.Response(JSON.stringify(response), {
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
- var _logger;
149
- const message = error instanceof _remixrouter.ErrorResponse ? error.data : String(error);
150
- (_logger = logger) === null || _logger === void 0 ? void 0 : _logger.error(message);
151
- response = new _node.Response(message, {
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(`${_constants.LOADER_REPORTER_NAME}-navigation`, cost);
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
+ });