@modern-js/plugin-data-loader 0.0.0-next-20230927182220 → 0.0.0-next-20231009011430

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.
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var createRequest_exports = {};
20
20
  __export(createRequest_exports, {
21
+ createActionRequest: () => createActionRequest,
21
22
  createRequest: () => createRequest,
22
23
  getRequestUrl: () => getRequestUrl
23
24
  });
@@ -72,8 +73,45 @@ const createRequest = (routeId, method = "get") => {
72
73
  return res;
73
74
  };
74
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
+ };
75
112
  // Annotate the CommonJS export names for ESM import in node:
76
113
  0 && (module.exports = {
114
+ createActionRequest,
77
115
  createRequest,
78
116
  getRequestUrl
79
117
  });
@@ -32,38 +32,31 @@ __export(generateClient_exports, {
32
32
  });
33
33
  module.exports = __toCommonJS(generateClient_exports);
34
34
  var import_path = __toESM(require("path"));
35
- const generateClient = ({ mapFile, loaderId }) => {
36
- delete require.cache[mapFile];
37
- const loadersMap = require(mapFile);
35
+ const generateClient = ({ inline, action, routeId }) => {
38
36
  let requestCode = ``;
39
- let exportsCode = ``;
40
37
  const requestCreatorPath = import_path.default.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
41
38
  const importCode = `
42
- import { createRequest } from '${requestCreatorPath}';
39
+ import { createRequest, createActionRequest } from '${requestCreatorPath}';
43
40
  `;
44
- if (!loaderId) {
45
- requestCode = Object.keys(loadersMap).map((loaderId2) => {
46
- const { routeId } = loadersMap[loaderId2];
47
- return `
48
- 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}');
49
50
  `;
50
- }).join("");
51
- exportsCode = `export {`;
52
- for (const loader of Object.keys(loadersMap)) {
53
- exportsCode += `${loader},`;
54
51
  }
55
- exportsCode += "}";
56
52
  } else {
57
- const loader = loadersMap[loaderId];
58
53
  requestCode = `
59
- const loader = createRequest('${loader.routeId}');
60
- `;
61
- exportsCode = `export default loader;`;
54
+ export default createRequest('${routeId}');
55
+ `;
62
56
  }
63
57
  const generatedCode = `
64
58
  ${importCode}
65
59
  ${requestCode}
66
- ${exportsCode}
67
60
  `;
68
61
  return generatedCode;
69
62
  };
@@ -35,17 +35,14 @@ async function loader(source) {
35
35
  return source;
36
36
  }
37
37
  const { resourceQuery } = this;
38
- const options = resourceQuery.slice(1).split("&").map((item) => {
39
- return item.split("=");
40
- }).reduce((pre, cur) => {
41
- const [key, value] = cur;
42
- if (!key || !value) {
43
- 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;
44
42
  }
45
- pre[key] = value;
46
43
  return pre;
47
44
  }, {});
48
- if (!options.mapFile) {
45
+ if (!options.loaderId) {
49
46
  return source;
50
47
  }
51
48
  if (options.clientData) {
@@ -61,8 +58,9 @@ async function loader(source) {
61
58
  }
62
59
  }
63
60
  const code = (0, import_generateClient.generateClient)({
64
- mapFile: options.mapFile,
65
- loaderId: options.loaderId
61
+ inline: options.inline,
62
+ action: options.action,
63
+ routeId: options.routeId
66
64
  });
67
65
  return code;
68
66
  }
@@ -74,7 +74,7 @@ const createLoaderHeaders = (requestHeaders) => {
74
74
  }
75
75
  return headers;
76
76
  };
77
- const createLoaderRequest = (context) => {
77
+ const createRequest = (context) => {
78
78
  const origin = `${context.protocol}://${context.host}`;
79
79
  const url = new URL(context.url, origin);
80
80
  const controller = new AbortController();
@@ -83,7 +83,14 @@ const createLoaderRequest = (context) => {
83
83
  headers: createLoaderHeaders(context.headers),
84
84
  signal: controller.signal
85
85
  };
86
- return new Request(url.href, init);
86
+ if (![
87
+ "GET",
88
+ "HEAD"
89
+ ].includes(context.method.toUpperCase())) {
90
+ init.body = context.req;
91
+ }
92
+ const request = new Request(url.href, init);
93
+ return request;
87
94
  };
88
95
  const sendLoaderResponse = async (res, nodeResponse) => {
89
96
  res.statusMessage = nodeResponse.statusText;
@@ -98,15 +105,12 @@ const sendLoaderResponse = async (res, nodeResponse) => {
98
105
  }
99
106
  };
100
107
  const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
101
- const { method, query } = context;
108
+ const { query } = context;
102
109
  const routeId = query[import_constants2.LOADER_ID_PARAM];
103
110
  const entry = (0, import_node2.matchEntry)(context.path, serverRoutes);
104
111
  if (!routeId || !entry) {
105
112
  return;
106
113
  }
107
- if (method.toLowerCase() !== "get") {
108
- throw new Error("CSR data loader request only support http GET method");
109
- }
110
114
  const basename = entry.urlPath;
111
115
  const end = (0, import_time.time)();
112
116
  const { res, logger, reporter } = context;
@@ -114,7 +118,7 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
114
118
  const { queryRoute } = (0, import_remix_router.createStaticHandler)(routes, {
115
119
  basename
116
120
  });
117
- const request = createLoaderRequest(context);
121
+ const request = createRequest(context);
118
122
  const requestContext = (0, import_node2.createRequestContext)();
119
123
  requestContext.set(import_node2.reporterCtx, reporter);
120
124
  let response;
@@ -149,7 +153,11 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
149
153
  }
150
154
  } catch (error) {
151
155
  const message = error instanceof import_remix_router.ErrorResponse ? error.data : String(error);
152
- logger === null || logger === void 0 ? void 0 : logger.error(message);
156
+ if (error instanceof Error) {
157
+ logger === null || logger === void 0 ? void 0 : logger.error(error);
158
+ } else {
159
+ logger === null || logger === void 0 ? void 0 : logger.error(message);
160
+ }
153
161
  response = new import_node.Response(message, {
154
162
  status: 500,
155
163
  headers: {
@@ -101,7 +101,121 @@ var createRequest = function(routeId) {
101
101
  };
102
102
  }();
103
103
  };
104
+ var createActionRequest = function(routeId) {
105
+ return function() {
106
+ var _ref = _async_to_generator(function(param) {
107
+ var params, request, url, init, contentType, _, _1, res;
108
+ return _ts_generator(this, function(_state) {
109
+ switch (_state.label) {
110
+ case 0:
111
+ params = param.params, request = param.request;
112
+ url = getRequestUrl({
113
+ params,
114
+ request,
115
+ routeId
116
+ });
117
+ init = {
118
+ signal: request.signal
119
+ };
120
+ if (!(request.method !== "GET"))
121
+ return [
122
+ 3,
123
+ 8
124
+ ];
125
+ init.method = request.method;
126
+ contentType = request.headers.get("Content-Type");
127
+ if (!(contentType && /\bapplication\/json\b/.test(contentType)))
128
+ return [
129
+ 3,
130
+ 2
131
+ ];
132
+ init.headers = {
133
+ "Content-Type": contentType
134
+ };
135
+ _ = JSON.stringify;
136
+ return [
137
+ 4,
138
+ request.json()
139
+ ];
140
+ case 1:
141
+ init.body = _.apply(JSON, [
142
+ _state.sent()
143
+ ]);
144
+ return [
145
+ 3,
146
+ 8
147
+ ];
148
+ case 2:
149
+ if (!(contentType && /\btext\/plain\b/.test(contentType)))
150
+ return [
151
+ 3,
152
+ 4
153
+ ];
154
+ init.headers = {
155
+ "Content-Type": contentType
156
+ };
157
+ return [
158
+ 4,
159
+ request.text()
160
+ ];
161
+ case 3:
162
+ init.body = _state.sent();
163
+ return [
164
+ 3,
165
+ 8
166
+ ];
167
+ case 4:
168
+ if (!(contentType && /\bapplication\/x-www-form-urlencoded\b/.test(contentType)))
169
+ return [
170
+ 3,
171
+ 6
172
+ ];
173
+ _1 = URLSearchParams.bind;
174
+ return [
175
+ 4,
176
+ request.text()
177
+ ];
178
+ case 5:
179
+ init.body = new (_1.apply(URLSearchParams, [
180
+ void 0,
181
+ _state.sent()
182
+ ]))();
183
+ return [
184
+ 3,
185
+ 8
186
+ ];
187
+ case 6:
188
+ return [
189
+ 4,
190
+ request.formData()
191
+ ];
192
+ case 7:
193
+ init.body = _state.sent();
194
+ _state.label = 8;
195
+ case 8:
196
+ return [
197
+ 4,
198
+ fetch(url, init)
199
+ ];
200
+ case 9:
201
+ res = _state.sent();
202
+ if (!res.ok) {
203
+ throw res;
204
+ }
205
+ return [
206
+ 2,
207
+ res
208
+ ];
209
+ }
210
+ });
211
+ });
212
+ return function(_) {
213
+ return _ref.apply(this, arguments);
214
+ };
215
+ }();
216
+ };
104
217
  export {
218
+ createActionRequest,
105
219
  createRequest,
106
220
  getRequestUrl
107
221
  };
@@ -1,45 +1,19 @@
1
1
  import path from "path";
2
2
  var generateClient = function(param) {
3
- var mapFile = param.mapFile, loaderId = param.loaderId;
4
- delete require.cache[mapFile];
5
- var loadersMap = require(mapFile);
3
+ var inline = param.inline, action = param.action, routeId = param.routeId;
6
4
  var requestCode = "";
7
- var exportsCode = "";
8
5
  var requestCreatorPath = path.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
9
- var importCode = "\n import { createRequest } from '".concat(requestCreatorPath, "';\n ");
10
- if (!loaderId) {
11
- requestCode = Object.keys(loadersMap).map(function(loaderId2) {
12
- var routeId = loadersMap[loaderId2].routeId;
13
- return "\n const ".concat(loaderId2, " = createRequest('").concat(routeId, "');\n ");
14
- }).join("");
15
- exportsCode = "export {";
16
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
17
- try {
18
- for (var _iterator = Object.keys(loadersMap)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
19
- var loader = _step.value;
20
- exportsCode += "".concat(loader, ",");
21
- }
22
- } catch (err) {
23
- _didIteratorError = true;
24
- _iteratorError = err;
25
- } finally {
26
- try {
27
- if (!_iteratorNormalCompletion && _iterator.return != null) {
28
- _iterator.return();
29
- }
30
- } finally {
31
- if (_didIteratorError) {
32
- throw _iteratorError;
33
- }
34
- }
6
+ var importCode = "\n import { createRequest, createActionRequest } from '".concat(requestCreatorPath, "';\n ");
7
+ if (inline) {
8
+ if (action) {
9
+ requestCode = "\n export const loader = createRequest('".concat(routeId, "');\n export const action = createActionRequest('").concat(routeId, "')\n ");
10
+ } else {
11
+ requestCode = "\n export const loader = createRequest('".concat(routeId, "');\n ");
35
12
  }
36
- exportsCode += "}";
37
13
  } else {
38
- var loader1 = loadersMap[loaderId];
39
- requestCode = "\n const loader = createRequest('".concat(loader1.routeId, "');\n ");
40
- exportsCode = "export default loader;";
14
+ requestCode = "\n export default createRequest('".concat(routeId, "');\n ");
41
15
  }
42
- var generatedCode = "\n ".concat(importCode, "\n ").concat(requestCode, "\n ").concat(exportsCode, "\n ");
16
+ var generatedCode = "\n ".concat(importCode, "\n ").concat(requestCode, "\n ");
43
17
  return generatedCode;
44
18
  };
45
19
  export {
@@ -28,17 +28,14 @@ function _loader() {
28
28
  ];
29
29
  }
30
30
  resourceQuery = this.resourceQuery;
31
- options = resourceQuery.slice(1).split("&").map(function(item) {
32
- return item.split("=");
33
- }).reduce(function(pre, cur) {
34
- var _cur = _sliced_to_array(cur, 2), key = _cur[0], value = _cur[1];
35
- if (!key || !value) {
36
- return pre;
31
+ options = resourceQuery.slice(1).split("&").reduce(function(pre, cur) {
32
+ var _cur_split = _sliced_to_array(cur.split("="), 2), key = _cur_split[0], value = _cur_split[1];
33
+ if (key && value) {
34
+ pre[key] = value === "true" ? true : value === "false" ? false : value;
37
35
  }
38
- pre[key] = value;
39
36
  return pre;
40
37
  }, {});
41
- if (!options.mapFile) {
38
+ if (!options.loaderId) {
42
39
  return [
43
40
  2,
44
41
  source
@@ -80,8 +77,9 @@ function _loader() {
80
77
  ];
81
78
  case 4:
82
79
  code = generateClient({
83
- mapFile: options.mapFile,
84
- loaderId: options.loaderId
80
+ inline: options.inline,
81
+ action: options.action,
82
+ routeId: options.routeId
85
83
  });
86
84
  return [
87
85
  2,
@@ -87,7 +87,7 @@ var createLoaderHeaders = function(requestHeaders) {
87
87
  }
88
88
  return headers;
89
89
  };
90
- var createLoaderRequest = function(context) {
90
+ var createRequest = function(context) {
91
91
  var origin = "".concat(context.protocol, "://").concat(context.host);
92
92
  var url = new URL(context.url, origin);
93
93
  var controller = new AbortController();
@@ -96,7 +96,14 @@ var createLoaderRequest = function(context) {
96
96
  headers: createLoaderHeaders(context.headers),
97
97
  signal: controller.signal
98
98
  };
99
- return new Request(url.href, init);
99
+ if (![
100
+ "GET",
101
+ "HEAD"
102
+ ].includes(context.method.toUpperCase())) {
103
+ init.body = context.req;
104
+ }
105
+ var request = new Request(url.href, init);
106
+ return request;
100
107
  };
101
108
  var sendLoaderResponse = function() {
102
109
  var _ref = _async_to_generator(function(res, nodeResponse) {
@@ -157,12 +164,12 @@ var sendLoaderResponse = function() {
157
164
  }();
158
165
  var handleRequest = function() {
159
166
  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;
167
+ var context, serverRoutes, routesConfig, query, routeId, entry, basename, end, res, logger, reporter, routes, queryRoute, request, requestContext, response, deferredData, body, init, headers, error, message, cost;
161
168
  return _ts_generator(this, function(_state) {
162
169
  switch (_state.label) {
163
170
  case 0:
164
171
  context = param.context, serverRoutes = param.serverRoutes, routesConfig = param.routes;
165
- method = context.method, query = context.query;
172
+ query = context.query;
166
173
  routeId = query[LOADER_ID_PARAM];
167
174
  entry = matchEntry(context.path, serverRoutes);
168
175
  if (!routeId || !entry) {
@@ -170,9 +177,6 @@ var handleRequest = function() {
170
177
  2
171
178
  ];
172
179
  }
173
- if (method.toLowerCase() !== "get") {
174
- throw new Error("CSR data loader request only support http GET method");
175
- }
176
180
  basename = entry.urlPath;
177
181
  end = time();
178
182
  res = context.res, logger = context.logger, reporter = context.reporter;
@@ -180,7 +184,7 @@ var handleRequest = function() {
180
184
  queryRoute = createStaticHandler(routes, {
181
185
  basename
182
186
  }).queryRoute;
183
- request = createLoaderRequest(context);
187
+ request = createRequest(context);
184
188
  requestContext = createRequestContext();
185
189
  requestContext.set(reporterCtx, reporter);
186
190
  _state.label = 1;
@@ -231,7 +235,11 @@ var handleRequest = function() {
231
235
  case 3:
232
236
  error = _state.sent();
233
237
  message = _instanceof(error, ErrorResponse) ? error.data : String(error);
234
- logger === null || logger === void 0 ? void 0 : logger.error(message);
238
+ if (_instanceof(error, Error)) {
239
+ logger === null || logger === void 0 ? void 0 : logger.error(error);
240
+ } else {
241
+ logger === null || logger === void 0 ? void 0 : logger.error(message);
242
+ }
235
243
  response = new NodeResponse(message, {
236
244
  status: 500,
237
245
  headers: {
@@ -48,7 +48,44 @@ const createRequest = (routeId, method = "get") => {
48
48
  return res;
49
49
  };
50
50
  };
51
+ const createActionRequest = (routeId) => {
52
+ return async ({ params, request }) => {
53
+ const url = getRequestUrl({
54
+ params,
55
+ request,
56
+ routeId
57
+ });
58
+ const init = {
59
+ signal: request.signal
60
+ };
61
+ if (request.method !== "GET") {
62
+ init.method = request.method;
63
+ const contentType = request.headers.get("Content-Type");
64
+ if (contentType && /\bapplication\/json\b/.test(contentType)) {
65
+ init.headers = {
66
+ "Content-Type": contentType
67
+ };
68
+ init.body = JSON.stringify(await request.json());
69
+ } else if (contentType && /\btext\/plain\b/.test(contentType)) {
70
+ init.headers = {
71
+ "Content-Type": contentType
72
+ };
73
+ init.body = await request.text();
74
+ } else if (contentType && /\bapplication\/x-www-form-urlencoded\b/.test(contentType)) {
75
+ init.body = new URLSearchParams(await request.text());
76
+ } else {
77
+ init.body = await request.formData();
78
+ }
79
+ }
80
+ const res = await fetch(url, init);
81
+ if (!res.ok) {
82
+ throw res;
83
+ }
84
+ return res;
85
+ };
86
+ };
51
87
  export {
88
+ createActionRequest,
52
89
  createRequest,
53
90
  getRequestUrl
54
91
  };
@@ -1,36 +1,29 @@
1
1
  import path from "path";
2
- const generateClient = ({ mapFile, loaderId }) => {
3
- delete require.cache[mapFile];
4
- const loadersMap = require(mapFile);
2
+ const generateClient = ({ inline, action, routeId }) => {
5
3
  let requestCode = ``;
6
- let exportsCode = ``;
7
4
  const requestCreatorPath = path.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
8
5
  const importCode = `
9
- import { createRequest } from '${requestCreatorPath}';
6
+ import { createRequest, createActionRequest } from '${requestCreatorPath}';
10
7
  `;
11
- if (!loaderId) {
12
- requestCode = Object.keys(loadersMap).map((loaderId2) => {
13
- const { routeId } = loadersMap[loaderId2];
14
- return `
15
- const ${loaderId2} = createRequest('${routeId}');
8
+ if (inline) {
9
+ if (action) {
10
+ requestCode = `
11
+ export const loader = createRequest('${routeId}');
12
+ export const action = createActionRequest('${routeId}')
13
+ `;
14
+ } else {
15
+ requestCode = `
16
+ export const loader = createRequest('${routeId}');
16
17
  `;
17
- }).join("");
18
- exportsCode = `export {`;
19
- for (const loader of Object.keys(loadersMap)) {
20
- exportsCode += `${loader},`;
21
18
  }
22
- exportsCode += "}";
23
19
  } else {
24
- const loader = loadersMap[loaderId];
25
20
  requestCode = `
26
- const loader = createRequest('${loader.routeId}');
27
- `;
28
- exportsCode = `export default loader;`;
21
+ export default createRequest('${routeId}');
22
+ `;
29
23
  }
30
24
  const generatedCode = `
31
25
  ${importCode}
32
26
  ${requestCode}
33
- ${exportsCode}
34
27
  `;
35
28
  return generatedCode;
36
29
  };
@@ -12,17 +12,14 @@ async function loader(source) {
12
12
  return source;
13
13
  }
14
14
  const { resourceQuery } = this;
15
- const options = resourceQuery.slice(1).split("&").map((item) => {
16
- return item.split("=");
17
- }).reduce((pre, cur) => {
18
- const [key, value] = cur;
19
- if (!key || !value) {
20
- return pre;
15
+ const options = resourceQuery.slice(1).split("&").reduce((pre, cur) => {
16
+ const [key, value] = cur.split("=");
17
+ if (key && value) {
18
+ pre[key] = value === "true" ? true : value === "false" ? false : value;
21
19
  }
22
- pre[key] = value;
23
20
  return pre;
24
21
  }, {});
25
- if (!options.mapFile) {
22
+ if (!options.loaderId) {
26
23
  return source;
27
24
  }
28
25
  if (options.clientData) {
@@ -38,8 +35,9 @@ async function loader(source) {
38
35
  }
39
36
  }
40
37
  const code = generateClient({
41
- mapFile: options.mapFile,
42
- loaderId: options.loaderId
38
+ inline: options.inline,
39
+ action: options.action,
40
+ routeId: options.routeId
43
41
  });
44
42
  return code;
45
43
  }
@@ -49,7 +49,7 @@ const createLoaderHeaders = (requestHeaders) => {
49
49
  }
50
50
  return headers;
51
51
  };
52
- const createLoaderRequest = (context) => {
52
+ const createRequest = (context) => {
53
53
  const origin = `${context.protocol}://${context.host}`;
54
54
  const url = new URL(context.url, origin);
55
55
  const controller = new AbortController();
@@ -58,7 +58,14 @@ const createLoaderRequest = (context) => {
58
58
  headers: createLoaderHeaders(context.headers),
59
59
  signal: controller.signal
60
60
  };
61
- return new Request(url.href, init);
61
+ if (![
62
+ "GET",
63
+ "HEAD"
64
+ ].includes(context.method.toUpperCase())) {
65
+ init.body = context.req;
66
+ }
67
+ const request = new Request(url.href, init);
68
+ return request;
62
69
  };
63
70
  const sendLoaderResponse = async (res, nodeResponse) => {
64
71
  res.statusMessage = nodeResponse.statusText;
@@ -73,15 +80,12 @@ const sendLoaderResponse = async (res, nodeResponse) => {
73
80
  }
74
81
  };
75
82
  const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
76
- const { method, query } = context;
83
+ const { query } = context;
77
84
  const routeId = query[LOADER_ID_PARAM];
78
85
  const entry = matchEntry(context.path, serverRoutes);
79
86
  if (!routeId || !entry) {
80
87
  return;
81
88
  }
82
- if (method.toLowerCase() !== "get") {
83
- throw new Error("CSR data loader request only support http GET method");
84
- }
85
89
  const basename = entry.urlPath;
86
90
  const end = time();
87
91
  const { res, logger, reporter } = context;
@@ -89,7 +93,7 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
89
93
  const { queryRoute } = createStaticHandler(routes, {
90
94
  basename
91
95
  });
92
- const request = createLoaderRequest(context);
96
+ const request = createRequest(context);
93
97
  const requestContext = createRequestContext();
94
98
  requestContext.set(reporterCtx, reporter);
95
99
  let response;
@@ -124,7 +128,11 @@ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) =>
124
128
  }
125
129
  } catch (error) {
126
130
  const message = error instanceof ErrorResponse ? error.data : String(error);
127
- logger === null || logger === void 0 ? void 0 : logger.error(message);
131
+ if (error instanceof Error) {
132
+ logger === null || logger === void 0 ? void 0 : logger.error(error);
133
+ } else {
134
+ logger === null || logger === void 0 ? void 0 : logger.error(message);
135
+ }
128
136
  response = new NodeResponse(message, {
129
137
  status: 500,
130
138
  headers: {
@@ -14,4 +14,11 @@ export declare const createRequest: (routeId: string, method?: string) => ({
14
14
  }: {
15
15
  params: Record<string, string>;
16
16
  request: Request;
17
- }) => Promise<DeferredData | Response>;
17
+ }) => Promise<DeferredData | Response>;
18
+ export declare const createActionRequest: (routeId: string) => ({
19
+ params,
20
+ request
21
+ }: {
22
+ params: Record<string, string>;
23
+ request: Request;
24
+ }) => Promise<Response>;
@@ -1,7 +1,9 @@
1
1
  export declare const generateClient: ({
2
- mapFile,
3
- loaderId
2
+ inline,
3
+ action,
4
+ routeId
4
5
  }: {
5
- mapFile: string;
6
- loaderId?: string | undefined;
6
+ inline: boolean;
7
+ action?: boolean | undefined;
8
+ routeId: string;
7
9
  }) => string;
@@ -2,8 +2,11 @@
2
2
  import type { LoaderContext } from 'webpack';
3
3
  type Context = {
4
4
  mapFile: string;
5
- loaderId?: string;
5
+ loaderId: string;
6
6
  clientData?: boolean;
7
+ action: boolean;
8
+ inline: boolean;
9
+ routeId: string;
7
10
  };
8
11
  export default function loader(this: LoaderContext<Context>, source: string): Promise<string | Buffer | undefined>;
9
12
  export {};
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "0.0.0-next-20230927182220",
18
+ "version": "0.0.0-next-20231009011430",
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-20230927182220",
62
- "@modern-js/runtime-utils": "0.0.0-next-20230927182220"
61
+ "@modern-js/utils": "0.0.0-next-20231009011430",
62
+ "@modern-js/runtime-utils": "0.0.0-next-20231009011430"
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-20230927182220",
79
- "@modern-js/server-core": "0.0.0-next-20230927182220",
80
- "@modern-js/types": "0.0.0-next-20230927182220",
81
- "@scripts/build": "0.0.0-next-20230927182220",
82
- "@scripts/jest-config": "0.0.0-next-20230927182220"
78
+ "@modern-js/core": "0.0.0-next-20231009011430",
79
+ "@modern-js/server-core": "0.0.0-next-20231009011430",
80
+ "@scripts/build": "0.0.0-next-20231009011430",
81
+ "@modern-js/types": "0.0.0-next-20231009011430",
82
+ "@scripts/jest-config": "0.0.0-next-20231009011430"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "react": ">=17.0.0"