@modern-js/plugin-data-loader 2.0.0-beta.2 → 2.0.0-beta.4

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,9 +1,26 @@
1
- // eslint-disable-next-line eslint-comments/disable-enable-pair
2
- /* eslint-disable node/prefer-global/url */
3
- // eslint-disable-next-line eslint-comments/disable-enable-pair
4
- /* eslint-disable node/no-unsupported-features/node-builtins */
5
- import { compile } from 'path-to-regexp';
6
- export const getRequestUrl = ({
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import { compile } from "path-to-regexp";
22
+ import { redirect } from "react-router-dom";
23
+ const getRequestUrl = ({
7
24
  params,
8
25
  request,
9
26
  routeId
@@ -14,28 +31,34 @@ export const getRequestUrl = ({
14
31
  });
15
32
  const newPathName = toPath(params);
16
33
  url.pathname = newPathName;
17
- url.searchParams.append('_loader', routeId);
34
+ url.searchParams.append("_loader", routeId);
18
35
  return url;
19
36
  };
20
- export const createRequest = (routeId, method = 'get') => {
21
- return async ({
37
+ const handleRedirectResponse = (res) => {
38
+ const { headers } = res;
39
+ const location = headers.get("X-Modernjs-Redirect");
40
+ if (location) {
41
+ return redirect(location);
42
+ }
43
+ return res;
44
+ };
45
+ const createRequest = (routeId, method = "get") => {
46
+ return (_0) => __async(void 0, [_0], function* ({
22
47
  params,
23
48
  request
24
- }) => {
25
- const url = getRequestUrl({
26
- params,
27
- request,
28
- routeId
49
+ }) {
50
+ const url = getRequestUrl({ params, request, routeId });
51
+ const res = yield fetch(url, {
52
+ method,
53
+ signal: request.signal
29
54
  });
30
- try {
31
- const res = await fetch(url, {
32
- method,
33
- signal: request.signal
34
- });
35
- return res;
36
- } catch (error) {
37
- console.error(error);
38
- throw error;
55
+ if (!res.ok) {
56
+ throw res;
39
57
  }
40
- };
41
- };
58
+ return handleRedirectResponse(res);
59
+ });
60
+ };
61
+ export {
62
+ createRequest,
63
+ getRequestUrl
64
+ };
@@ -1,24 +1,27 @@
1
- import path from 'path';
2
- import { getRouteId } from '@modern-js/utils';
3
- export const generateClient = ({
4
- basedir,
5
- filename,
6
- entryName
7
- }) => {
8
- // TODO: loader 的约定变更
9
- const componentPath = path.join(path.dirname(filename), 'layout.ts');
10
- const routeId = getRouteId(componentPath, basedir, entryName);
11
- const requestCreatorPath = path.join(__dirname, './create-request').replace('node', 'treeshaking').replace(/\\/g, '/');
1
+ import path from "path";
2
+ const generateClient = ({ mapFile }) => {
3
+ const loadersMap = require(mapFile);
4
+ const requestCode = Object.keys(loadersMap).map((loaderId) => {
5
+ const routeId = loadersMap[loaderId];
6
+ return `
7
+ const ${loaderId} = createRequest('${routeId}');
8
+ `;
9
+ }).join("");
10
+ let exportsCode = `export {`;
11
+ for (const loader of Object.keys(loadersMap)) {
12
+ exportsCode += `${loader},`;
13
+ }
14
+ exportsCode += "}";
15
+ const requestCreatorPath = path.join(__dirname, "./create-request").replace("/node/cli/", "/treeshaking/cli/").replace(/\\/g, "/");
12
16
  const importCode = `
13
17
  import { createRequest } from '${requestCreatorPath}';
14
18
  `;
15
- const requestCode = `
16
- const loader = createRequest('${routeId}');
17
- export default loader;
18
- export { loader };
19
- `;
20
19
  return `
21
20
  ${importCode}
22
21
  ${requestCode}
22
+ ${exportsCode}
23
23
  `;
24
- };
24
+ };
25
+ export {
26
+ generateClient
27
+ };
@@ -1,19 +1,39 @@
1
- // eslint-disable-next-line eslint-comments/disable-enable-pair
2
- /* eslint-disable @babel/no-invalid-this */
3
-
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
4
21
  import { generateClient } from "./generate-client";
5
- export default async function loader(source) {
6
- var _this$_compiler;
7
- this.cacheable();
8
- const target = (_this$_compiler = this._compiler) === null || _this$_compiler === void 0 ? void 0 : _this$_compiler.options.target;
9
- if (target === 'node') {
10
- return source;
11
- }
12
- const options = this.getOptions();
13
- const code = generateClient({
14
- basedir: options.routesDir,
15
- filename: this.resourcePath,
16
- entryName: options.entryName
22
+ function loader(source) {
23
+ return __async(this, null, function* () {
24
+ var _a;
25
+ this.cacheable();
26
+ const target = (_a = this._compiler) == null ? void 0 : _a.options.target;
27
+ if (target === "node") {
28
+ return source;
29
+ }
30
+ const options = this.getOptions();
31
+ const code = generateClient({
32
+ mapFile: options.mapFile
33
+ });
34
+ return code;
17
35
  });
18
- return code;
19
- }
36
+ }
37
+ export {
38
+ loader as default
39
+ };
@@ -1,46 +1,86 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- import { installGlobals, writeReadableStreamToWritable, Response as NodeResponse } from '@remix-run/node';
5
- import { matchRoutes } from 'react-router-dom';
6
- // Polyfill Web Fetch API
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __async = (__this, __arguments, generator) => {
21
+ return new Promise((resolve, reject) => {
22
+ var fulfilled = (value) => {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ };
29
+ var rejected = (value) => {
30
+ try {
31
+ step(generator.throw(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
+ step((generator = generator.apply(__this, __arguments)).next());
38
+ });
39
+ };
40
+ import path from "path";
41
+ import {
42
+ installGlobals,
43
+ writeReadableStreamToWritable,
44
+ Response as NodeResponse
45
+ } from "@remix-run/node";
46
+ import {
47
+ matchRoutes
48
+ } from "react-router-dom";
49
+ import { LOADER_ROUTES_DIR, MAIN_ENTRY_NAME } from "@modern-js/utils";
7
50
  installGlobals();
8
- const LOADER_SEARCH_PARAM = '_loader';
9
- const redirectStatusCodes = new Set([301, 302, 303, 307, 308]);
10
- export function isRedirectResponse(response) {
51
+ const LOADER_SEARCH_PARAM = "_loader";
52
+ const redirectStatusCodes = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
53
+ function isRedirectResponse(response) {
11
54
  return redirectStatusCodes.has(response.status);
12
55
  }
13
- export function isResponse(value) {
14
- return value != null && typeof value.status === 'number' && typeof value.statusText === 'string' && typeof value.headers === 'object' && typeof value.body !== 'undefined';
56
+ function isResponse(value) {
57
+ return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
15
58
  }
16
59
  const json = (data, init = {}) => {
17
- const responseInit = typeof init === 'number' ? {
18
- status: init
19
- } : init;
60
+ const responseInit = typeof init === "number" ? { status: init } : init;
20
61
  const headers = new Headers(responseInit.headers);
21
- if (!headers.has('Content-Type')) {
22
- headers.set('Content-Type', 'application/json; charset=utf-8');
62
+ if (!headers.has("Content-Type")) {
63
+ headers.set("Content-Type", "application/json; charset=utf-8");
23
64
  }
24
- return new NodeResponse(JSON.stringify(data), _objectSpread(_objectSpread({}, responseInit), {}, {
65
+ return new NodeResponse(JSON.stringify(data), __spreadProps(__spreadValues({}, responseInit), {
25
66
  headers
26
67
  }));
27
68
  };
28
-
29
- // TODO: 添加 context
30
- const callRouteLoader = async ({
69
+ const callRouteLoader = (_0) => __async(void 0, [_0], function* ({
31
70
  routeId,
32
71
  loader,
33
72
  params,
34
73
  request,
35
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
36
74
  loadContext
37
- }) => {
75
+ }) {
38
76
  if (!loader) {
39
- throw new Error(`You made a ${request.method} request to ${request.url} but did not provide ` + `a default component or \`loader\` for route "${routeId}", ` + `so there is no way to handle the request.`);
77
+ throw new Error(
78
+ `You made a ${request.method} request to ${request.url} but did not provide a default component or \`loader\` for route "${routeId}", so there is no way to handle the request.`
79
+ );
40
80
  }
41
81
  let result;
42
82
  try {
43
- result = await loader({
83
+ result = yield loader({
44
84
  request,
45
85
  params
46
86
  });
@@ -50,12 +90,14 @@ const callRouteLoader = async ({
50
90
  }
51
91
  result = error;
52
92
  }
53
- if (result === undefined) {
54
- throw new Error(`You defined a loader for route "${routeId}" but didn't return ` + `anything from your \`loader\` function. Please return a value or \`null\`.`);
93
+ if (result === void 0) {
94
+ throw new Error(
95
+ `You defined a loader for route "${routeId}" but didn't return anything from your \`loader\` function. Please return a value or \`null\`.`
96
+ );
55
97
  }
56
98
  return isResponse(result) ? result : json(result);
57
- };
58
- const createLoaderHeaders = requestHeaders => {
99
+ });
100
+ const createLoaderHeaders = (requestHeaders) => {
59
101
  const headers = new Headers();
60
102
  for (const [key, values] of Object.entries(requestHeaders)) {
61
103
  if (values) {
@@ -70,9 +112,8 @@ const createLoaderHeaders = requestHeaders => {
70
112
  }
71
113
  return headers;
72
114
  };
73
- const createLoaderRequest = context => {
115
+ const createLoaderRequest = (context) => {
74
116
  const origin = `${context.protocol}://${context.host}`;
75
- // eslint-disable-next-line node/no-unsupported-features/node-builtins, node/prefer-global/url
76
117
  const url = new URL(context.url, origin);
77
118
  const controller = new AbortController();
78
119
  const init = {
@@ -82,53 +123,51 @@ const createLoaderRequest = context => {
82
123
  };
83
124
  return new Request(url.href, init);
84
125
  };
85
- const sendLoaderResponse = async (res, nodeResponse) => {
126
+ const sendLoaderResponse = (res, nodeResponse) => __async(void 0, null, function* () {
86
127
  res.statusMessage = nodeResponse.statusText;
87
128
  res.statusCode = nodeResponse.status;
88
129
  for (const [key, value] of nodeResponse.headers.entries()) {
89
130
  res.setHeader(key, value);
90
131
  }
91
132
  if (nodeResponse.body) {
92
- await writeReadableStreamToWritable(nodeResponse.body, res);
133
+ yield writeReadableStreamToWritable(nodeResponse.body, res);
93
134
  } else {
94
135
  res.end();
95
136
  }
96
- };
97
- export const getPathWithoutEntry = (pathname, entryPath) => {
98
- if (entryPath === '/') {
137
+ });
138
+ const getPathWithoutEntry = (pathname, entryPath) => {
139
+ if (entryPath === "/") {
99
140
  return pathname;
100
141
  }
101
- return pathname.replace(entryPath, '');
142
+ return pathname.replace(entryPath, "");
102
143
  };
103
144
  const matchEntry = (pathname, entries) => {
104
- return entries.find(entry => pathname.startsWith(entry.urlPath));
145
+ return entries.find((entry) => pathname.startsWith(entry.urlPath));
105
146
  };
106
- export const handleRequest = async ({
147
+ const handleRequest = (_0) => __async(void 0, [_0], function* ({
107
148
  context,
108
149
  serverRoutes,
109
150
  distDir
110
- }) => {
111
- const {
112
- method,
113
- query
114
- } = context;
151
+ }) {
152
+ const { method, query } = context;
115
153
  const routeId = query[LOADER_SEARCH_PARAM];
116
- if (!routeId || method.toLowerCase() !== 'get') {
154
+ if (!routeId || method.toLowerCase() !== "get") {
117
155
  return;
118
156
  }
119
157
  const entry = matchEntry(context.path, serverRoutes);
120
158
  if (!entry) {
121
159
  return;
122
160
  }
123
- const {
124
- routes
125
- } = await import(`${distDir}/loader-routes/${entry.entryName}`);
161
+ const routesPath = path.join(
162
+ distDir,
163
+ LOADER_ROUTES_DIR,
164
+ entry.entryName || MAIN_ENTRY_NAME
165
+ );
166
+ const { routes } = yield import(routesPath);
126
167
  if (!routes) {
127
168
  return;
128
169
  }
129
- const {
130
- res
131
- } = context;
170
+ const { res } = context;
132
171
  const pathname = getPathWithoutEntry(context.path, entry.urlPath);
133
172
  const matches = matchRoutes(routes, pathname);
134
173
  if (!matches) {
@@ -136,7 +175,7 @@ export const handleRequest = async ({
136
175
  res.end(`Route ${pathname} was not matched`);
137
176
  return;
138
177
  }
139
- const match = matches === null || matches === void 0 ? void 0 : matches.find(match => match.route.id === routeId);
178
+ const match = matches == null ? void 0 : matches.find((match2) => match2.route.id === routeId);
140
179
  if (!match) {
141
180
  res.statusCode = 403;
142
181
  res.end(`Route ${routeId} does not match URL ${context.path}`);
@@ -145,39 +184,54 @@ export const handleRequest = async ({
145
184
  const request = createLoaderRequest(context);
146
185
  let response;
147
186
  try {
148
- response = await callRouteLoader({
187
+ response = yield callRouteLoader({
149
188
  loader: match.route.loader,
150
189
  routeId: match.route.id,
151
190
  params: match.params,
152
191
  request,
153
192
  loadContext: {}
154
193
  });
155
- // TODO: 处理 redirect
194
+ if (isRedirectResponse(response)) {
195
+ const headers = new Headers(response.headers);
196
+ headers.set("X-Modernjs-Redirect", headers.get("Location"));
197
+ headers.delete("Location");
198
+ response = new NodeResponse(null, {
199
+ status: 204,
200
+ headers
201
+ });
202
+ }
156
203
  } catch (error) {
157
204
  const message = String(error);
158
205
  response = new NodeResponse(message, {
159
206
  status: 500,
160
207
  headers: {
161
- 'Content-Type': 'text/plain'
208
+ "Content-Type": "text/plain"
162
209
  }
163
210
  });
164
211
  }
165
212
  sendLoaderResponse(res, response);
166
- };
167
- export default (() => ({
168
- name: '@modern-js/plugin-data-loader',
213
+ });
214
+ var server_default = () => ({
215
+ name: "@modern-js/plugin-data-loader",
169
216
  setup: () => ({
170
217
  preparebeforeRouteHandler({
171
218
  serverRoutes,
172
219
  distDir
173
220
  }) {
174
- return async context => {
221
+ return (context) => __async(this, null, function* () {
175
222
  return handleRequest({
176
223
  serverRoutes,
177
224
  distDir,
178
225
  context
179
226
  });
180
- };
227
+ });
181
228
  }
182
229
  })
183
- }));
230
+ });
231
+ export {
232
+ server_default as default,
233
+ getPathWithoutEntry,
234
+ handleRequest,
235
+ isRedirectResponse,
236
+ isResponse
237
+ };
@@ -1,50 +1,83 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var stdin_exports = {};
19
+ __export(stdin_exports, {
20
+ createRequest: () => createRequest,
21
+ getRequestUrl: () => getRequestUrl
5
22
  });
6
- exports.getRequestUrl = exports.createRequest = void 0;
7
- var _pathToRegexp = require("path-to-regexp");
8
- // eslint-disable-next-line eslint-comments/disable-enable-pair
9
- /* eslint-disable node/prefer-global/url */
10
- // eslint-disable-next-line eslint-comments/disable-enable-pair
11
- /* eslint-disable node/no-unsupported-features/node-builtins */
12
-
23
+ module.exports = __toCommonJS(stdin_exports);
24
+ var import_path_to_regexp = require("path-to-regexp");
25
+ var import_react_router_dom = require("react-router-dom");
26
+ var __async = (__this, __arguments, generator) => {
27
+ return new Promise((resolve, reject) => {
28
+ var fulfilled = (value) => {
29
+ try {
30
+ step(generator.next(value));
31
+ } catch (e) {
32
+ reject(e);
33
+ }
34
+ };
35
+ var rejected = (value) => {
36
+ try {
37
+ step(generator.throw(value));
38
+ } catch (e) {
39
+ reject(e);
40
+ }
41
+ };
42
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
43
+ step((generator = generator.apply(__this, __arguments)).next());
44
+ });
45
+ };
13
46
  const getRequestUrl = ({
14
47
  params,
15
48
  request,
16
49
  routeId
17
50
  }) => {
18
51
  const url = new URL(request.url);
19
- const toPath = (0, _pathToRegexp.compile)(url.pathname, {
52
+ const toPath = (0, import_path_to_regexp.compile)(url.pathname, {
20
53
  encode: encodeURIComponent
21
54
  });
22
55
  const newPathName = toPath(params);
23
56
  url.pathname = newPathName;
24
- url.searchParams.append('_loader', routeId);
57
+ url.searchParams.append("_loader", routeId);
25
58
  return url;
26
59
  };
27
- exports.getRequestUrl = getRequestUrl;
28
- const createRequest = (routeId, method = 'get') => {
29
- return async ({
60
+ const handleRedirectResponse = (res) => {
61
+ const { headers } = res;
62
+ const location = headers.get("X-Modernjs-Redirect");
63
+ if (location) {
64
+ return (0, import_react_router_dom.redirect)(location);
65
+ }
66
+ return res;
67
+ };
68
+ const createRequest = (routeId, method = "get") => {
69
+ return (_0) => __async(void 0, [_0], function* ({
30
70
  params,
31
71
  request
32
- }) => {
33
- const url = getRequestUrl({
34
- params,
35
- request,
36
- routeId
72
+ }) {
73
+ const url = getRequestUrl({ params, request, routeId });
74
+ const res = yield fetch(url, {
75
+ method,
76
+ signal: request.signal
37
77
  });
38
- try {
39
- const res = await fetch(url, {
40
- method,
41
- signal: request.signal
42
- });
43
- return res;
44
- } catch (error) {
45
- console.error(error);
46
- throw error;
78
+ if (!res.ok) {
79
+ throw res;
47
80
  }
48
- };
81
+ return handleRedirectResponse(res);
82
+ });
49
83
  };
50
- exports.createRequest = createRequest;
@@ -1,32 +1,52 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var stdin_exports = {};
25
+ __export(stdin_exports, {
26
+ generateClient: () => generateClient
5
27
  });
6
- exports.generateClient = void 0;
7
- var _path = _interopRequireDefault(require("path"));
8
- var _utils = require("@modern-js/utils");
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- const generateClient = ({
11
- basedir,
12
- filename,
13
- entryName
14
- }) => {
15
- // TODO: loader 的约定变更
16
- const componentPath = _path.default.join(_path.default.dirname(filename), 'layout.ts');
17
- const routeId = (0, _utils.getRouteId)(componentPath, basedir, entryName);
18
- const requestCreatorPath = _path.default.join(__dirname, './create-request').replace('node', 'treeshaking').replace(/\\/g, '/');
28
+ module.exports = __toCommonJS(stdin_exports);
29
+ var import_path = __toESM(require("path"));
30
+ const generateClient = ({ mapFile }) => {
31
+ const loadersMap = require(mapFile);
32
+ const requestCode = Object.keys(loadersMap).map((loaderId) => {
33
+ const routeId = loadersMap[loaderId];
34
+ return `
35
+ const ${loaderId} = createRequest('${routeId}');
36
+ `;
37
+ }).join("");
38
+ let exportsCode = `export {`;
39
+ for (const loader of Object.keys(loadersMap)) {
40
+ exportsCode += `${loader},`;
41
+ }
42
+ exportsCode += "}";
43
+ const requestCreatorPath = import_path.default.join(__dirname, "./create-request").replace("/node/cli/", "/treeshaking/cli/").replace(/\\/g, "/");
19
44
  const importCode = `
20
45
  import { createRequest } from '${requestCreatorPath}';
21
46
  `;
22
- const requestCode = `
23
- const loader = createRequest('${routeId}');
24
- export default loader;
25
- export { loader };
26
- `;
27
47
  return `
28
48
  ${importCode}
29
49
  ${requestCode}
50
+ ${exportsCode}
30
51
  `;
31
52
  };
32
- exports.generateClient = generateClient;