@modern-js/plugin-data-loader 2.0.0-beta.3 → 2.0.0-beta.6

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.
@@ -1,23 +1,60 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = loader;
7
- var _generateClient = require("./generate-client");
8
- // eslint-disable-next-line eslint-comments/disable-enable-pair
9
- /* eslint-disable @babel/no-invalid-this */
10
-
11
- async function loader(source) {
12
- var _this$_compiler;
13
- this.cacheable();
14
- const target = (_this$_compiler = this._compiler) === null || _this$_compiler === void 0 ? void 0 : _this$_compiler.options.target;
15
- if (target === 'node') {
16
- return source;
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
14
  }
18
- const options = this.getOptions();
19
- const code = (0, _generateClient.generateClient)({
20
- mapFile: options.mapFile
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var __async = (__this, __arguments, generator) => {
19
+ return new Promise((resolve, reject) => {
20
+ var fulfilled = (value) => {
21
+ try {
22
+ step(generator.next(value));
23
+ } catch (e) {
24
+ reject(e);
25
+ }
26
+ };
27
+ var rejected = (value) => {
28
+ try {
29
+ step(generator.throw(value));
30
+ } catch (e) {
31
+ reject(e);
32
+ }
33
+ };
34
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
35
+ step((generator = generator.apply(__this, __arguments)).next());
36
+ });
37
+ };
38
+ var loader_exports = {};
39
+ __export(loader_exports, {
40
+ default: () => loader
41
+ });
42
+ module.exports = __toCommonJS(loader_exports);
43
+ var import_generate_client = require("./generate-client");
44
+ function loader(source) {
45
+ return __async(this, null, function* () {
46
+ var _a;
47
+ this.cacheable();
48
+ const target = (_a = this._compiler) == null ? void 0 : _a.options.target;
49
+ if (target === "node") {
50
+ return source;
51
+ }
52
+ const options = this.getOptions();
53
+ const code = (0, import_generate_client.generateClient)({
54
+ mapFile: options.mapFile
55
+ });
56
+ return code;
21
57
  });
22
- return code;
23
- }
58
+ }
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {});
@@ -1,57 +1,110 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __export = (target, all) => {
25
+ for (var name in all)
26
+ __defProp(target, name, { get: all[name], enumerable: true });
27
+ };
28
+ var __copyProps = (to, from, except, desc) => {
29
+ if (from && typeof from === "object" || typeof from === "function") {
30
+ for (let key of __getOwnPropNames(from))
31
+ if (!__hasOwnProp.call(to, key) && key !== except)
32
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
33
+ }
34
+ return to;
35
+ };
36
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
37
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
38
+ mod
39
+ ));
40
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
41
+ var __async = (__this, __arguments, generator) => {
42
+ return new Promise((resolve, reject) => {
43
+ var fulfilled = (value) => {
44
+ try {
45
+ step(generator.next(value));
46
+ } catch (e) {
47
+ reject(e);
48
+ }
49
+ };
50
+ var rejected = (value) => {
51
+ try {
52
+ step(generator.throw(value));
53
+ } catch (e) {
54
+ reject(e);
55
+ }
56
+ };
57
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
58
+ step((generator = generator.apply(__this, __arguments)).next());
59
+ });
60
+ };
61
+ var server_exports = {};
62
+ __export(server_exports, {
63
+ default: () => server_default,
64
+ getPathWithoutEntry: () => getPathWithoutEntry,
65
+ handleRequest: () => handleRequest,
66
+ isRedirectResponse: () => isRedirectResponse,
67
+ isResponse: () => isResponse
5
68
  });
6
- exports.handleRequest = exports.getPathWithoutEntry = exports.default = void 0;
7
- exports.isRedirectResponse = isRedirectResponse;
8
- exports.isResponse = isResponse;
9
- var _node = require("@remix-run/node");
10
- var _reactRouterDom = require("react-router-dom");
11
- var _utils = require("@modern-js/utils");
12
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
- // Polyfill Web Fetch API
18
- (0, _node.installGlobals)();
19
- const LOADER_SEARCH_PARAM = '_loader';
20
- const redirectStatusCodes = new Set([301, 302, 303, 307, 308]);
69
+ module.exports = __toCommonJS(server_exports);
70
+ var import_path = __toESM(require("path"));
71
+ var import_node = require("@remix-run/node");
72
+ var import_react_router_dom = require("react-router-dom");
73
+ var import_utils = require("@modern-js/utils");
74
+ (0, import_node.installGlobals)();
75
+ const LOADER_SEARCH_PARAM = "_loader";
76
+ const redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
21
77
  function isRedirectResponse(response) {
22
78
  return redirectStatusCodes.has(response.status);
23
79
  }
24
80
  function isResponse(value) {
25
- return value != null && typeof value.status === 'number' && typeof value.statusText === 'string' && typeof value.headers === 'object' && typeof value.body !== 'undefined';
81
+ return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
26
82
  }
27
83
  const json = (data, init = {}) => {
28
- const responseInit = typeof init === 'number' ? {
29
- status: init
30
- } : init;
84
+ const responseInit = typeof init === "number" ? { status: init } : init;
31
85
  const headers = new Headers(responseInit.headers);
32
- if (!headers.has('Content-Type')) {
33
- headers.set('Content-Type', 'application/json; charset=utf-8');
86
+ if (!headers.has("Content-Type")) {
87
+ headers.set("Content-Type", "application/json; charset=utf-8");
34
88
  }
35
- return new _node.Response(JSON.stringify(data), _objectSpread(_objectSpread({}, responseInit), {}, {
89
+ return new import_node.Response(JSON.stringify(data), __spreadProps(__spreadValues({}, responseInit), {
36
90
  headers
37
91
  }));
38
92
  };
39
-
40
- // TODO: 添加 context
41
- const callRouteLoader = async ({
93
+ const callRouteLoader = (_0) => __async(void 0, [_0], function* ({
42
94
  routeId,
43
95
  loader,
44
96
  params,
45
97
  request,
46
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
47
98
  loadContext
48
- }) => {
99
+ }) {
49
100
  if (!loader) {
50
- throw new Error(`You made a ${request.method} request to ${request.url} but did not provide ` + `a default component or \`loader\` for route "${routeId}", ` + `so there is no way to handle the request.`);
101
+ throw new Error(
102
+ `You made a ${request.method} request to ${request.url} but did not provide a default component or \`loader\` for route "${routeId}", so there is no way to handle the request.`
103
+ );
51
104
  }
52
105
  let result;
53
106
  try {
54
- result = await loader({
107
+ result = yield loader({
55
108
  request,
56
109
  params
57
110
  });
@@ -61,12 +114,14 @@ const callRouteLoader = async ({
61
114
  }
62
115
  result = error;
63
116
  }
64
- if (result === undefined) {
65
- throw new Error(`You defined a loader for route "${routeId}" but didn't return ` + `anything from your \`loader\` function. Please return a value or \`null\`.`);
117
+ if (result === void 0) {
118
+ throw new Error(
119
+ `You defined a loader for route "${routeId}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`
120
+ );
66
121
  }
67
122
  return isResponse(result) ? result : json(result);
68
- };
69
- const createLoaderHeaders = requestHeaders => {
123
+ });
124
+ const createLoaderHeaders = (requestHeaders) => {
70
125
  const headers = new Headers();
71
126
  for (const [key, values] of Object.entries(requestHeaders)) {
72
127
  if (values) {
@@ -81,9 +136,8 @@ const createLoaderHeaders = requestHeaders => {
81
136
  }
82
137
  return headers;
83
138
  };
84
- const createLoaderRequest = context => {
139
+ const createLoaderRequest = (context) => {
85
140
  const origin = `${context.protocol}://${context.host}`;
86
- // eslint-disable-next-line node/no-unsupported-features/node-builtins, node/prefer-global/url
87
141
  const url = new URL(context.url, origin);
88
142
  const controller = new AbortController();
89
143
  const init = {
@@ -93,62 +147,59 @@ const createLoaderRequest = context => {
93
147
  };
94
148
  return new Request(url.href, init);
95
149
  };
96
- const sendLoaderResponse = async (res, nodeResponse) => {
150
+ const sendLoaderResponse = (res, nodeResponse) => __async(void 0, null, function* () {
97
151
  res.statusMessage = nodeResponse.statusText;
98
152
  res.statusCode = nodeResponse.status;
99
153
  for (const [key, value] of nodeResponse.headers.entries()) {
100
154
  res.setHeader(key, value);
101
155
  }
102
156
  if (nodeResponse.body) {
103
- await (0, _node.writeReadableStreamToWritable)(nodeResponse.body, res);
157
+ yield (0, import_node.writeReadableStreamToWritable)(nodeResponse.body, res);
104
158
  } else {
105
159
  res.end();
106
160
  }
107
- };
161
+ });
108
162
  const getPathWithoutEntry = (pathname, entryPath) => {
109
- if (entryPath === '/') {
163
+ if (entryPath === "/") {
110
164
  return pathname;
111
165
  }
112
- return pathname.replace(entryPath, '');
166
+ return pathname.replace(entryPath, "");
113
167
  };
114
- exports.getPathWithoutEntry = getPathWithoutEntry;
115
168
  const matchEntry = (pathname, entries) => {
116
- return entries.find(entry => pathname.startsWith(entry.urlPath));
169
+ return entries.find((entry) => pathname.startsWith(entry.urlPath));
117
170
  };
118
- const handleRequest = async ({
171
+ const handleRequest = (_0) => __async(void 0, [_0], function* ({
119
172
  context,
120
173
  serverRoutes,
121
174
  distDir
122
- }) => {
123
- const {
124
- method,
125
- query
126
- } = context;
175
+ }) {
176
+ const { method, query } = context;
127
177
  const routeId = query[LOADER_SEARCH_PARAM];
128
- if (!routeId || method.toLowerCase() !== 'get') {
178
+ if (!routeId || method.toLowerCase() !== "get") {
129
179
  return;
130
180
  }
131
181
  const entry = matchEntry(context.path, serverRoutes);
132
182
  if (!entry) {
133
183
  return;
134
184
  }
135
- const {
136
- routes
137
- } = await Promise.resolve(`${distDir}/${_utils.LOADER_ROUTES_DIR}/${entry.entryName}`).then(s => _interopRequireWildcard(require(s)));
185
+ const routesPath = import_path.default.join(
186
+ distDir,
187
+ import_utils.LOADER_ROUTES_DIR,
188
+ entry.entryName || import_utils.MAIN_ENTRY_NAME
189
+ );
190
+ const { routes } = yield Promise.resolve().then(() => __toESM(require(routesPath)));
138
191
  if (!routes) {
139
192
  return;
140
193
  }
141
- const {
142
- res
143
- } = context;
194
+ const { res } = context;
144
195
  const pathname = getPathWithoutEntry(context.path, entry.urlPath);
145
- const matches = (0, _reactRouterDom.matchRoutes)(routes, pathname);
196
+ const matches = (0, import_react_router_dom.matchRoutes)(routes, pathname);
146
197
  if (!matches) {
147
198
  res.statusCode = 403;
148
199
  res.end(`Route ${pathname} was not matched`);
149
200
  return;
150
201
  }
151
- const match = matches === null || matches === void 0 ? void 0 : matches.find(match => match.route.id === routeId);
202
+ const match = matches == null ? void 0 : matches.find((match2) => match2.route.id === routeId);
152
203
  if (!match) {
153
204
  res.statusCode = 403;
154
205
  res.end(`Route ${routeId} does not match URL ${context.path}`);
@@ -157,7 +208,7 @@ const handleRequest = async ({
157
208
  const request = createLoaderRequest(context);
158
209
  let response;
159
210
  try {
160
- response = await callRouteLoader({
211
+ response = yield callRouteLoader({
161
212
  loader: match.route.loader,
162
213
  routeId: match.route.id,
163
214
  params: match.params,
@@ -166,40 +217,45 @@ const handleRequest = async ({
166
217
  });
167
218
  if (isRedirectResponse(response)) {
168
219
  const headers = new Headers(response.headers);
169
- headers.set('X-Modernjs-Redirect', headers.get('Location'));
170
- headers.delete('Location');
171
- response = new _node.Response(null, {
220
+ headers.set("X-Modernjs-Redirect", headers.get("Location"));
221
+ headers.delete("Location");
222
+ response = new import_node.Response(null, {
172
223
  status: 204,
173
224
  headers
174
225
  });
175
226
  }
176
227
  } catch (error) {
177
228
  const message = String(error);
178
- response = new _node.Response(message, {
229
+ response = new import_node.Response(message, {
179
230
  status: 500,
180
231
  headers: {
181
- 'Content-Type': 'text/plain'
232
+ "Content-Type": "text/plain"
182
233
  }
183
234
  });
184
235
  }
185
236
  sendLoaderResponse(res, response);
186
- };
187
- exports.handleRequest = handleRequest;
188
- var _default = () => ({
189
- name: '@modern-js/plugin-data-loader',
237
+ });
238
+ var server_default = () => ({
239
+ name: "@modern-js/plugin-data-loader",
190
240
  setup: () => ({
191
241
  preparebeforeRouteHandler({
192
242
  serverRoutes,
193
243
  distDir
194
244
  }) {
195
- return async context => {
245
+ return (context) => __async(this, null, function* () {
196
246
  return handleRequest({
197
247
  serverRoutes,
198
248
  distDir,
199
249
  context
200
250
  });
201
- };
251
+ });
202
252
  }
203
253
  })
204
254
  });
205
- exports.default = _default;
255
+ // Annotate the CommonJS export names for ESM import in node:
256
+ 0 && (module.exports = {
257
+ getPathWithoutEntry,
258
+ handleRequest,
259
+ isRedirectResponse,
260
+ isResponse
261
+ });
@@ -1,70 +1,184 @@
1
- import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
- import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
- // eslint-disable-next-line eslint-comments/disable-enable-pair
4
- /* eslint-disable node/prefer-global/url */
5
- // eslint-disable-next-line eslint-comments/disable-enable-pair
6
- /* eslint-disable node/no-unsupported-features/node-builtins */
7
- import { compile } from 'path-to-regexp';
8
- import { redirect } from 'react-router-dom';
9
- export var getRequestUrl = function getRequestUrl(_ref) {
10
- var params = _ref.params,
11
- request = _ref.request,
12
- routeId = _ref.routeId;
13
- var url = new URL(request.url);
14
- var toPath = compile(url.pathname, {
15
- encode: encodeURIComponent
16
- });
17
- var newPathName = toPath(params);
18
- url.pathname = newPathName;
19
- url.searchParams.append('_loader', routeId);
20
- return url;
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ if (info.done) {
10
+ resolve(value);
11
+ } else {
12
+ Promise.resolve(value).then(_next, _throw);
13
+ }
14
+ }
15
+ function _asyncToGenerator(fn) {
16
+ return function() {
17
+ var self = this, args = arguments;
18
+ return new Promise(function(resolve, reject) {
19
+ var gen = fn.apply(self, args);
20
+ function _next(value) {
21
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
+ }
23
+ function _throw(err) {
24
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
+ }
26
+ _next(undefined);
27
+ });
28
+ };
29
+ }
30
+ var __generator = this && this.__generator || function(thisArg, body) {
31
+ var f, y, t, g, _ = {
32
+ label: 0,
33
+ sent: function() {
34
+ if (t[0] & 1) throw t[1];
35
+ return t[1];
36
+ },
37
+ trys: [],
38
+ ops: []
39
+ };
40
+ return(g = {
41
+ next: verb(0),
42
+ "throw": verb(1),
43
+ "return": verb(2)
44
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
45
+ return this;
46
+ }), g);
47
+ function verb(n) {
48
+ return function(v) {
49
+ return step([
50
+ n,
51
+ v
52
+ ]);
53
+ };
54
+ }
55
+ function step(op) {
56
+ if (f) throw new TypeError("Generator is already executing.");
57
+ while(_)try {
58
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
59
+ if (y = 0, t) op = [
60
+ op[0] & 2,
61
+ t.value
62
+ ];
63
+ switch(op[0]){
64
+ case 0:
65
+ case 1:
66
+ t = op;
67
+ break;
68
+ case 4:
69
+ _.label++;
70
+ return {
71
+ value: op[1],
72
+ done: false
73
+ };
74
+ case 5:
75
+ _.label++;
76
+ y = op[1];
77
+ op = [
78
+ 0
79
+ ];
80
+ continue;
81
+ case 7:
82
+ op = _.ops.pop();
83
+ _.trys.pop();
84
+ continue;
85
+ default:
86
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
87
+ _ = 0;
88
+ continue;
89
+ }
90
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
91
+ _.label = op[1];
92
+ break;
93
+ }
94
+ if (op[0] === 6 && _.label < t[1]) {
95
+ _.label = t[1];
96
+ t = op;
97
+ break;
98
+ }
99
+ if (t && _.label < t[2]) {
100
+ _.label = t[2];
101
+ _.ops.push(op);
102
+ break;
103
+ }
104
+ if (t[2]) _.ops.pop();
105
+ _.trys.pop();
106
+ continue;
107
+ }
108
+ op = body.call(thisArg, _);
109
+ } catch (e) {
110
+ op = [
111
+ 6,
112
+ e
113
+ ];
114
+ y = 0;
115
+ } finally{
116
+ f = t = 0;
117
+ }
118
+ if (op[0] & 5) throw op[1];
119
+ return {
120
+ value: op[0] ? op[1] : void 0,
121
+ done: true
122
+ };
123
+ }
21
124
  };
22
- var handleRedirectResponse = function handleRedirectResponse(res) {
23
- var headers = res.headers;
24
- var location = headers.get('X-Modernjs-Redirect');
25
- if (location) {
26
- return redirect(location);
27
- }
28
- return res;
125
+ import { compile } from "path-to-regexp";
126
+ import { redirect } from "react-router-dom";
127
+ var getRequestUrl = function(param) {
128
+ var params = param.params, request = param.request, routeId = param.routeId;
129
+ var url = new URL(request.url);
130
+ var toPath = compile(url.pathname, {
131
+ encode: encodeURIComponent
132
+ });
133
+ var newPathName = toPath(params);
134
+ url.pathname = newPathName;
135
+ url.searchParams.append("_loader", routeId);
136
+ return url;
29
137
  };
30
- export var createRequest = function createRequest(routeId) {
31
- var method = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'get';
32
- return /*#__PURE__*/function () {
33
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref2) {
34
- var params, request, url, res;
35
- return _regeneratorRuntime().wrap(function _callee$(_context) {
36
- while (1) {
37
- switch (_context.prev = _context.next) {
38
- case 0:
39
- params = _ref2.params, request = _ref2.request;
40
- url = getRequestUrl({
41
- params: params,
42
- request: request,
43
- routeId: routeId
44
- });
45
- _context.prev = 2;
46
- _context.next = 5;
47
- return fetch(url, {
48
- method: method,
49
- signal: request.signal
50
- });
51
- case 5:
52
- res = _context.sent;
53
- return _context.abrupt("return", handleRedirectResponse(res));
54
- case 9:
55
- _context.prev = 9;
56
- _context.t0 = _context["catch"](2);
57
- console.error(_context.t0);
58
- throw _context.t0;
59
- case 13:
60
- case "end":
61
- return _context.stop();
62
- }
63
- }
64
- }, _callee, null, [[2, 9]]);
65
- }));
66
- return function (_x) {
67
- return _ref3.apply(this, arguments);
68
- };
69
- }();
70
- };
138
+ var handleRedirectResponse = function(res) {
139
+ var headers = res.headers;
140
+ var location = headers.get("X-Modernjs-Redirect");
141
+ if (location) {
142
+ return redirect(location);
143
+ }
144
+ return res;
145
+ };
146
+ var createRequest = function(routeId) {
147
+ var method = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "get";
148
+ return function() {
149
+ var _ref = _asyncToGenerator(function(param) {
150
+ var params, request, url, res;
151
+ return __generator(this, function(_state) {
152
+ switch(_state.label){
153
+ case 0:
154
+ params = param.params, request = param.request;
155
+ url = getRequestUrl({
156
+ params: params,
157
+ request: request,
158
+ routeId: routeId
159
+ });
160
+ return [
161
+ 4,
162
+ fetch(url, {
163
+ method: method,
164
+ signal: request.signal
165
+ })
166
+ ];
167
+ case 1:
168
+ res = _state.sent();
169
+ if (!res.ok) {
170
+ throw res;
171
+ }
172
+ return [
173
+ 2,
174
+ handleRedirectResponse(res)
175
+ ];
176
+ }
177
+ });
178
+ });
179
+ return function(_) {
180
+ return _ref.apply(this, arguments);
181
+ };
182
+ }();
183
+ };
184
+ export { createRequest, getRequestUrl };