@modern-js/plugin-data-loader 2.65.1 → 2.65.2

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.
@@ -25,9 +25,11 @@ __export(runtime_exports, {
25
25
  module.exports = __toCommonJS(runtime_exports);
26
26
  var import_browser = require("@modern-js/runtime-utils/browser");
27
27
  var import_node = require("@modern-js/runtime-utils/node");
28
+ var import_node2 = require("@modern-js/runtime-utils/node");
28
29
  var import_remix_router = require("@modern-js/runtime-utils/remix-router");
29
30
  var import_server = require("@modern-js/runtime-utils/server");
30
31
  var import_time = require("@modern-js/runtime-utils/time");
32
+ var import_request = require("@modern-js/runtime-utils/universal/request");
31
33
  var import_lodash = require("@modern-js/utils/lodash");
32
34
  var import_constants = require("@modern-js/utils/universal/constants");
33
35
  var import_constants2 = require("../common/constants");
@@ -68,63 +70,70 @@ const handleRequest = async ({ request, serverRoutes, routes: routesConfig, cont
68
70
  }
69
71
  const basename = entry.urlPath;
70
72
  const end = (0, import_time.time)();
71
- const { reporter, loaderContext } = context;
72
- const routes = (0, import_browser.transformNestedRoutes)(routesConfig, reporter);
73
- const { queryRoute } = (0, import_remix_router.createStaticHandler)(routes, {
74
- basename
75
- });
76
- const requestContext = (0, import_node.createRequestContext)(loaderContext);
77
- requestContext.set(import_node.reporterCtx, reporter);
78
- let response;
79
- try {
80
- response = await queryRoute(request, {
81
- routeId,
82
- requestContext
73
+ const { reporter, loaderContext, monitors } = context;
74
+ const headersData = (0, import_request.parseHeaders)(request);
75
+ return import_node2.storage.run({
76
+ headers: headersData,
77
+ monitors,
78
+ request
79
+ }, async () => {
80
+ const routes = (0, import_browser.transformNestedRoutes)(routesConfig);
81
+ const { queryRoute } = (0, import_remix_router.createStaticHandler)(routes, {
82
+ basename
83
83
  });
84
- if (isResponse(response) && isRedirectResponse(response.status)) {
85
- response = convertModernRedirectResponse(response.headers, basename);
86
- } else if ((0, import_lodash.isPlainObject)(response) && import_remix_router.UNSAFE_DEFERRED_SYMBOL in response) {
87
- const deferredData = response[import_remix_router.UNSAFE_DEFERRED_SYMBOL];
88
- const body = (0, import_response.createDeferredReadableStream)(deferredData, request.signal);
89
- const init = deferredData.init || {};
90
- if (init.status && isRedirectResponse(init.status)) {
91
- if (!init.headers) {
92
- throw new Error("redirect response includes no headers");
84
+ const requestContext = (0, import_node.createRequestContext)(loaderContext);
85
+ requestContext.set(import_node.reporterCtx, reporter);
86
+ let response;
87
+ try {
88
+ response = await queryRoute(request, {
89
+ routeId,
90
+ requestContext
91
+ });
92
+ if (isResponse(response) && isRedirectResponse(response.status)) {
93
+ response = convertModernRedirectResponse(response.headers, basename);
94
+ } else if ((0, import_lodash.isPlainObject)(response) && import_remix_router.UNSAFE_DEFERRED_SYMBOL in response) {
95
+ const deferredData = response[import_remix_router.UNSAFE_DEFERRED_SYMBOL];
96
+ const body = (0, import_response.createDeferredReadableStream)(deferredData, request.signal);
97
+ const init = deferredData.init || {};
98
+ if (init.status && isRedirectResponse(init.status)) {
99
+ if (!init.headers) {
100
+ throw new Error("redirect response includes no headers");
101
+ }
102
+ response = convertModernRedirectResponse(new Headers(init.headers), basename);
103
+ } else {
104
+ const headers = new Headers(init.headers);
105
+ headers.set("Content-Type", `${import_constants2.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
106
+ init.headers = headers;
107
+ response = new Response(body, init);
93
108
  }
94
- response = convertModernRedirectResponse(new Headers(init.headers), basename);
95
109
  } else {
96
- const headers = new Headers(init.headers);
97
- headers.set("Content-Type", `${import_constants2.CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
98
- init.headers = headers;
99
- response = new Response(body, init);
110
+ response = isResponse(response) ? response : new Response(JSON.stringify(response), {
111
+ headers: {
112
+ "Content-Type": "application/json; charset=utf-8"
113
+ }
114
+ });
115
+ }
116
+ const cost = end();
117
+ response.headers.set("X-Modernjs-Response", "yes");
118
+ onTiming === null || onTiming === void 0 ? void 0 : onTiming(`${import_constants.LOADER_REPORTER_NAME}-navigation`, cost);
119
+ } catch (error) {
120
+ if (isResponse(error)) {
121
+ error.headers.set("X-Modernjs-Catch", "yes");
122
+ response = error;
123
+ } else if ((0, import_remix_router.isRouteErrorResponse)(error)) {
124
+ response = (0, import_errors.errorResponseToJson)(error);
125
+ } else {
126
+ const errorInstance = error instanceof Error || error instanceof DOMException ? error : new Error("Unexpected Server Error");
127
+ response = (0, import_remix_router.json)((0, import_errors.serializeError)(errorInstance), {
128
+ status: 500,
129
+ headers: {
130
+ "X-Modernjs-Error": "yes"
131
+ }
132
+ });
100
133
  }
101
- } else {
102
- response = isResponse(response) ? response : new Response(JSON.stringify(response), {
103
- headers: {
104
- "Content-Type": "application/json; charset=utf-8"
105
- }
106
- });
107
- }
108
- const cost = end();
109
- response.headers.set("X-Modernjs-Response", "yes");
110
- onTiming === null || onTiming === void 0 ? void 0 : onTiming(`${import_constants.LOADER_REPORTER_NAME}-navigation`, cost);
111
- } catch (error) {
112
- if (isResponse(error)) {
113
- error.headers.set("X-Modernjs-Catch", "yes");
114
- response = error;
115
- } else if ((0, import_remix_router.isRouteErrorResponse)(error)) {
116
- response = (0, import_errors.errorResponseToJson)(error);
117
- } else {
118
- const errorInstance = error instanceof Error || error instanceof DOMException ? error : new Error("Unexpected Server Error");
119
- response = (0, import_remix_router.json)((0, import_errors.serializeError)(errorInstance), {
120
- status: 500,
121
- headers: {
122
- "X-Modernjs-Error": "yes"
123
- }
124
- });
125
134
  }
126
- }
127
- return response;
135
+ return response;
136
+ });
128
137
  };
129
138
  // Annotate the CommonJS export names for ESM import in node:
130
139
  0 && (module.exports = {
@@ -4,9 +4,11 @@ import { _ as _type_of } from "@swc/helpers/_/_type_of";
4
4
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
5
5
  import { transformNestedRoutes } from "@modern-js/runtime-utils/browser";
6
6
  import { createRequestContext, reporterCtx } from "@modern-js/runtime-utils/node";
7
+ import { storage } from "@modern-js/runtime-utils/node";
7
8
  import { UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL, createStaticHandler, isRouteErrorResponse, json } from "@modern-js/runtime-utils/remix-router";
8
9
  import { matchEntry } from "@modern-js/runtime-utils/server";
9
10
  import { time } from "@modern-js/runtime-utils/time";
11
+ import { parseHeaders } from "@modern-js/runtime-utils/universal/request";
10
12
  import { isPlainObject } from "@modern-js/utils/lodash";
11
13
  import { LOADER_REPORTER_NAME } from "@modern-js/utils/universal/constants";
12
14
  import { CONTENT_TYPE_DEFERRED, LOADER_ID_PARAM } from "../common/constants";
@@ -40,102 +42,115 @@ function convertModernRedirectResponse(headers, basename) {
40
42
  }
41
43
  var handleRequest = function() {
42
44
  var _ref = _async_to_generator(function(param) {
43
- var request, serverRoutes, routesConfig, context, onTiming, url, routeId, entry, basename, end, reporter, loaderContext, routes, queryRoute, requestContext, response, deferredData, body, init, headers, cost, error, errorInstance;
45
+ var request, serverRoutes, routesConfig, context, onTiming, url, routeId, entry, basename, end, reporter, loaderContext, monitors, headersData;
44
46
  return _ts_generator(this, function(_state) {
45
- switch (_state.label) {
46
- case 0:
47
- request = param.request, serverRoutes = param.serverRoutes, routesConfig = param.routes, context = param.context, onTiming = param.onTiming;
48
- url = new URL(request.url);
49
- routeId = url.searchParams.get(LOADER_ID_PARAM);
50
- entry = matchEntry(url.pathname, serverRoutes);
51
- if (!routeId || !entry) {
52
- return [
53
- 2
54
- ];
55
- }
56
- basename = entry.urlPath;
57
- end = time();
58
- reporter = context.reporter, loaderContext = context.loaderContext;
59
- routes = transformNestedRoutes(routesConfig, reporter);
60
- queryRoute = createStaticHandler(routes, {
61
- basename
62
- }).queryRoute;
63
- requestContext = createRequestContext(loaderContext);
64
- requestContext.set(reporterCtx, reporter);
65
- _state.label = 1;
66
- case 1:
67
- _state.trys.push([
68
- 1,
69
- 3,
70
- ,
71
- 4
72
- ]);
73
- return [
74
- 4,
75
- queryRoute(request, {
76
- routeId,
77
- requestContext
78
- })
79
- ];
80
- case 2:
81
- response = _state.sent();
82
- if (isResponse(response) && isRedirectResponse(response.status)) {
83
- response = convertModernRedirectResponse(response.headers, basename);
84
- } else if (isPlainObject(response) && DEFERRED_SYMBOL in response) {
85
- deferredData = response[DEFERRED_SYMBOL];
86
- body = createDeferredReadableStream(deferredData, request.signal);
87
- init = deferredData.init || {};
88
- if (init.status && isRedirectResponse(init.status)) {
89
- if (!init.headers) {
90
- throw new Error("redirect response includes no headers");
91
- }
92
- response = convertModernRedirectResponse(new Headers(init.headers), basename);
93
- } else {
94
- headers = new Headers(init.headers);
95
- headers.set("Content-Type", "".concat(CONTENT_TYPE_DEFERRED, "; charset=UTF-8"));
96
- init.headers = headers;
97
- response = new Response(body, init);
98
- }
99
- } else {
100
- response = isResponse(response) ? response : new Response(JSON.stringify(response), {
101
- headers: {
102
- "Content-Type": "application/json; charset=utf-8"
103
- }
104
- });
105
- }
106
- cost = end();
107
- response.headers.set("X-Modernjs-Response", "yes");
108
- onTiming === null || onTiming === void 0 ? void 0 : onTiming("".concat(LOADER_REPORTER_NAME, "-navigation"), cost);
109
- return [
110
- 3,
111
- 4
112
- ];
113
- case 3:
114
- error = _state.sent();
115
- if (isResponse(error)) {
116
- error.headers.set("X-Modernjs-Catch", "yes");
117
- response = error;
118
- } else if (isRouteErrorResponse(error)) {
119
- response = errorResponseToJson(error);
120
- } else {
121
- errorInstance = _instanceof(error, Error) || _instanceof(error, DOMException) ? error : new Error("Unexpected Server Error");
122
- response = json(serializeError(errorInstance), {
123
- status: 500,
124
- headers: {
125
- "X-Modernjs-Error": "yes"
126
- }
127
- });
128
- }
129
- return [
130
- 3,
131
- 4
132
- ];
133
- case 4:
134
- return [
135
- 2,
136
- response
137
- ];
47
+ request = param.request, serverRoutes = param.serverRoutes, routesConfig = param.routes, context = param.context, onTiming = param.onTiming;
48
+ url = new URL(request.url);
49
+ routeId = url.searchParams.get(LOADER_ID_PARAM);
50
+ entry = matchEntry(url.pathname, serverRoutes);
51
+ if (!routeId || !entry) {
52
+ return [
53
+ 2
54
+ ];
138
55
  }
56
+ basename = entry.urlPath;
57
+ end = time();
58
+ reporter = context.reporter, loaderContext = context.loaderContext, monitors = context.monitors;
59
+ headersData = parseHeaders(request);
60
+ return [
61
+ 2,
62
+ storage.run({
63
+ headers: headersData,
64
+ monitors,
65
+ request
66
+ }, /* @__PURE__ */ _async_to_generator(function() {
67
+ var routes, queryRoute, requestContext, response, deferredData, body, init, headers, cost, error, errorInstance;
68
+ return _ts_generator(this, function(_state2) {
69
+ switch (_state2.label) {
70
+ case 0:
71
+ routes = transformNestedRoutes(routesConfig);
72
+ queryRoute = createStaticHandler(routes, {
73
+ basename
74
+ }).queryRoute;
75
+ requestContext = createRequestContext(loaderContext);
76
+ requestContext.set(reporterCtx, reporter);
77
+ _state2.label = 1;
78
+ case 1:
79
+ _state2.trys.push([
80
+ 1,
81
+ 3,
82
+ ,
83
+ 4
84
+ ]);
85
+ return [
86
+ 4,
87
+ queryRoute(request, {
88
+ routeId,
89
+ requestContext
90
+ })
91
+ ];
92
+ case 2:
93
+ response = _state2.sent();
94
+ if (isResponse(response) && isRedirectResponse(response.status)) {
95
+ response = convertModernRedirectResponse(response.headers, basename);
96
+ } else if (isPlainObject(response) && DEFERRED_SYMBOL in response) {
97
+ deferredData = response[DEFERRED_SYMBOL];
98
+ body = createDeferredReadableStream(deferredData, request.signal);
99
+ init = deferredData.init || {};
100
+ if (init.status && isRedirectResponse(init.status)) {
101
+ if (!init.headers) {
102
+ throw new Error("redirect response includes no headers");
103
+ }
104
+ response = convertModernRedirectResponse(new Headers(init.headers), basename);
105
+ } else {
106
+ headers = new Headers(init.headers);
107
+ headers.set("Content-Type", "".concat(CONTENT_TYPE_DEFERRED, "; charset=UTF-8"));
108
+ init.headers = headers;
109
+ response = new Response(body, init);
110
+ }
111
+ } else {
112
+ response = isResponse(response) ? response : new Response(JSON.stringify(response), {
113
+ headers: {
114
+ "Content-Type": "application/json; charset=utf-8"
115
+ }
116
+ });
117
+ }
118
+ cost = end();
119
+ response.headers.set("X-Modernjs-Response", "yes");
120
+ onTiming === null || onTiming === void 0 ? void 0 : onTiming("".concat(LOADER_REPORTER_NAME, "-navigation"), cost);
121
+ return [
122
+ 3,
123
+ 4
124
+ ];
125
+ case 3:
126
+ error = _state2.sent();
127
+ if (isResponse(error)) {
128
+ error.headers.set("X-Modernjs-Catch", "yes");
129
+ response = error;
130
+ } else if (isRouteErrorResponse(error)) {
131
+ response = errorResponseToJson(error);
132
+ } else {
133
+ errorInstance = _instanceof(error, Error) || _instanceof(error, DOMException) ? error : new Error("Unexpected Server Error");
134
+ response = json(serializeError(errorInstance), {
135
+ status: 500,
136
+ headers: {
137
+ "X-Modernjs-Error": "yes"
138
+ }
139
+ });
140
+ }
141
+ return [
142
+ 3,
143
+ 4
144
+ ];
145
+ case 4:
146
+ return [
147
+ 2,
148
+ response
149
+ ];
150
+ }
151
+ });
152
+ }))
153
+ ];
139
154
  });
140
155
  });
141
156
  return function handleRequest2(_) {
@@ -1,8 +1,10 @@
1
1
  import { transformNestedRoutes } from "@modern-js/runtime-utils/browser";
2
2
  import { createRequestContext, reporterCtx } from "@modern-js/runtime-utils/node";
3
+ import { storage } from "@modern-js/runtime-utils/node";
3
4
  import { UNSAFE_DEFERRED_SYMBOL as DEFERRED_SYMBOL, createStaticHandler, isRouteErrorResponse, json } from "@modern-js/runtime-utils/remix-router";
4
5
  import { matchEntry } from "@modern-js/runtime-utils/server";
5
6
  import { time } from "@modern-js/runtime-utils/time";
7
+ import { parseHeaders } from "@modern-js/runtime-utils/universal/request";
6
8
  import { isPlainObject } from "@modern-js/utils/lodash";
7
9
  import { LOADER_REPORTER_NAME } from "@modern-js/utils/universal/constants";
8
10
  import { CONTENT_TYPE_DEFERRED, LOADER_ID_PARAM } from "../common/constants";
@@ -43,63 +45,70 @@ const handleRequest = async ({ request, serverRoutes, routes: routesConfig, cont
43
45
  }
44
46
  const basename = entry.urlPath;
45
47
  const end = time();
46
- const { reporter, loaderContext } = context;
47
- const routes = transformNestedRoutes(routesConfig, reporter);
48
- const { queryRoute } = createStaticHandler(routes, {
49
- basename
50
- });
51
- const requestContext = createRequestContext(loaderContext);
52
- requestContext.set(reporterCtx, reporter);
53
- let response;
54
- try {
55
- response = await queryRoute(request, {
56
- routeId,
57
- requestContext
48
+ const { reporter, loaderContext, monitors } = context;
49
+ const headersData = parseHeaders(request);
50
+ return storage.run({
51
+ headers: headersData,
52
+ monitors,
53
+ request
54
+ }, async () => {
55
+ const routes = transformNestedRoutes(routesConfig);
56
+ const { queryRoute } = createStaticHandler(routes, {
57
+ basename
58
58
  });
59
- if (isResponse(response) && isRedirectResponse(response.status)) {
60
- response = convertModernRedirectResponse(response.headers, basename);
61
- } else if (isPlainObject(response) && DEFERRED_SYMBOL in response) {
62
- const deferredData = response[DEFERRED_SYMBOL];
63
- const body = createDeferredReadableStream(deferredData, request.signal);
64
- const init = deferredData.init || {};
65
- if (init.status && isRedirectResponse(init.status)) {
66
- if (!init.headers) {
67
- throw new Error("redirect response includes no headers");
59
+ const requestContext = createRequestContext(loaderContext);
60
+ requestContext.set(reporterCtx, reporter);
61
+ let response;
62
+ try {
63
+ response = await queryRoute(request, {
64
+ routeId,
65
+ requestContext
66
+ });
67
+ if (isResponse(response) && isRedirectResponse(response.status)) {
68
+ response = convertModernRedirectResponse(response.headers, basename);
69
+ } else if (isPlainObject(response) && DEFERRED_SYMBOL in response) {
70
+ const deferredData = response[DEFERRED_SYMBOL];
71
+ const body = createDeferredReadableStream(deferredData, request.signal);
72
+ const init = deferredData.init || {};
73
+ if (init.status && isRedirectResponse(init.status)) {
74
+ if (!init.headers) {
75
+ throw new Error("redirect response includes no headers");
76
+ }
77
+ response = convertModernRedirectResponse(new Headers(init.headers), basename);
78
+ } else {
79
+ const headers = new Headers(init.headers);
80
+ headers.set("Content-Type", `${CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
81
+ init.headers = headers;
82
+ response = new Response(body, init);
68
83
  }
69
- response = convertModernRedirectResponse(new Headers(init.headers), basename);
70
84
  } else {
71
- const headers = new Headers(init.headers);
72
- headers.set("Content-Type", `${CONTENT_TYPE_DEFERRED}; charset=UTF-8`);
73
- init.headers = headers;
74
- response = new Response(body, init);
85
+ response = isResponse(response) ? response : new Response(JSON.stringify(response), {
86
+ headers: {
87
+ "Content-Type": "application/json; charset=utf-8"
88
+ }
89
+ });
90
+ }
91
+ const cost = end();
92
+ response.headers.set("X-Modernjs-Response", "yes");
93
+ onTiming === null || onTiming === void 0 ? void 0 : onTiming(`${LOADER_REPORTER_NAME}-navigation`, cost);
94
+ } catch (error) {
95
+ if (isResponse(error)) {
96
+ error.headers.set("X-Modernjs-Catch", "yes");
97
+ response = error;
98
+ } else if (isRouteErrorResponse(error)) {
99
+ response = errorResponseToJson(error);
100
+ } else {
101
+ const errorInstance = error instanceof Error || error instanceof DOMException ? error : new Error("Unexpected Server Error");
102
+ response = json(serializeError(errorInstance), {
103
+ status: 500,
104
+ headers: {
105
+ "X-Modernjs-Error": "yes"
106
+ }
107
+ });
75
108
  }
76
- } else {
77
- response = isResponse(response) ? response : new Response(JSON.stringify(response), {
78
- headers: {
79
- "Content-Type": "application/json; charset=utf-8"
80
- }
81
- });
82
- }
83
- const cost = end();
84
- response.headers.set("X-Modernjs-Response", "yes");
85
- onTiming === null || onTiming === void 0 ? void 0 : onTiming(`${LOADER_REPORTER_NAME}-navigation`, cost);
86
- } catch (error) {
87
- if (isResponse(error)) {
88
- error.headers.set("X-Modernjs-Catch", "yes");
89
- response = error;
90
- } else if (isRouteErrorResponse(error)) {
91
- response = errorResponseToJson(error);
92
- } else {
93
- const errorInstance = error instanceof Error || error instanceof DOMException ? error : new Error("Unexpected Server Error");
94
- response = json(serializeError(errorInstance), {
95
- status: 500,
96
- headers: {
97
- "X-Modernjs-Error": "yes"
98
- }
99
- });
100
109
  }
101
- }
102
- return response;
110
+ return response;
111
+ });
103
112
  };
104
113
  export {
105
114
  handleRequest,
@@ -1,14 +1,4 @@
1
- import type { NestedRoute, Reporter, ServerRoute } from '@modern-js/types';
1
+ import type { ServerLoaderBundle } from '@modern-js/server-core';
2
2
  export declare function isRedirectResponse(status: number): boolean;
3
3
  export declare function isResponse(value: any): value is Response;
4
- export declare const handleRequest: ({ request, serverRoutes, routes: routesConfig, context, onTiming, }: {
5
- request: Request;
6
- serverRoutes: ServerRoute[];
7
- routes: NestedRoute[];
8
- onError?: ((error: unknown) => void) | undefined;
9
- onTiming?: ((name: string, dur: number) => void) | undefined;
10
- context: {
11
- loaderContext?: Map<string, unknown>;
12
- reporter?: Reporter;
13
- };
14
- }) => Promise<Response | void>;
4
+ export declare const handleRequest: ServerLoaderBundle['handleRequest'];
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.65.1",
18
+ "version": "2.65.2",
19
19
  "engines": {
20
20
  "node": ">=16.2.0"
21
21
  },
@@ -49,8 +49,8 @@
49
49
  "@babel/core": "^7.26.0",
50
50
  "@swc/helpers": "0.5.13",
51
51
  "path-to-regexp": "^6.2.0",
52
- "@modern-js/runtime-utils": "2.65.1",
53
- "@modern-js/utils": "2.65.1"
52
+ "@modern-js/runtime-utils": "2.65.2",
53
+ "@modern-js/utils": "2.65.2"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/babel__core": "^7.20.5",
@@ -66,11 +66,11 @@
66
66
  "ts-jest": "^29.1.0",
67
67
  "typescript": "^5",
68
68
  "webpack": "^5.98.0",
69
- "@modern-js/core": "2.65.1",
70
- "@modern-js/server-core": "2.65.1",
71
- "@modern-js/types": "2.65.1",
72
- "@scripts/build": "2.65.1",
73
- "@scripts/jest-config": "2.65.1"
69
+ "@modern-js/core": "2.65.2",
70
+ "@modern-js/server-core": "2.65.2",
71
+ "@modern-js/types": "2.65.2",
72
+ "@scripts/jest-config": "2.65.2",
73
+ "@scripts/build": "2.65.2"
74
74
  },
75
75
  "peerDependencies": {
76
76
  "react": ">=17.0.0"