@modern-js/plugin-data-loader 2.6.1-alpha.0 → 2.8.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/CHANGELOG.md +11 -0
- package/README.md +2 -2
- package/dist/cjs/cli/{create-request.js → createRequest.js} +17 -6
- package/dist/cjs/cli/data.js +162 -0
- package/dist/cjs/cli/{generate-client.js → generateClient.js} +4 -4
- package/dist/cjs/cli/loader.js +2 -2
- package/dist/cjs/common/constants.js +3 -0
- package/dist/cjs/runtime/index.js +180 -0
- package/dist/cjs/runtime/response.js +102 -0
- package/dist/cjs/server/index.js +22 -196
- package/dist/esm/cli/{create-request.js → createRequest.js} +42 -3
- package/dist/esm/cli/data.js +820 -0
- package/dist/esm/cli/{generate-client.js → generateClient.js} +1 -1
- package/dist/esm/cli/loader.js +1 -1
- package/dist/esm/common/constants.js +2 -1
- package/dist/{js/treeshaking/server → esm/runtime}/index.js +84 -220
- package/dist/esm/runtime/response.js +284 -0
- package/dist/esm/server/index.js +38 -447
- package/dist/esm-node/cli/{create-request.js → createRequest.js} +19 -4
- package/dist/esm-node/cli/data.js +142 -0
- package/dist/esm-node/cli/{generate-client.js → generateClient.js} +1 -1
- package/dist/esm-node/cli/loader.js +1 -1
- package/dist/esm-node/common/constants.js +2 -0
- package/dist/esm-node/runtime/index.js +162 -0
- package/dist/esm-node/runtime/response.js +79 -0
- package/dist/esm-node/server/index.js +21 -196
- package/dist/types/cli/{create-request.d.ts → createRequest.d.ts} +2 -1
- package/dist/types/cli/data.d.ts +6 -0
- package/dist/types/common/constants.d.ts +2 -1
- package/dist/types/runtime/index.d.ts +15 -0
- package/dist/types/runtime/response.d.ts +2 -0
- package/dist/types/server/index.d.ts +0 -15
- package/package.json +22 -12
- package/dist/js/modern/cli/create-request.js +0 -66
- package/dist/js/modern/cli/generate-client.js +0 -42
- package/dist/js/modern/cli/loader.js +0 -40
- package/dist/js/modern/common/constants.js +0 -6
- package/dist/js/modern/server/index.js +0 -237
- package/dist/js/node/cli/create-request.js +0 -90
- package/dist/js/node/cli/generate-client.js +0 -71
- package/dist/js/node/cli/loader.js +0 -61
- package/dist/js/node/common/constants.js +0 -30
- package/dist/js/node/server/index.js +0 -261
- package/dist/js/treeshaking/cli/create-request.js +0 -186
- package/dist/js/treeshaking/cli/generate-client.js +0 -45
- package/dist/js/treeshaking/cli/loader.js +0 -154
- package/dist/js/treeshaking/common/constants.js +0 -3
- /package/dist/types/cli/{generate-client.d.ts → generateClient.d.ts} +0 -0
|
@@ -5,7 +5,7 @@ var generateClient = function(param) {
|
|
|
5
5
|
var loadersMap = require(mapFile);
|
|
6
6
|
var requestCode = "";
|
|
7
7
|
var exportsCode = "";
|
|
8
|
-
var requestCreatorPath = path.join(__dirname, "./
|
|
8
|
+
var requestCreatorPath = path.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
|
|
9
9
|
var importCode = "\n import { createRequest } from '".concat(requestCreatorPath, "';\n ");
|
|
10
10
|
if (!loaderId) {
|
|
11
11
|
requestCode = Object.keys(loadersMap).map(function(loaderId2) {
|
package/dist/esm/cli/loader.js
CHANGED
|
@@ -122,7 +122,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
|
-
import { generateClient } from "./
|
|
125
|
+
import { generateClient } from "./generateClient";
|
|
126
126
|
function loader(source) {
|
|
127
127
|
return _loader.apply(this, arguments);
|
|
128
128
|
}
|
|
@@ -35,18 +35,12 @@ function _asyncToGenerator(fn) {
|
|
|
35
35
|
});
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
value: value,
|
|
42
|
-
enumerable: true,
|
|
43
|
-
configurable: true,
|
|
44
|
-
writable: true
|
|
45
|
-
});
|
|
38
|
+
function _instanceof(left, right) {
|
|
39
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
40
|
+
return !!right[Symbol.hasInstance](left);
|
|
46
41
|
} else {
|
|
47
|
-
|
|
42
|
+
return left instanceof right;
|
|
48
43
|
}
|
|
49
|
-
return obj;
|
|
50
44
|
}
|
|
51
45
|
function _iterableToArrayLimit(arr, i) {
|
|
52
46
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
@@ -75,45 +69,6 @@ function _iterableToArrayLimit(arr, i) {
|
|
|
75
69
|
function _nonIterableRest() {
|
|
76
70
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
77
71
|
}
|
|
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
|
-
}
|
|
117
72
|
function _slicedToArray(arr, i) {
|
|
118
73
|
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
119
74
|
}
|
|
@@ -220,11 +175,12 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
220
175
|
};
|
|
221
176
|
}
|
|
222
177
|
};
|
|
223
|
-
import path from "path";
|
|
224
178
|
import { installGlobals, writeReadableStreamToWritable, Response as NodeResponse } from "@remix-run/node";
|
|
225
|
-
import {
|
|
226
|
-
import {
|
|
227
|
-
import {
|
|
179
|
+
import { transformNestedRoutes } from "@modern-js/utils/nestedRoutes";
|
|
180
|
+
import { createStaticHandler, ErrorResponse, UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL } from "@modern-js/utils/remix-router";
|
|
181
|
+
import { isPlainObject } from "@modern-js/utils/lodash";
|
|
182
|
+
import { CONTENT_TYPE_DEFERRED, LOADER_ID_PARAM } from "../common/constants";
|
|
183
|
+
import { createDeferredReadableStream } from "./response";
|
|
228
184
|
installGlobals();
|
|
229
185
|
var redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
230
186
|
301,
|
|
@@ -233,81 +189,39 @@ var redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
|
233
189
|
307,
|
|
234
190
|
308
|
|
235
191
|
]);
|
|
236
|
-
function isRedirectResponse(
|
|
237
|
-
return redirectStatusCodes.has(
|
|
192
|
+
function isRedirectResponse(status) {
|
|
193
|
+
return redirectStatusCodes.has(status);
|
|
238
194
|
}
|
|
239
195
|
function isResponse(value) {
|
|
240
196
|
return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
|
|
241
197
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
198
|
+
function sortByUrlPath(entries) {
|
|
199
|
+
entries.sort(function(a, b) {
|
|
200
|
+
var length1 = a.urlPath.length;
|
|
201
|
+
var length2 = b.urlPath.length;
|
|
202
|
+
if (length1 < length2) {
|
|
203
|
+
return 1;
|
|
204
|
+
}
|
|
205
|
+
if (length1 > length2) {
|
|
206
|
+
return -1;
|
|
207
|
+
}
|
|
208
|
+
return 0;
|
|
209
|
+
});
|
|
210
|
+
return entries;
|
|
211
|
+
}
|
|
212
|
+
function convertModernRedirectResponse(headers, basename) {
|
|
213
|
+
var newHeaders = new Headers(headers);
|
|
214
|
+
var redirectUrl = headers.get("Location");
|
|
215
|
+
if (basename !== "/") {
|
|
216
|
+
redirectUrl = redirectUrl.replace(basename, "");
|
|
250
217
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
});
|
|
218
|
+
newHeaders.set("X-Modernjs-Redirect", redirectUrl);
|
|
219
|
+
newHeaders.delete("Location");
|
|
220
|
+
return new NodeResponse(null, {
|
|
221
|
+
status: 204,
|
|
222
|
+
headers: newHeaders
|
|
306
223
|
});
|
|
307
|
-
|
|
308
|
-
return _ref.apply(this, arguments);
|
|
309
|
-
};
|
|
310
|
-
}();
|
|
224
|
+
}
|
|
311
225
|
var createLoaderHeaders = function(requestHeaders) {
|
|
312
226
|
var headers = new Headers();
|
|
313
227
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
@@ -424,106 +338,85 @@ var sendLoaderResponse = function() {
|
|
|
424
338
|
return _ref.apply(this, arguments);
|
|
425
339
|
};
|
|
426
340
|
}();
|
|
427
|
-
var getPathWithoutEntry = function(pathname, entryPath) {
|
|
428
|
-
if (entryPath === "/") {
|
|
429
|
-
return pathname;
|
|
430
|
-
}
|
|
431
|
-
return pathname.replace(entryPath, "");
|
|
432
|
-
};
|
|
433
341
|
var matchEntry = function(pathname, entries) {
|
|
342
|
+
sortByUrlPath(entries);
|
|
434
343
|
return entries.find(function(entry) {
|
|
435
344
|
return pathname.startsWith(entry.urlPath);
|
|
436
345
|
});
|
|
437
346
|
};
|
|
438
347
|
var handleRequest = function() {
|
|
439
348
|
var _ref = _asyncToGenerator(function(param) {
|
|
440
|
-
var context, serverRoutes,
|
|
349
|
+
var context, serverRoutes, routes, method, query, routeId, entry, basename, dataRoutes, staticHandler, res, request, response, deferredData, body, init, headers, error, message;
|
|
441
350
|
return __generator(this, function(_state) {
|
|
442
351
|
switch(_state.label){
|
|
443
352
|
case 0:
|
|
444
|
-
context = param.context, serverRoutes = param.serverRoutes,
|
|
353
|
+
context = param.context, serverRoutes = param.serverRoutes, routes = param.routes;
|
|
445
354
|
method = context.method, query = context.query;
|
|
446
355
|
routeId = query[LOADER_ID_PARAM];
|
|
447
|
-
if (!routeId || method.toLowerCase() !== "get") {
|
|
448
|
-
return [
|
|
449
|
-
2
|
|
450
|
-
];
|
|
451
|
-
}
|
|
452
356
|
entry = matchEntry(context.path, serverRoutes);
|
|
453
|
-
if (!entry) {
|
|
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) {
|
|
357
|
+
if (!routeId || !entry) {
|
|
466
358
|
return [
|
|
467
359
|
2
|
|
468
360
|
];
|
|
469
361
|
}
|
|
470
|
-
|
|
471
|
-
|
|
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
|
-
];
|
|
362
|
+
if (method.toLowerCase() !== "get") {
|
|
363
|
+
throw new Error("CSR data loader request only support http GET method");
|
|
479
364
|
}
|
|
480
|
-
|
|
481
|
-
|
|
365
|
+
basename = entry.urlPath;
|
|
366
|
+
dataRoutes = transformNestedRoutes(routes);
|
|
367
|
+
staticHandler = createStaticHandler(dataRoutes, {
|
|
368
|
+
basename: basename
|
|
482
369
|
});
|
|
483
|
-
|
|
484
|
-
res.statusCode = 403;
|
|
485
|
-
res.end("Route ".concat(routeId, " does not match URL ").concat(context.path));
|
|
486
|
-
return [
|
|
487
|
-
2
|
|
488
|
-
];
|
|
489
|
-
}
|
|
370
|
+
res = context.res;
|
|
490
371
|
request = createLoaderRequest(context);
|
|
491
|
-
_state.label =
|
|
492
|
-
case
|
|
372
|
+
_state.label = 1;
|
|
373
|
+
case 1:
|
|
493
374
|
_state.trys.push([
|
|
494
|
-
|
|
495
|
-
|
|
375
|
+
1,
|
|
376
|
+
3,
|
|
496
377
|
,
|
|
497
|
-
|
|
378
|
+
4
|
|
498
379
|
]);
|
|
499
380
|
return [
|
|
500
381
|
4,
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
params: match.params,
|
|
505
|
-
request: request,
|
|
506
|
-
loadContext: {}
|
|
382
|
+
staticHandler.queryRoute(request, {
|
|
383
|
+
routeId: routeId,
|
|
384
|
+
requestContext: context
|
|
507
385
|
})
|
|
508
386
|
];
|
|
509
|
-
case
|
|
387
|
+
case 2:
|
|
510
388
|
response = _state.sent();
|
|
511
|
-
if (isRedirectResponse(response)) {
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
389
|
+
if (isResponse(response) && isRedirectResponse(response.status)) {
|
|
390
|
+
response = convertModernRedirectResponse(response.headers, basename);
|
|
391
|
+
} else if (isPlainObject(response) && DEFERRED_SYMBOL in response) {
|
|
392
|
+
deferredData = response[DEFERRED_SYMBOL];
|
|
393
|
+
body = createDeferredReadableStream(deferredData, request.signal);
|
|
394
|
+
init = deferredData.init || {};
|
|
395
|
+
if (init.status && isRedirectResponse(init.status)) {
|
|
396
|
+
if (!init.headers) {
|
|
397
|
+
throw new Error("redirect response includes no headers");
|
|
398
|
+
}
|
|
399
|
+
response = convertModernRedirectResponse(new Headers(init.headers), basename);
|
|
400
|
+
} else {
|
|
401
|
+
headers = new Headers(init.headers);
|
|
402
|
+
headers.set("Content-Type", CONTENT_TYPE_DEFERRED);
|
|
403
|
+
init.headers = headers;
|
|
404
|
+
response = new NodeResponse(body, init);
|
|
405
|
+
}
|
|
406
|
+
} else {
|
|
407
|
+
response = isResponse(response) ? response : new NodeResponse(JSON.stringify(response), {
|
|
408
|
+
headers: {
|
|
409
|
+
"Content-Type": "application/json; charset=utf-8"
|
|
410
|
+
}
|
|
518
411
|
});
|
|
519
412
|
}
|
|
520
413
|
return [
|
|
521
414
|
3,
|
|
522
|
-
|
|
415
|
+
4
|
|
523
416
|
];
|
|
524
|
-
case
|
|
417
|
+
case 3:
|
|
525
418
|
error = _state.sent();
|
|
526
|
-
message = String(error);
|
|
419
|
+
message = _instanceof(error, ErrorResponse) ? error.data : String(error);
|
|
527
420
|
response = new NodeResponse(message, {
|
|
528
421
|
status: 500,
|
|
529
422
|
headers: {
|
|
@@ -532,9 +425,9 @@ var handleRequest = function() {
|
|
|
532
425
|
});
|
|
533
426
|
return [
|
|
534
427
|
3,
|
|
535
|
-
|
|
428
|
+
4
|
|
536
429
|
];
|
|
537
|
-
case
|
|
430
|
+
case 4:
|
|
538
431
|
sendLoaderResponse(res, response);
|
|
539
432
|
return [
|
|
540
433
|
2
|
|
@@ -546,33 +439,4 @@ var handleRequest = function() {
|
|
|
546
439
|
return _ref.apply(this, arguments);
|
|
547
440
|
};
|
|
548
441
|
}();
|
|
549
|
-
|
|
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 };
|
|
442
|
+
export { handleRequest, isRedirectResponse, isResponse, matchEntry };
|