@modern-js/prod-server 1.21.6 → 2.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +274 -13
  2. package/dist/js/modern/constants.js +32 -27
  3. package/dist/js/modern/index.js +11 -7
  4. package/dist/js/modern/libs/context/context.js +54 -132
  5. package/dist/js/modern/libs/context/index.js +5 -2
  6. package/dist/js/modern/libs/hook-api/index.js +134 -0
  7. package/dist/js/modern/libs/hook-api/route.js +13 -37
  8. package/dist/js/modern/libs/hook-api/template.js +41 -32
  9. package/dist/js/modern/libs/loadConfig.js +46 -32
  10. package/dist/js/modern/libs/metrics.js +6 -7
  11. package/dist/js/modern/libs/proxy.js +70 -44
  12. package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +112 -68
  13. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +246 -225
  14. package/dist/js/modern/libs/render/cache/__tests__/cacheable.js +43 -49
  15. package/dist/js/modern/libs/render/cache/__tests__/error-configuration.js +36 -34
  16. package/dist/js/modern/libs/render/cache/__tests__/matched-cache.js +83 -113
  17. package/dist/js/modern/libs/render/cache/index.js +93 -50
  18. package/dist/js/modern/libs/render/cache/page-caches/index.js +31 -8
  19. package/dist/js/modern/libs/render/cache/page-caches/lru.js +6 -16
  20. package/dist/js/modern/libs/render/cache/spr.js +133 -167
  21. package/dist/js/modern/libs/render/cache/type.js +0 -1
  22. package/dist/js/modern/libs/render/cache/util.js +71 -45
  23. package/dist/js/modern/libs/render/index.js +76 -61
  24. package/dist/js/modern/libs/render/measure.js +42 -34
  25. package/dist/js/modern/libs/render/reader.js +68 -76
  26. package/dist/js/modern/libs/render/ssr.js +63 -33
  27. package/dist/js/modern/libs/render/static.js +51 -37
  28. package/dist/js/modern/libs/render/type.js +9 -7
  29. package/dist/js/modern/libs/route/index.js +12 -30
  30. package/dist/js/modern/libs/route/matcher.js +28 -50
  31. package/dist/js/modern/libs/route/route.js +9 -31
  32. package/dist/js/modern/libs/serve-file.js +40 -20
  33. package/dist/js/modern/server/index.js +152 -168
  34. package/dist/js/modern/server/modern-server-split.js +44 -60
  35. package/dist/js/modern/server/modern-server.js +416 -526
  36. package/dist/js/modern/type.js +0 -1
  37. package/dist/js/modern/utils.js +62 -58
  38. package/dist/js/modern/worker-server.js +54 -0
  39. package/dist/js/node/constants.js +53 -32
  40. package/dist/js/node/index.js +37 -67
  41. package/dist/js/node/libs/context/context.js +84 -150
  42. package/dist/js/node/libs/context/index.js +28 -16
  43. package/dist/js/node/libs/hook-api/index.js +164 -0
  44. package/dist/js/node/libs/hook-api/route.js +35 -45
  45. package/dist/js/node/libs/hook-api/template.js +64 -40
  46. package/dist/js/node/libs/loadConfig.js +74 -55
  47. package/dist/js/node/libs/metrics.js +28 -12
  48. package/dist/js/node/libs/proxy.js +90 -55
  49. package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +99 -61
  50. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +147 -140
  51. package/dist/js/node/libs/render/cache/__tests__/cacheable.js +65 -55
  52. package/dist/js/node/libs/render/cache/__tests__/error-configuration.js +58 -40
  53. package/dist/js/node/libs/render/cache/__tests__/matched-cache.js +105 -119
  54. package/dist/js/node/libs/render/cache/index.js +115 -65
  55. package/dist/js/node/libs/render/cache/page-caches/index.js +54 -16
  56. package/dist/js/node/libs/render/cache/page-caches/lru.js +33 -26
  57. package/dist/js/node/libs/render/cache/spr.js +161 -188
  58. package/dist/js/node/libs/render/cache/type.js +15 -5
  59. package/dist/js/node/libs/render/cache/util.js +99 -63
  60. package/dist/js/node/libs/render/index.js +106 -87
  61. package/dist/js/node/libs/render/measure.js +61 -44
  62. package/dist/js/node/libs/render/reader.js +98 -100
  63. package/dist/js/node/libs/render/ssr.js +92 -58
  64. package/dist/js/node/libs/render/static.js +80 -53
  65. package/dist/js/node/libs/render/type.js +31 -13
  66. package/dist/js/node/libs/route/index.js +35 -44
  67. package/dist/js/node/libs/route/matcher.js +48 -65
  68. package/dist/js/node/libs/route/route.js +29 -37
  69. package/dist/js/node/libs/serve-file.js +74 -37
  70. package/dist/js/node/server/index.js +170 -203
  71. package/dist/js/node/server/modern-server-split.js +70 -73
  72. package/dist/js/node/server/modern-server.js +432 -577
  73. package/dist/js/node/type.js +15 -3
  74. package/dist/js/node/utils.js +87 -93
  75. package/dist/js/node/worker-server.js +77 -0
  76. package/dist/js/treeshaking/constants.js +29 -0
  77. package/dist/js/treeshaking/index.js +13 -0
  78. package/dist/js/treeshaking/libs/context/context.js +274 -0
  79. package/dist/js/treeshaking/libs/context/index.js +5 -0
  80. package/dist/js/treeshaking/libs/hook-api/index.js +281 -0
  81. package/dist/js/treeshaking/libs/hook-api/route.js +68 -0
  82. package/dist/js/treeshaking/libs/hook-api/template.js +127 -0
  83. package/dist/js/treeshaking/libs/loadConfig.js +82 -0
  84. package/dist/js/treeshaking/libs/metrics.js +6 -0
  85. package/dist/js/treeshaking/libs/proxy.js +244 -0
  86. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +291 -0
  87. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +781 -0
  88. package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +67 -0
  89. package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +45 -0
  90. package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +147 -0
  91. package/dist/js/treeshaking/libs/render/cache/index.js +346 -0
  92. package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +154 -0
  93. package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +84 -0
  94. package/dist/js/treeshaking/libs/render/cache/spr.js +492 -0
  95. package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
  96. package/dist/js/treeshaking/libs/render/cache/util.js +280 -0
  97. package/dist/js/treeshaking/libs/render/index.js +233 -0
  98. package/dist/js/treeshaking/libs/render/measure.js +146 -0
  99. package/dist/js/treeshaking/libs/render/reader.js +339 -0
  100. package/dist/js/treeshaking/libs/render/ssr.js +223 -0
  101. package/dist/js/treeshaking/libs/render/static.js +216 -0
  102. package/dist/js/treeshaking/libs/render/type.js +7 -0
  103. package/dist/js/treeshaking/libs/route/index.js +130 -0
  104. package/dist/js/treeshaking/libs/route/matcher.js +138 -0
  105. package/dist/js/treeshaking/libs/route/route.js +40 -0
  106. package/dist/js/treeshaking/libs/serve-file.js +184 -0
  107. package/dist/js/treeshaking/server/index.js +505 -0
  108. package/dist/js/treeshaking/server/modern-server-split.js +360 -0
  109. package/dist/js/treeshaking/server/modern-server.js +1083 -0
  110. package/dist/js/treeshaking/type.js +1 -0
  111. package/dist/js/treeshaking/utils.js +147 -0
  112. package/dist/js/treeshaking/worker-server.js +177 -0
  113. package/dist/types/libs/context/context.d.ts +1 -1
  114. package/dist/types/libs/hook-api/index.d.ts +5 -0
  115. package/dist/types/libs/hook-api/route.d.ts +9 -14
  116. package/dist/types/libs/hook-api/template.d.ts +19 -9
  117. package/dist/types/libs/render/cache/index.d.ts +4 -2
  118. package/dist/types/libs/render/type.d.ts +3 -1
  119. package/dist/types/libs/route/route.d.ts +0 -1
  120. package/dist/types/libs/serve-file.d.ts +2 -1
  121. package/dist/types/server/index.d.ts +2 -0
  122. package/dist/types/server/modern-server.d.ts +11 -11
  123. package/dist/types/type.d.ts +8 -10
  124. package/dist/types/utils.d.ts +3 -4
  125. package/dist/types/worker-server.d.ts +15 -0
  126. package/package.json +31 -45
  127. package/dist/js/modern/libs/render/modern/browser-list.js +0 -7
  128. package/dist/js/modern/libs/render/modern/index.js +0 -48
  129. package/dist/js/node/libs/render/modern/browser-list.js +0 -14
  130. package/dist/js/node/libs/render/modern/index.js +0 -64
  131. package/dist/types/libs/render/modern/browser-list.d.ts +0 -1
  132. package/dist/types/libs/render/modern/index.d.ts +0 -3
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,147 @@
1
+ function _arrayLikeToArray(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _arrayWithoutHoles(arr) {
7
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
8
+ }
9
+ function _defineProperty(obj, key, value) {
10
+ if (key in obj) {
11
+ Object.defineProperty(obj, key, {
12
+ value: value,
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true
16
+ });
17
+ } else {
18
+ obj[key] = value;
19
+ }
20
+ return obj;
21
+ }
22
+ function _iterableToArray(iter) {
23
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
24
+ }
25
+ function _nonIterableSpread() {
26
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
27
+ }
28
+ function _objectSpread(target) {
29
+ for(var i = 1; i < arguments.length; i++){
30
+ var source = arguments[i] != null ? arguments[i] : {};
31
+ var ownKeys = Object.keys(source);
32
+ if (typeof Object.getOwnPropertySymbols === "function") {
33
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
34
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
35
+ }));
36
+ }
37
+ ownKeys.forEach(function(key) {
38
+ _defineProperty(target, key, source[key]);
39
+ });
40
+ }
41
+ return target;
42
+ }
43
+ function _toConsumableArray(arr) {
44
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
45
+ }
46
+ function _unsupportedIterableToArray(o, minLen) {
47
+ if (!o) return;
48
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
49
+ var n = Object.prototype.toString.call(o).slice(8, -1);
50
+ if (n === "Object" && o.constructor) n = o.constructor.name;
51
+ if (n === "Map" || n === "Set") return Array.from(n);
52
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
53
+ }
54
+ import { createDebugger, isProd } from "@modern-js/utils";
55
+ var debug = createDebugger("prod-server");
56
+ var mergeExtension = function(users) {
57
+ var output = [];
58
+ return {
59
+ middleware: output.concat(users)
60
+ };
61
+ };
62
+ var noop = function() {};
63
+ var createErrorDocument = function(status, text) {
64
+ var title = "".concat(status, ": ").concat(text);
65
+ return '<!DOCTYPE html>\n <html lang="en">\n <head>\n <meta charset="utf-8">\n <meta name="viewport" content="width=device-width">\n <title>'.concat(title, '</title>\n <style>\n html,body {\n margin: 0;\n }\n\n .page-container {\n color: #000;\n background: #fff;\n height: 100vh;\n text-align: center;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n </style>\n </head>\n <body>\n <div class="page-container">\n <h1>').concat(status, "</h1>\n <div>").concat(text, "</div>\n </body>\n </html>\n ");
66
+ };
67
+ var createMiddlewareCollecter = function() {
68
+ var webMiddlewares = [];
69
+ var apiMiddlewares = [];
70
+ var addWebMiddleware = function(input) {
71
+ webMiddlewares.push(input);
72
+ };
73
+ var addAPIMiddleware = function(input) {
74
+ apiMiddlewares.push(input);
75
+ };
76
+ var getMiddlewares = function() {
77
+ return {
78
+ web: webMiddlewares,
79
+ api: apiMiddlewares
80
+ };
81
+ };
82
+ return {
83
+ getMiddlewares: getMiddlewares,
84
+ addWebMiddleware: addWebMiddleware,
85
+ addAPIMiddleware: addAPIMiddleware
86
+ };
87
+ };
88
+ var useLocalPrefix = function(url) {
89
+ return isProd() && !url.includes(".");
90
+ };
91
+ var getStaticReg = function() {
92
+ var output = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, html = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
93
+ var tmp = output.distPath, ref = tmp === void 0 ? {} : tmp, cssPath = ref.css, jsPath = ref.js, mediaPath = ref.media, _assetPrefix = output.assetPrefix, assetPrefix = _assetPrefix === void 0 ? "/" : _assetPrefix;
94
+ var favicon = html.favicon, faviconByEntries = html.faviconByEntries;
95
+ var prefix = useLocalPrefix(assetPrefix) ? assetPrefix : "";
96
+ var favicons = prepareFavicons(favicon, faviconByEntries);
97
+ var staticFiles = [
98
+ cssPath,
99
+ jsPath,
100
+ mediaPath
101
+ ].filter(function(v) {
102
+ return Boolean(v);
103
+ });
104
+ var staticReg = [
105
+ "static/",
106
+ "upload/"
107
+ ].concat(_toConsumableArray(staticFiles));
108
+ var iconReg = [
109
+ "favicon.ico",
110
+ "icon.png"
111
+ ].concat(_toConsumableArray(favicons));
112
+ var regPrefix = prefix.endsWith("/") ? prefix : "".concat(prefix, "/");
113
+ var staticPathRegExp = new RegExp("^".concat(regPrefix, "(").concat(_toConsumableArray(staticReg).concat(_toConsumableArray(iconReg)).join("|"), ")"));
114
+ return staticPathRegExp;
115
+ };
116
+ var prepareFavicons = function(favicon, faviconByEntries) {
117
+ var faviconNames = [];
118
+ if (favicon) {
119
+ faviconNames.push(favicon.substring(favicon.lastIndexOf("/") + 1));
120
+ }
121
+ if (faviconByEntries) {
122
+ Object.keys(faviconByEntries).forEach(function(f) {
123
+ var curFavicon = faviconByEntries[f];
124
+ if (curFavicon) {
125
+ faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf("/") + 1));
126
+ }
127
+ });
128
+ }
129
+ return faviconNames;
130
+ };
131
+ var headersWithoutCookie = function(headers) {
132
+ if (typeof headers.cookie !== "undefined") {
133
+ var safeHeaders = _objectSpread({}, headers);
134
+ delete safeHeaders.cookie;
135
+ return safeHeaders;
136
+ }
137
+ return headers;
138
+ };
139
+ var isRedirect = function(code) {
140
+ return [
141
+ 301,
142
+ 302,
143
+ 307,
144
+ 308
145
+ ].includes(code);
146
+ };
147
+ export { createErrorDocument, createMiddlewareCollecter, debug, getStaticReg, headersWithoutCookie, isRedirect, mergeExtension, noop, prepareFavicons, useLocalPrefix };
@@ -0,0 +1,177 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ if (info.done) {
10
+ resolve(value);
11
+ } else {
12
+ Promise.resolve(value).then(_next, _throw);
13
+ }
14
+ }
15
+ function _asyncToGenerator(fn) {
16
+ return function() {
17
+ var self = this, args = arguments;
18
+ return new Promise(function(resolve, reject) {
19
+ var gen = fn.apply(self, args);
20
+ function _next(value) {
21
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
+ }
23
+ function _throw(err) {
24
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
+ }
26
+ _next(undefined);
27
+ });
28
+ };
29
+ }
30
+ var __generator = this && this.__generator || function(thisArg, body) {
31
+ var f, y, t, g, _ = {
32
+ label: 0,
33
+ sent: function() {
34
+ if (t[0] & 1) throw t[1];
35
+ return t[1];
36
+ },
37
+ trys: [],
38
+ ops: []
39
+ };
40
+ return(g = {
41
+ next: verb(0),
42
+ "throw": verb(1),
43
+ "return": verb(2)
44
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
45
+ return this;
46
+ }), g);
47
+ function verb(n) {
48
+ return function(v) {
49
+ return step([
50
+ n,
51
+ v
52
+ ]);
53
+ };
54
+ }
55
+ function step(op) {
56
+ if (f) throw new TypeError("Generator is already executing.");
57
+ while(_)try {
58
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
59
+ if (y = 0, t) op = [
60
+ op[0] & 2,
61
+ t.value
62
+ ];
63
+ switch(op[0]){
64
+ case 0:
65
+ case 1:
66
+ t = op;
67
+ break;
68
+ case 4:
69
+ _.label++;
70
+ return {
71
+ value: op[1],
72
+ done: false
73
+ };
74
+ case 5:
75
+ _.label++;
76
+ y = op[1];
77
+ op = [
78
+ 0
79
+ ];
80
+ continue;
81
+ case 7:
82
+ op = _.ops.pop();
83
+ _.trys.pop();
84
+ continue;
85
+ default:
86
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
87
+ _ = 0;
88
+ continue;
89
+ }
90
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
91
+ _.label = op[1];
92
+ break;
93
+ }
94
+ if (op[0] === 6 && _.label < t[1]) {
95
+ _.label = t[1];
96
+ t = op;
97
+ break;
98
+ }
99
+ if (t && _.label < t[2]) {
100
+ _.label = t[2];
101
+ _.ops.push(op);
102
+ break;
103
+ }
104
+ if (t[2]) _.ops.pop();
105
+ _.trys.pop();
106
+ continue;
107
+ }
108
+ op = body.call(thisArg, _);
109
+ } catch (e) {
110
+ op = [
111
+ 6,
112
+ e
113
+ ];
114
+ y = 0;
115
+ } finally{
116
+ f = t = 0;
117
+ }
118
+ if (op[0] & 5) throw op[1];
119
+ return {
120
+ value: op[0] ? op[1] : void 0,
121
+ done: true
122
+ };
123
+ }
124
+ };
125
+ var _request, _request1, _request2;
126
+ import { RouteMatchManager } from "./libs/route";
127
+ var createHandler = function(manifest) {
128
+ var routeMgr = new RouteMatchManager();
129
+ var pages = manifest.pages, routes = manifest.routes;
130
+ routeMgr.reset(routes);
131
+ return function() {
132
+ var _ref = _asyncToGenerator(function(ctx) {
133
+ var pageMatch, page, _query, _pathname, _params, params;
134
+ return __generator(this, function(_state) {
135
+ switch(_state.label){
136
+ case 0:
137
+ pageMatch = routeMgr.match(ctx.url);
138
+ if (!pageMatch) {
139
+ ctx.body = "404: Page not found";
140
+ ctx.status = 404;
141
+ return [
142
+ 2
143
+ ];
144
+ }
145
+ page = pages[pageMatch.spec.urlPath];
146
+ (_query = (_request = ctx.request).query) !== null && _query !== void 0 ? _query : _request.query = ctx.query;
147
+ (_pathname = (_request1 = ctx.request).pathname) !== null && _pathname !== void 0 ? _pathname : _request1.pathname = ctx.pathname;
148
+ (_params = (_request2 = ctx.request).params) !== null && _params !== void 0 ? _params : _request2.params = ctx.params;
149
+ params = pageMatch.parseURLParams(ctx.url);
150
+ return [
151
+ 4,
152
+ page.serverRender({
153
+ template: page.template,
154
+ query: ctx.query,
155
+ request: ctx.request,
156
+ response: ctx.response,
157
+ pathname: ctx.pathname,
158
+ req: ctx.request,
159
+ res: ctx.response,
160
+ params: ctx.params || params || {}
161
+ })
162
+ ];
163
+ case 1:
164
+ ctx.body = _state.sent();
165
+ ctx.status = 200;
166
+ return [
167
+ 2
168
+ ];
169
+ }
170
+ });
171
+ });
172
+ return function(ctx) {
173
+ return _ref.apply(this, arguments);
174
+ };
175
+ }();
176
+ };
177
+ export { createHandler };
@@ -1,9 +1,9 @@
1
- /// <reference path="../../type.d.ts" />
2
1
  /// <reference types="node" />
3
2
  /// <reference types="node" />
4
3
  /// <reference types="node" />
5
4
  /// <reference types="node" />
6
5
  /// <reference types="node/http" />
6
+ /// <reference types=".dts-temp/8-abj5cxwfao2-yqb9uay/src/type" />
7
7
  import { IncomingMessage, ServerResponse } from 'http';
8
8
  import { URL } from 'url';
9
9
  import qs from 'querystring';
@@ -0,0 +1,5 @@
1
+ import type { ModernServerContext, HookContext, AfterMatchContext, AfterRenderContext, MiddlewareContext } from '@modern-js/types';
2
+ export declare const base: (context: ModernServerContext) => HookContext;
3
+ export declare const createAfterMatchContext: (context: ModernServerContext, entryName: string) => AfterMatchContext;
4
+ export declare const createAfterRenderContext: (context: ModernServerContext, content: string) => AfterRenderContext;
5
+ export declare const createMiddlewareContext: (context: ModernServerContext) => MiddlewareContext;
@@ -1,14 +1,9 @@
1
- import { RouteMatchManager, RouteMatcher } from '../route';
2
-
3
- declare class RouteAPI {
4
- private readonly router;
5
- private current;
6
- private readonly url;
7
- constructor(matched: RouteMatcher, router: RouteMatchManager, url: string);
8
- cur(): import("../route").ModernRoute;
9
- get(entryName: string): import("../route").ModernRoute | null;
10
- use(entryName: string): boolean;
11
- }
12
-
13
- export declare const createRouteAPI: (matched: RouteMatcher, router: RouteMatchManager, url: string) => RouteAPI;
14
- export {};
1
+ export declare class RouteAPI {
2
+ current: string;
3
+ status: number;
4
+ url: string;
5
+ constructor(entryName: string);
6
+ redirect(url: string, status?: number): void;
7
+ rewrite(entryName: string): void;
8
+ use(entryName: string): void;
9
+ }
@@ -1,14 +1,24 @@
1
- declare class TemplateAPI {
1
+ /// <reference types="node" />
2
+ import { Transform } from 'stream';
3
+ export declare class TemplateAPI {
2
4
  private content;
3
5
  constructor(content: string);
4
6
  get(): string;
5
7
  set(content: string): void;
6
- prependHead(fragment: string): this;
7
- appendHead(fragment: string): this;
8
- prependBody(fragment: string): this;
9
- appendBody(fragment: string): this;
10
- replace(reg: RegExp | string, text: string): this;
8
+ prependHead(fragment: string): void;
9
+ appendHead(fragment: string): void;
10
+ prependBody(fragment: string): void;
11
+ appendBody(fragment: string): void;
12
+ private replace;
11
13
  }
12
-
13
- export declare const createTemplateAPI: (content: string) => TemplateAPI;
14
- export {};
14
+ export declare const templateInjectableStream: ({
15
+ prependHead,
16
+ appendHead,
17
+ prependBody,
18
+ appendBody
19
+ }: {
20
+ prependHead?: string | undefined;
21
+ appendHead?: string | undefined;
22
+ prependBody?: string | undefined;
23
+ appendBody?: string | undefined;
24
+ }) => Transform;
@@ -1,6 +1,8 @@
1
+ /// <reference types="node" />
2
+ import { Readable } from 'stream';
1
3
  import type { ModernServerContext } from '@modern-js/types';
2
- import { RenderFunction } from '../type';
4
+ import { RenderFunction, SSRServerContext } from '../type';
3
5
 
4
- declare const _default: (renderFn: RenderFunction, ctx: ModernServerContext) => RenderFunction;
6
+ declare const _default: (renderFn: RenderFunction, ctx: ModernServerContext) => (context: SSRServerContext) => Promise<string | Readable>;
5
7
 
6
8
  export default _default;
@@ -1,4 +1,6 @@
1
1
  /// <reference types="react" />
2
+ /// <reference types="node" />
3
+ import { Writable, Readable } from 'stream';
2
4
  import { BaseSSRServerContext } from '@modern-js/types';
3
5
  declare type MetaKeyMap = {
4
6
  header?: string[];
@@ -30,5 +32,5 @@ export declare type ModernSSRReactComponent = React.ComponentType<any> & {
30
32
  init: (context: SSRServerContext) => Promise<void>;
31
33
  prefetch: (context: SSRServerContext) => Promise<Record<string, any>>;
32
34
  };
33
- export declare type RenderFunction = (context: SSRServerContext) => Promise<string>;
35
+ export declare type RenderFunction = (context: SSRServerContext) => Promise<string | ((writable: Writable) => Promise<Readable>)>;
34
36
  export {};
@@ -8,7 +8,6 @@ export declare class ModernRoute implements ModernRouteInterface {
8
8
  isApi: boolean;
9
9
  isSSR: boolean;
10
10
  isSPA: boolean;
11
- enableModernMode?: boolean;
12
11
  params: Record<string, any>;
13
12
  responseHeaders?: Record<string, any>;
14
13
  constructor(routeSpec: ModernRouteInterface);
@@ -1,9 +1,10 @@
1
1
  import { ServerOptions } from '@modern-js/server-core';
2
2
  import type { ModernServerContext } from '@modern-js/types';
3
- import { NextFunction } from '../type';
3
+ import { NextFunction, ModernServerHandler } from '../type';
4
4
  declare type Rule = {
5
5
  path: string | RegExp;
6
6
  target: string;
7
7
  };
8
+ export declare const faviconFallbackHandler: ModernServerHandler;
8
9
  export declare const createStaticFileHandler: (rules: Rule[], output?: ServerOptions['output']) => (context: ModernServerContext, next: NextFunction) => Promise<void>;
9
10
  export {};
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="node" />
2
3
  import { IncomingMessage, ServerResponse } from 'http';
3
4
  import type { ListenOptions } from 'net';
4
5
  import { ModernServerOptions, ServerConstructor } from '../type';
@@ -44,6 +45,7 @@ export declare class Server {
44
45
  close(): Promise<void>;
45
46
  listen<T extends number | ListenOptions | undefined>(options: T, listener: any): void;
46
47
  getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void;
48
+ render(req: IncomingMessage, res: ServerResponse, url?: string): Promise<string | null>;
47
49
  private createHookRunner;
48
50
  private injectContext;
49
51
  private initAppContext;
@@ -1,9 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  import { IncomingMessage, ServerResponse, Server } from 'http';
3
- import { Adapter, APIServerStartInput, ServerOptions } from '@modern-js/server-core';
4
- import type { ModernServerContext } from '@modern-js/types';
3
+ import { Adapter, WebAdapter, APIServerStartInput, ServerOptions } from '@modern-js/server-core';
4
+ import type { ModernServerContext, ServerRoute } from '@modern-js/types';
5
5
  import type { ContextOptions } from '../libs/context';
6
- import { ModernServerOptions, NextFunction, ServerHookRunner, Metrics, Logger, ModernServerInterface, HookNames, BuildOptions, ModernServerHandler } from '../type';
6
+ import { ModernServerOptions, NextFunction, ServerHookRunner, Metrics, Logger, ModernServerInterface, BuildOptions, ModernServerHandler } from '../type';
7
7
  import { RouteMatchManager, ModernRouteInterface, ModernRoute } from '../libs/route';
8
8
  import { mergeExtension } from '../utils';
9
9
  import * as reader from '../libs/render/reader';
@@ -24,6 +24,7 @@ export declare class ModernServer implements ModernServerInterface {
24
24
  protected readonly proxyTarget: ModernServerOptions['proxyTarget'];
25
25
  private staticFileHandler;
26
26
  private routeRenderHandler;
27
+ private beforeRouteHandler;
27
28
  private frameWebHandler;
28
29
  private frameAPIHandler;
29
30
  private proxyHandler;
@@ -41,27 +42,26 @@ export declare class ModernServer implements ModernServerInterface {
41
42
  }: ModernServerOptions);
42
43
  onInit(runner: ServerHookRunner, app: Server): Promise<void>;
43
44
  onRepack(_: BuildOptions): void;
45
+ addBeforeRouteHandler(): void;
44
46
  protected onServerChange({
45
47
  filepath
46
48
  }: {
47
49
  filepath: string;
48
50
  }): void;
49
51
  getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void | ServerResponse;
52
+ render(req: IncomingMessage, res: ServerResponse, url?: string): Promise<string | null>;
50
53
  createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server>;
51
- protected getRoutes(): ModernRouteInterface[];
54
+ protected getRoutes(): ServerRoute[];
52
55
  protected addHandler(handler: ModernServerHandler): void;
53
56
  protected render404(context: ModernServerContext): void;
57
+ protected prepareBeforeRouteHandler(specs: ServerRoute[], distDir: string): Promise<void>;
54
58
  protected prepareFrameHandler(options?: {
55
59
  onlyApi: boolean;
56
60
  onlyWeb: boolean;
57
61
  }): Promise<void>;
58
- protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<Adapter>;
62
+ protected prepareWebHandler(extension: ReturnType<typeof mergeExtension>): Promise<WebAdapter>;
59
63
  protected prepareAPIHandler(extension: APIServerStartInput['config']): Promise<Adapter>;
60
- protected filterRoutes(routes: ModernRouteInterface[]): ModernRouteInterface[];
61
- protected emitRouteHook(eventName: HookNames, input: {
62
- context: ModernServerContext;
63
- [propsName: string]: any;
64
- }): Promise<any>;
64
+ protected filterRoutes(routes: ModernRouteInterface[]): ServerRoute[];
65
65
  protected setupBeforeProdMiddleware(): Promise<void>;
66
66
  protected handleAPI(context: ModernServerContext): Promise<void>;
67
67
  protected handleWeb(context: ModernServerContext, route: ModernRoute): Promise<import("../type").RenderResult | null>;
@@ -70,9 +70,9 @@ export declare class ModernServer implements ModernServerInterface {
70
70
  protected createContext(req: IncomingMessage, res: ServerResponse, options?: ContextOptions): import("../libs/context").ModernServerContext;
71
71
  private routeHandler;
72
72
  private isSend;
73
- private injectMicroFE;
74
73
  private compose;
75
74
  private requestHandler;
75
+ private redirect;
76
76
  private onError;
77
77
  private renderErrorPage;
78
78
  }
@@ -1,9 +1,11 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import { IncomingMessage, Server, ServerResponse } from 'http';
5
+ import { Readable } from 'stream';
4
6
  import { serverManager, ServerOptions } from '@modern-js/server-core';
5
7
  import type { ServerPlugin } from '@modern-js/server-core';
6
- import type { Metrics, Logger, NextFunction, ModernServerContext } from '@modern-js/types';
8
+ import type { Metrics, Logger, NextFunction, ModernServerContext, InternalPlugins } from '@modern-js/types';
7
9
  import type { ModernRouteInterface } from './libs/route';
8
10
  declare module 'http' {
9
11
  interface IncomingMessage {
@@ -11,30 +13,25 @@ declare module 'http' {
11
13
  metrics: Metrics;
12
14
  }
13
15
  }
14
- declare type Plugin = string | [string, any] | ServerPlugin;
15
16
  export declare type ModernServerOptions = {
16
17
  pwd: string;
17
18
  config: ServerOptions;
18
- plugins?: Plugin[];
19
+ plugins?: ServerPlugin[];
20
+ internalPlugins?: InternalPlugins;
19
21
  routes?: ModernRouteInterface[];
20
22
  staticGenerate?: boolean;
21
- loggerOptions?: Record<string, string>;
22
- metricsOptions?: Record<string, string>;
23
23
  logger?: Logger;
24
24
  metrics?: Metrics;
25
25
  apiOnly?: boolean;
26
26
  ssrOnly?: boolean;
27
27
  webOnly?: boolean;
28
- proxyTarget?: {
29
- ssr?: string;
30
- api?: string;
31
- };
32
28
  runMode?: string;
33
29
  [propName: string]: any;
34
30
  };
35
31
  export declare type RenderResult = {
36
32
  content: string | Buffer;
37
33
  contentType: string;
34
+ contentStream?: Readable;
38
35
  statusCode?: number;
39
36
  redirect?: boolean;
40
37
  };
@@ -49,7 +46,7 @@ export declare type BuildOptions = {
49
46
  routes?: ModernRouteInterface[];
50
47
  };
51
48
  export type { Metrics, Logger, NextFunction };
52
- export declare type HookNames = 'beforeMatch' | 'afterMatch' | 'beforeRender' | 'afterRender';
49
+ export declare type HookNames = 'afterMatch' | 'afterRender';
53
50
  export interface ModernServerInterface {
54
51
  pwd: string;
55
52
  distDir: string;
@@ -57,6 +54,7 @@ export interface ModernServerInterface {
57
54
  onRepack: (options: BuildOptions) => void;
58
55
  getRequestHandler: () => (req: IncomingMessage, res: ServerResponse, next?: () => void) => void;
59
56
  createHTTPServer: (handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void) => Promise<Server>;
57
+ render: (req: IncomingMessage, res: ServerResponse, url?: string) => Promise<string | null>;
60
58
  }
61
59
  export declare type ServerConstructor = (options: ModernServerOptions) => ModernServerInterface;
62
60
  export declare type ModernServerHandler = (context: ModernServerContext, next: NextFunction) => Promise<void> | void;
@@ -1,8 +1,8 @@
1
- /// <reference path="type.d.ts" />
2
1
  /// <reference types="node" />
3
2
  /// <reference types="node/http" />
3
+ /// <reference types=".dts-temp/8-abj5cxwfao2-yqb9uay/src/type" />
4
4
  import { IncomingMessage } from 'http';
5
- import type { NormalizedConfig } from '@modern-js/core';
5
+ import type { OutputNormalizedConfig, HtmlNormalizedConfig } from '@modern-js/server-core';
6
6
  export declare const debug: any;
7
7
  export declare const mergeExtension: (users: any[]) => {
8
8
  middleware: any[];
@@ -18,9 +18,8 @@ export declare const createMiddlewareCollecter: () => {
18
18
  addWebMiddleware: (input: any) => void;
19
19
  addAPIMiddleware: (input: any) => void;
20
20
  };
21
- export declare const toPath: (reg: string, params: Record<string, any>) => string;
22
21
  export declare const useLocalPrefix: (url: string) => boolean;
23
- export declare const getStaticReg: (output?: NormalizedConfig['output']) => RegExp;
22
+ export declare const getStaticReg: (output?: OutputNormalizedConfig, html?: HtmlNormalizedConfig) => RegExp;
24
23
  export declare const prepareFavicons: (favicon: string | undefined, faviconByEntries?: Record<string, string | undefined>) => string[];
25
24
  export declare const headersWithoutCookie: (headers: IncomingMessage['headers']) => import("http").IncomingHttpHeaders;
26
25
  export declare const isRedirect: (code: number) => boolean;
@@ -0,0 +1,15 @@
1
+ import { ModernRouteInterface } from './libs/route';
2
+ export declare type Context = Record<string, any>;
3
+ export interface UrlQuery {
4
+ [key: string]: string;
5
+ }
6
+ export declare type Manifest = {
7
+ pages: Record<string, // path
8
+ {
9
+ entryName: string;
10
+ template: string;
11
+ serverRender: (ctx: Record<string, any>) => Promise<string>;
12
+ }>;
13
+ routes: ModernRouteInterface[];
14
+ };
15
+ export declare const createHandler: (manifest: Manifest) => (ctx: Context) => Promise<void>;