@modern-js/plugin-data-loader 2.4.0 → 2.5.0-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/{js/node → cjs}/cli/create-request.js +17 -26
- package/dist/cjs/cli/data.js +162 -0
- package/dist/{js/node → cjs}/cli/generate-client.js +1 -1
- package/dist/{js/node → cjs}/cli/loader.js +12 -34
- package/dist/{js/node → cjs}/common/constants.js +0 -0
- package/dist/cjs/runtime/index.js +159 -0
- package/dist/cjs/runtime/response.js +102 -0
- package/dist/cjs/server/index.js +64 -0
- package/dist/{js/treeshaking → esm}/cli/create-request.js +41 -2
- package/dist/esm/cli/data.js +820 -0
- package/dist/{js/treeshaking → esm}/cli/generate-client.js +1 -1
- package/dist/{js/treeshaking → esm}/cli/loader.js +2 -2
- package/dist/{js/treeshaking → esm}/common/constants.js +0 -0
- package/dist/{js/treeshaking/server → esm/runtime}/index.js +69 -225
- package/dist/esm/runtime/response.js +284 -0
- package/dist/esm/server/index.js +176 -0
- package/dist/{js/modern → esm-node}/cli/create-request.js +17 -26
- package/dist/esm-node/cli/data.js +142 -0
- package/dist/{js/modern → esm-node}/cli/generate-client.js +1 -1
- package/dist/esm-node/cli/loader.js +18 -0
- package/dist/{js/modern → esm-node}/common/constants.js +0 -0
- package/dist/esm-node/runtime/index.js +143 -0
- package/dist/esm-node/runtime/response.js +79 -0
- package/dist/esm-node/server/index.js +40 -0
- package/dist/types/cli/create-request.d.ts +2 -1
- package/dist/types/cli/data.d.ts +6 -0
- 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 +24 -14
- package/dist/js/modern/cli/loader.js +0 -40
- package/dist/js/modern/server/index.js +0 -237
- package/dist/js/node/server/index.js +0 -261
|
@@ -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, "./create-request").replace("/
|
|
8
|
+
var requestCreatorPath = path.join(__dirname, "./create-request").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) {
|
|
@@ -128,10 +128,10 @@ function loader(source) {
|
|
|
128
128
|
}
|
|
129
129
|
function _loader() {
|
|
130
130
|
_loader = _asyncToGenerator(function(source) {
|
|
131
|
-
var
|
|
131
|
+
var _this__compiler, target, options, code;
|
|
132
132
|
return __generator(this, function(_state) {
|
|
133
133
|
this.cacheable();
|
|
134
|
-
target = (
|
|
134
|
+
target = (_this__compiler = this._compiler) === null || _this__compiler === void 0 ? void 0 : _this__compiler.options.target;
|
|
135
135
|
if (target === "node") {
|
|
136
136
|
return [
|
|
137
137
|
2,
|
|
File without changes
|
|
@@ -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,11 @@ 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 {
|
|
179
|
+
import { transformNestedRoutes } from "@modern-js/utils";
|
|
180
|
+
import { createStaticHandler, ErrorResponse, UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL } from "@modern-js/utils/remix-router";
|
|
227
181
|
import { LOADER_ID_PARAM } from "../common/constants";
|
|
182
|
+
import { createDeferredReadableStream } from "./response";
|
|
228
183
|
installGlobals();
|
|
229
184
|
var redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
230
185
|
301,
|
|
@@ -233,87 +188,27 @@ var redirectStatusCodes = /* @__PURE__ */ new Set([
|
|
|
233
188
|
307,
|
|
234
189
|
308
|
|
235
190
|
]);
|
|
236
|
-
function isRedirectResponse(
|
|
237
|
-
return redirectStatusCodes.has(
|
|
191
|
+
function isRedirectResponse(status) {
|
|
192
|
+
return redirectStatusCodes.has(status);
|
|
238
193
|
}
|
|
239
194
|
function isResponse(value) {
|
|
240
195
|
return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
|
|
241
196
|
}
|
|
242
|
-
|
|
243
|
-
var
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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
|
-
});
|
|
197
|
+
function convertModernRedirectResponse(headers) {
|
|
198
|
+
var newHeaders = new Headers(headers);
|
|
199
|
+
newHeaders.set("X-Modernjs-Redirect", headers.get("Location"));
|
|
200
|
+
newHeaders.delete("Location");
|
|
201
|
+
return new NodeResponse(null, {
|
|
202
|
+
status: 204,
|
|
203
|
+
headers: newHeaders
|
|
306
204
|
});
|
|
307
|
-
|
|
308
|
-
return _ref.apply(this, arguments);
|
|
309
|
-
};
|
|
310
|
-
}();
|
|
205
|
+
}
|
|
311
206
|
var createLoaderHeaders = function(requestHeaders) {
|
|
312
207
|
var headers = new Headers();
|
|
313
208
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
314
209
|
try {
|
|
315
210
|
for(var _iterator = Object.entries(requestHeaders)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
316
|
-
var
|
|
211
|
+
var _step_value = _slicedToArray(_step.value, 2), key = _step_value[0], values = _step_value[1];
|
|
317
212
|
if (values) {
|
|
318
213
|
if (Array.isArray(values)) {
|
|
319
214
|
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
@@ -370,7 +265,7 @@ var createLoaderRequest = function(context) {
|
|
|
370
265
|
};
|
|
371
266
|
var sendLoaderResponse = function() {
|
|
372
267
|
var _ref = _asyncToGenerator(function(res, nodeResponse) {
|
|
373
|
-
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step,
|
|
268
|
+
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, key, value;
|
|
374
269
|
return __generator(this, function(_state) {
|
|
375
270
|
switch(_state.label){
|
|
376
271
|
case 0:
|
|
@@ -379,7 +274,7 @@ var sendLoaderResponse = function() {
|
|
|
379
274
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
380
275
|
try {
|
|
381
276
|
for(_iterator = nodeResponse.headers.entries()[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
382
|
-
|
|
277
|
+
_step_value = _slicedToArray(_step.value, 2), key = _step_value[0], value = _step_value[1];
|
|
383
278
|
res.setHeader(key, value);
|
|
384
279
|
}
|
|
385
280
|
} catch (err) {
|
|
@@ -424,12 +319,6 @@ var sendLoaderResponse = function() {
|
|
|
424
319
|
return _ref.apply(this, arguments);
|
|
425
320
|
};
|
|
426
321
|
}();
|
|
427
|
-
var getPathWithoutEntry = function(pathname, entryPath) {
|
|
428
|
-
if (entryPath === "/") {
|
|
429
|
-
return pathname;
|
|
430
|
-
}
|
|
431
|
-
return pathname.replace(entryPath, "");
|
|
432
|
-
};
|
|
433
322
|
var matchEntry = function(pathname, entries) {
|
|
434
323
|
return entries.find(function(entry) {
|
|
435
324
|
return pathname.startsWith(entry.urlPath);
|
|
@@ -437,93 +326,77 @@ var matchEntry = function(pathname, entries) {
|
|
|
437
326
|
};
|
|
438
327
|
var handleRequest = function() {
|
|
439
328
|
var _ref = _asyncToGenerator(function(param) {
|
|
440
|
-
var context, serverRoutes,
|
|
329
|
+
var context, serverRoutes, routes, method, query, routeId, entry, dataRoutes, staticHandler, res, request, response, deferredData, body, init, headers, error, message;
|
|
441
330
|
return __generator(this, function(_state) {
|
|
442
331
|
switch(_state.label){
|
|
443
332
|
case 0:
|
|
444
|
-
context = param.context, serverRoutes = param.serverRoutes,
|
|
333
|
+
context = param.context, serverRoutes = param.serverRoutes, routes = param.routes;
|
|
445
334
|
method = context.method, query = context.query;
|
|
446
335
|
routeId = query[LOADER_ID_PARAM];
|
|
447
|
-
if (!routeId
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
336
|
+
if (!routeId) {
|
|
337
|
+
throw new Error("Missing parameter: ".concat(LOADER_ID_PARAM));
|
|
338
|
+
}
|
|
339
|
+
if (method.toLowerCase() !== "get") {
|
|
340
|
+
throw new Error("Only support httpp GET method");
|
|
451
341
|
}
|
|
452
342
|
entry = matchEntry(context.path, serverRoutes);
|
|
453
343
|
if (!entry) {
|
|
454
|
-
|
|
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
|
-
];
|
|
344
|
+
throw new Error("Route is not matched");
|
|
469
345
|
}
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
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;
|
|
346
|
+
dataRoutes = transformNestedRoutes(routes);
|
|
347
|
+
staticHandler = createStaticHandler(dataRoutes, {
|
|
348
|
+
basename: entry.urlPath
|
|
482
349
|
});
|
|
483
|
-
|
|
484
|
-
res.statusCode = 403;
|
|
485
|
-
res.end("Route ".concat(routeId, " does not match URL ").concat(context.path));
|
|
486
|
-
return [
|
|
487
|
-
2
|
|
488
|
-
];
|
|
489
|
-
}
|
|
350
|
+
res = context.res;
|
|
490
351
|
request = createLoaderRequest(context);
|
|
491
|
-
_state.label =
|
|
492
|
-
case
|
|
352
|
+
_state.label = 1;
|
|
353
|
+
case 1:
|
|
493
354
|
_state.trys.push([
|
|
494
|
-
|
|
495
|
-
|
|
355
|
+
1,
|
|
356
|
+
3,
|
|
496
357
|
,
|
|
497
|
-
|
|
358
|
+
4
|
|
498
359
|
]);
|
|
499
360
|
return [
|
|
500
361
|
4,
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
params: match.params,
|
|
505
|
-
request: request,
|
|
506
|
-
loadContext: {}
|
|
362
|
+
staticHandler.queryRoute(request, {
|
|
363
|
+
routeId: routeId,
|
|
364
|
+
requestContext: context
|
|
507
365
|
})
|
|
508
366
|
];
|
|
509
|
-
case
|
|
367
|
+
case 2:
|
|
510
368
|
response = _state.sent();
|
|
511
|
-
if (isRedirectResponse(response)) {
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
369
|
+
if (isResponse(response) && isRedirectResponse(response.status)) {
|
|
370
|
+
response = convertModernRedirectResponse(response.headers);
|
|
371
|
+
} else if (DEFERRED_SYMBOL in response) {
|
|
372
|
+
deferredData = response[DEFERRED_SYMBOL];
|
|
373
|
+
body = createDeferredReadableStream(deferredData, request.signal);
|
|
374
|
+
init = deferredData.init || {};
|
|
375
|
+
if (init.status && isRedirectResponse(init.status)) {
|
|
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
|
+
}
|
|
518
391
|
});
|
|
519
392
|
}
|
|
520
393
|
return [
|
|
521
394
|
3,
|
|
522
|
-
|
|
395
|
+
4
|
|
523
396
|
];
|
|
524
|
-
case
|
|
397
|
+
case 3:
|
|
525
398
|
error = _state.sent();
|
|
526
|
-
message = String(error);
|
|
399
|
+
message = _instanceof(error, ErrorResponse) ? error.data : String(error);
|
|
527
400
|
response = new NodeResponse(message, {
|
|
528
401
|
status: 500,
|
|
529
402
|
headers: {
|
|
@@ -532,9 +405,9 @@ var handleRequest = function() {
|
|
|
532
405
|
});
|
|
533
406
|
return [
|
|
534
407
|
3,
|
|
535
|
-
|
|
408
|
+
4
|
|
536
409
|
];
|
|
537
|
-
case
|
|
410
|
+
case 4:
|
|
538
411
|
sendLoaderResponse(res, response);
|
|
539
412
|
return [
|
|
540
413
|
2
|
|
@@ -546,33 +419,4 @@ var handleRequest = function() {
|
|
|
546
419
|
return _ref.apply(this, arguments);
|
|
547
420
|
};
|
|
548
421
|
}();
|
|
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 };
|
|
422
|
+
export { handleRequest, isRedirectResponse, isResponse, matchEntry };
|