@modern-js/prod-server 2.9.0 → 2.10.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 +25 -0
- package/dist/cjs/libs/hook-api/index.js +7 -26
- package/dist/cjs/libs/render/index.js +2 -1
- package/dist/cjs/libs/render/ssr.js +3 -2
- package/dist/cjs/libs/render/utils.js +47 -0
- package/dist/cjs/server/index.js +8 -6
- package/dist/cjs/server/modernServer.js +75 -80
- package/dist/esm/libs/hook-api/index.js +9 -37
- package/dist/esm/libs/render/index.js +2 -1
- package/dist/esm/libs/render/ssr.js +3 -2
- package/dist/esm/libs/render/utils.js +12 -0
- package/dist/esm/server/index.js +71 -18
- package/dist/esm/server/modernServer.js +108 -103
- package/dist/esm-node/libs/hook-api/index.js +7 -26
- package/dist/esm-node/libs/render/index.js +2 -1
- package/dist/esm-node/libs/render/ssr.js +3 -2
- package/dist/esm-node/libs/render/utils.js +23 -0
- package/dist/esm-node/server/index.js +9 -6
- package/dist/esm-node/server/modernServer.js +75 -80
- package/dist/types/libs/context/context.d.ts +1 -1
- package/dist/types/libs/render/utils.d.ts +5 -0
- package/dist/types/server/index.d.ts +2 -1
- package/dist/types/server/modernServer.d.ts +4 -4
- package/dist/types/type.d.ts +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/package.json +11 -9
package/dist/esm/server/index.js
CHANGED
|
@@ -219,8 +219,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
219
219
|
}
|
|
220
220
|
};
|
|
221
221
|
import path from "path";
|
|
222
|
-
import fs from "
|
|
223
|
-
import { Logger, SHARED_DIR, OUTPUT_CONFIG_FILE, dotenv, dotenvExpand, INTERNAL_SERVER_PLUGINS } from "@modern-js/utils";
|
|
222
|
+
import { fs, Logger, SHARED_DIR, OUTPUT_CONFIG_FILE, dotenv, dotenvExpand, INTERNAL_SERVER_PLUGINS } from "@modern-js/utils";
|
|
224
223
|
import { serverManager, AppContext, ConfigContext, loadPlugins } from "@modern-js/server-core";
|
|
225
224
|
import { metrics as defaultMetrics } from "../libs/metrics";
|
|
226
225
|
import { loadConfig, getServerConfigPath, requireConfig } from "../libs/loadConfig";
|
|
@@ -267,50 +266,55 @@ var Server = /*#__PURE__*/ function() {
|
|
|
267
266
|
switch(_state.label){
|
|
268
267
|
case 0:
|
|
269
268
|
options = _this.options;
|
|
270
|
-
|
|
269
|
+
return [
|
|
270
|
+
4,
|
|
271
|
+
_this.loadServerEnv(options)
|
|
272
|
+
];
|
|
273
|
+
case 1:
|
|
274
|
+
_state.sent();
|
|
271
275
|
_this.initServerConfig(options);
|
|
272
276
|
return [
|
|
273
277
|
4,
|
|
274
278
|
_this.injectContext(_this.runner, options)
|
|
275
279
|
];
|
|
276
|
-
case
|
|
280
|
+
case 2:
|
|
277
281
|
_state.sent();
|
|
278
282
|
return [
|
|
279
283
|
4,
|
|
280
284
|
_this.createHookRunner()
|
|
281
285
|
];
|
|
282
|
-
case
|
|
286
|
+
case 3:
|
|
283
287
|
_this.runner = _state.sent();
|
|
284
288
|
return [
|
|
285
289
|
4,
|
|
286
290
|
_this.initConfig(_this.runner, options)
|
|
287
291
|
];
|
|
288
|
-
case
|
|
292
|
+
case 4:
|
|
289
293
|
_state.sent();
|
|
290
294
|
return [
|
|
291
295
|
4,
|
|
292
296
|
_this.injectContext(_this.runner, options)
|
|
293
297
|
];
|
|
294
|
-
case
|
|
298
|
+
case 5:
|
|
295
299
|
_state.sent();
|
|
296
300
|
_this.server = _this.serverImpl(options);
|
|
297
301
|
return [
|
|
298
302
|
4,
|
|
299
303
|
_this.runPrepareHook(_this.runner)
|
|
300
304
|
];
|
|
301
|
-
case
|
|
305
|
+
case 6:
|
|
302
306
|
_state.sent();
|
|
303
307
|
return [
|
|
304
308
|
4,
|
|
305
309
|
_this.server.createHTTPServer(_this.getRequestHandler())
|
|
306
310
|
];
|
|
307
|
-
case
|
|
311
|
+
case 7:
|
|
308
312
|
_this.app = _state.sent();
|
|
309
313
|
return [
|
|
310
314
|
4,
|
|
311
315
|
_this.server.onInit(_this.runner, _this.app)
|
|
312
316
|
];
|
|
313
|
-
case
|
|
317
|
+
case 8:
|
|
314
318
|
_state.sent();
|
|
315
319
|
return [
|
|
316
320
|
2,
|
|
@@ -515,15 +519,64 @@ var Server = /*#__PURE__*/ function() {
|
|
|
515
519
|
{
|
|
516
520
|
key: "loadServerEnv",
|
|
517
521
|
value: function loadServerEnv(options) {
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
522
|
+
return _asyncToGenerator(function() {
|
|
523
|
+
var appDirectory, serverEnv, defaultEnvPath, serverEnvPath, _i, _iter, envPath, _tmp, envConfig;
|
|
524
|
+
return __generator(this, function(_state) {
|
|
525
|
+
switch(_state.label){
|
|
526
|
+
case 0:
|
|
527
|
+
appDirectory = options.pwd;
|
|
528
|
+
serverEnv = process.env.MODERN_ENV;
|
|
529
|
+
defaultEnvPath = path.resolve(appDirectory, ".env");
|
|
530
|
+
serverEnvPath = path.resolve(appDirectory, ".env.".concat(serverEnv));
|
|
531
|
+
_i = 0, _iter = [
|
|
532
|
+
serverEnvPath,
|
|
533
|
+
defaultEnvPath
|
|
534
|
+
];
|
|
535
|
+
_state.label = 1;
|
|
536
|
+
case 1:
|
|
537
|
+
if (!(_i < _iter.length)) return [
|
|
538
|
+
3,
|
|
539
|
+
6
|
|
540
|
+
];
|
|
541
|
+
envPath = _iter[_i];
|
|
542
|
+
return [
|
|
543
|
+
4,
|
|
544
|
+
fs.pathExists(envPath)
|
|
545
|
+
];
|
|
546
|
+
case 2:
|
|
547
|
+
_tmp = _state.sent();
|
|
548
|
+
if (!_tmp) return [
|
|
549
|
+
3,
|
|
550
|
+
4
|
|
551
|
+
];
|
|
552
|
+
return [
|
|
553
|
+
4,
|
|
554
|
+
fs.stat(envPath)
|
|
555
|
+
];
|
|
556
|
+
case 3:
|
|
557
|
+
_tmp = !_state.sent().isDirectory();
|
|
558
|
+
_state.label = 4;
|
|
559
|
+
case 4:
|
|
560
|
+
if (_tmp) {
|
|
561
|
+
envConfig = dotenv.config({
|
|
562
|
+
path: envPath
|
|
563
|
+
});
|
|
564
|
+
dotenvExpand(envConfig);
|
|
565
|
+
}
|
|
566
|
+
_state.label = 5;
|
|
567
|
+
case 5:
|
|
568
|
+
_i++;
|
|
569
|
+
return [
|
|
570
|
+
3,
|
|
571
|
+
1
|
|
572
|
+
];
|
|
573
|
+
case 6:
|
|
574
|
+
return [
|
|
575
|
+
2
|
|
576
|
+
];
|
|
577
|
+
}
|
|
524
578
|
});
|
|
525
|
-
|
|
526
|
-
}
|
|
579
|
+
})();
|
|
527
580
|
}
|
|
528
581
|
}
|
|
529
582
|
]);
|
|
@@ -111,13 +111,13 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
111
111
|
trys: [],
|
|
112
112
|
ops: []
|
|
113
113
|
};
|
|
114
|
-
return
|
|
114
|
+
return g = {
|
|
115
115
|
next: verb(0),
|
|
116
116
|
"throw": verb(1),
|
|
117
117
|
"return": verb(2)
|
|
118
118
|
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
119
119
|
return this;
|
|
120
|
-
}), g
|
|
120
|
+
}), g;
|
|
121
121
|
function verb(n) {
|
|
122
122
|
return function(v) {
|
|
123
123
|
return step([
|
|
@@ -206,7 +206,6 @@ import { createErrorDocument, createMiddlewareCollecter, getStaticReg, mergeExte
|
|
|
206
206
|
import * as reader from "../libs/render/reader";
|
|
207
207
|
import { createProxyHandler } from "../libs/proxy";
|
|
208
208
|
import { createContext } from "../libs/context";
|
|
209
|
-
import { templateInjectableStream } from "../libs/hook-api/template";
|
|
210
209
|
import { AGGRED_DIR, ERROR_DIGEST, ERROR_PAGE_TEXT, RUN_MODE } from "../constants";
|
|
211
210
|
import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "../libs/hook-api";
|
|
212
211
|
var SERVER_DIR = "./server";
|
|
@@ -232,7 +231,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
232
231
|
_defineProperty(this, "reader", reader);
|
|
233
232
|
_defineProperty(this, "proxyTarget", void 0);
|
|
234
233
|
_defineProperty(this, "routeRenderHandler", void 0);
|
|
235
|
-
_defineProperty(this, "
|
|
234
|
+
_defineProperty(this, "loaderHandler", null);
|
|
236
235
|
_defineProperty(this, "frameWebHandler", null);
|
|
237
236
|
_defineProperty(this, "frameAPIHandler", null);
|
|
238
237
|
_defineProperty(this, "proxyHandler", null);
|
|
@@ -287,7 +286,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
287
286
|
_state.sent();
|
|
288
287
|
return [
|
|
289
288
|
4,
|
|
290
|
-
_this.
|
|
289
|
+
_this.prepareLoaderHandler(usageRoutes, distDir)
|
|
291
290
|
];
|
|
292
291
|
case 2:
|
|
293
292
|
_state.sent();
|
|
@@ -306,7 +305,6 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
306
305
|
_state.sent();
|
|
307
306
|
_this.addHandler(_this.setupStaticMiddleware((_this_conf_output = _this.conf.output) === null || _this_conf_output === void 0 ? void 0 : _this_conf_output.assetPrefix));
|
|
308
307
|
_this.addHandler(faviconFallbackHandler);
|
|
309
|
-
_this.addBeforeRouteHandler();
|
|
310
308
|
_this.addHandler(_this.routeHandler.bind(_this));
|
|
311
309
|
_this.compose();
|
|
312
310
|
return [
|
|
@@ -322,45 +320,6 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
322
320
|
key: "onRepack",
|
|
323
321
|
value: function onRepack(_) {}
|
|
324
322
|
},
|
|
325
|
-
{
|
|
326
|
-
key: "addBeforeRouteHandler",
|
|
327
|
-
value: function addBeforeRouteHandler() {
|
|
328
|
-
var _this = this;
|
|
329
|
-
this.addHandler(function() {
|
|
330
|
-
var _ref = _asyncToGenerator(function(context, next) {
|
|
331
|
-
return __generator(this, function(_state) {
|
|
332
|
-
switch(_state.label){
|
|
333
|
-
case 0:
|
|
334
|
-
if (!_this.beforeRouteHandler) return [
|
|
335
|
-
3,
|
|
336
|
-
2
|
|
337
|
-
];
|
|
338
|
-
return [
|
|
339
|
-
4,
|
|
340
|
-
_this.beforeRouteHandler(context)
|
|
341
|
-
];
|
|
342
|
-
case 1:
|
|
343
|
-
_state.sent();
|
|
344
|
-
if (_this.isSend(context.res)) {
|
|
345
|
-
return [
|
|
346
|
-
2
|
|
347
|
-
];
|
|
348
|
-
}
|
|
349
|
-
_state.label = 2;
|
|
350
|
-
case 2:
|
|
351
|
-
return [
|
|
352
|
-
2,
|
|
353
|
-
next()
|
|
354
|
-
];
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
});
|
|
358
|
-
return function(context, next) {
|
|
359
|
-
return _ref.apply(this, arguments);
|
|
360
|
-
};
|
|
361
|
-
}());
|
|
362
|
-
}
|
|
363
|
-
},
|
|
364
323
|
{
|
|
365
324
|
key: "onServerChange",
|
|
366
325
|
value: function onServerChange(param) {
|
|
@@ -416,6 +375,12 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
416
375
|
null
|
|
417
376
|
];
|
|
418
377
|
}
|
|
378
|
+
if (result.contentStream) {
|
|
379
|
+
return [
|
|
380
|
+
2,
|
|
381
|
+
result.contentStream
|
|
382
|
+
];
|
|
383
|
+
}
|
|
419
384
|
return [
|
|
420
385
|
2,
|
|
421
386
|
result.content.toString()
|
|
@@ -470,8 +435,8 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
470
435
|
}
|
|
471
436
|
},
|
|
472
437
|
{
|
|
473
|
-
key: "
|
|
474
|
-
value: function
|
|
438
|
+
key: "prepareLoaderHandler",
|
|
439
|
+
value: function prepareLoaderHandler(specs, distDir) {
|
|
475
440
|
var _this = this;
|
|
476
441
|
return _asyncToGenerator(function() {
|
|
477
442
|
var runner, handler;
|
|
@@ -481,7 +446,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
481
446
|
runner = _this.runner;
|
|
482
447
|
return [
|
|
483
448
|
4,
|
|
484
|
-
runner.
|
|
449
|
+
runner.prepareLoaderHandler({
|
|
485
450
|
serverRoutes: specs,
|
|
486
451
|
distDir: distDir
|
|
487
452
|
}, {
|
|
@@ -492,7 +457,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
492
457
|
];
|
|
493
458
|
case 1:
|
|
494
459
|
handler = _state.sent();
|
|
495
|
-
_this.
|
|
460
|
+
_this.loaderHandler = handler;
|
|
496
461
|
return [
|
|
497
462
|
2
|
|
498
463
|
];
|
|
@@ -718,15 +683,78 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
718
683
|
value: function handleWeb(context, route) {
|
|
719
684
|
var _this = this;
|
|
720
685
|
return _asyncToGenerator(function() {
|
|
686
|
+
var res, renderResult;
|
|
721
687
|
return __generator(this, function(_state) {
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
688
|
+
switch(_state.label){
|
|
689
|
+
case 0:
|
|
690
|
+
res = context.res;
|
|
691
|
+
if (!_this.loaderHandler) return [
|
|
692
|
+
3,
|
|
693
|
+
2
|
|
694
|
+
];
|
|
695
|
+
return [
|
|
696
|
+
4,
|
|
697
|
+
_this.loaderHandler(context)
|
|
698
|
+
];
|
|
699
|
+
case 1:
|
|
700
|
+
_state.sent();
|
|
701
|
+
if (_this.isSend(res)) {
|
|
702
|
+
return [
|
|
703
|
+
2,
|
|
704
|
+
null
|
|
705
|
+
];
|
|
706
|
+
}
|
|
707
|
+
_state.label = 2;
|
|
708
|
+
case 2:
|
|
709
|
+
context.setParams(route.params);
|
|
710
|
+
context.setServerData("router", {
|
|
711
|
+
baseUrl: route.urlPath,
|
|
712
|
+
params: route.params
|
|
713
|
+
});
|
|
714
|
+
if (route.responseHeaders) {
|
|
715
|
+
Object.keys(route.responseHeaders).forEach(function(key) {
|
|
716
|
+
var value = route.responseHeaders[key];
|
|
717
|
+
if (value) {
|
|
718
|
+
context.res.setHeader(key, value);
|
|
719
|
+
}
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
return [
|
|
723
|
+
4,
|
|
724
|
+
_this.routeRenderHandler({
|
|
725
|
+
ctx: context,
|
|
726
|
+
route: route,
|
|
727
|
+
runner: _this.runner
|
|
728
|
+
})
|
|
729
|
+
];
|
|
730
|
+
case 3:
|
|
731
|
+
renderResult = _state.sent();
|
|
732
|
+
if (!renderResult) {
|
|
733
|
+
_this.render404(context);
|
|
734
|
+
return [
|
|
735
|
+
2,
|
|
736
|
+
null
|
|
737
|
+
];
|
|
738
|
+
}
|
|
739
|
+
if (renderResult.redirect) {
|
|
740
|
+
_this.redirect(res, renderResult.content, renderResult.statusCode);
|
|
741
|
+
return [
|
|
742
|
+
2,
|
|
743
|
+
null
|
|
744
|
+
];
|
|
745
|
+
}
|
|
746
|
+
if (_this.isSend(res)) {
|
|
747
|
+
return [
|
|
748
|
+
2,
|
|
749
|
+
null
|
|
750
|
+
];
|
|
751
|
+
}
|
|
752
|
+
res.setHeader("content-type", renderResult.contentType);
|
|
753
|
+
return [
|
|
754
|
+
2,
|
|
755
|
+
renderResult
|
|
756
|
+
];
|
|
757
|
+
}
|
|
730
758
|
});
|
|
731
759
|
})();
|
|
732
760
|
}
|
|
@@ -771,7 +799,7 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
771
799
|
function routeHandler(context) {
|
|
772
800
|
var _this = this;
|
|
773
801
|
return _asyncToGenerator(function() {
|
|
774
|
-
var res, matched, route, afterMatchContext, _afterMatchContext_router, current, url, status, matched2, middlewareContext, renderResult,
|
|
802
|
+
var res, matched, route, afterMatchContext, _afterMatchContext_router, current, url, status, matched2, middlewareContext, renderResult, responseStream, response, afterRenderContext;
|
|
775
803
|
return __generator(this, function(_state) {
|
|
776
804
|
switch(_state.label){
|
|
777
805
|
case 0:
|
|
@@ -798,6 +826,10 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
798
826
|
2
|
|
799
827
|
];
|
|
800
828
|
case 2:
|
|
829
|
+
if (!route.entryName) return [
|
|
830
|
+
3,
|
|
831
|
+
5
|
|
832
|
+
];
|
|
801
833
|
afterMatchContext = createAfterMatchContext(context, route.entryName);
|
|
802
834
|
if (!(_this.runMode === RUN_MODE.FULL)) return [
|
|
803
835
|
3,
|
|
@@ -835,14 +867,11 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
835
867
|
}
|
|
836
868
|
route = matched2.generate(context.url);
|
|
837
869
|
}
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
baseUrl: route.urlPath,
|
|
841
|
-
params: route.params
|
|
842
|
-
});
|
|
870
|
+
_state.label = 5;
|
|
871
|
+
case 5:
|
|
843
872
|
if (!_this.frameWebHandler) return [
|
|
844
873
|
3,
|
|
845
|
-
|
|
874
|
+
7
|
|
846
875
|
];
|
|
847
876
|
res.locals = res.locals || {};
|
|
848
877
|
middlewareContext = createMiddlewareContext(context);
|
|
@@ -850,66 +879,43 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
850
879
|
4,
|
|
851
880
|
_this.frameWebHandler(middlewareContext)
|
|
852
881
|
];
|
|
853
|
-
case
|
|
882
|
+
case 6:
|
|
854
883
|
_state.sent();
|
|
855
884
|
res.locals = _objectSpread({}, res.locals, middlewareContext.response.locals);
|
|
856
|
-
_state.label = 6;
|
|
857
|
-
case 6:
|
|
858
885
|
if (_this.isSend(res)) {
|
|
859
886
|
return [
|
|
860
887
|
2
|
|
861
888
|
];
|
|
862
889
|
}
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
var value = route.responseHeaders[key];
|
|
866
|
-
if (value) {
|
|
867
|
-
context.res.setHeader(key, value);
|
|
868
|
-
}
|
|
869
|
-
});
|
|
870
|
-
}
|
|
890
|
+
_state.label = 7;
|
|
891
|
+
case 7:
|
|
871
892
|
return [
|
|
872
893
|
4,
|
|
873
894
|
_this.handleWeb(context, route)
|
|
874
895
|
];
|
|
875
|
-
case
|
|
896
|
+
case 8:
|
|
876
897
|
renderResult = _state.sent();
|
|
877
898
|
if (!renderResult) {
|
|
878
|
-
_this.render404(context);
|
|
879
|
-
return [
|
|
880
|
-
2
|
|
881
|
-
];
|
|
882
|
-
}
|
|
883
|
-
if (renderResult.redirect) {
|
|
884
|
-
_this.redirect(res, renderResult.content, renderResult.statusCode);
|
|
885
899
|
return [
|
|
886
900
|
2
|
|
887
901
|
];
|
|
888
902
|
}
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
}
|
|
894
|
-
res.setHeader("content-type", renderResult.contentType);
|
|
895
|
-
contentStream = renderResult.contentStream;
|
|
896
|
-
if (contentStream) {
|
|
897
|
-
contentStream.pipe(templateInjectableStream({
|
|
898
|
-
prependHead: route.entryName ? "<script>window._SERVER_DATA=".concat(JSON.stringify(context.serverData), "</script>") : void 0
|
|
899
|
-
})).pipe(res);
|
|
903
|
+
responseStream = renderResult.contentStream;
|
|
904
|
+
response = renderResult.content;
|
|
905
|
+
if (route.entryName && responseStream) {
|
|
906
|
+
responseStream.pipe(res);
|
|
900
907
|
return [
|
|
901
908
|
2
|
|
902
909
|
];
|
|
903
910
|
}
|
|
904
|
-
response = renderResult.content;
|
|
905
911
|
if (!route.entryName) return [
|
|
906
912
|
3,
|
|
907
|
-
|
|
913
|
+
11
|
|
908
914
|
];
|
|
909
915
|
afterRenderContext = createAfterRenderContext(context, response.toString());
|
|
910
916
|
if (!(_this.runMode === RUN_MODE.FULL)) return [
|
|
911
917
|
3,
|
|
912
|
-
|
|
918
|
+
10
|
|
913
919
|
];
|
|
914
920
|
return [
|
|
915
921
|
4,
|
|
@@ -917,19 +923,18 @@ var ModernServer = /*#__PURE__*/ function() {
|
|
|
917
923
|
onLast: noop
|
|
918
924
|
})
|
|
919
925
|
];
|
|
920
|
-
case 8:
|
|
921
|
-
_state.sent();
|
|
922
|
-
_state.label = 9;
|
|
923
926
|
case 9:
|
|
927
|
+
_state.sent();
|
|
928
|
+
_state.label = 10;
|
|
929
|
+
case 10:
|
|
924
930
|
if (_this.isSend(res)) {
|
|
925
931
|
return [
|
|
926
932
|
2
|
|
927
933
|
];
|
|
928
934
|
}
|
|
929
|
-
afterRenderContext.template.prependHead("<script>window._SERVER_DATA=".concat(JSON.stringify(context.serverData), "</script>"));
|
|
930
935
|
response = afterRenderContext.template.get();
|
|
931
|
-
_state.label =
|
|
932
|
-
case
|
|
936
|
+
_state.label = 11;
|
|
937
|
+
case 11:
|
|
933
938
|
res.end(response);
|
|
934
939
|
return [
|
|
935
940
|
2
|
|
@@ -4,13 +4,9 @@ import { TemplateAPI } from "./template";
|
|
|
4
4
|
class Response {
|
|
5
5
|
constructor(res) {
|
|
6
6
|
this.res = res;
|
|
7
|
-
this._cookie = cookie.parse(res.getHeader("set-cookie") || "");
|
|
8
7
|
this.cookies = {
|
|
9
|
-
get: this.getCookie.bind(this),
|
|
10
8
|
set: this.setCookie.bind(this),
|
|
11
|
-
|
|
12
|
-
clear: this.clearCookie.bind(this),
|
|
13
|
-
apply: this.applyCookie.bind(this)
|
|
9
|
+
clear: this.clearCookie.bind(this)
|
|
14
10
|
};
|
|
15
11
|
}
|
|
16
12
|
get(key) {
|
|
@@ -22,29 +18,14 @@ class Response {
|
|
|
22
18
|
status(code) {
|
|
23
19
|
this.res.statusCode = code;
|
|
24
20
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.
|
|
30
|
-
}
|
|
31
|
-
deleteCookie(key) {
|
|
32
|
-
if (this._cookie[key]) {
|
|
33
|
-
delete this._cookie[key];
|
|
34
|
-
}
|
|
21
|
+
setCookie(key, value, options) {
|
|
22
|
+
const cookieValue = this.res.getHeader("set-cookie");
|
|
23
|
+
const fmt = Array.isArray(cookieValue) ? cookieValue : [cookieValue].filter(Boolean);
|
|
24
|
+
fmt.push(cookie.serialize(key, value, options));
|
|
25
|
+
this.res.setHeader("set-cookie", fmt.length === 1 ? fmt[0] : fmt);
|
|
35
26
|
}
|
|
36
27
|
clearCookie() {
|
|
37
|
-
this.
|
|
38
|
-
}
|
|
39
|
-
applyCookie() {
|
|
40
|
-
const str = Object.entries(this._cookie).map(([key, value]) => {
|
|
41
|
-
return cookie.serialize(key, value);
|
|
42
|
-
}).join("; ");
|
|
43
|
-
if (str) {
|
|
44
|
-
this.res.setHeader("set-cookie", str);
|
|
45
|
-
} else {
|
|
46
|
-
this.res.removeHeader("set-cookie");
|
|
47
|
-
}
|
|
28
|
+
this.res.removeHeader("set-cookie");
|
|
48
29
|
}
|
|
49
30
|
raw(body, options) {
|
|
50
31
|
const { status, headers = {} } = options || {};
|
|
@@ -4,6 +4,7 @@ import { ERROR_DIGEST } from "../../constants";
|
|
|
4
4
|
import { handleDirectory } from "./static";
|
|
5
5
|
import { readFile } from "./reader";
|
|
6
6
|
import * as ssr from "./ssr";
|
|
7
|
+
import { injectSeverData } from "./utils";
|
|
7
8
|
const createRenderHandler = ({
|
|
8
9
|
distDir,
|
|
9
10
|
staticGenerate,
|
|
@@ -55,7 +56,7 @@ const createRenderHandler = ({
|
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
return {
|
|
58
|
-
content,
|
|
59
|
+
content: route.entryName ? injectSeverData(content.toString(), ctx) : content,
|
|
59
60
|
contentType: mime.contentType(path.extname(templatePath))
|
|
60
61
|
};
|
|
61
62
|
};
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "@modern-js/utils";
|
|
9
9
|
import cache from "./cache";
|
|
10
10
|
import { createLogger, createMetrics } from "./measure";
|
|
11
|
+
import { injectServerDataStream, injectSeverData } from "./utils";
|
|
11
12
|
const render = async (ctx, renderOptions, runner) => {
|
|
12
13
|
var _a;
|
|
13
14
|
const {
|
|
@@ -72,13 +73,13 @@ const render = async (ctx, renderOptions, runner) => {
|
|
|
72
73
|
}
|
|
73
74
|
if (typeof content === "string") {
|
|
74
75
|
return {
|
|
75
|
-
content,
|
|
76
|
+
content: injectSeverData(content, ctx),
|
|
76
77
|
contentType: mime.contentType("html")
|
|
77
78
|
};
|
|
78
79
|
} else {
|
|
79
80
|
return {
|
|
80
81
|
content: "",
|
|
81
|
-
contentStream: content,
|
|
82
|
+
contentStream: injectServerDataStream(content, ctx),
|
|
82
83
|
contentType: mime.contentType("html")
|
|
83
84
|
};
|
|
84
85
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TemplateAPI, templateInjectableStream } from "../hook-api/template";
|
|
2
|
+
const injectSeverData = (content, context) => {
|
|
3
|
+
const template = new TemplateAPI(content);
|
|
4
|
+
template.prependHead(
|
|
5
|
+
`<script>window._SERVER_DATA=${JSON.stringify(
|
|
6
|
+
context.serverData
|
|
7
|
+
)}</script>`
|
|
8
|
+
);
|
|
9
|
+
return template.get();
|
|
10
|
+
};
|
|
11
|
+
const injectServerDataStream = (content, context) => {
|
|
12
|
+
return content.pipe(
|
|
13
|
+
templateInjectableStream({
|
|
14
|
+
prependHead: `<script>window._SERVER_DATA=${JSON.stringify(
|
|
15
|
+
context.serverData
|
|
16
|
+
)}</script>`
|
|
17
|
+
})
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
injectServerDataStream,
|
|
22
|
+
injectSeverData
|
|
23
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
import fs from "fs";
|
|
3
2
|
import {
|
|
3
|
+
fs,
|
|
4
4
|
Logger,
|
|
5
5
|
SHARED_DIR,
|
|
6
6
|
OUTPUT_CONFIG_FILE,
|
|
@@ -48,7 +48,7 @@ class Server {
|
|
|
48
48
|
*/
|
|
49
49
|
async init() {
|
|
50
50
|
const { options } = this;
|
|
51
|
-
this.loadServerEnv(options);
|
|
51
|
+
await this.loadServerEnv(options);
|
|
52
52
|
this.initServerConfig(options);
|
|
53
53
|
await this.injectContext(this.runner, options);
|
|
54
54
|
this.runner = await this.createHookRunner();
|
|
@@ -169,13 +169,16 @@ class Server {
|
|
|
169
169
|
plugins: serverPlugins
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
|
-
loadServerEnv(options) {
|
|
172
|
+
async loadServerEnv(options) {
|
|
173
173
|
const { pwd: appDirectory } = options;
|
|
174
174
|
const serverEnv = process.env.MODERN_ENV;
|
|
175
|
+
const defaultEnvPath = path.resolve(appDirectory, `.env`);
|
|
175
176
|
const serverEnvPath = path.resolve(appDirectory, `.env.${serverEnv}`);
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
177
|
+
for (const envPath of [serverEnvPath, defaultEnvPath]) {
|
|
178
|
+
if (await fs.pathExists(envPath) && !(await fs.stat(envPath)).isDirectory()) {
|
|
179
|
+
const envConfig = dotenv.config({ path: envPath });
|
|
180
|
+
dotenvExpand(envConfig);
|
|
181
|
+
}
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
}
|