@modern-js/plugin-data-loader 2.5.0-alpha.0 → 2.5.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli/create-request.js +3 -14
- package/dist/cjs/cli/generate-client.js +4 -0
- package/dist/cjs/cli/loader.js +3 -0
- package/dist/cjs/server/index.js +200 -19
- package/dist/esm/cli/create-request.js +2 -41
- package/dist/esm/cli/loader.js +6 -0
- package/dist/esm/server/index.js +447 -29
- package/dist/esm-node/cli/create-request.js +3 -14
- package/dist/esm-node/cli/loader.js +3 -0
- package/dist/esm-node/server/index.js +196 -21
- package/dist/js/modern/cli/create-request.js +66 -0
- package/dist/js/modern/cli/generate-client.js +42 -0
- package/dist/js/modern/cli/loader.js +40 -0
- package/dist/js/modern/common/constants.js +6 -0
- package/dist/js/modern/server/index.js +237 -0
- package/dist/js/node/cli/create-request.js +90 -0
- package/dist/js/node/cli/generate-client.js +71 -0
- package/dist/js/node/cli/loader.js +61 -0
- package/dist/js/node/common/constants.js +30 -0
- package/dist/js/node/server/index.js +261 -0
- package/dist/js/treeshaking/cli/create-request.js +186 -0
- package/dist/js/treeshaking/cli/generate-client.js +45 -0
- package/dist/js/treeshaking/cli/loader.js +154 -0
- package/dist/js/treeshaking/common/constants.js +3 -0
- package/dist/{esm/runtime → js/treeshaking/server}/index.js +222 -66
- package/dist/types/cli/create-request.d.ts +1 -2
- package/dist/types/server/index.d.ts +15 -0
- package/package.json +10 -21
- package/dist/cjs/cli/data.js +0 -162
- package/dist/cjs/runtime/index.js +0 -159
- package/dist/cjs/runtime/response.js +0 -102
- package/dist/esm/cli/data.js +0 -820
- package/dist/esm/runtime/response.js +0 -284
- package/dist/esm-node/cli/data.js +0 -142
- package/dist/esm-node/runtime/index.js +0 -143
- package/dist/esm-node/runtime/response.js +0 -79
- package/dist/types/cli/data.d.ts +0 -6
- package/dist/types/runtime/index.d.ts +0 -15
- package/dist/types/runtime/response.d.ts +0 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
var generateClient = function(param) {
|
|
3
|
+
var mapFile = param.mapFile, loaderId = param.loaderId;
|
|
4
|
+
delete require.cache[mapFile];
|
|
5
|
+
var loadersMap = require(mapFile);
|
|
6
|
+
var requestCode = "";
|
|
7
|
+
var exportsCode = "";
|
|
8
|
+
var requestCreatorPath = path.join(__dirname, "./create-request").replace("/node/cli/", "/treeshaking/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 = undefined;
|
|
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
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exportsCode += "}";
|
|
37
|
+
} else {
|
|
38
|
+
var loader1 = loadersMap[loaderId];
|
|
39
|
+
requestCode = "\n const loader = createRequest('".concat(loader1.routeId, "');\n ");
|
|
40
|
+
exportsCode = "export default loader;";
|
|
41
|
+
}
|
|
42
|
+
var generatedCode = "\n ".concat(importCode, "\n ").concat(requestCode, "\n ").concat(exportsCode, "\n ");
|
|
43
|
+
return generatedCode;
|
|
44
|
+
};
|
|
45
|
+
export { generateClient };
|
|
@@ -0,0 +1,154 @@
|
|
|
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
|
+
}
|
|
124
|
+
};
|
|
125
|
+
import { generateClient } from "./generate-client";
|
|
126
|
+
function loader(source) {
|
|
127
|
+
return _loader.apply(this, arguments);
|
|
128
|
+
}
|
|
129
|
+
function _loader() {
|
|
130
|
+
_loader = _asyncToGenerator(function(source) {
|
|
131
|
+
var _this__compiler, target, options, code;
|
|
132
|
+
return __generator(this, function(_state) {
|
|
133
|
+
this.cacheable();
|
|
134
|
+
target = (_this__compiler = this._compiler) === null || _this__compiler === void 0 ? void 0 : _this__compiler.options.target;
|
|
135
|
+
if (target === "node") {
|
|
136
|
+
return [
|
|
137
|
+
2,
|
|
138
|
+
source
|
|
139
|
+
];
|
|
140
|
+
}
|
|
141
|
+
options = this.getOptions();
|
|
142
|
+
code = generateClient({
|
|
143
|
+
mapFile: options.mapFile,
|
|
144
|
+
loaderId: options.loaderId
|
|
145
|
+
});
|
|
146
|
+
return [
|
|
147
|
+
2,
|
|
148
|
+
code
|
|
149
|
+
];
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
return _loader.apply(this, arguments);
|
|
153
|
+
}
|
|
154
|
+
export { loader as default };
|
|
@@ -35,12 +35,18 @@ function _asyncToGenerator(fn) {
|
|
|
35
35
|
});
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
if (
|
|
40
|
-
|
|
38
|
+
function _defineProperty(obj, key, value) {
|
|
39
|
+
if (key in obj) {
|
|
40
|
+
Object.defineProperty(obj, key, {
|
|
41
|
+
value: value,
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true
|
|
45
|
+
});
|
|
41
46
|
} else {
|
|
42
|
-
|
|
47
|
+
obj[key] = value;
|
|
43
48
|
}
|
|
49
|
+
return obj;
|
|
44
50
|
}
|
|
45
51
|
function _iterableToArrayLimit(arr, i) {
|
|
46
52
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
@@ -69,6 +75,45 @@ function _iterableToArrayLimit(arr, i) {
|
|
|
69
75
|
function _nonIterableRest() {
|
|
70
76
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
71
77
|
}
|
|
78
|
+
function _objectSpread(target) {
|
|
79
|
+
for(var i = 1; i < arguments.length; i++){
|
|
80
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
81
|
+
var ownKeys = Object.keys(source);
|
|
82
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
83
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
84
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
ownKeys.forEach(function(key) {
|
|
88
|
+
_defineProperty(target, key, source[key]);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return target;
|
|
92
|
+
}
|
|
93
|
+
function ownKeys(object, enumerableOnly) {
|
|
94
|
+
var keys = Object.keys(object);
|
|
95
|
+
if (Object.getOwnPropertySymbols) {
|
|
96
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
97
|
+
if (enumerableOnly) {
|
|
98
|
+
symbols = symbols.filter(function(sym) {
|
|
99
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
keys.push.apply(keys, symbols);
|
|
103
|
+
}
|
|
104
|
+
return keys;
|
|
105
|
+
}
|
|
106
|
+
function _objectSpreadProps(target, source) {
|
|
107
|
+
source = source != null ? source : {};
|
|
108
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
109
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
110
|
+
} else {
|
|
111
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
112
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return target;
|
|
116
|
+
}
|
|
72
117
|
function _slicedToArray(arr, i) {
|
|
73
118
|
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
74
119
|
}
|
|
@@ -175,11 +220,11 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
175
220
|
};
|
|
176
221
|
}
|
|
177
222
|
};
|
|
223
|
+
import path from "path";
|
|
178
224
|
import { installGlobals, writeReadableStreamToWritable, Response as NodeResponse } from "@remix-run/node";
|
|
179
|
-
import {
|
|
180
|
-
import {
|
|
225
|
+
import { matchRoutes } from "react-router-dom";
|
|
226
|
+
import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
181
227
|
import { LOADER_ID_PARAM } from "../common/constants";
|
|
182
|
-
import { createDeferredReadableStream } from "./response";
|
|
183
228
|
installGlobals();
|
|
184
229
|
var redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
185
230
|
301,
|
|
@@ -188,21 +233,81 @@ var redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
|
188
233
|
307,
|
|
189
234
|
308
|
|
190
235
|
]);
|
|
191
|
-
function isRedirectResponse(
|
|
192
|
-
return redirectStatusCodes.has(status);
|
|
236
|
+
function isRedirectResponse(response) {
|
|
237
|
+
return redirectStatusCodes.has(response.status);
|
|
193
238
|
}
|
|
194
239
|
function isResponse(value) {
|
|
195
240
|
return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
|
|
196
241
|
}
|
|
197
|
-
function
|
|
198
|
-
var
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
242
|
+
var json = function(data) {
|
|
243
|
+
var init = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
244
|
+
var responseInit = typeof init === "number" ? {
|
|
245
|
+
status: init
|
|
246
|
+
} : init;
|
|
247
|
+
var headers = new Headers(responseInit.headers);
|
|
248
|
+
if (!headers.has("Content-Type")) {
|
|
249
|
+
headers.set("Content-Type", "application/json; charset=utf-8");
|
|
250
|
+
}
|
|
251
|
+
return new NodeResponse(JSON.stringify(data), _objectSpreadProps(_objectSpread({}, responseInit), {
|
|
252
|
+
headers: headers
|
|
253
|
+
}));
|
|
254
|
+
};
|
|
255
|
+
var callRouteLoader = function() {
|
|
256
|
+
var _ref = _asyncToGenerator(function(param) {
|
|
257
|
+
var routeId, loader, params, request, loadContext, result, error;
|
|
258
|
+
return __generator(this, function(_state) {
|
|
259
|
+
switch(_state.label){
|
|
260
|
+
case 0:
|
|
261
|
+
routeId = param.routeId, loader = param.loader, params = param.params, request = param.request, loadContext = param.loadContext;
|
|
262
|
+
if (!loader) {
|
|
263
|
+
throw new Error("You made a ".concat(request.method, " request to ").concat(request.url, ' but did not provide a default component or `loader` for route "').concat(routeId, '", so there is no way to handle the request.'));
|
|
264
|
+
}
|
|
265
|
+
_state.label = 1;
|
|
266
|
+
case 1:
|
|
267
|
+
_state.trys.push([
|
|
268
|
+
1,
|
|
269
|
+
3,
|
|
270
|
+
,
|
|
271
|
+
4
|
|
272
|
+
]);
|
|
273
|
+
return [
|
|
274
|
+
4,
|
|
275
|
+
loader({
|
|
276
|
+
request: request,
|
|
277
|
+
params: params
|
|
278
|
+
})
|
|
279
|
+
];
|
|
280
|
+
case 2:
|
|
281
|
+
result = _state.sent();
|
|
282
|
+
return [
|
|
283
|
+
3,
|
|
284
|
+
4
|
|
285
|
+
];
|
|
286
|
+
case 3:
|
|
287
|
+
error = _state.sent();
|
|
288
|
+
if (!isResponse(error)) {
|
|
289
|
+
throw error;
|
|
290
|
+
}
|
|
291
|
+
result = error;
|
|
292
|
+
return [
|
|
293
|
+
3,
|
|
294
|
+
4
|
|
295
|
+
];
|
|
296
|
+
case 4:
|
|
297
|
+
if (result === void 0) {
|
|
298
|
+
throw new Error('You defined a loader for route "'.concat(routeId, "\" but didn't return anything from your `loader` function. Please return a value or `null`."));
|
|
299
|
+
}
|
|
300
|
+
return [
|
|
301
|
+
2,
|
|
302
|
+
isResponse(result) ? result : json(result)
|
|
303
|
+
];
|
|
304
|
+
}
|
|
305
|
+
});
|
|
204
306
|
});
|
|
205
|
-
|
|
307
|
+
return function callRouteLoader(_) {
|
|
308
|
+
return _ref.apply(this, arguments);
|
|
309
|
+
};
|
|
310
|
+
}();
|
|
206
311
|
var createLoaderHeaders = function(requestHeaders) {
|
|
207
312
|
var headers = new Headers();
|
|
208
313
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
@@ -319,6 +424,12 @@ var sendLoaderResponse = function() {
|
|
|
319
424
|
return _ref.apply(this, arguments);
|
|
320
425
|
};
|
|
321
426
|
}();
|
|
427
|
+
var getPathWithoutEntry = function(pathname, entryPath) {
|
|
428
|
+
if (entryPath === "/") {
|
|
429
|
+
return pathname;
|
|
430
|
+
}
|
|
431
|
+
return pathname.replace(entryPath, "");
|
|
432
|
+
};
|
|
322
433
|
var matchEntry = function(pathname, entries) {
|
|
323
434
|
return entries.find(function(entry) {
|
|
324
435
|
return pathname.startsWith(entry.urlPath);
|
|
@@ -326,77 +437,93 @@ var matchEntry = function(pathname, entries) {
|
|
|
326
437
|
};
|
|
327
438
|
var handleRequest = function() {
|
|
328
439
|
var _ref = _asyncToGenerator(function(param) {
|
|
329
|
-
var context, serverRoutes,
|
|
440
|
+
var context, serverRoutes, distDir, method, query, routeId, entry, routesPath, routes, res, pathname, matches, match, request, response, headers, error, message;
|
|
330
441
|
return __generator(this, function(_state) {
|
|
331
442
|
switch(_state.label){
|
|
332
443
|
case 0:
|
|
333
|
-
context = param.context, serverRoutes = param.serverRoutes,
|
|
444
|
+
context = param.context, serverRoutes = param.serverRoutes, distDir = param.distDir;
|
|
334
445
|
method = context.method, query = context.query;
|
|
335
446
|
routeId = query[LOADER_ID_PARAM];
|
|
336
|
-
if (!routeId) {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
throw new Error("Only support httpp GET method");
|
|
447
|
+
if (!routeId || method.toLowerCase() !== "get") {
|
|
448
|
+
return [
|
|
449
|
+
2
|
|
450
|
+
];
|
|
341
451
|
}
|
|
342
452
|
entry = matchEntry(context.path, serverRoutes);
|
|
343
453
|
if (!entry) {
|
|
344
|
-
|
|
454
|
+
return [
|
|
455
|
+
2
|
|
456
|
+
];
|
|
457
|
+
}
|
|
458
|
+
routesPath = path.join(distDir, SERVER_BUNDLE_DIRECTORY, "".concat(entry.entryName || MAIN_ENTRY_NAME, "-server-loaders"));
|
|
459
|
+
return [
|
|
460
|
+
4,
|
|
461
|
+
import(routesPath)
|
|
462
|
+
];
|
|
463
|
+
case 1:
|
|
464
|
+
routes = _state.sent().routes;
|
|
465
|
+
if (!routes) {
|
|
466
|
+
return [
|
|
467
|
+
2
|
|
468
|
+
];
|
|
345
469
|
}
|
|
346
|
-
dataRoutes = transformNestedRoutes(routes);
|
|
347
|
-
staticHandler = createStaticHandler(dataRoutes, {
|
|
348
|
-
basename: entry.urlPath
|
|
349
|
-
});
|
|
350
470
|
res = context.res;
|
|
471
|
+
pathname = getPathWithoutEntry(context.path, entry.urlPath);
|
|
472
|
+
matches = matchRoutes(routes, pathname);
|
|
473
|
+
if (!matches) {
|
|
474
|
+
res.statusCode = 403;
|
|
475
|
+
res.end("Route ".concat(pathname, " was not matched"));
|
|
476
|
+
return [
|
|
477
|
+
2
|
|
478
|
+
];
|
|
479
|
+
}
|
|
480
|
+
match = matches === null || matches === void 0 ? void 0 : matches.find(function(match2) {
|
|
481
|
+
return match2.route.id === routeId;
|
|
482
|
+
});
|
|
483
|
+
if (!match) {
|
|
484
|
+
res.statusCode = 403;
|
|
485
|
+
res.end("Route ".concat(routeId, " does not match URL ").concat(context.path));
|
|
486
|
+
return [
|
|
487
|
+
2
|
|
488
|
+
];
|
|
489
|
+
}
|
|
351
490
|
request = createLoaderRequest(context);
|
|
352
|
-
_state.label =
|
|
353
|
-
case
|
|
491
|
+
_state.label = 2;
|
|
492
|
+
case 2:
|
|
354
493
|
_state.trys.push([
|
|
355
|
-
|
|
356
|
-
|
|
494
|
+
2,
|
|
495
|
+
4,
|
|
357
496
|
,
|
|
358
|
-
|
|
497
|
+
5
|
|
359
498
|
]);
|
|
360
499
|
return [
|
|
361
500
|
4,
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
501
|
+
callRouteLoader({
|
|
502
|
+
loader: match.route.loader,
|
|
503
|
+
routeId: match.route.id,
|
|
504
|
+
params: match.params,
|
|
505
|
+
request: request,
|
|
506
|
+
loadContext: {}
|
|
365
507
|
})
|
|
366
508
|
];
|
|
367
|
-
case
|
|
509
|
+
case 3:
|
|
368
510
|
response = _state.sent();
|
|
369
|
-
if (
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
if (!init.headers) {
|
|
377
|
-
throw new Error("redirect response includes no headers");
|
|
378
|
-
}
|
|
379
|
-
response = convertModernRedirectResponse(new Headers(init.headers));
|
|
380
|
-
} else {
|
|
381
|
-
headers = new Headers(init.headers);
|
|
382
|
-
headers.set("Content-Type", "text/modernjs-deferred");
|
|
383
|
-
init.headers = headers;
|
|
384
|
-
response = new NodeResponse(body, init);
|
|
385
|
-
}
|
|
386
|
-
} else {
|
|
387
|
-
response = isResponse(response) ? response : new NodeResponse(JSON.stringify(response), {
|
|
388
|
-
headers: {
|
|
389
|
-
"Content-Type": "application/json; charset=utf-8"
|
|
390
|
-
}
|
|
511
|
+
if (isRedirectResponse(response)) {
|
|
512
|
+
headers = new Headers(response.headers);
|
|
513
|
+
headers.set("X-Modernjs-Redirect", headers.get("Location"));
|
|
514
|
+
headers.delete("Location");
|
|
515
|
+
response = new NodeResponse(null, {
|
|
516
|
+
status: 204,
|
|
517
|
+
headers: headers
|
|
391
518
|
});
|
|
392
519
|
}
|
|
393
520
|
return [
|
|
394
521
|
3,
|
|
395
|
-
|
|
522
|
+
5
|
|
396
523
|
];
|
|
397
|
-
case
|
|
524
|
+
case 4:
|
|
398
525
|
error = _state.sent();
|
|
399
|
-
message =
|
|
526
|
+
message = String(error);
|
|
400
527
|
response = new NodeResponse(message, {
|
|
401
528
|
status: 500,
|
|
402
529
|
headers: {
|
|
@@ -405,9 +532,9 @@ var handleRequest = function() {
|
|
|
405
532
|
});
|
|
406
533
|
return [
|
|
407
534
|
3,
|
|
408
|
-
|
|
535
|
+
5
|
|
409
536
|
];
|
|
410
|
-
case
|
|
537
|
+
case 5:
|
|
411
538
|
sendLoaderResponse(res, response);
|
|
412
539
|
return [
|
|
413
540
|
2
|
|
@@ -419,4 +546,33 @@ var handleRequest = function() {
|
|
|
419
546
|
return _ref.apply(this, arguments);
|
|
420
547
|
};
|
|
421
548
|
}();
|
|
422
|
-
|
|
549
|
+
var server_default = function() {
|
|
550
|
+
return {
|
|
551
|
+
name: "@modern-js/plugin-data-loader",
|
|
552
|
+
setup: function() {
|
|
553
|
+
return {
|
|
554
|
+
preparebeforeRouteHandler: function preparebeforeRouteHandler(param) {
|
|
555
|
+
var serverRoutes = param.serverRoutes, distDir = param.distDir;
|
|
556
|
+
return function() {
|
|
557
|
+
var _ref = _asyncToGenerator(function(context) {
|
|
558
|
+
return __generator(this, function(_state) {
|
|
559
|
+
return [
|
|
560
|
+
2,
|
|
561
|
+
handleRequest({
|
|
562
|
+
serverRoutes: serverRoutes,
|
|
563
|
+
distDir: distDir,
|
|
564
|
+
context: context
|
|
565
|
+
})
|
|
566
|
+
];
|
|
567
|
+
});
|
|
568
|
+
});
|
|
569
|
+
return function(context) {
|
|
570
|
+
return _ref.apply(this, arguments);
|
|
571
|
+
};
|
|
572
|
+
}();
|
|
573
|
+
}
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
};
|
|
577
|
+
};
|
|
578
|
+
export { server_default as default, getPathWithoutEntry, handleRequest, isRedirectResponse, isResponse };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type UNSAFE_DeferredData as DeferredData } from '@modern-js/utils/remix-router';
|
|
2
1
|
export declare const getRequestUrl: ({
|
|
3
2
|
params,
|
|
4
3
|
request,
|
|
@@ -14,4 +13,4 @@ export declare const createRequest: (routeId: string, method?: string) => ({
|
|
|
14
13
|
}: {
|
|
15
14
|
params: Record<string, string>;
|
|
16
15
|
request: Request;
|
|
17
|
-
}) => Promise<
|
|
16
|
+
}) => Promise<Response>;
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import type { ServerPlugin } from '@modern-js/server-core';
|
|
2
|
+
import type { ModernServerContext, ServerRoute } from '@modern-js/types';
|
|
3
|
+
import { Response as NodeResponse } from '@remix-run/node';
|
|
4
|
+
export type ServerContext = Pick<ModernServerContext, 'req' | 'res' | 'params' | 'headers' | 'method' | 'url' | 'host' | 'protocol' | 'origin' | 'href' | 'path' | 'query'>;
|
|
5
|
+
export declare function isRedirectResponse(response: NodeResponse): boolean;
|
|
6
|
+
export declare function isResponse(value: any): value is NodeResponse;
|
|
7
|
+
export declare const getPathWithoutEntry: (pathname: string, entryPath: string) => string;
|
|
8
|
+
export declare const handleRequest: ({
|
|
9
|
+
context,
|
|
10
|
+
serverRoutes,
|
|
11
|
+
distDir
|
|
12
|
+
}: {
|
|
13
|
+
context: ServerContext;
|
|
14
|
+
serverRoutes: ServerRoute[];
|
|
15
|
+
distDir: string;
|
|
16
|
+
}) => Promise<void>;
|
|
2
17
|
|
|
3
18
|
declare const _default: () => ServerPlugin;
|
|
4
19
|
|
package/package.json
CHANGED
|
@@ -11,10 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "2.5.
|
|
15
|
-
"engines": {
|
|
16
|
-
"node": ">=14.17.6"
|
|
17
|
-
},
|
|
14
|
+
"version": "2.5.1-alpha.0",
|
|
18
15
|
"jsnext:source": "./src/index.ts",
|
|
19
16
|
"types": "./dist/types/index.d.ts",
|
|
20
17
|
"main": "./dist/cjs/index.js",
|
|
@@ -27,10 +24,6 @@
|
|
|
27
24
|
"./server": {
|
|
28
25
|
"jsnext:source": "./src/server/index.ts",
|
|
29
26
|
"default": "./dist/cjs/server/index.js"
|
|
30
|
-
},
|
|
31
|
-
"./runtime": {
|
|
32
|
-
"jsnext:source": "./src/runtime/index.ts",
|
|
33
|
-
"default": "./dist/esm/runtime/index.js"
|
|
34
27
|
}
|
|
35
28
|
},
|
|
36
29
|
"typesVersions": {
|
|
@@ -40,21 +33,23 @@
|
|
|
40
33
|
],
|
|
41
34
|
"server": [
|
|
42
35
|
"./dist/types/server/index.d.ts"
|
|
43
|
-
],
|
|
44
|
-
"runtime": [
|
|
45
|
-
"./dist/types/runtime/index.d.ts"
|
|
46
36
|
]
|
|
47
37
|
}
|
|
48
38
|
},
|
|
49
39
|
"dependencies": {
|
|
50
40
|
"@babel/core": "^7.18.0",
|
|
51
41
|
"@babel/runtime": "^7.18.0",
|
|
52
|
-
"@
|
|
42
|
+
"@modern-js/utils": "2.5.0",
|
|
43
|
+
"@remix-run/node": "^1.9.0",
|
|
53
44
|
"path-to-regexp": "^6.2.0",
|
|
54
|
-
"react-router-dom": "^6.
|
|
55
|
-
"@modern-js/utils": "2.5.0-alpha.0"
|
|
45
|
+
"react-router-dom": "^6.6.0"
|
|
56
46
|
},
|
|
57
47
|
"devDependencies": {
|
|
48
|
+
"@modern-js/core": "2.5.0",
|
|
49
|
+
"@modern-js/server-core": "2.5.0",
|
|
50
|
+
"@modern-js/types": "2.5.0",
|
|
51
|
+
"@scripts/build": "2.5.0",
|
|
52
|
+
"@scripts/jest-config": "2.5.0",
|
|
58
53
|
"@types/babel__core": "^7.1.15",
|
|
59
54
|
"@types/jest": "^27",
|
|
60
55
|
"@types/node": "^14",
|
|
@@ -66,13 +61,7 @@
|
|
|
66
61
|
"ts-jest": "^27.0.5",
|
|
67
62
|
"typescript": "^4",
|
|
68
63
|
"webpack": "^5.75.0",
|
|
69
|
-
"webpack-chain": "^6.5.1"
|
|
70
|
-
"@modern-js/core": "2.5.0",
|
|
71
|
-
"@modern-js/types": "2.5.0",
|
|
72
|
-
"@scripts/build": "2.5.0",
|
|
73
|
-
"@modern-js/server-core": "2.5.0",
|
|
74
|
-
"@modern-js/plugin-module-babel": "2.5.0",
|
|
75
|
-
"@scripts/jest-config": "2.5.0"
|
|
64
|
+
"webpack-chain": "^6.5.1"
|
|
76
65
|
},
|
|
77
66
|
"sideEffects": false,
|
|
78
67
|
"publishConfig": {
|