@shuvi/platform-web 0.0.1-rc.34 → 1.0.0-rc.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.
Files changed (238) hide show
  1. package/esm/shared/appTypes.d.ts +15 -0
  2. package/esm/shared/appTypes.js +1 -0
  3. package/esm/shared/configTypes.d.ts +14 -0
  4. package/esm/shared/configTypes.js +1 -0
  5. package/esm/shared/index.d.ts +5 -0
  6. package/esm/shared/index.js +5 -0
  7. package/esm/shared/renderTypes.d.ts +44 -0
  8. package/esm/shared/renderTypes.js +1 -0
  9. package/esm/shared/routeTypes.d.ts +47 -0
  10. package/esm/shared/routeTypes.js +1 -0
  11. package/esm/shared/serverTypes.d.ts +6 -0
  12. package/esm/shared/serverTypes.js +1 -0
  13. package/esm/shuvi-app/app/client.d.ts +2 -0
  14. package/esm/shuvi-app/app/client.js +125 -0
  15. package/esm/shuvi-app/app/server.d.ts +2 -0
  16. package/esm/shuvi-app/app/server.js +67 -0
  17. package/{shuvi-app → esm/shuvi-app}/dev/webpackHotDevClient.d.ts +0 -0
  18. package/{shuvi-app → esm/shuvi-app}/dev/webpackHotDevClient.js +2 -1
  19. package/esm/shuvi-app/entry/client/app.d.ts +2 -0
  20. package/esm/shuvi-app/entry/client/app.js +57 -0
  21. package/esm/shuvi-app/entry/client/index.d.ts +2 -0
  22. package/esm/shuvi-app/entry/client/index.js +12 -0
  23. package/{shuvi-app → esm/shuvi-app}/entry/client/run.dev.d.ts +0 -0
  24. package/{shuvi-app → esm/shuvi-app}/entry/client/run.dev.js +2 -2
  25. package/{shuvi-app → esm/shuvi-app}/entry/client/run.prod.d.ts +0 -0
  26. package/esm/shuvi-app/entry/client/run.prod.js +3 -0
  27. package/{shuvi-app → esm/shuvi-app}/entry/client/setup-env.d.ts +1 -1
  28. package/esm/shuvi-app/entry/client/setup-env.js +17 -0
  29. package/esm/shuvi-app/entry/server/index.d.ts +6 -0
  30. package/esm/shuvi-app/entry/server/index.js +7 -0
  31. package/esm/shuvi-app/react/AppComponent.d.ts +4 -0
  32. package/esm/shuvi-app/react/AppComponent.jsx +6 -0
  33. package/esm/shuvi-app/react/AppContainer.d.ts +6 -0
  34. package/esm/shuvi-app/react/AppContainer.jsx +23 -0
  35. package/esm/shuvi-app/react/Error.d.ts +5 -0
  36. package/esm/shuvi-app/react/Error.jsx +38 -0
  37. package/esm/shuvi-app/react/ErrorBoundary.d.ts +16 -0
  38. package/esm/shuvi-app/react/ErrorBoundary.jsx +25 -0
  39. package/esm/shuvi-app/react/ErrorPage.d.ts +5 -0
  40. package/esm/shuvi-app/react/ErrorPage.jsx +7 -0
  41. package/esm/shuvi-app/react/Link.d.ts +7 -0
  42. package/esm/shuvi-app/react/Link.jsx +115 -0
  43. package/esm/shuvi-app/react/applicationContext.d.ts +7 -0
  44. package/esm/shuvi-app/react/applicationContext.jsx +10 -0
  45. package/esm/shuvi-app/react/dynamic.d.ts +31 -0
  46. package/esm/shuvi-app/react/dynamic.jsx +62 -0
  47. package/esm/shuvi-app/react/getRoutes.d.ts +2 -0
  48. package/esm/shuvi-app/react/getRoutes.js +31 -0
  49. package/esm/shuvi-app/react/head/head-manager-context.d.ts +2 -0
  50. package/esm/shuvi-app/react/head/head-manager-context.js +2 -0
  51. package/esm/shuvi-app/react/head/head-manager.d.ts +10 -0
  52. package/esm/shuvi-app/react/head/head-manager.js +93 -0
  53. package/esm/shuvi-app/react/head/head.d.ts +33 -0
  54. package/esm/shuvi-app/react/head/head.jsx +178 -0
  55. package/esm/shuvi-app/react/head/index.d.ts +4 -0
  56. package/esm/shuvi-app/react/head/index.js +4 -0
  57. package/esm/shuvi-app/react/head/side-effect.d.ts +30 -0
  58. package/esm/shuvi-app/react/head/side-effect.jsx +44 -0
  59. package/esm/shuvi-app/react/head/types.d.ts +15 -0
  60. package/esm/shuvi-app/react/head/types.js +1 -0
  61. package/esm/shuvi-app/react/index.d.ts +4 -0
  62. package/esm/shuvi-app/react/index.js +4 -0
  63. package/esm/shuvi-app/react/loadRouteComponent.d.ts +4 -0
  64. package/esm/shuvi-app/react/loadRouteComponent.jsx +9 -0
  65. package/esm/shuvi-app/react/loadable/index.d.ts +2 -0
  66. package/esm/shuvi-app/react/loadable/index.js +2 -0
  67. package/esm/shuvi-app/react/loadable/loadable-context.d.ts +4 -0
  68. package/esm/shuvi-app/react/loadable/loadable-context.js +3 -0
  69. package/esm/shuvi-app/react/loadable/loadable.d.ts +30 -0
  70. package/esm/shuvi-app/react/loadable/loadable.js +277 -0
  71. package/esm/shuvi-app/react/redox-react/RedoxWrapper.d.ts +8 -0
  72. package/esm/shuvi-app/react/redox-react/RedoxWrapper.jsx +11 -0
  73. package/esm/shuvi-app/react/redox-react/runtime.d.ts +2 -0
  74. package/esm/shuvi-app/react/redox-react/runtime.js +16 -0
  75. package/esm/shuvi-app/react/shuvi-runtime-api.d.ts +5 -0
  76. package/esm/shuvi-app/react/shuvi-runtime-api.js +5 -0
  77. package/esm/shuvi-app/react/types.d.ts +14 -0
  78. package/esm/shuvi-app/react/types.js +1 -0
  79. package/esm/shuvi-app/react/useLoaderData.d.ts +2 -0
  80. package/esm/shuvi-app/react/useLoaderData.js +27 -0
  81. package/esm/shuvi-app/react/utils/getDisplayName.d.ts +2 -0
  82. package/esm/shuvi-app/react/utils/getDisplayName.js +3 -0
  83. package/esm/shuvi-app/react/utils/requestIdleCallback.d.ts +2 -0
  84. package/esm/shuvi-app/react/utils/requestIdleCallback.js +20 -0
  85. package/esm/shuvi-app/react/utils/useIntersection.d.ts +8 -0
  86. package/esm/shuvi-app/react/utils/useIntersection.jsx +91 -0
  87. package/esm/shuvi-app/react/view/ReactView.client.d.ts +5 -0
  88. package/esm/shuvi-app/react/view/ReactView.client.jsx +64 -0
  89. package/esm/shuvi-app/react/view/ReactView.server.d.ts +4 -0
  90. package/esm/shuvi-app/react/view/ReactView.server.jsx +109 -0
  91. package/esm/shuvi-app/react/view/clientView.d.ts +3 -0
  92. package/esm/shuvi-app/react/view/clientView.js +2 -0
  93. package/esm/shuvi-app/react/view/index.d.ts +2 -0
  94. package/esm/shuvi-app/react/view/index.js +7 -0
  95. package/esm/shuvi-app/react/view/render-action.d.ts +10 -0
  96. package/esm/shuvi-app/react/view/render-action.js +29 -0
  97. package/esm/shuvi-app/react/view/serverView.d.ts +3 -0
  98. package/esm/shuvi-app/react/view/serverView.js +2 -0
  99. package/esm/shuvi-app/react/view/transformRoutes.d.ts +2 -0
  100. package/esm/shuvi-app/react/view/transformRoutes.js +3 -0
  101. package/esm/shuvi-app/shuvi-runtime-index.d.ts +4 -0
  102. package/esm/shuvi-app/shuvi-runtime-index.js +2 -0
  103. package/esm/shuvi-app/shuvi-runtime-server.d.ts +6 -0
  104. package/esm/shuvi-app/shuvi-runtime-server.js +1 -0
  105. package/lib/node/features/custom-server/index.d.ts +4 -0
  106. package/lib/node/features/custom-server/index.js +9 -0
  107. package/lib/node/features/custom-server/server.d.ts +2 -0
  108. package/lib/node/features/custom-server/server.js +28 -0
  109. package/lib/node/features/filesystem-routes/api/apiRouteHandler.d.ts +51 -0
  110. package/lib/node/features/filesystem-routes/api/apiRouteHandler.js +237 -0
  111. package/lib/node/features/filesystem-routes/api/apiRoutes.d.ts +7 -0
  112. package/lib/node/features/filesystem-routes/api/apiRoutes.js +35 -0
  113. package/lib/node/features/filesystem-routes/api/index.d.ts +3 -0
  114. package/lib/node/features/filesystem-routes/api/index.js +7 -0
  115. package/lib/node/features/filesystem-routes/api/middleware.d.ts +2 -0
  116. package/lib/node/features/filesystem-routes/api/middleware.js +44 -0
  117. package/lib/node/features/filesystem-routes/hooks.d.ts +3 -0
  118. package/lib/node/features/filesystem-routes/hooks.js +6 -0
  119. package/lib/node/features/filesystem-routes/index.d.ts +20 -0
  120. package/lib/node/features/filesystem-routes/index.js +180 -0
  121. package/lib/node/features/filesystem-routes/middleware/index.d.ts +2 -0
  122. package/lib/node/features/filesystem-routes/middleware/index.js +7 -0
  123. package/lib/node/features/filesystem-routes/middleware/middleware.d.ts +2 -0
  124. package/lib/node/features/filesystem-routes/middleware/middleware.js +42 -0
  125. package/lib/node/features/filesystem-routes/middleware/routes.d.ts +9 -0
  126. package/lib/node/features/filesystem-routes/middleware/routes.js +34 -0
  127. package/lib/node/features/filesystem-routes/page/index.d.ts +2 -0
  128. package/lib/node/features/filesystem-routes/page/index.js +21 -0
  129. package/lib/node/features/filesystem-routes/page/routes.d.ts +8 -0
  130. package/lib/node/features/filesystem-routes/page/routes.js +83 -0
  131. package/lib/node/features/filesystem-routes/page/store.d.ts +3 -0
  132. package/lib/node/features/filesystem-routes/page/store.js +10 -0
  133. package/lib/node/features/html-render/index.d.ts +19 -0
  134. package/lib/node/features/html-render/index.js +28 -0
  135. package/lib/node/features/html-render/lib/generateFilesByRoutId.d.ts +3 -0
  136. package/lib/node/features/html-render/lib/generateFilesByRoutId.js +13 -0
  137. package/lib/node/features/html-render/lib/getPageMiddleware.d.ts +2 -0
  138. package/lib/node/features/html-render/lib/getPageMiddleware.js +56 -0
  139. package/lib/node/features/html-render/lib/index.d.ts +4 -0
  140. package/lib/node/features/html-render/lib/index.js +23 -0
  141. package/lib/node/features/html-render/lib/pageLoader.d.ts +1 -0
  142. package/lib/node/features/html-render/lib/pageLoader.js +42 -0
  143. package/lib/node/features/html-render/lib/renderToHTML.d.ts +6 -0
  144. package/lib/node/features/html-render/lib/renderToHTML.js +81 -0
  145. package/lib/node/features/html-render/lib/renderer/base.d.ts +17 -0
  146. package/lib/node/features/html-render/lib/renderer/base.js +70 -0
  147. package/lib/node/features/html-render/lib/renderer/htmlTag.d.ts +4 -0
  148. package/lib/node/features/html-render/lib/renderer/htmlTag.js +70 -0
  149. package/lib/node/features/html-render/lib/renderer/index.d.ts +15 -0
  150. package/lib/node/features/html-render/lib/renderer/index.js +48 -0
  151. package/lib/node/features/html-render/lib/renderer/spa.d.ts +5 -0
  152. package/lib/node/features/html-render/lib/renderer/spa.js +26 -0
  153. package/lib/node/features/html-render/lib/renderer/ssr.d.ts +5 -0
  154. package/lib/node/features/html-render/lib/renderer/ssr.js +70 -0
  155. package/lib/node/features/html-render/lib/renderer/types.d.ts +20 -0
  156. package/lib/node/features/html-render/lib/renderer/types.js +2 -0
  157. package/lib/node/features/html-render/lib/viewTemplate.d.ts +5 -0
  158. package/lib/node/features/html-render/lib/viewTemplate.js +37 -0
  159. package/lib/node/features/html-render/server.d.ts +2 -0
  160. package/lib/node/features/html-render/server.js +9 -0
  161. package/lib/node/features/html-render/serverHooks.d.ts +10 -0
  162. package/lib/node/features/html-render/serverHooks.js +13 -0
  163. package/lib/node/features/html-render/shuvi-app.d.ts +6 -0
  164. package/lib/node/features/html-render/shuvi-app.js +2 -0
  165. package/lib/node/features/index.d.ts +32 -0
  166. package/lib/node/features/index.js +25 -0
  167. package/lib/node/features/main/buildHtml.d.ts +8 -0
  168. package/lib/node/features/main/buildHtml.js +64 -0
  169. package/lib/node/features/main/generateResource.d.ts +3 -0
  170. package/lib/node/features/main/generateResource.js +56 -0
  171. package/lib/node/features/main/index.d.ts +3 -0
  172. package/lib/node/features/main/index.js +82 -0
  173. package/lib/node/features/middlewares.d.ts +4 -0
  174. package/lib/node/features/middlewares.js +23 -0
  175. package/lib/node/features/model/index.d.ts +21 -0
  176. package/lib/node/features/model/index.js +54 -0
  177. package/lib/node/features/model/runtime.d.ts +13 -0
  178. package/lib/node/features/model/runtime.js +47 -0
  179. package/lib/node/features/model/server.d.ts +3 -0
  180. package/lib/node/features/model/server.js +12 -0
  181. package/lib/node/features/model/shuvi-app.d.ts +6 -0
  182. package/lib/node/features/model/shuvi-app.js +2 -0
  183. package/lib/node/features/on-demand-compile-page/emptyComponent.d.ts +1 -0
  184. package/lib/node/features/on-demand-compile-page/emptyComponent.js +7 -0
  185. package/lib/node/features/on-demand-compile-page/index.d.ts +15 -0
  186. package/lib/node/features/on-demand-compile-page/index.js +36 -0
  187. package/lib/node/features/on-demand-compile-page/onDemandRouteManager.d.ts +11 -0
  188. package/lib/node/features/on-demand-compile-page/onDemandRouteManager.js +104 -0
  189. package/lib/node/index.d.ts +6 -0
  190. package/lib/node/index.js +38 -0
  191. package/lib/{paths.d.ts → node/paths.d.ts} +1 -2
  192. package/lib/node/paths.js +36 -0
  193. package/lib/node/shuvi-type-extensions-node.d.ts +42 -0
  194. package/lib/node/shuvi-type-extensions-node.js +3 -0
  195. package/lib/node/targets/react/bundler/index.d.ts +16 -0
  196. package/lib/node/targets/react/bundler/index.js +102 -0
  197. package/lib/node/targets/react/index.d.ts +32 -0
  198. package/lib/node/targets/react/index.js +28 -0
  199. package/lib/node/targets/react/redox-react/index.d.ts +18 -0
  200. package/lib/node/targets/react/redox-react/index.js +50 -0
  201. package/lib/shared/appTypes.d.ts +15 -0
  202. package/lib/shared/appTypes.js +2 -0
  203. package/lib/shared/configTypes.d.ts +14 -0
  204. package/lib/shared/configTypes.js +2 -0
  205. package/lib/shared/index.d.ts +5 -0
  206. package/lib/shared/index.js +21 -0
  207. package/lib/shared/renderTypes.d.ts +44 -0
  208. package/lib/shared/renderTypes.js +2 -0
  209. package/lib/shared/routeTypes.d.ts +47 -0
  210. package/lib/shared/routeTypes.js +2 -0
  211. package/lib/shared/serverTypes.d.ts +6 -0
  212. package/lib/shared/serverTypes.js +2 -0
  213. package/package.json +78 -15
  214. package/shuvi-type-extensions-node.d.ts +2 -0
  215. package/shuvi-type-extensions-runtime.d.ts +36 -0
  216. package/lib/index.d.ts +0 -3
  217. package/lib/index.js +0 -44
  218. package/lib/paths.js +0 -7
  219. package/shuvi-app/application/client/create-application-factory.d.ts +0 -3
  220. package/shuvi-app/application/client/create-application-factory.js +0 -70
  221. package/shuvi-app/application/client/create-application-history-browser.d.ts +0 -1
  222. package/shuvi-app/application/client/create-application-history-browser.js +0 -3
  223. package/shuvi-app/application/client/create-application-history-hash.d.ts +0 -1
  224. package/shuvi-app/application/client/create-application-history-hash.js +0 -3
  225. package/shuvi-app/application/client/create-application-history-memory.d.ts +0 -1
  226. package/shuvi-app/application/client/create-application-history-memory.js +0 -3
  227. package/shuvi-app/application/server/create-application-spa.d.ts +0 -2
  228. package/shuvi-app/application/server/create-application-spa.js +0 -8
  229. package/shuvi-app/application/server/create-application.d.ts +0 -2
  230. package/shuvi-app/application/server/create-application.js +0 -25
  231. package/shuvi-app/entry/client/index.d.ts +0 -1
  232. package/shuvi-app/entry/client/index.js +0 -11
  233. package/shuvi-app/entry/client/run.prod.js +0 -3
  234. package/shuvi-app/entry/client/setup-app.d.ts +0 -3
  235. package/shuvi-app/entry/client/setup-app.js +0 -38
  236. package/shuvi-app/entry/client/setup-env.js +0 -27
  237. package/shuvi-app/entry/server/index.d.ts +0 -6
  238. package/shuvi-app/entry/server/index.js +0 -7
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.ApiError = exports.sendJson = exports.sendData = exports.redirect = exports.sendStatusCode = exports.getCookieParser = exports.parseBody = exports.apiRouteHandler = void 0;
36
+ const stream_1 = require("stream");
37
+ const querystring = __importStar(require("querystring"));
38
+ const cookie = __importStar(require("cookie"));
39
+ const getRawBody = require('raw-body');
40
+ const contentType = __importStar(require("content-type"));
41
+ function apiRouteHandler(req, res, resolver, apiRoutesConfig) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ try {
44
+ const { bodyParser } = apiRoutesConfig || {};
45
+ const { pathname, query, params } = req;
46
+ const apiReq = {
47
+ pathname,
48
+ query,
49
+ params,
50
+ // Parsing of cookies
51
+ cookies: getCookieParser(req)
52
+ };
53
+ // Parsing of body
54
+ if (bodyParser && !apiReq.body) {
55
+ apiReq.body = yield parseBody(req, bodyParser && bodyParser.sizeLimit ? bodyParser.sizeLimit : '1mb');
56
+ }
57
+ const apiRes = {
58
+ status: (statusCode) => sendStatusCode(res, statusCode),
59
+ send: (data) => sendData(req, res, data),
60
+ json: (data) => sendJson(req, res, data),
61
+ redirect: (statusOrUrl, url) => redirect(res, statusOrUrl, url)
62
+ };
63
+ let wasPiped = false;
64
+ if (process.env.NODE_ENV !== 'production') {
65
+ // listen for pipe event and don't show resolve warning
66
+ res.once('pipe', () => (wasPiped = true));
67
+ }
68
+ // Call API route method
69
+ yield resolver(Object.assign(req, apiReq), Object.assign(res, apiRes));
70
+ if (process.env.NODE_ENV !== 'production' &&
71
+ !(res.finished || res.headersSent) &&
72
+ !wasPiped) {
73
+ console.warn(`API resolved without sending a response for ${req.url}, this may result in stalled requests.`);
74
+ }
75
+ }
76
+ catch (err) {
77
+ throw err;
78
+ }
79
+ });
80
+ }
81
+ exports.apiRouteHandler = apiRouteHandler;
82
+ /**
83
+ * Parse incoming message like `json` or `urlencoded`
84
+ * @param req request object
85
+ */
86
+ function parseBody(req, limit) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ let contentTypeObj;
89
+ try {
90
+ contentTypeObj = contentType.parse(req.headers['content-type'] || 'text/plain');
91
+ }
92
+ catch (_a) {
93
+ contentTypeObj = contentType.parse('text/plain');
94
+ }
95
+ const { type, parameters } = contentTypeObj;
96
+ const encoding = (parameters.charset && parameters.charset.toLowerCase()) || 'utf-8';
97
+ let buffer;
98
+ try {
99
+ buffer = yield getRawBody(req, { encoding, limit });
100
+ }
101
+ catch (e) {
102
+ if (e.type === 'entity.too.large') {
103
+ throw new ApiError(413, `Body exceeded ${limit} limit`);
104
+ }
105
+ else {
106
+ throw new ApiError(400, 'Invalid body');
107
+ }
108
+ }
109
+ const body = buffer.toString();
110
+ if (type === 'application/json' || type === 'application/ld+json') {
111
+ return parseJson(body);
112
+ }
113
+ else if (type === 'application/x-www-form-urlencoded') {
114
+ return querystring.decode(body);
115
+ }
116
+ else {
117
+ return body;
118
+ }
119
+ });
120
+ }
121
+ exports.parseBody = parseBody;
122
+ /**
123
+ * Parse `JSON` and handles invalid `JSON` strings
124
+ * @param str `JSON` string
125
+ */
126
+ function parseJson(str) {
127
+ if (str.length === 0) {
128
+ // special-case empty json body, as it's a common client-side mistake
129
+ return {};
130
+ }
131
+ try {
132
+ return JSON.parse(str);
133
+ }
134
+ catch (e) {
135
+ throw new ApiError(400, 'Invalid JSON');
136
+ }
137
+ }
138
+ /**
139
+ * Parse cookies from `req` header
140
+ * @param req request object
141
+ */
142
+ function getCookieParser(req) {
143
+ const header = req.headers.cookie;
144
+ if (!header) {
145
+ return {};
146
+ }
147
+ return cookie.parse(Array.isArray(header) ? header.join(';') : header);
148
+ }
149
+ exports.getCookieParser = getCookieParser;
150
+ /**
151
+ *
152
+ * @param res ServerResponse object
153
+ * @param statusCode `HTTP` status code of response
154
+ */
155
+ function sendStatusCode(res, statusCode) {
156
+ res.statusCode = statusCode;
157
+ return res;
158
+ }
159
+ exports.sendStatusCode = sendStatusCode;
160
+ /**
161
+ *
162
+ * @param res response object
163
+ * @param [statusOrUrl] `HTTP` status code of redirect
164
+ * @param url URL of redirect
165
+ */
166
+ function redirect(res, statusOrUrl, url) {
167
+ if (typeof statusOrUrl === 'string') {
168
+ url = statusOrUrl;
169
+ statusOrUrl = 307;
170
+ }
171
+ if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {
172
+ throw new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`);
173
+ }
174
+ res.writeHead(statusOrUrl, { Location: url });
175
+ res.write('');
176
+ res.end();
177
+ return res;
178
+ }
179
+ exports.redirect = redirect;
180
+ /**
181
+ * Send `any` body to response
182
+ * @param req request object
183
+ * @param res response object
184
+ * @param body of response
185
+ */
186
+ function sendData(req, res, body) {
187
+ if (body === null || body === undefined) {
188
+ res.end();
189
+ return;
190
+ }
191
+ const contentType = res.getHeader('Content-Type');
192
+ if (body instanceof stream_1.Stream) {
193
+ if (!contentType) {
194
+ res.setHeader('Content-Type', 'application/octet-stream');
195
+ }
196
+ body.pipe(res);
197
+ return;
198
+ }
199
+ const isJSONLike = ['object', 'number', 'boolean'].includes(typeof body);
200
+ const stringifiedBody = isJSONLike ? JSON.stringify(body) : body;
201
+ if (Buffer.isBuffer(body)) {
202
+ if (!contentType) {
203
+ res.setHeader('Content-Type', 'application/octet-stream');
204
+ }
205
+ res.setHeader('Content-Length', body.length);
206
+ res.end(body);
207
+ return;
208
+ }
209
+ if (isJSONLike) {
210
+ res.setHeader('Content-Type', 'application/json; charset=utf-8');
211
+ }
212
+ res.setHeader('Content-Length', Buffer.byteLength(stringifiedBody));
213
+ res.end(stringifiedBody);
214
+ }
215
+ exports.sendData = sendData;
216
+ /**
217
+ * Send `JSON` object
218
+ * @param res response object
219
+ * @param jsonBody of data
220
+ */
221
+ function sendJson(req, res, jsonBody) {
222
+ // Set header to application/json
223
+ res.setHeader('Content-Type', 'application/json; charset=utf-8');
224
+ // Use send to handle request
225
+ return sendData(req, res, jsonBody);
226
+ }
227
+ exports.sendJson = sendJson;
228
+ /**
229
+ * Custom error class
230
+ */
231
+ class ApiError extends Error {
232
+ constructor(statusCode, message) {
233
+ super(message);
234
+ this.statusCode = statusCode;
235
+ }
236
+ }
237
+ exports.ApiError = ApiError;
@@ -0,0 +1,7 @@
1
+ import { IApiRouteConfig } from '@shuvi/platform-shared/node';
2
+ export { IApiRouteConfig };
3
+ export declare function serializeApiRoutes(apiRoutes: IApiRouteConfig[]): string;
4
+ export declare function normalizeApiRoutes(apiRoutes: IApiRouteConfig[], option: {
5
+ apisDir: string;
6
+ }): IApiRouteConfig[];
7
+ export declare const generateRoutesContent: (apiRoutes: IApiRouteConfig[], apisDir: string) => string;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRoutesContent = exports.normalizeApiRoutes = exports.serializeApiRoutes = void 0;
4
+ const file_1 = require("@shuvi/utils/lib/file");
5
+ function serializeApiRoutes(apiRoutes) {
6
+ let res = '';
7
+ for (let index = 0; index < apiRoutes.length; index++) {
8
+ const { api, path } = apiRoutes[index];
9
+ let strRoute = `\n{
10
+ path: "${path}",
11
+ ${api ? `api: require("${api}"),` : ''}
12
+ },`;
13
+ res += strRoute;
14
+ }
15
+ return `[${res}]`;
16
+ }
17
+ exports.serializeApiRoutes = serializeApiRoutes;
18
+ function normalizeApiRoutes(apiRoutes, option) {
19
+ const res = [];
20
+ for (let index = 0; index < apiRoutes.length; index++) {
21
+ const apiRoute = Object.assign({}, apiRoutes[index]);
22
+ if (apiRoute.api) {
23
+ apiRoute.api = (0, file_1.normalizePath)(apiRoute.api, option.apisDir);
24
+ }
25
+ res.push(apiRoute);
26
+ }
27
+ return res;
28
+ }
29
+ exports.normalizeApiRoutes = normalizeApiRoutes;
30
+ const generateRoutesContent = (apiRoutes, apisDir) => {
31
+ const normalizedRoutes = normalizeApiRoutes(apiRoutes, { apisDir });
32
+ const serialized = serializeApiRoutes(normalizedRoutes);
33
+ return `export default ${serialized}`;
34
+ };
35
+ exports.generateRoutesContent = generateRoutesContent;
@@ -0,0 +1,3 @@
1
+ export { middleware } from './middleware';
2
+ export { generateRoutesContent, IApiRouteConfig } from './apiRoutes';
3
+ export { IApiRequestHandler } from './apiRouteHandler';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRoutesContent = exports.middleware = void 0;
4
+ var middleware_1 = require("./middleware");
5
+ Object.defineProperty(exports, "middleware", { enumerable: true, get: function () { return middleware_1.middleware; } });
6
+ var apiRoutes_1 = require("./apiRoutes");
7
+ Object.defineProperty(exports, "generateRoutesContent", { enumerable: true, get: function () { return apiRoutes_1.generateRoutesContent; } });
@@ -0,0 +1,2 @@
1
+ import { IServerPluginContext, IRequestHandlerWithNext } from '@shuvi/service';
2
+ export declare function middleware(_ctx: IServerPluginContext): IRequestHandlerWithNext;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.middleware = void 0;
13
+ const router_1 = require("@shuvi/router");
14
+ const resources_1 = require("@shuvi/service/lib/resources");
15
+ const apiRouteHandler_1 = require("./apiRouteHandler");
16
+ function middleware(_ctx) {
17
+ return function (req, res, next) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ const { apiRoutes } = resources_1.server;
20
+ let tempApiModule;
21
+ for (const { path, api } of apiRoutes) {
22
+ const match = (0, router_1.matchPathname)(path, req.pathname);
23
+ if (match) {
24
+ req.params = match.params;
25
+ tempApiModule = api;
26
+ break;
27
+ }
28
+ }
29
+ if (tempApiModule) {
30
+ try {
31
+ const { config, default: resolver } = tempApiModule;
32
+ yield (0, apiRouteHandler_1.apiRouteHandler)(req, res, resolver, (config === null || config === void 0 ? void 0 : config.api) || { bodyParser: true });
33
+ }
34
+ catch (error) {
35
+ next(error);
36
+ }
37
+ }
38
+ else {
39
+ next();
40
+ }
41
+ });
42
+ };
43
+ }
44
+ exports.middleware = middleware;
@@ -0,0 +1,3 @@
1
+ import { IPageRouteConfig, IMiddlewareRouteConfig } from '@shuvi/platform-shared/shared';
2
+ export declare const addRoutes: import("@shuvi/hook").AsyncParallelHook<void, void, IPageRouteConfig[]>;
3
+ export declare const addMiddlewareRoutes: import("@shuvi/hook").AsyncParallelHook<void, void, IMiddlewareRouteConfig[]>;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addMiddlewareRoutes = exports.addRoutes = void 0;
4
+ const hook_1 = require("@shuvi/hook");
5
+ exports.addRoutes = (0, hook_1.createAsyncParallelHook)();
6
+ exports.addMiddlewareRoutes = (0, hook_1.createAsyncParallelHook)();
@@ -0,0 +1,20 @@
1
+ import { getRoutes } from './page';
2
+ import { middleware as getMiddlewareMiddleware } from './middleware';
3
+ import { IApiRequestHandler, middleware as getApiMiddleware } from './api';
4
+ export { IApiRequestHandler, getRoutes, getMiddlewareMiddleware, getApiMiddleware };
5
+ declare const _default: {
6
+ core: import("@shuvi/platform-shared/shared").IPluginInstance<{
7
+ extendConfig: import("@shuvi/hook").SyncWaterfallHook<import("@shuvi/service").Config, void>;
8
+ afterInit: import("@shuvi/hook").AsyncParallelHook<void, void, void>;
9
+ afterBuild: import("@shuvi/hook").AsyncParallelHook<void, void, void>;
10
+ afterDestroy: import("@shuvi/hook").AsyncParallelHook<void, void, void>;
11
+ afterBundlerDone: import("@shuvi/hook").AsyncParallelHook<import("@shuvi/service/lib/core/lifecycleTypes").BundlerDoneExtra, void, void>;
12
+ afterBundlerTargetDone: import("@shuvi/hook").AsyncParallelHook<import("@shuvi/service/lib/core/lifecycleTypes").BundlerTargetDoneExtra, void, void>;
13
+ configWebpack: import("@shuvi/hook").AsyncSeriesWaterfallHook<import("@shuvi/service/lib/core/lifecycleTypes").WebpackChainType, import("@shuvi/service/lib/core/lifecycleTypes").ConfigWebpackAssistant>;
14
+ addExtraTarget: import("@shuvi/hook").AsyncParallelHook<import("@shuvi/service/lib/core/lifecycleTypes").ExtraTargetAssistant, void, import("@shuvi/service/lib/core/lifecycleTypes").TargetChain>;
15
+ addResource: import("@shuvi/hook").AsyncParallelHook<void, void, import("@shuvi/service/lib/core/lifecycleTypes").Resources | import("@shuvi/service/lib/core/lifecycleTypes").Resources[]>;
16
+ addRuntimeFile: import("@shuvi/hook").AsyncParallelHook<void, import("@shuvi/service/lib/core/lifecycleTypes").AddRuntimeFileUtils, import("@shuvi/service/lib/project/index").FileOptions<any, any> | import("@shuvi/service/lib/project/index").FileOptions<any, any>[]>;
17
+ addRuntimeService: import("@shuvi/hook").AsyncParallelHook<void, void, import("@shuvi/service/lib/core/lifecycleTypes").RuntimeService | import("@shuvi/service/lib/core/lifecycleTypes").RuntimeService[]>;
18
+ } & import("@shuvi/service/lib/core/apiTypes").CustomCorePluginHooks, import("@shuvi/service").IPluginContext>;
19
+ };
20
+ export default _default;
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.getApiMiddleware = exports.getMiddlewareMiddleware = exports.getRoutes = void 0;
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const build_loaders_1 = require("@shuvi/toolpack/lib/utils/build-loaders");
39
+ const service_1 = require("@shuvi/service");
40
+ const node_1 = require("@shuvi/platform-shared/node");
41
+ const lib_1 = require("../html-render/lib");
42
+ const hooks_1 = require("./hooks");
43
+ const page_1 = require("./page");
44
+ Object.defineProperty(exports, "getRoutes", { enumerable: true, get: function () { return page_1.getRoutes; } });
45
+ const middleware_1 = require("./middleware");
46
+ Object.defineProperty(exports, "getMiddlewareMiddleware", { enumerable: true, get: function () { return middleware_1.middleware; } });
47
+ const api_1 = require("./api");
48
+ Object.defineProperty(exports, "getApiMiddleware", { enumerable: true, get: function () { return api_1.middleware; } });
49
+ const plugin = (0, service_1.createPlugin)({
50
+ setup: ({ addHooks }) => {
51
+ addHooks({ addRoutes: hooks_1.addRoutes, addMiddlewareRoutes: hooks_1.addMiddlewareRoutes });
52
+ },
53
+ addRuntimeFile: ({ defineFile }, context) => __awaiter(void 0, void 0, void 0, function* () {
54
+ const { config: { routes: pageRoutes, middlewareRoutes, apiRoutes, conventionRoutes }, paths, pluginRunner, phase } = context;
55
+ const isBuildPhase = phase === 'PHASE_PRODUCTION_BUILD';
56
+ const pageRoutesFile = defineFile({
57
+ name: 'routes.js',
58
+ content: () => __awaiter(void 0, void 0, void 0, function* () {
59
+ let routes;
60
+ const hasConfigRoutes = Array.isArray(pageRoutes);
61
+ if (hasConfigRoutes) {
62
+ routes = pageRoutes;
63
+ }
64
+ else {
65
+ const { routes: _routes, warnings } = yield (0, node_1.getPageRoutes)(paths.routesDir, conventionRoutes.exclude);
66
+ if (isBuildPhase) {
67
+ warnings.forEach(warning => {
68
+ console.warn(warning.msg);
69
+ });
70
+ }
71
+ routes = _routes;
72
+ }
73
+ const extraRoutes = (yield pluginRunner.addRoutes()).flat();
74
+ const normalizedRoutes = (0, page_1.normalizeRoutes)(
75
+ // user routes come later
76
+ extraRoutes.concat(routes), paths.routesDir);
77
+ (0, page_1.setRoutes)(normalizedRoutes);
78
+ return (0, page_1.generateRoutesContent)(normalizedRoutes);
79
+ }),
80
+ dependencies: [paths.routesDir]
81
+ });
82
+ const apiRoutesFile = defineFile({
83
+ name: 'apiRoutes.js',
84
+ content: () => __awaiter(void 0, void 0, void 0, function* () {
85
+ let routes;
86
+ const hasConfigRoutes = Array.isArray(apiRoutes);
87
+ if (hasConfigRoutes) {
88
+ routes = apiRoutes;
89
+ }
90
+ else {
91
+ const { routes: _routes, warnings } = yield (0, node_1.getApiRoutes)(paths.routesDir, conventionRoutes.exclude);
92
+ if (isBuildPhase) {
93
+ warnings.forEach(warning => {
94
+ console.warn(warning);
95
+ });
96
+ }
97
+ routes = _routes;
98
+ }
99
+ return (0, api_1.generateRoutesContent)(routes, paths.routesDir);
100
+ }),
101
+ dependencies: [paths.routesDir]
102
+ });
103
+ const middlewareRoutesFile = defineFile({
104
+ name: 'middlewareRoutes.js',
105
+ content: () => __awaiter(void 0, void 0, void 0, function* () {
106
+ let routes;
107
+ const hasConfigRoutes = Array.isArray(middlewareRoutes);
108
+ if (hasConfigRoutes) {
109
+ routes = middlewareRoutes;
110
+ }
111
+ else {
112
+ const { routes: _routes, warnings } = yield (0, node_1.getMiddlewareRoutes)(paths.routesDir, conventionRoutes.exclude);
113
+ if (isBuildPhase) {
114
+ warnings.forEach(warning => {
115
+ console.warn(warning);
116
+ });
117
+ }
118
+ routes = _routes;
119
+ }
120
+ const extraRoutes = (yield pluginRunner.addMiddlewareRoutes()).flat();
121
+ return (0, middleware_1.generateRoutesContent)(extraRoutes.concat(routes), {
122
+ baseDir: paths.routesDir
123
+ });
124
+ }),
125
+ dependencies: [paths.routesDir]
126
+ });
127
+ const loadersFile = defineFile({
128
+ name: 'loaders.js',
129
+ content: () => __awaiter(void 0, void 0, void 0, function* () {
130
+ const routes = (0, page_1.getRoutes)();
131
+ const loaders = {};
132
+ const traverseRoutes = (routes) => {
133
+ routes.forEach(r => {
134
+ const { component, id, children } = r;
135
+ if (component && id) {
136
+ const hasLoader = (0, lib_1.ifComponentHasLoader)(component);
137
+ if (hasLoader) {
138
+ loaders[id] = component;
139
+ }
140
+ }
141
+ if (children) {
142
+ traverseRoutes(children);
143
+ }
144
+ });
145
+ };
146
+ traverseRoutes(routes);
147
+ let imports = '';
148
+ let exports = '';
149
+ Object.entries(loaders).forEach((loader, index) => {
150
+ const [id, component] = loader;
151
+ imports += `import { loader as loader_${index} } from '${component}'\n`;
152
+ exports += `'${id}': loader_${index},\n`;
153
+ });
154
+ return `${imports} export default {\n ${exports}\n}`;
155
+ }),
156
+ dependencies: [pageRoutesFile]
157
+ });
158
+ const loadersFileName = path.join(context.paths.appDir, 'files', 'loaders.js');
159
+ const pageLoadersFile = defineFile({
160
+ name: 'page-loaders.js',
161
+ content: () => __awaiter(void 0, void 0, void 0, function* () {
162
+ if (fs.existsSync(loadersFileName)) {
163
+ return yield (0, build_loaders_1.buildToString)(loadersFileName);
164
+ }
165
+ return '';
166
+ }),
167
+ dependencies: [loadersFile]
168
+ });
169
+ return [
170
+ pageRoutesFile,
171
+ apiRoutesFile,
172
+ middlewareRoutesFile,
173
+ loadersFile,
174
+ pageLoadersFile
175
+ ];
176
+ })
177
+ });
178
+ exports.default = {
179
+ core: plugin
180
+ };
@@ -0,0 +1,2 @@
1
+ export { middleware } from './middleware';
2
+ export { generateRoutesContent, IMiddlewareRouteConfig } from './routes';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRoutesContent = exports.middleware = void 0;
4
+ var middleware_1 = require("./middleware");
5
+ Object.defineProperty(exports, "middleware", { enumerable: true, get: function () { return middleware_1.middleware; } });
6
+ var routes_1 = require("./routes");
7
+ Object.defineProperty(exports, "generateRoutesContent", { enumerable: true, get: function () { return routes_1.generateRoutesContent; } });
@@ -0,0 +1,2 @@
1
+ import { IServerPluginContext, IRequestHandlerWithNext } from '@shuvi/service';
2
+ export declare function middleware(_api: IServerPluginContext): IRequestHandlerWithNext;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.middleware = void 0;
13
+ const router_1 = require("@shuvi/router");
14
+ const resources_1 = require("@shuvi/service/lib/resources");
15
+ function middleware(_api) {
16
+ return function (req, res, next) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ const { middlewareRoutes = [] } = resources_1.server;
19
+ // match path for get middlewares
20
+ let middlewares = [];
21
+ for (let i = 0; i < middlewareRoutes.length; i++) {
22
+ const middlewareRoute = middlewareRoutes[i];
23
+ const match = (0, router_1.matchPathname)(middlewareRoute.path, req.pathname);
24
+ if (match) {
25
+ req.params = match.params;
26
+ middlewares.push(middlewareRoutes[i].middleware.default);
27
+ }
28
+ }
29
+ // run middlewares
30
+ let i = 0;
31
+ const runNext = () => runMiddleware(middlewares[++i]);
32
+ const runMiddleware = (middleware) => __awaiter(this, void 0, void 0, function* () {
33
+ if (i === middlewares.length) {
34
+ return next();
35
+ }
36
+ yield middleware(req, res, runNext);
37
+ });
38
+ return yield runMiddleware(middlewares[i]);
39
+ });
40
+ };
41
+ }
42
+ exports.middleware = middleware;
@@ -0,0 +1,9 @@
1
+ import { IMiddlewareRouteConfig } from '@shuvi/platform-shared/node';
2
+ export { IMiddlewareRouteConfig };
3
+ export declare function normalizeMiddlewareRoutes(middlewareRoutes: IMiddlewareRouteConfig[], option: {
4
+ baseDir: string;
5
+ }): IMiddlewareRouteConfig[];
6
+ export declare function serializeMiddlewareRoutes(middlewareRoutes: IMiddlewareRouteConfig[]): string;
7
+ export declare function generateRoutesContent(rawRoutes: IMiddlewareRouteConfig[], { baseDir }: {
8
+ baseDir: string;
9
+ }): string;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRoutesContent = exports.serializeMiddlewareRoutes = exports.normalizeMiddlewareRoutes = void 0;
4
+ const file_1 = require("@shuvi/utils/lib/file");
5
+ function normalizeMiddlewareRoutes(middlewareRoutes, option) {
6
+ const res = [];
7
+ for (let index = 0; index < middlewareRoutes.length; index++) {
8
+ const middlewareRoute = Object.assign({}, middlewareRoutes[index]);
9
+ if (middlewareRoute.middleware) {
10
+ middlewareRoute.middleware = (0, file_1.normalizePath)(middlewareRoute.middleware, option.baseDir);
11
+ }
12
+ res.push(middlewareRoute);
13
+ }
14
+ return res;
15
+ }
16
+ exports.normalizeMiddlewareRoutes = normalizeMiddlewareRoutes;
17
+ function serializeMiddlewareRoutes(middlewareRoutes) {
18
+ let res = '';
19
+ for (let index = 0; index < middlewareRoutes.length; index++) {
20
+ const { middleware, path } = middlewareRoutes[index];
21
+ let strRoute = `\n{
22
+ path: "${path}",
23
+ ${middleware ? `middleware: require("${middleware}"),` : ''}
24
+ },`;
25
+ res += strRoute;
26
+ }
27
+ return `[${res}]`;
28
+ }
29
+ exports.serializeMiddlewareRoutes = serializeMiddlewareRoutes;
30
+ function generateRoutesContent(rawRoutes, { baseDir }) {
31
+ const serialized = serializeMiddlewareRoutes(normalizeMiddlewareRoutes(rawRoutes, { baseDir }));
32
+ return `export default ${serialized}`;
33
+ }
34
+ exports.generateRoutesContent = generateRoutesContent;