@modern-js/plugin-data-loader 2.35.1 → 2.36.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.
@@ -1,36 +1,32 @@
1
1
  import path from "path";
2
- export const generateClient = ({ mapFile, loaderId }) => {
3
- delete require.cache[mapFile];
4
- const loadersMap = require(mapFile);
2
+ const generateClient = ({ inline, action, routeId }) => {
5
3
  let requestCode = ``;
6
- let exportsCode = ``;
7
4
  const requestCreatorPath = path.join(__dirname, "./createRequest").replace("/cjs/cli/", "/esm/cli/").replace(/\\/g, "/");
8
5
  const importCode = `
9
- import { createRequest } from '${requestCreatorPath}';
6
+ import { createRequest, createActionRequest } from '${requestCreatorPath}';
10
7
  `;
11
- if (!loaderId) {
12
- requestCode = Object.keys(loadersMap).map((loaderId2) => {
13
- const { routeId } = loadersMap[loaderId2];
14
- return `
15
- const ${loaderId2} = createRequest('${routeId}');
8
+ if (inline) {
9
+ if (action) {
10
+ requestCode = `
11
+ export const loader = createRequest('${routeId}');
12
+ export const action = createActionRequest('${routeId}')
13
+ `;
14
+ } else {
15
+ requestCode = `
16
+ export const loader = createRequest('${routeId}');
16
17
  `;
17
- }).join("");
18
- exportsCode = `export {`;
19
- for (const loader of Object.keys(loadersMap)) {
20
- exportsCode += `${loader},`;
21
18
  }
22
- exportsCode += "}";
23
19
  } else {
24
- const loader = loadersMap[loaderId];
25
20
  requestCode = `
26
- const loader = createRequest('${loader.routeId}');
27
- `;
28
- exportsCode = `export default loader;`;
21
+ export default createRequest('${routeId}');
22
+ `;
29
23
  }
30
24
  const generatedCode = `
31
25
  ${importCode}
32
26
  ${requestCode}
33
- ${exportsCode}
34
27
  `;
35
28
  return generatedCode;
36
29
  };
30
+ export {
31
+ generateClient
32
+ };
@@ -1,7 +1,7 @@
1
1
  import { promisify } from "util";
2
2
  import { logger } from "@modern-js/utils/logger";
3
3
  import { generateClient } from "./generateClient";
4
- export default async function loader(source) {
4
+ async function loader(source) {
5
5
  var _this__compiler;
6
6
  this.cacheable();
7
7
  const target = (_this__compiler = this._compiler) === null || _this__compiler === void 0 ? void 0 : _this__compiler.options.target;
@@ -12,17 +12,14 @@ export default async function loader(source) {
12
12
  return source;
13
13
  }
14
14
  const { resourceQuery } = this;
15
- const options = resourceQuery.slice(1).split("&").map((item) => {
16
- return item.split("=");
17
- }).reduce((pre, cur) => {
18
- const [key, value] = cur;
19
- if (!key || !value) {
20
- return pre;
15
+ const options = resourceQuery.slice(1).split("&").reduce((pre, cur) => {
16
+ const [key, value] = cur.split("=");
17
+ if (key && value) {
18
+ pre[key] = value === "true" ? true : value === "false" ? false : value;
21
19
  }
22
- pre[key] = value;
23
20
  return pre;
24
21
  }, {});
25
- if (!options.mapFile) {
22
+ if (!options.loaderId) {
26
23
  return source;
27
24
  }
28
25
  if (options.clientData) {
@@ -38,8 +35,12 @@ export default async function loader(source) {
38
35
  }
39
36
  }
40
37
  const code = generateClient({
41
- mapFile: options.mapFile,
42
- loaderId: options.loaderId
38
+ inline: options.inline,
39
+ action: options.action,
40
+ routeId: options.routeId
43
41
  });
44
42
  return code;
45
43
  }
44
+ export {
45
+ loader as default
46
+ };
@@ -1,3 +1,8 @@
1
- export const LOADER_ID_PARAM = "__loader";
2
- export const DIRECT_PARAM = "__ssrDirect";
3
- export const CONTENT_TYPE_DEFERRED = "text/modernjs-deferred";
1
+ const LOADER_ID_PARAM = "__loader";
2
+ const DIRECT_PARAM = "__ssrDirect";
3
+ const CONTENT_TYPE_DEFERRED = "text/modernjs-deferred";
4
+ export {
5
+ CONTENT_TYPE_DEFERRED,
6
+ DIRECT_PARAM,
7
+ LOADER_ID_PARAM
8
+ };
@@ -15,10 +15,10 @@ const redirectStatusCodes = /* @__PURE__ */ new Set([
15
15
  307,
16
16
  308
17
17
  ]);
18
- export function isRedirectResponse(status) {
18
+ function isRedirectResponse(status) {
19
19
  return redirectStatusCodes.has(status);
20
20
  }
21
- export function isResponse(value) {
21
+ function isResponse(value) {
22
22
  return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
23
23
  }
24
24
  function convertModernRedirectResponse(headers, basename) {
@@ -49,7 +49,7 @@ const createLoaderHeaders = (requestHeaders) => {
49
49
  }
50
50
  return headers;
51
51
  };
52
- const createLoaderRequest = (context) => {
52
+ const createRequest = (context) => {
53
53
  const origin = `${context.protocol}://${context.host}`;
54
54
  const url = new URL(context.url, origin);
55
55
  const controller = new AbortController();
@@ -58,7 +58,14 @@ const createLoaderRequest = (context) => {
58
58
  headers: createLoaderHeaders(context.headers),
59
59
  signal: controller.signal
60
60
  };
61
- return new Request(url.href, init);
61
+ if (![
62
+ "GET",
63
+ "HEAD"
64
+ ].includes(context.method.toUpperCase())) {
65
+ init.body = context.req;
66
+ }
67
+ const request = new Request(url.href, init);
68
+ return request;
62
69
  };
63
70
  const sendLoaderResponse = async (res, nodeResponse) => {
64
71
  res.statusMessage = nodeResponse.statusText;
@@ -72,16 +79,13 @@ const sendLoaderResponse = async (res, nodeResponse) => {
72
79
  res.end();
73
80
  }
74
81
  };
75
- export const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
76
- const { method, query } = context;
82
+ const handleRequest = async ({ context, serverRoutes, routes: routesConfig }) => {
83
+ const { query } = context;
77
84
  const routeId = query[LOADER_ID_PARAM];
78
85
  const entry = matchEntry(context.path, serverRoutes);
79
86
  if (!routeId || !entry) {
80
87
  return;
81
88
  }
82
- if (method.toLowerCase() !== "get") {
83
- throw new Error("CSR data loader request only support http GET method");
84
- }
85
89
  const basename = entry.urlPath;
86
90
  const end = time();
87
91
  const { res, logger, reporter } = context;
@@ -89,7 +93,7 @@ export const handleRequest = async ({ context, serverRoutes, routes: routesConfi
89
93
  const { queryRoute } = createStaticHandler(routes, {
90
94
  basename
91
95
  });
92
- const request = createLoaderRequest(context);
96
+ const request = createRequest(context);
93
97
  const requestContext = createRequestContext();
94
98
  requestContext.set(reporterCtx, reporter);
95
99
  let response;
@@ -124,7 +128,11 @@ export const handleRequest = async ({ context, serverRoutes, routes: routesConfi
124
128
  }
125
129
  } catch (error) {
126
130
  const message = error instanceof ErrorResponse ? error.data : String(error);
127
- logger === null || logger === void 0 ? void 0 : logger.error(message);
131
+ if (error instanceof Error) {
132
+ logger === null || logger === void 0 ? void 0 : logger.error(error);
133
+ } else {
134
+ logger === null || logger === void 0 ? void 0 : logger.error(message);
135
+ }
128
136
  response = new NodeResponse(message, {
129
137
  status: 500,
130
138
  headers: {
@@ -136,3 +144,8 @@ export const handleRequest = async ({ context, serverRoutes, routes: routesConfi
136
144
  reporter.reportTiming(`${LOADER_REPORTER_NAME}-navigation`, cost);
137
145
  await sendLoaderResponse(res, response);
138
146
  };
147
+ export {
148
+ handleRequest,
149
+ isRedirectResponse,
150
+ isResponse
151
+ };
@@ -4,7 +4,7 @@ function isTrackedPromise(value) {
4
4
  return value != null && typeof value.then === "function" && value._tracked === true;
5
5
  }
6
6
  const DEFERRED_VALUE_PLACEHOLDER_PREFIX = "__deferred_promise:";
7
- export function createDeferredReadableStream(deferredData, signal) {
7
+ function createDeferredReadableStream(deferredData, signal) {
8
8
  const encoder = new TextEncoder();
9
9
  const stream = new ReadableStream({
10
10
  async start(controller) {
@@ -58,3 +58,6 @@ function enqueueTrackedPromise(controller, encoder, settledKey, promise) {
58
58
  `));
59
59
  }
60
60
  }
61
+ export {
62
+ createDeferredReadableStream
63
+ };
@@ -2,7 +2,7 @@ import path from "path";
2
2
  import fs from "fs";
3
3
  import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
4
4
  import { matchEntry } from "@modern-js/runtime-utils/node";
5
- export default () => ({
5
+ var server_default = () => ({
6
6
  name: "@modern-js/plugin-data-loader",
7
7
  setup: () => ({
8
8
  prepareLoaderHandler({ serverRoutes, distDir }) {
@@ -28,3 +28,6 @@ export default () => ({
28
28
  }
29
29
  })
30
30
  });
31
+ export {
32
+ server_default as default
33
+ };
@@ -14,4 +14,11 @@ export declare const createRequest: (routeId: string, method?: string) => ({
14
14
  }: {
15
15
  params: Record<string, string>;
16
16
  request: Request;
17
- }) => Promise<DeferredData | Response>;
17
+ }) => Promise<DeferredData | Response>;
18
+ export declare const createActionRequest: (routeId: string) => ({
19
+ params,
20
+ request
21
+ }: {
22
+ params: Record<string, string>;
23
+ request: Request;
24
+ }) => Promise<Response>;
@@ -1,7 +1,9 @@
1
1
  export declare const generateClient: ({
2
- mapFile,
3
- loaderId
2
+ inline,
3
+ action,
4
+ routeId
4
5
  }: {
5
- mapFile: string;
6
- loaderId?: string | undefined;
6
+ inline: boolean;
7
+ action?: boolean | undefined;
8
+ routeId: string;
7
9
  }) => string;
@@ -2,8 +2,11 @@
2
2
  import type { LoaderContext } from 'webpack';
3
3
  type Context = {
4
4
  mapFile: string;
5
- loaderId?: string;
5
+ loaderId: string;
6
6
  clientData?: boolean;
7
+ action: boolean;
8
+ inline: boolean;
9
+ routeId: string;
7
10
  };
8
11
  export default function loader(this: LoaderContext<Context>, source: string): Promise<string | Buffer | undefined>;
9
12
  export {};
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.35.1",
18
+ "version": "2.36.0",
19
19
  "engines": {
20
20
  "node": ">=14.17.6"
21
21
  },
@@ -58,8 +58,8 @@
58
58
  "@remix-run/node": "^1.12.0",
59
59
  "path-to-regexp": "^6.2.0",
60
60
  "@swc/helpers": "0.5.1",
61
- "@modern-js/utils": "2.35.1",
62
- "@modern-js/runtime-utils": "2.35.1"
61
+ "@modern-js/utils": "2.36.0",
62
+ "@modern-js/runtime-utils": "2.36.0"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@types/babel__core": "^7.20.0",
@@ -75,11 +75,11 @@
75
75
  "webpack": "^5.88.1",
76
76
  "react": "^18",
77
77
  "react-dom": "^18",
78
- "@modern-js/types": "2.35.1",
79
- "@modern-js/core": "2.35.1",
80
- "@modern-js/server-core": "2.35.1",
81
- "@scripts/build": "2.35.1",
82
- "@scripts/jest-config": "2.35.1"
78
+ "@modern-js/server-core": "2.36.0",
79
+ "@scripts/build": "2.36.0",
80
+ "@modern-js/types": "2.36.0",
81
+ "@modern-js/core": "2.36.0",
82
+ "@scripts/jest-config": "2.36.0"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "react": ">=17.0.0"