@modern-js/prod-server 2.0.0-beta.2 → 2.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/dist/js/modern/constants.js +32 -25
  3. package/dist/js/modern/index.js +11 -6
  4. package/dist/js/modern/libs/context/context.js +52 -84
  5. package/dist/js/modern/libs/context/index.js +5 -2
  6. package/dist/js/modern/libs/hook-api/index.js +42 -35
  7. package/dist/js/modern/libs/hook-api/route.js +6 -7
  8. package/dist/js/modern/libs/hook-api/template.js +20 -34
  9. package/dist/js/modern/libs/loadConfig.js +45 -24
  10. package/dist/js/modern/libs/metrics.js +3 -4
  11. package/dist/js/modern/libs/proxy.js +68 -37
  12. package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +112 -67
  13. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +246 -216
  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 +88 -54
  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 -6
  20. package/dist/js/modern/libs/render/cache/spr.js +133 -117
  21. package/dist/js/modern/libs/render/cache/type.js +0 -1
  22. package/dist/js/modern/libs/render/cache/util.js +71 -39
  23. package/dist/js/modern/libs/render/index.js +76 -56
  24. package/dist/js/modern/libs/render/measure.js +38 -27
  25. package/dist/js/modern/libs/render/reader.js +65 -62
  26. package/dist/js/modern/libs/render/ssr.js +50 -32
  27. package/dist/js/modern/libs/render/static.js +50 -33
  28. package/dist/js/modern/libs/render/type.js +9 -6
  29. package/dist/js/modern/libs/route/index.js +8 -15
  30. package/dist/js/modern/libs/route/matcher.js +20 -34
  31. package/dist/js/modern/libs/route/route.js +9 -18
  32. package/dist/js/modern/libs/serve-file.js +33 -20
  33. package/dist/js/modern/server/index.js +144 -145
  34. package/dist/js/modern/server/modern-server-split.js +46 -12
  35. package/dist/js/modern/server/modern-server.js +377 -419
  36. package/dist/js/modern/type.js +0 -1
  37. package/dist/js/modern/utils.js +62 -43
  38. package/dist/js/modern/worker-server.js +34 -14
  39. package/dist/js/node/constants.js +45 -30
  40. package/dist/js/node/index.js +31 -57
  41. package/dist/js/node/libs/context/context.js +79 -94
  42. package/dist/js/node/libs/context/index.js +23 -13
  43. package/dist/js/node/libs/hook-api/index.js +69 -48
  44. package/dist/js/node/libs/hook-api/route.js +22 -11
  45. package/dist/js/node/libs/hook-api/template.js +36 -39
  46. package/dist/js/node/libs/loadConfig.js +69 -35
  47. package/dist/js/node/libs/metrics.js +21 -9
  48. package/dist/js/node/libs/proxy.js +86 -44
  49. package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +132 -70
  50. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +268 -218
  51. package/dist/js/node/libs/render/cache/__tests__/cacheable.js +61 -55
  52. package/dist/js/node/libs/render/cache/__tests__/error-configuration.js +54 -40
  53. package/dist/js/node/libs/render/cache/__tests__/matched-cache.js +101 -119
  54. package/dist/js/node/libs/render/cache/index.js +110 -64
  55. package/dist/js/node/libs/render/cache/page-caches/index.js +50 -14
  56. package/dist/js/node/libs/render/cache/page-caches/lru.js +29 -12
  57. package/dist/js/node/libs/render/cache/spr.js +156 -129
  58. package/dist/js/node/libs/render/cache/type.js +0 -5
  59. package/dist/js/node/libs/render/cache/util.js +88 -45
  60. package/dist/js/node/libs/render/index.js +102 -67
  61. package/dist/js/node/libs/render/measure.js +55 -31
  62. package/dist/js/node/libs/render/reader.js +87 -70
  63. package/dist/js/node/libs/render/ssr.js +76 -47
  64. package/dist/js/node/libs/render/static.js +75 -40
  65. package/dist/js/node/libs/render/type.js +27 -12
  66. package/dist/js/node/libs/route/index.js +26 -26
  67. package/dist/js/node/libs/route/matcher.js +36 -41
  68. package/dist/js/node/libs/route/route.js +25 -22
  69. package/dist/js/node/libs/serve-file.js +61 -32
  70. package/dist/js/node/server/index.js +160 -160
  71. package/dist/js/node/server/modern-server-split.js +68 -22
  72. package/dist/js/node/server/modern-server.js +395 -443
  73. package/dist/js/node/type.js +0 -3
  74. package/dist/js/node/utils.js +74 -52
  75. package/dist/js/node/worker-server.js +53 -21
  76. package/dist/js/treeshaking/constants.js +26 -25
  77. package/dist/js/treeshaking/index.js +10 -10
  78. package/dist/js/treeshaking/libs/context/context.js +268 -237
  79. package/dist/js/treeshaking/libs/context/index.js +3 -3
  80. package/dist/js/treeshaking/libs/hook-api/index.js +265 -143
  81. package/dist/js/treeshaking/libs/hook-api/route.js +65 -30
  82. package/dist/js/treeshaking/libs/hook-api/template.js +121 -85
  83. package/dist/js/treeshaking/libs/loadConfig.js +80 -37
  84. package/dist/js/treeshaking/libs/metrics.js +4 -10
  85. package/dist/js/treeshaking/libs/proxy.js +240 -76
  86. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +288 -121
  87. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +772 -455
  88. package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +65 -51
  89. package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +45 -35
  90. package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +144 -118
  91. package/dist/js/treeshaking/libs/render/cache/index.js +337 -175
  92. package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +151 -27
  93. package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +80 -42
  94. package/dist/js/treeshaking/libs/render/cache/spr.js +470 -340
  95. package/dist/js/treeshaking/libs/render/cache/type.js +1 -1
  96. package/dist/js/treeshaking/libs/render/cache/util.js +271 -92
  97. package/dist/js/treeshaking/libs/render/index.js +228 -95
  98. package/dist/js/treeshaking/libs/render/measure.js +142 -57
  99. package/dist/js/treeshaking/libs/render/reader.js +325 -177
  100. package/dist/js/treeshaking/libs/render/ssr.js +220 -95
  101. package/dist/js/treeshaking/libs/render/static.js +210 -78
  102. package/dist/js/treeshaking/libs/render/type.js +7 -6
  103. package/dist/js/treeshaking/libs/route/index.js +125 -89
  104. package/dist/js/treeshaking/libs/route/matcher.js +132 -107
  105. package/dist/js/treeshaking/libs/route/route.js +40 -26
  106. package/dist/js/treeshaking/libs/serve-file.js +177 -68
  107. package/dist/js/treeshaking/server/index.js +468 -327
  108. package/dist/js/treeshaking/server/modern-server-split.js +352 -144
  109. package/dist/js/treeshaking/server/modern-server.js +1046 -911
  110. package/dist/js/treeshaking/type.js +1 -1
  111. package/dist/js/treeshaking/utils.js +138 -81
  112. package/dist/js/treeshaking/worker-server.js +176 -55
  113. package/dist/types/index.d.ts +2 -0
  114. package/dist/types/libs/context/context.d.ts +4 -1
  115. package/dist/types/libs/loadConfig.d.ts +1 -0
  116. package/dist/types/libs/render/cache/index.d.ts +2 -0
  117. package/dist/types/libs/render/cache/spr.d.ts +2 -0
  118. package/dist/types/libs/route/route.d.ts +0 -1
  119. package/dist/types/server/index.d.ts +3 -0
  120. package/dist/types/utils.d.ts +1 -1
  121. package/dist/types/worker-server.d.ts +1 -2
  122. package/package.json +7 -14
  123. package/dist/js/modern/libs/render/modern/browser-list.js +0 -7
  124. package/dist/js/modern/libs/render/modern/index.js +0 -37
  125. package/dist/js/node/libs/render/modern/browser-list.js +0 -14
  126. package/dist/js/node/libs/render/modern/index.js +0 -46
  127. package/dist/js/treeshaking/libs/render/modern/browser-list.js +0 -7
  128. package/dist/js/treeshaking/libs/render/modern/index.js +0 -39
  129. package/dist/types/libs/render/modern/browser-list.d.ts +0 -1
  130. package/dist/types/libs/render/modern/index.d.ts +0 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,137 @@
1
1
  # @modern-js/prod-server
2
2
 
3
+ ## 2.0.0-beta.4
4
+
5
+ ### Major Changes
6
+
7
+ - dda38c9c3e: chore: v2
8
+
9
+ ### Minor Changes
10
+
11
+ - c9e800d39a: feat: support React18 streaming SSR
12
+ feat: 支持 React18 流式 SSR
13
+ - 543be9558e: feat: compile server loader and support handle loader request
14
+ feat: 编译 server loader 并支持处理 loader 的请求
15
+
16
+ ### Patch Changes
17
+
18
+ - 7879e8f: refactor: remove enableModernMode config
19
+
20
+ refactor: 不再支持 enableModernMode 配置项
21
+
22
+ - d032d49e09: export createHandle
23
+ 导出 createHandle 函数
24
+ - 15bf09d9c8: feat: support completely custom server, export render() api for render single page
25
+ feat: 支持完全自定义 Server,导出 render() 方法用来渲染单个页面
26
+ - cc971eabfc: refactor: move server plugin load logic in `@modern-js/core`
27
+ refactor:移除在 `@modern-js/core` 中的 server 插件加载逻辑
28
+ - 40ed5874c6: feat: inject css chunk into html for streaming ssr
29
+ feat: streaming ssr 返回的 html 注入 css chunk
30
+ - 102d32e4ba: feat(server): add `req` and `res` to SSR context
31
+
32
+ feat(server): 添加 `req` 和 `res` 到 SSR context 中
33
+
34
+ - 3bbea92b2a: feat: support Hook、Middleware new API
35
+ feat: 支持 Hook、Middleware 的新 API
36
+ - 73cd29dd9f: fix(server): add favicon fallback handler
37
+
38
+ fix(server): 添加 favicon 兜底处理逻辑
39
+
40
+ - cce8ecee2d: fix: handle some `TODO` & `FIXME`, change some tests
41
+ fix: 处理一些 `TODO` 和 `FIXME`, 修改了一些 tests
42
+ - 18aaf42249: fix: fix server loader redirects
43
+ fix: 修复 server loader 重定向错误
44
+ - 14b712da84: fix: use consistent alias type and default value across packages
45
+
46
+ fix: 在各个包中使用一致的 alias 类型定义和默认值
47
+
48
+ - Updated dependencies [7879e8f]
49
+ - Updated dependencies [6aca875]
50
+ - Updated dependencies [15bf09d9c8]
51
+ - Updated dependencies [2e6031955e]
52
+ - Updated dependencies [7b7d12c]
53
+ - Updated dependencies [92f0eade39]
54
+ - Updated dependencies [edd1cfb1af]
55
+ - Updated dependencies [cc971eabfc]
56
+ - Updated dependencies [5b9049f2e9]
57
+ - Updated dependencies [92004d1906]
58
+ - Updated dependencies [b8bbe036c7]
59
+ - Updated dependencies [d5a31df781]
60
+ - Updated dependencies [dda38c9c3e]
61
+ - Updated dependencies [3bbea92b2a]
62
+ - Updated dependencies [b710adb843]
63
+ - Updated dependencies [ea7cf06]
64
+ - Updated dependencies [bbe4c4a]
65
+ - Updated dependencies [e4558a0]
66
+ - Updated dependencies [abf3421a75]
67
+ - Updated dependencies [543be9558e]
68
+ - Updated dependencies [14b712da84]
69
+ - @modern-js/utils@2.0.0-beta.4
70
+ - @modern-js/server-core@2.0.0-beta.4
71
+
72
+ ## 2.0.0-beta.3
73
+
74
+ ### Major Changes
75
+
76
+ - dda38c9c3e: chore: v2
77
+
78
+ ### Minor Changes
79
+
80
+ - c9e800d39a: feat: support React18 streaming SSR
81
+ feat: 支持 React18 流式 SSR
82
+ - 543be9558e: feat: compile server loader and support handle loader request
83
+ feat: 编译 server loader 并支持处理 loader 的请求
84
+
85
+ ### Patch Changes
86
+
87
+ - d032d49e09: export createHandle
88
+ 导出 createHandle 函数
89
+ - 15bf09d9c8: feat: support completely custom server, export render() api for render single page
90
+ feat: 支持完全自定义 Server,导出 render() 方法用来渲染单个页面
91
+ - cc971eabfc: refactor: move server plugin load logic in `@modern-js/core`
92
+ refactor:移除在 `@modern-js/core` 中的 server 插件加载逻辑
93
+ - 40ed5874c6: feat: inject css chunk into html for streaming ssr
94
+ feat: streaming ssr 返回的 html 注入 css chunk
95
+ - 102d32e4ba: feat(server): add `req` and `res` to SSR context
96
+
97
+ feat(server): 添加 `req` 和 `res` 到 SSR context 中
98
+
99
+ - 3bbea92b2a: feat: support Hook、Middleware new API
100
+ feat: 支持 Hook、Middleware 的新 API
101
+ - 73cd29dd9f: fix(server): add favicon fallback handler
102
+
103
+ fix(server): 添加 favicon 兜底处理逻辑
104
+
105
+ - cce8ece: fix: handle some `TODO` & `FIXME`, change some tests
106
+ fix: 处理一些 `TODO` 和 `FIXME`, 修改了一些 tests
107
+ - 18aaf42249: fix: fix server loader redirects
108
+ fix: 修复 server loader 重定向错误
109
+ - 14b712da84: fix: use consistent alias type and default value across packages
110
+
111
+ fix: 在各个包中使用一致的 alias 类型定义和默认值
112
+
113
+ - Updated dependencies [6aca875]
114
+ - Updated dependencies [15bf09d9c8]
115
+ - Updated dependencies [2e60319]
116
+ - Updated dependencies [92f0eade39]
117
+ - Updated dependencies [edd1cfb1af]
118
+ - Updated dependencies [cc971eabfc]
119
+ - Updated dependencies [5b9049f2e9]
120
+ - Updated dependencies [92004d1906]
121
+ - Updated dependencies [b8bbe036c7]
122
+ - Updated dependencies [d5a31df781]
123
+ - Updated dependencies [dda38c9c3e]
124
+ - Updated dependencies [3bbea92b2a]
125
+ - Updated dependencies [b710adb]
126
+ - Updated dependencies [ea7cf06]
127
+ - Updated dependencies [bbe4c4a]
128
+ - Updated dependencies [e4558a0]
129
+ - Updated dependencies [abf3421a75]
130
+ - Updated dependencies [543be9558e]
131
+ - Updated dependencies [14b712da84]
132
+ - @modern-js/utils@2.0.0-beta.3
133
+ - @modern-js/server-core@2.0.0-beta.3
134
+
3
135
  ## 2.0.0-beta.2
4
136
 
5
137
  ### Major Changes
@@ -1,28 +1,35 @@
1
- export const AGGRED_DIR = {
2
- mock: 'config/mock',
3
- server: 'server',
4
- api: 'api',
5
- shared: 'shared',
6
- lambda: 'lambda'
1
+ const AGGRED_DIR = {
2
+ mock: "config/mock",
3
+ server: "server",
4
+ api: "api",
5
+ shared: "shared",
6
+ lambda: "lambda"
7
7
  };
8
- export let ApiServerMode;
9
- (function (ApiServerMode) {
10
- ApiServerMode["func"] = "function";
11
- ApiServerMode["frame"] = "framework";
12
- })(ApiServerMode || (ApiServerMode = {}));
13
- export const ERROR_DIGEST = {
14
- INIT: 'Server init error',
15
- ENOTF: 'Page could not be found',
16
- WARMUP: 'SSR warmup failed',
17
- EINTER: 'Internal server error',
18
- ERENDER: 'SSR render failed',
19
- EMICROINJ: 'Get micro-frontend info failed'
8
+ var ApiServerMode = /* @__PURE__ */ ((ApiServerMode2) => {
9
+ ApiServerMode2["func"] = "function";
10
+ ApiServerMode2["frame"] = "framework";
11
+ return ApiServerMode2;
12
+ })(ApiServerMode || {});
13
+ const ERROR_DIGEST = {
14
+ INIT: "Server init error",
15
+ ENOTF: "Page could not be found",
16
+ WARMUP: "SSR warmup failed",
17
+ EINTER: "Internal server error",
18
+ ERENDER: "SSR render failed",
19
+ EMICROINJ: "Get micro-frontend info failed"
20
20
  };
21
- export const ERROR_PAGE_TEXT = {
22
- 404: 'This page could not be found.',
23
- 500: 'Internal Server Error.'
21
+ const ERROR_PAGE_TEXT = {
22
+ 404: "This page could not be found.",
23
+ 500: "Internal Server Error."
24
+ };
25
+ const RUN_MODE = {
26
+ FULL: "full",
27
+ TYPE: "type"
28
+ };
29
+ export {
30
+ AGGRED_DIR,
31
+ ApiServerMode,
32
+ ERROR_DIGEST,
33
+ ERROR_PAGE_TEXT,
34
+ RUN_MODE
24
35
  };
25
- export const RUN_MODE = {
26
- FULL: 'full',
27
- TYPE: 'type'
28
- };
@@ -1,13 +1,18 @@
1
1
  import { Server } from "./server";
2
- export { Server };
3
- export { ModernServer } from "./server/modern-server";
4
- export { createProxyHandler } from "./libs/proxy";
2
+ import { ModernServer } from "./server/modern-server";
3
+ import { createProxyHandler } from "./libs/proxy";
5
4
  export * from "./type";
6
5
  export * from "./constants";
7
- export default (options => {
6
+ var src_default = (options) => {
8
7
  if (options == null) {
9
- throw new Error('can not start mserver without options');
8
+ throw new Error("can not start mserver without options");
10
9
  }
11
10
  const server = new Server(options);
12
11
  return server.init();
13
- });
12
+ };
13
+ export {
14
+ ModernServer,
15
+ Server,
16
+ createProxyHandler,
17
+ src_default as default
18
+ };
@@ -1,65 +1,42 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
- import { URL } from 'url';
3
- import qs from 'querystring';
4
- import { Buffer } from 'buffer';
5
- import createEtag from 'etag';
6
- import fresh from 'fresh';
1
+ import { URL } from "url";
2
+ import qs from "querystring";
3
+ import { Buffer } from "buffer";
4
+ import createEtag from "etag";
5
+ import fresh from "fresh";
7
6
  import { headersWithoutCookie } from "../../utils";
8
- export class ModernServerContext {
9
- /**
10
- * http request
11
- */
12
-
13
- /**
14
- * http response
15
- */
16
-
17
- /**
18
- * url params
19
- */
20
-
21
- get logger() {
22
- return this.req.logger;
23
- }
24
- get metrics() {
25
- return this.req.metrics;
26
- }
7
+ class ModernServerContext {
27
8
  constructor(req, res, options) {
28
- _defineProperty(this, "req", void 0);
29
- _defineProperty(this, "res", void 0);
30
- _defineProperty(this, "params", {});
31
- _defineProperty(this, "serverData", void 0);
32
- _defineProperty(this, "options", {});
9
+ this.params = {};
10
+ this.options = {};
33
11
  this.req = req;
34
12
  this.res = res;
35
13
  this.options = options || {};
36
14
  this.serverData = {};
37
15
  this.bind();
38
16
  }
17
+ get logger() {
18
+ return this.req.logger;
19
+ }
20
+ get metrics() {
21
+ return this.req.metrics;
22
+ }
39
23
  bind() {
40
- const {
41
- req,
42
- res
43
- } = this;
44
- req.get = key => this.getReqHeader(key);
24
+ const { req, res } = this;
25
+ req.get = (key) => this.getReqHeader(key);
45
26
  res.set = (key, value) => this.res.setHeader(key, value);
46
- res.send = body => {
27
+ res.send = (body) => {
47
28
  this.send(body);
48
29
  };
49
30
  }
50
-
51
- // compat express res.send, only support etag now
52
31
  send(body) {
53
32
  try {
54
- const generateETag = !this.res.getHeader('ETag') && this.options.etag;
55
- if (body !== undefined && generateETag) {
56
- const encoding = typeof body === 'string' ? 'utf-8' : undefined;
33
+ const generateETag = !this.res.getHeader("ETag") && this.options.etag;
34
+ if (body !== void 0 && generateETag) {
35
+ const encoding = typeof body === "string" ? "utf-8" : void 0;
57
36
  const buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body;
58
- const etag = createEtag(buf, {
59
- weak: true
60
- });
37
+ const etag = createEtag(buf, { weak: true });
61
38
  if (etag) {
62
- this.res.setHeader('ETag', etag);
39
+ this.res.setHeader("ETag", etag);
63
40
  }
64
41
  }
65
42
  if (this.fresh) {
@@ -77,39 +54,29 @@ export class ModernServerContext {
77
54
  this.serverData[key] = value;
78
55
  }
79
56
  getReqHeader(key) {
80
- const {
81
- req
82
- } = this;
57
+ const { req } = this;
83
58
  const field = key.toLowerCase();
84
59
  switch (field) {
85
- case 'referer':
86
- case 'referrer':
87
- return req.headers.referrer || req.headers.referer || '';
60
+ case "referer":
61
+ case "referrer":
62
+ return req.headers.referrer || req.headers.referer || "";
88
63
  default:
89
- return req.headers[field] || '';
64
+ return req.headers[field] || "";
90
65
  }
91
66
  }
92
67
  get fresh() {
93
- const {
94
- status,
95
- res,
96
- method
97
- } = this;
98
-
99
- // GET or HEAD for weak freshness validation only
100
- if ('GET' !== method && 'HEAD' !== method) {
68
+ const { status, res, method } = this;
69
+ if ("GET" !== method && "HEAD" !== method) {
101
70
  return false;
102
71
  }
103
72
  if (status >= 200 && status < 300 || 304 === status) {
104
73
  return fresh(this.headers, {
105
- etag: res.getHeader('ETag'),
106
- 'last-modified': res.getHeader('Last-Modified')
74
+ etag: res.getHeader("ETag"),
75
+ "last-modified": res.getHeader("Last-Modified")
107
76
  });
108
77
  }
109
78
  return false;
110
79
  }
111
-
112
- /* request property */
113
80
  get headers() {
114
81
  return this.req.headers;
115
82
  }
@@ -117,24 +84,24 @@ export class ModernServerContext {
117
84
  return this.req.method;
118
85
  }
119
86
  get url() {
120
- return this.req.url || '';
87
+ return this.req.url || "";
121
88
  }
122
89
  set url(val) {
123
90
  this.req.url = val;
124
91
  }
125
92
  get host() {
126
- let host = this.getReqHeader('X-Forwarded-Host');
93
+ let host = this.getReqHeader("X-Forwarded-Host");
127
94
  if (!host) {
128
- host = this.getReqHeader('Host');
95
+ host = this.getReqHeader("Host");
129
96
  }
130
- return host.split(/\s*,\s*/, 1)[0] || '';
97
+ return host.split(/\s*,\s*/, 1)[0] || "";
131
98
  }
132
99
  get protocol() {
133
100
  if (this.req.socket.encrypted) {
134
- return 'https';
101
+ return "https";
135
102
  }
136
- const proto = this.getReqHeader('X-Forwarded-Proto');
137
- return proto ? proto.split(/\s*,\s*/, 1)[0] : 'http';
103
+ const proto = this.getReqHeader("X-Forwarded-Proto");
104
+ return proto ? proto.split(/\s*,\s*/, 1)[0] : "http";
138
105
  }
139
106
  get origin() {
140
107
  return `${this.protocol}://${this.host}`;
@@ -151,7 +118,6 @@ export class ModernServerContext {
151
118
  }
152
119
  set path(p) {
153
120
  const url = new URL(this.req.url, this.origin);
154
- // this should never happened
155
121
  if (!url || !p) {
156
122
  return;
157
123
  }
@@ -163,30 +129,32 @@ export class ModernServerContext {
163
129
  }
164
130
  get querystring() {
165
131
  if (!this.req) {
166
- return '';
132
+ return "";
167
133
  }
168
- return this.parsedURL.search.replace(/^\?/, '') || '';
134
+ return this.parsedURL.search.replace(/^\?/, "") || "";
169
135
  }
170
136
  get query() {
171
137
  const str = this.querystring;
172
138
  return qs.parse(str);
173
139
  }
174
-
175
- /* response property */
176
140
  get status() {
177
141
  return this.res.statusCode;
178
142
  }
179
143
  set status(statusCode) {
180
144
  this.res.statusCode = statusCode;
181
145
  }
182
-
183
- /**
184
- * 判断链接是否已经关闭
185
- */
186
146
  resHasHandled() {
187
147
  return this.res.writableEnded;
188
148
  }
189
- error(dig, e = '') {
190
- this.logger.error(`Web Server Error - ${dig}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, this.path, headersWithoutCookie(this.headers));
191
- }
192
- }
149
+ error(dig, e = "") {
150
+ this.logger.error(
151
+ `Web Server Error - ${dig}, error = %s, req.url = %s, req.headers = %o`,
152
+ e instanceof Error ? e.stack || e.message : e,
153
+ this.path,
154
+ headersWithoutCookie(this.headers)
155
+ );
156
+ }
157
+ }
158
+ export {
159
+ ModernServerContext
160
+ };
@@ -1,3 +1,6 @@
1
1
  import { ModernServerContext } from "./context";
2
- export const createContext = (req, res, options) => new ModernServerContext(req, res, options);
3
- export { ModernServerContext };
2
+ const createContext = (req, res, options) => new ModernServerContext(req, res, options);
3
+ export {
4
+ ModernServerContext,
5
+ createContext
6
+ };
@@ -1,16 +1,29 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- import cookie from 'cookie';
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
+ import cookie from "cookie";
5
21
  import { RouteAPI } from "./route";
6
22
  import { TemplateAPI } from "./template";
7
23
  class Response {
8
24
  constructor(res) {
9
- _defineProperty(this, "cookies", void 0);
10
- _defineProperty(this, "res", void 0);
11
- _defineProperty(this, "_cookie", void 0);
12
25
  this.res = res;
13
- this._cookie = cookie.parse(res.getHeader('set-cookie') || '');
26
+ this._cookie = cookie.parse(res.getHeader("set-cookie") || "");
14
27
  this.cookies = {
15
28
  get: this.getCookie.bind(this),
16
29
  set: this.setCookie.bind(this),
@@ -45,17 +58,14 @@ class Response {
45
58
  applyCookie() {
46
59
  const str = Object.entries(this._cookie).map(([key, value]) => {
47
60
  return cookie.serialize(key, value);
48
- }).join('; ');
61
+ }).join("; ");
49
62
  if (str) {
50
- this.res.setHeader('set-cookie', str);
63
+ this.res.setHeader("set-cookie", str);
51
64
  } else {
52
- this.res.removeHeader('set-cookie');
65
+ this.res.removeHeader("set-cookie");
53
66
  }
54
67
  }
55
- raw(body, {
56
- status,
57
- headers
58
- }) {
68
+ raw(body, { status, headers }) {
59
69
  Object.entries(headers).forEach(([key, value]) => {
60
70
  this.res.setHeader(key, value);
61
71
  });
@@ -67,18 +77,11 @@ class Response {
67
77
  }
68
78
  class Request {
69
79
  constructor(ctx) {
70
- _defineProperty(this, "host", void 0);
71
- _defineProperty(this, "pathname", void 0);
72
- _defineProperty(this, "query", void 0);
73
- _defineProperty(this, "headers", void 0);
74
- _defineProperty(this, "cookie", void 0);
75
- _defineProperty(this, "cookies", void 0);
76
- _defineProperty(this, "_cookie", void 0);
77
80
  this.host = ctx.host;
78
81
  this.pathname = ctx.path;
79
82
  this.query = ctx.query;
80
83
  this.headers = ctx.headers;
81
- this.cookie = ctx.headers.cookie || '';
84
+ this.cookie = ctx.headers.cookie || "";
82
85
  this._cookie = cookie.parse(this.cookie);
83
86
  this.cookies = {
84
87
  get: this.getCookie.bind(this)
@@ -88,10 +91,8 @@ class Request {
88
91
  return this._cookie[key];
89
92
  }
90
93
  }
91
- export const base = context => {
92
- const {
93
- res
94
- } = context;
94
+ const base = (context) => {
95
+ const { res } = context;
95
96
  return {
96
97
  response: new Response(res),
97
98
  request: new Request(context),
@@ -99,22 +100,22 @@ export const base = context => {
99
100
  metrics: context.metrics
100
101
  };
101
102
  };
102
- export const createAfterMatchContext = (context, entryName) => {
103
+ const createAfterMatchContext = (context, entryName) => {
103
104
  const baseContext = base(context);
104
- return _objectSpread(_objectSpread({}, baseContext), {}, {
105
+ return __spreadProps(__spreadValues({}, baseContext), {
105
106
  router: new RouteAPI(entryName)
106
107
  });
107
108
  };
108
- export const createAfterRenderContext = (context, content) => {
109
+ const createAfterRenderContext = (context, content) => {
109
110
  const baseContext = base(context);
110
- return _objectSpread(_objectSpread({}, baseContext), {}, {
111
+ return __spreadProps(__spreadValues({}, baseContext), {
111
112
  template: new TemplateAPI(content)
112
113
  });
113
114
  };
114
- export const createMiddlewareContext = context => {
115
+ const createMiddlewareContext = (context) => {
115
116
  const baseContext = base(context);
116
- return _objectSpread(_objectSpread({}, baseContext), {}, {
117
- response: _objectSpread(_objectSpread({}, baseContext.response), {}, {
117
+ return __spreadProps(__spreadValues({}, baseContext), {
118
+ response: __spreadProps(__spreadValues({}, baseContext.response), {
118
119
  locals: context.res.locals || {}
119
120
  }),
120
121
  source: {
@@ -122,4 +123,10 @@ export const createMiddlewareContext = context => {
122
123
  res: context.res
123
124
  }
124
125
  });
125
- };
126
+ };
127
+ export {
128
+ base,
129
+ createAfterMatchContext,
130
+ createAfterRenderContext,
131
+ createMiddlewareContext
132
+ };
@@ -1,12 +1,8 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
- export class RouteAPI {
1
+ class RouteAPI {
3
2
  constructor(entryName) {
4
- _defineProperty(this, "current", void 0);
5
- _defineProperty(this, "status", void 0);
6
- _defineProperty(this, "url", void 0);
7
3
  this.current = entryName;
8
4
  this.status = 200;
9
- this.url = '';
5
+ this.url = "";
10
6
  }
11
7
  redirect(url, status = 302) {
12
8
  this.url = url;
@@ -18,4 +14,7 @@ export class RouteAPI {
18
14
  use(entryName) {
19
15
  this.rewrite(entryName);
20
16
  }
21
- }
17
+ }
18
+ export {
19
+ RouteAPI
20
+ };