@modern-js/prod-server 2.4.0 → 2.5.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.
- package/CHANGELOG.md +27 -0
- package/dist/{js/node → cjs}/constants.js +0 -0
- package/dist/{js/node → cjs}/index.js +0 -0
- package/dist/{js/node → cjs}/libs/context/context.js +0 -0
- package/dist/{js/node → cjs}/libs/context/index.js +0 -0
- package/dist/{js/node → cjs}/libs/hook-api/index.js +12 -25
- package/dist/{js/node → cjs}/libs/hook-api/route.js +0 -0
- package/dist/{js/node → cjs}/libs/hook-api/template.js +0 -0
- package/dist/{js/node → cjs}/libs/loadConfig.js +6 -21
- package/dist/cjs/libs/logger.js +122 -0
- package/dist/{js/node → cjs}/libs/metrics.js +0 -0
- package/dist/{js/node → cjs}/libs/proxy.js +6 -39
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/cache.fun.test.js +12 -34
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/cache.test.js +43 -78
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/cacheable.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/error-configuration.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/matched-cache.js +0 -0
- package/dist/cjs/libs/render/cache/index.js +97 -0
- package/dist/cjs/libs/render/cache/page-caches/index.js +33 -0
- package/dist/{js/node → cjs}/libs/render/cache/page-caches/lru.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/spr.js +69 -97
- package/dist/{js/node → cjs}/libs/render/cache/type.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/util.js +19 -41
- package/dist/cjs/libs/render/index.js +93 -0
- package/dist/{js/node → cjs}/libs/render/measure.js +6 -21
- package/dist/{js/node → cjs}/libs/render/reader.js +24 -46
- package/dist/{js/node → cjs}/libs/render/ssr.js +3 -23
- package/dist/{js/node → cjs}/libs/render/static.js +22 -44
- package/dist/{js/node → cjs}/libs/render/type.js +0 -0
- package/dist/{js/node → cjs}/libs/route/index.js +0 -0
- package/dist/{js/node → cjs}/libs/route/matcher.js +0 -0
- package/dist/{js/node → cjs}/libs/route/route.js +0 -0
- package/dist/{js/node → cjs}/libs/serve-file.js +2 -22
- package/dist/{js/node → cjs}/server/index.js +56 -106
- package/dist/{js/node → cjs}/server/modern-server-split.js +9 -40
- package/dist/cjs/server/modern-server.js +490 -0
- package/dist/{js/node → cjs}/type.js +0 -0
- package/dist/{js/node → cjs}/utils.js +1 -15
- package/dist/{js/node → cjs}/worker-server.js +51 -35
- package/dist/{js/treeshaking → esm}/constants.js +0 -0
- package/dist/{js/treeshaking → esm}/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/context/context.js +2 -2
- package/dist/{js/treeshaking → esm}/libs/context/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/hook-api/index.js +1 -1
- package/dist/{js/treeshaking → esm}/libs/hook-api/route.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/hook-api/template.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/loadConfig.js +0 -0
- package/dist/esm/libs/logger.js +205 -0
- package/dist/{js/treeshaking → esm}/libs/metrics.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/proxy.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/cache.fun.test.js +3 -3
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/cache.test.js +2 -2
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/cacheable.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/error-configuration.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/matched-cache.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/page-caches/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/page-caches/lru.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/spr.js +8 -8
- package/dist/{js/treeshaking → esm}/libs/render/cache/type.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/util.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/index.js +4 -3
- package/dist/{js/treeshaking → esm}/libs/render/measure.js +2 -2
- package/dist/{js/treeshaking → esm}/libs/render/reader.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/ssr.js +3 -3
- package/dist/{js/treeshaking → esm}/libs/render/static.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/type.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/route/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/route/matcher.js +2 -2
- package/dist/{js/treeshaking → esm}/libs/route/route.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/serve-file.js +2 -2
- package/dist/{js/treeshaking → esm}/server/index.js +3 -3
- package/dist/{js/treeshaking → esm}/server/modern-server-split.js +0 -0
- package/dist/{js/treeshaking → esm}/server/modern-server.js +21 -15
- package/dist/{js/treeshaking → esm}/type.js +0 -0
- package/dist/{js/treeshaking → esm}/utils.js +1 -1
- package/dist/{js/treeshaking → esm}/worker-server.js +64 -8
- package/dist/{js/modern → esm-node}/constants.js +0 -0
- package/dist/{js/modern → esm-node}/index.js +0 -0
- package/dist/{js/modern → esm-node}/libs/context/context.js +0 -0
- package/dist/{js/modern → esm-node}/libs/context/index.js +0 -0
- package/dist/{js/modern → esm-node}/libs/hook-api/index.js +12 -27
- package/dist/{js/modern → esm-node}/libs/hook-api/route.js +0 -0
- package/dist/{js/modern → esm-node}/libs/hook-api/template.js +0 -0
- package/dist/esm-node/libs/loadConfig.js +45 -0
- package/dist/esm-node/libs/logger.js +98 -0
- package/dist/{js/modern → esm-node}/libs/metrics.js +0 -0
- package/dist/{js/modern → esm-node}/libs/proxy.js +6 -41
- package/dist/esm-node/libs/render/cache/__tests__/cache.fun.test.js +83 -0
- package/dist/esm-node/libs/render/cache/__tests__/cache.test.js +210 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/__tests__/cacheable.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/__tests__/error-configuration.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/__tests__/matched-cache.js +0 -0
- package/dist/esm-node/libs/render/cache/index.js +76 -0
- package/dist/esm-node/libs/render/cache/page-caches/index.js +10 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/page-caches/lru.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/spr.js +69 -97
- package/dist/{js/modern → esm-node}/libs/render/cache/type.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/util.js +19 -41
- package/dist/esm-node/libs/render/index.js +64 -0
- package/dist/{js/modern → esm-node}/libs/render/measure.js +6 -23
- package/dist/esm-node/libs/render/reader.js +85 -0
- package/dist/{js/modern → esm-node}/libs/render/ssr.js +3 -23
- package/dist/esm-node/libs/render/static.js +38 -0
- package/dist/{js/modern → esm-node}/libs/render/type.js +0 -0
- package/dist/{js/modern → esm-node}/libs/route/index.js +0 -0
- package/dist/{js/modern → esm-node}/libs/route/matcher.js +0 -0
- package/dist/{js/modern → esm-node}/libs/route/route.js +0 -0
- package/dist/{js/modern → esm-node}/libs/serve-file.js +2 -22
- package/dist/esm-node/server/index.js +156 -0
- package/dist/esm-node/server/modern-server-split.js +43 -0
- package/dist/esm-node/server/modern-server.js +483 -0
- package/dist/{js/modern → esm-node}/type.js +0 -0
- package/dist/{js/modern → esm-node}/utils.js +1 -17
- package/dist/esm-node/worker-server.js +69 -0
- package/dist/types/libs/context/context.d.ts +1 -1
- package/dist/types/libs/logger.d.ts +63 -0
- package/dist/types/libs/render/index.d.ts +3 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/worker-server.d.ts +2 -1
- package/package.json +15 -16
- package/dist/js/modern/libs/loadConfig.js +0 -62
- package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -114
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -254
- package/dist/js/modern/libs/render/cache/index.js +0 -115
- package/dist/js/modern/libs/render/cache/page-caches/index.js +0 -32
- package/dist/js/modern/libs/render/index.js +0 -84
- package/dist/js/modern/libs/render/reader.js +0 -107
- package/dist/js/modern/libs/render/static.js +0 -60
- package/dist/js/modern/server/index.js +0 -208
- package/dist/js/modern/server/modern-server-split.js +0 -74
- package/dist/js/modern/server/modern-server.js +0 -548
- package/dist/js/modern/worker-server.js +0 -54
- package/dist/js/node/libs/render/cache/index.js +0 -134
- package/dist/js/node/libs/render/cache/page-caches/index.js +0 -55
- package/dist/js/node/libs/render/index.js +0 -113
- package/dist/js/node/server/modern-server.js +0 -553
|
@@ -257,14 +257,14 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
257
257
|
value: function onInit(runner, app) {
|
|
258
258
|
var _this = this;
|
|
259
259
|
return _asyncToGenerator(function() {
|
|
260
|
-
var
|
|
260
|
+
var _conf_bff, _this_conf_server, distDir, staticGenerate, conf, usageRoutes, staticPathRegExp, ssrConfig, forceCSR;
|
|
261
261
|
return __generator(this, function(_state) {
|
|
262
262
|
switch(_state.label){
|
|
263
263
|
case 0:
|
|
264
264
|
_this.runner = runner;
|
|
265
265
|
distDir = _this.distDir, staticGenerate = _this.staticGenerate, conf = _this.conf;
|
|
266
266
|
debug("final server conf", _this.conf);
|
|
267
|
-
_this.proxyHandler = createProxyHandler((
|
|
267
|
+
_this.proxyHandler = createProxyHandler((_conf_bff = conf.bff) === null || _conf_bff === void 0 ? void 0 : _conf_bff.proxy);
|
|
268
268
|
if (_this.proxyHandler) {
|
|
269
269
|
_this.proxyHandler.forEach(function(handler) {
|
|
270
270
|
_this.addHandler(handler);
|
|
@@ -296,9 +296,12 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
296
296
|
target: distDir
|
|
297
297
|
}
|
|
298
298
|
], _this.conf.output);
|
|
299
|
+
ssrConfig = (_this_conf_server = _this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
|
|
300
|
+
forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
|
|
299
301
|
_this.routeRenderHandler = createRenderHandler({
|
|
300
302
|
distDir: distDir,
|
|
301
|
-
staticGenerate: staticGenerate
|
|
303
|
+
staticGenerate: staticGenerate,
|
|
304
|
+
forceCSR: forceCSR
|
|
302
305
|
});
|
|
303
306
|
return [
|
|
304
307
|
4,
|
|
@@ -393,8 +396,8 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
393
396
|
return __generator(this, function(_state) {
|
|
394
397
|
switch(_state.label){
|
|
395
398
|
case 0:
|
|
396
|
-
req.logger = _this.logger;
|
|
397
|
-
req.metrics = _this.metrics;
|
|
399
|
+
req.logger = req.logger || _this.logger;
|
|
400
|
+
req.metrics = req.metrics || _this.metrics;
|
|
398
401
|
context = createContext(req, res);
|
|
399
402
|
matched = _this.router.match(url || context.path);
|
|
400
403
|
if (!matched) {
|
|
@@ -502,13 +505,13 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
502
505
|
value: function prepareFrameHandler(options) {
|
|
503
506
|
var _this = this;
|
|
504
507
|
return _asyncToGenerator(function() {
|
|
505
|
-
var workDir, runner,
|
|
508
|
+
var workDir, runner, _ref, onlyApi, onlyWeb, _createMiddlewareCollecter, getMiddlewares, collector, _getMiddlewares, pluginAPIExt, pluginWebExt, apiDir, serverDir, webExtension, apiExtension;
|
|
506
509
|
return __generator(this, function(_state) {
|
|
507
510
|
switch(_state.label){
|
|
508
511
|
case 0:
|
|
509
512
|
workDir = _this.workDir, runner = _this.runner;
|
|
510
|
-
|
|
511
|
-
|
|
513
|
+
_ref = options || {}, onlyApi = _ref.onlyApi, onlyWeb = _ref.onlyWeb;
|
|
514
|
+
_createMiddlewareCollecter = createMiddlewareCollecter(), getMiddlewares = _createMiddlewareCollecter.getMiddlewares, collector = _objectWithoutProperties(_createMiddlewareCollecter, [
|
|
512
515
|
"getMiddlewares"
|
|
513
516
|
]);
|
|
514
517
|
return [
|
|
@@ -517,7 +520,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
517
520
|
];
|
|
518
521
|
case 1:
|
|
519
522
|
_state.sent();
|
|
520
|
-
|
|
523
|
+
_getMiddlewares = getMiddlewares(), pluginAPIExt = _getMiddlewares.api, pluginWebExt = _getMiddlewares.web;
|
|
521
524
|
apiDir = path.join(workDir, API_DIR);
|
|
522
525
|
serverDir = path.join(workDir, SERVER_DIR);
|
|
523
526
|
return [
|
|
@@ -606,7 +609,8 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
606
609
|
runner.prepareApiServer({
|
|
607
610
|
pwd: workDir,
|
|
608
611
|
config: extension,
|
|
609
|
-
prefix: Array.isArray(prefix) ? prefix[0] : prefix
|
|
612
|
+
prefix: Array.isArray(prefix) ? prefix[0] : prefix,
|
|
613
|
+
render: _this.render.bind(_this)
|
|
610
614
|
}, {
|
|
611
615
|
onLast: function() {
|
|
612
616
|
return null;
|
|
@@ -715,7 +719,9 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
715
719
|
var bundles = this.router.getBundles();
|
|
716
720
|
bundles.forEach(function(bundle) {
|
|
717
721
|
var filepath = path.join(distDir, bundle);
|
|
718
|
-
|
|
722
|
+
if (fs.existsSync(filepath)) {
|
|
723
|
+
require(filepath);
|
|
724
|
+
}
|
|
719
725
|
});
|
|
720
726
|
}
|
|
721
727
|
},
|
|
@@ -731,7 +737,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
731
737
|
value: function routeHandler(context) {
|
|
732
738
|
var _this = this;
|
|
733
739
|
return _asyncToGenerator(function() {
|
|
734
|
-
var res, matched, route, afterMatchContext,
|
|
740
|
+
var res, matched, route, afterMatchContext, _afterMatchContext_router, current, url, status, matched2, middlewareContext, renderResult, contentStream, response, afterRenderContext;
|
|
735
741
|
return __generator(this, function(_state) {
|
|
736
742
|
switch(_state.label){
|
|
737
743
|
case 0:
|
|
@@ -778,7 +784,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
778
784
|
2
|
|
779
785
|
];
|
|
780
786
|
}
|
|
781
|
-
|
|
787
|
+
_afterMatchContext_router = afterMatchContext.router, current = _afterMatchContext_router.current, url = _afterMatchContext_router.url, status = _afterMatchContext_router.status;
|
|
782
788
|
if (url) {
|
|
783
789
|
_this.redirect(res, url, status);
|
|
784
790
|
return [
|
|
@@ -973,8 +979,8 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
973
979
|
value: function requestHandler(req, res) {
|
|
974
980
|
var next = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() {};
|
|
975
981
|
res.statusCode = 200;
|
|
976
|
-
req.logger = this.logger;
|
|
977
|
-
req.metrics = this.metrics;
|
|
982
|
+
req.logger = req.logger || this.logger;
|
|
983
|
+
req.metrics = req.metrics || this.metrics;
|
|
978
984
|
var context;
|
|
979
985
|
try {
|
|
980
986
|
context = this.createContext(req, res);
|
|
File without changes
|
|
@@ -90,7 +90,7 @@ var useLocalPrefix = function(url) {
|
|
|
90
90
|
};
|
|
91
91
|
var getStaticReg = function() {
|
|
92
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,
|
|
93
|
+
var tmp = output.distPath, _ref = tmp === void 0 ? {} : tmp, cssPath = _ref.css, jsPath = _ref.js, mediaPath = _ref.media, _output_assetPrefix = output.assetPrefix, assetPrefix = _output_assetPrefix === void 0 ? "/" : _output_assetPrefix;
|
|
94
94
|
var favicon = html.favicon, faviconByEntries = html.faviconByEntries;
|
|
95
95
|
var prefix = useLocalPrefix(assetPrefix) ? assetPrefix : "";
|
|
96
96
|
var favicons = prepareFavicons(favicon, faviconByEntries);
|
|
@@ -122,15 +122,20 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
|
-
var
|
|
125
|
+
var _ctx_request, _ctx_request1, _ctx_request2;
|
|
126
|
+
import { Logger } from "./libs/logger";
|
|
126
127
|
import { RouteMatchManager } from "./libs/route";
|
|
128
|
+
import { metrics as defaultMetrics } from "./libs/metrics";
|
|
129
|
+
var handleUrl = function(url) {
|
|
130
|
+
return url.replace(/^https?:\/\/.*?\//gi, "/");
|
|
131
|
+
};
|
|
127
132
|
var createHandler = function(manifest) {
|
|
128
133
|
var routeMgr = new RouteMatchManager();
|
|
129
134
|
var pages = manifest.pages, routes = manifest.routes;
|
|
130
135
|
routeMgr.reset(routes);
|
|
131
136
|
return function() {
|
|
132
137
|
var _ref = _asyncToGenerator(function(ctx) {
|
|
133
|
-
var pageMatch, page, _query, _pathname, _params, params;
|
|
138
|
+
var pageMatch, page, _query, _pathname, _params, params, e;
|
|
134
139
|
return __generator(this, function(_state) {
|
|
135
140
|
switch(_state.label){
|
|
136
141
|
case 0:
|
|
@@ -143,13 +148,26 @@ var createHandler = function(manifest) {
|
|
|
143
148
|
];
|
|
144
149
|
}
|
|
145
150
|
page = pages[pageMatch.spec.urlPath];
|
|
146
|
-
(_query = (
|
|
147
|
-
(_pathname = (
|
|
148
|
-
(_params = (
|
|
151
|
+
(_query = (_ctx_request = ctx.request).query) !== null && _query !== void 0 ? _query : _ctx_request.query = ctx.query;
|
|
152
|
+
(_pathname = (_ctx_request1 = ctx.request).pathname) !== null && _pathname !== void 0 ? _pathname : _ctx_request1.pathname = ctx.pathname;
|
|
153
|
+
(_params = (_ctx_request2 = ctx.request).params) !== null && _params !== void 0 ? _params : _ctx_request2.params = ctx.params;
|
|
149
154
|
params = pageMatch.parseURLParams(ctx.url);
|
|
155
|
+
if (!page.serverRender) return [
|
|
156
|
+
3,
|
|
157
|
+
4
|
|
158
|
+
];
|
|
159
|
+
_state.label = 1;
|
|
160
|
+
case 1:
|
|
161
|
+
_state.trys.push([
|
|
162
|
+
1,
|
|
163
|
+
3,
|
|
164
|
+
,
|
|
165
|
+
4
|
|
166
|
+
]);
|
|
150
167
|
return [
|
|
151
168
|
4,
|
|
152
169
|
page.serverRender({
|
|
170
|
+
entryName: page.entryName,
|
|
153
171
|
template: page.template,
|
|
154
172
|
query: ctx.query,
|
|
155
173
|
request: ctx.request,
|
|
@@ -157,15 +175,53 @@ var createHandler = function(manifest) {
|
|
|
157
175
|
pathname: ctx.pathname,
|
|
158
176
|
req: ctx.request,
|
|
159
177
|
res: ctx.response,
|
|
160
|
-
params: ctx.params || params || {}
|
|
178
|
+
params: ctx.params || params || {},
|
|
179
|
+
logger: ctx.logger || new Logger({
|
|
180
|
+
level: "warn"
|
|
181
|
+
}),
|
|
182
|
+
metrics: ctx.metrics || defaultMetrics,
|
|
183
|
+
loadableStats: ctx.loadableStats,
|
|
184
|
+
routeManifest: ctx.routeManifest
|
|
161
185
|
})
|
|
162
186
|
];
|
|
163
|
-
case
|
|
187
|
+
case 2:
|
|
164
188
|
ctx.body = _state.sent();
|
|
165
189
|
ctx.status = 200;
|
|
166
190
|
return [
|
|
167
191
|
2
|
|
168
192
|
];
|
|
193
|
+
case 3:
|
|
194
|
+
e = _state.sent();
|
|
195
|
+
if (page.template) {
|
|
196
|
+
ctx.body = page.template;
|
|
197
|
+
ctx.status = 200;
|
|
198
|
+
return [
|
|
199
|
+
2
|
|
200
|
+
];
|
|
201
|
+
} else {
|
|
202
|
+
ctx.body = "404: not found";
|
|
203
|
+
ctx.status = 404;
|
|
204
|
+
return [
|
|
205
|
+
2
|
|
206
|
+
];
|
|
207
|
+
}
|
|
208
|
+
return [
|
|
209
|
+
3,
|
|
210
|
+
4
|
|
211
|
+
];
|
|
212
|
+
case 4:
|
|
213
|
+
if (page.template) {
|
|
214
|
+
ctx.body = page.template;
|
|
215
|
+
ctx.status = 200;
|
|
216
|
+
return [
|
|
217
|
+
2
|
|
218
|
+
];
|
|
219
|
+
}
|
|
220
|
+
ctx.body = "404: not found";
|
|
221
|
+
ctx.status = 404;
|
|
222
|
+
return [
|
|
223
|
+
2
|
|
224
|
+
];
|
|
169
225
|
}
|
|
170
226
|
});
|
|
171
227
|
});
|
|
@@ -174,4 +230,4 @@ var createHandler = function(manifest) {
|
|
|
174
230
|
};
|
|
175
231
|
}();
|
|
176
232
|
};
|
|
177
|
-
export { createHandler };
|
|
233
|
+
export { createHandler, handleUrl };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,22 +1,3 @@
|
|
|
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
1
|
import cookie from "cookie";
|
|
21
2
|
import { RouteAPI } from "./route";
|
|
22
3
|
import { TemplateAPI } from "./template";
|
|
@@ -104,27 +85,31 @@ const base = (context) => {
|
|
|
104
85
|
};
|
|
105
86
|
const createAfterMatchContext = (context, entryName) => {
|
|
106
87
|
const baseContext = base(context);
|
|
107
|
-
return
|
|
88
|
+
return {
|
|
89
|
+
...baseContext,
|
|
108
90
|
router: new RouteAPI(entryName)
|
|
109
|
-
}
|
|
91
|
+
};
|
|
110
92
|
};
|
|
111
93
|
const createAfterRenderContext = (context, content) => {
|
|
112
94
|
const baseContext = base(context);
|
|
113
|
-
return
|
|
95
|
+
return {
|
|
96
|
+
...baseContext,
|
|
114
97
|
template: new TemplateAPI(content)
|
|
115
|
-
}
|
|
98
|
+
};
|
|
116
99
|
};
|
|
117
100
|
const createMiddlewareContext = (context) => {
|
|
118
101
|
const baseContext = base(context);
|
|
119
|
-
return
|
|
120
|
-
|
|
102
|
+
return {
|
|
103
|
+
...baseContext,
|
|
104
|
+
response: {
|
|
105
|
+
...baseContext.response,
|
|
121
106
|
locals: context.res.locals || {}
|
|
122
|
-
}
|
|
107
|
+
},
|
|
123
108
|
source: {
|
|
124
109
|
req: context.req,
|
|
125
110
|
res: context.res
|
|
126
111
|
}
|
|
127
|
-
}
|
|
112
|
+
};
|
|
128
113
|
};
|
|
129
114
|
export {
|
|
130
115
|
base,
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { compatRequire, fs, DEFAULT_SERVER_CONFIG } from "@modern-js/utils";
|
|
3
|
+
import mergeDeep from "merge-deep";
|
|
4
|
+
const getServerConfigPath = (distDirectory, serverConfigFile = DEFAULT_SERVER_CONFIG) => {
|
|
5
|
+
const serverConfigPath = path.join(distDirectory, serverConfigFile);
|
|
6
|
+
return `${serverConfigPath}.js`;
|
|
7
|
+
};
|
|
8
|
+
const requireConfig = (serverConfigPath) => {
|
|
9
|
+
if (fs.pathExistsSync(serverConfigPath)) {
|
|
10
|
+
return compatRequire(serverConfigPath);
|
|
11
|
+
}
|
|
12
|
+
return {};
|
|
13
|
+
};
|
|
14
|
+
const loadConfig = ({
|
|
15
|
+
cliConfig,
|
|
16
|
+
serverConfig,
|
|
17
|
+
resolvedConfigPath
|
|
18
|
+
}) => {
|
|
19
|
+
let config = null;
|
|
20
|
+
if (process.env.NODE_ENV === "production") {
|
|
21
|
+
const resolvedConfig = requireConfig(resolvedConfigPath);
|
|
22
|
+
config = mergeDeep(
|
|
23
|
+
{
|
|
24
|
+
...resolvedConfig,
|
|
25
|
+
plugins: []
|
|
26
|
+
},
|
|
27
|
+
serverConfig,
|
|
28
|
+
cliConfig
|
|
29
|
+
);
|
|
30
|
+
} else {
|
|
31
|
+
config = mergeDeep(
|
|
32
|
+
{
|
|
33
|
+
...cliConfig,
|
|
34
|
+
plugins: []
|
|
35
|
+
},
|
|
36
|
+
serverConfig
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return config;
|
|
40
|
+
};
|
|
41
|
+
export {
|
|
42
|
+
getServerConfigPath,
|
|
43
|
+
loadConfig,
|
|
44
|
+
requireConfig
|
|
45
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const LOG_LEVEL = {
|
|
2
|
+
error: 0,
|
|
3
|
+
warn: 1,
|
|
4
|
+
info: 2,
|
|
5
|
+
debug: 3,
|
|
6
|
+
log: 4
|
|
7
|
+
};
|
|
8
|
+
const LOG_TYPES = {
|
|
9
|
+
error: {
|
|
10
|
+
color: "red",
|
|
11
|
+
label: "error",
|
|
12
|
+
level: "error"
|
|
13
|
+
},
|
|
14
|
+
info: {
|
|
15
|
+
color: "cyan",
|
|
16
|
+
label: "info",
|
|
17
|
+
level: "info"
|
|
18
|
+
},
|
|
19
|
+
success: {
|
|
20
|
+
color: "green",
|
|
21
|
+
label: "Success",
|
|
22
|
+
level: "info"
|
|
23
|
+
},
|
|
24
|
+
warn: {
|
|
25
|
+
color: "yellow",
|
|
26
|
+
label: "warn",
|
|
27
|
+
level: "warn"
|
|
28
|
+
},
|
|
29
|
+
debug: {
|
|
30
|
+
color: "red",
|
|
31
|
+
label: "debug",
|
|
32
|
+
level: "debug"
|
|
33
|
+
},
|
|
34
|
+
log: { level: "log" }
|
|
35
|
+
};
|
|
36
|
+
const DEFAULT_CONFIG = {
|
|
37
|
+
displayLabel: true,
|
|
38
|
+
uppercaseLabel: false
|
|
39
|
+
};
|
|
40
|
+
class Logger {
|
|
41
|
+
constructor(options = {}) {
|
|
42
|
+
this.level = options.level || LOG_TYPES.log.level;
|
|
43
|
+
this.config = { ...DEFAULT_CONFIG, ...options.config || {} };
|
|
44
|
+
this.types = {
|
|
45
|
+
...LOG_TYPES,
|
|
46
|
+
...options.types || {}
|
|
47
|
+
};
|
|
48
|
+
this.longestLabel = this.getLongestLabel();
|
|
49
|
+
Object.keys(this.types).forEach((type) => {
|
|
50
|
+
this[type] = this._log.bind(this, type);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
_log(type, message, ...args) {
|
|
54
|
+
if (message === void 0 || message === null) {
|
|
55
|
+
console.log();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (LOG_LEVEL[type] > LOG_LEVEL[this.level]) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
let label = "";
|
|
62
|
+
let text = "";
|
|
63
|
+
const logType = this.types[type];
|
|
64
|
+
if (this.config.displayLabel && logType.label) {
|
|
65
|
+
label = this.config.uppercaseLabel ? logType.label.toUpperCase() : logType.label;
|
|
66
|
+
label = label.padEnd(this.longestLabel.length);
|
|
67
|
+
}
|
|
68
|
+
if (message instanceof Error) {
|
|
69
|
+
if (message.stack) {
|
|
70
|
+
const [name, ...rest] = message.stack.split("\n");
|
|
71
|
+
text = `${name}
|
|
72
|
+
${rest.join("\n")}`;
|
|
73
|
+
} else {
|
|
74
|
+
text = message.message;
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
text = `${message}`;
|
|
78
|
+
}
|
|
79
|
+
const log = label.length > 0 ? `${label} ${text}` : text;
|
|
80
|
+
console.log(log, ...args);
|
|
81
|
+
}
|
|
82
|
+
getLongestLabel() {
|
|
83
|
+
let longestLabel = "";
|
|
84
|
+
Object.keys(this.types).forEach((type) => {
|
|
85
|
+
const { label = "" } = this.types[type];
|
|
86
|
+
if (label.length > longestLabel.length) {
|
|
87
|
+
longestLabel = label;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return longestLabel;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const logger = new Logger();
|
|
94
|
+
logger.Logger = Logger;
|
|
95
|
+
export {
|
|
96
|
+
Logger,
|
|
97
|
+
logger
|
|
98
|
+
};
|
|
File without changes
|
|
@@ -1,39 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
-
var __spreadValues = (a, b) => {
|
|
7
|
-
for (var prop in b || (b = {}))
|
|
8
|
-
if (__hasOwnProp.call(b, prop))
|
|
9
|
-
__defNormalProp(a, prop, b[prop]);
|
|
10
|
-
if (__getOwnPropSymbols)
|
|
11
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
-
if (__propIsEnum.call(b, prop))
|
|
13
|
-
__defNormalProp(a, prop, b[prop]);
|
|
14
|
-
}
|
|
15
|
-
return a;
|
|
16
|
-
};
|
|
17
|
-
var __async = (__this, __arguments, generator) => {
|
|
18
|
-
return new Promise((resolve, reject) => {
|
|
19
|
-
var fulfilled = (value) => {
|
|
20
|
-
try {
|
|
21
|
-
step(generator.next(value));
|
|
22
|
-
} catch (e) {
|
|
23
|
-
reject(e);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
var rejected = (value) => {
|
|
27
|
-
try {
|
|
28
|
-
step(generator.throw(value));
|
|
29
|
-
} catch (e) {
|
|
30
|
-
reject(e);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
34
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
1
|
import { createProxyMiddleware } from "http-proxy-middleware";
|
|
38
2
|
import { debug } from "../utils";
|
|
39
3
|
function formatProxyOptions(proxyOptions) {
|
|
@@ -47,11 +11,12 @@ function formatProxyOptions(proxyOptions) {
|
|
|
47
11
|
Object.keys(proxyOptions).reduce(
|
|
48
12
|
(total, source) => {
|
|
49
13
|
const option = proxyOptions[source];
|
|
50
|
-
total.push(
|
|
14
|
+
total.push({
|
|
51
15
|
context: source,
|
|
52
16
|
changeOrigin: true,
|
|
53
|
-
logLevel: "warn"
|
|
54
|
-
|
|
17
|
+
logLevel: "warn",
|
|
18
|
+
...typeof option === "string" ? { target: option } : option
|
|
19
|
+
});
|
|
55
20
|
return total;
|
|
56
21
|
},
|
|
57
22
|
[]
|
|
@@ -71,7 +36,7 @@ const createProxyHandler = (proxyOptions) => {
|
|
|
71
36
|
const formattedProxy = formatProxyOptions(proxyOptions);
|
|
72
37
|
const middlewares = formattedProxy.map((option) => {
|
|
73
38
|
const middleware = createProxyMiddleware(option.context, option);
|
|
74
|
-
return (ctx, next) =>
|
|
39
|
+
return async (ctx, next) => {
|
|
75
40
|
const { req, res } = ctx;
|
|
76
41
|
const bypassUrl = typeof option.bypass === "function" ? option.bypass(req, res, option) : null;
|
|
77
42
|
if (typeof bypassUrl === "boolean") {
|
|
@@ -82,7 +47,7 @@ const createProxyHandler = (proxyOptions) => {
|
|
|
82
47
|
return next();
|
|
83
48
|
}
|
|
84
49
|
middleware(req, res, next);
|
|
85
|
-
}
|
|
50
|
+
};
|
|
86
51
|
});
|
|
87
52
|
return middlewares;
|
|
88
53
|
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import url from "url";
|
|
2
|
+
import { createCache, destroyCache } from "../spr";
|
|
3
|
+
import {
|
|
4
|
+
cacheAddition,
|
|
5
|
+
connectFactor,
|
|
6
|
+
fname,
|
|
7
|
+
maybeSync,
|
|
8
|
+
namespaceHash,
|
|
9
|
+
valueFactory,
|
|
10
|
+
withCoalescedInvoke
|
|
11
|
+
} from "../util";
|
|
12
|
+
describe("test spr util functions", () => {
|
|
13
|
+
it("should return value correctly", () => {
|
|
14
|
+
expect(connectFactor("bar", "foo")).toBe("bar-foo");
|
|
15
|
+
expect(fname(1)).toBe("f1");
|
|
16
|
+
expect(namespaceHash("modern", "!@#$%^&")).toBe("modern/!@#$%^&");
|
|
17
|
+
});
|
|
18
|
+
it("should create or destroy instance correctly", () => {
|
|
19
|
+
const ins1 = createCache();
|
|
20
|
+
const ins2 = createCache();
|
|
21
|
+
expect(ins1 === ins2).toBe(true);
|
|
22
|
+
destroyCache();
|
|
23
|
+
const ins3 = createCache();
|
|
24
|
+
expect(ins1 === ins3).toBe(false);
|
|
25
|
+
expect(ins2 === ins3).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
it("should return function correctly", () => {
|
|
28
|
+
const urlParams = (() => new url.URLSearchParams())();
|
|
29
|
+
urlParams.set("name", "modern");
|
|
30
|
+
const getParam = valueFactory(urlParams);
|
|
31
|
+
expect(getParam("name")).toBe("modern");
|
|
32
|
+
const headers = { age: "12345" };
|
|
33
|
+
const getHeader = valueFactory(headers);
|
|
34
|
+
expect(getHeader("age")).toBe("12345");
|
|
35
|
+
});
|
|
36
|
+
it("should add target html content", () => {
|
|
37
|
+
const contentNoHead = "<div>123</div>";
|
|
38
|
+
const html = cacheAddition(contentNoHead, Math.random().toString());
|
|
39
|
+
expect(html).toBe(contentNoHead);
|
|
40
|
+
const contentWithHead = "<head></head><div>123</div>";
|
|
41
|
+
const hash = Math.random().toString();
|
|
42
|
+
const htmlWithHead = cacheAddition(contentWithHead, hash);
|
|
43
|
+
expect(htmlWithHead).toBe(
|
|
44
|
+
`<head><meta name="x-moden-spr" content="${hash}"></head><div>123</div>`
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
it("should only invoke func one time", async () => {
|
|
48
|
+
let index = 0;
|
|
49
|
+
const fn = withCoalescedInvoke(
|
|
50
|
+
async () => new Promise((resolve) => {
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
index += 1;
|
|
53
|
+
resolve(index);
|
|
54
|
+
}, 500);
|
|
55
|
+
})
|
|
56
|
+
);
|
|
57
|
+
const key = "test";
|
|
58
|
+
const [res1, res2] = await Promise.all([fn(key, []), fn(key, [])]);
|
|
59
|
+
expect(res1.isOrigin && res2.isOrigin).toBe(false);
|
|
60
|
+
expect(res1.isOrigin || res2.isOrigin).toBe(true);
|
|
61
|
+
expect(res1.value).toBe(1);
|
|
62
|
+
expect(res2.value).toBe(1);
|
|
63
|
+
});
|
|
64
|
+
it("should invoke sync or async", async () => {
|
|
65
|
+
const foo = "";
|
|
66
|
+
const async = await maybeSync(
|
|
67
|
+
() => new Promise((resolve) => {
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
resolve(foo);
|
|
70
|
+
}, 100);
|
|
71
|
+
})
|
|
72
|
+
)(false);
|
|
73
|
+
expect(async).toBeUndefined();
|
|
74
|
+
const sync = await maybeSync(
|
|
75
|
+
() => new Promise((resolve) => {
|
|
76
|
+
setTimeout(() => {
|
|
77
|
+
resolve(foo);
|
|
78
|
+
}, 100);
|
|
79
|
+
})
|
|
80
|
+
)(true);
|
|
81
|
+
expect(sync).toBe(foo);
|
|
82
|
+
});
|
|
83
|
+
});
|