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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/dist/js/modern/constants.js +0 -2
  3. package/dist/js/modern/index.js +0 -1
  4. package/dist/js/modern/libs/context/context.js +10 -56
  5. package/dist/js/modern/libs/hook-api/index.js +0 -31
  6. package/dist/js/modern/libs/hook-api/route.js +0 -8
  7. package/dist/js/modern/libs/hook-api/template.js +0 -16
  8. package/dist/js/modern/libs/loadConfig.js +3 -10
  9. package/dist/js/modern/libs/metrics.js +6 -6
  10. package/dist/js/modern/libs/proxy.js +7 -12
  11. package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -1
  12. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -9
  13. package/dist/js/modern/libs/render/cache/index.js +8 -16
  14. package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -10
  15. package/dist/js/modern/libs/render/cache/spr.js +12 -62
  16. package/dist/js/modern/libs/render/cache/util.js +0 -6
  17. package/dist/js/modern/libs/render/index.js +6 -11
  18. package/dist/js/modern/libs/render/measure.js +1 -11
  19. package/dist/js/modern/libs/render/modern/index.js +2 -13
  20. package/dist/js/modern/libs/render/reader.js +13 -24
  21. package/dist/js/modern/libs/render/ssr.js +5 -6
  22. package/dist/js/modern/libs/render/static.js +6 -9
  23. package/dist/js/modern/libs/render/type.js +0 -1
  24. package/dist/js/modern/libs/route/index.js +8 -19
  25. package/dist/js/modern/libs/route/matcher.js +21 -29
  26. package/dist/js/modern/libs/route/route.js +0 -13
  27. package/dist/js/modern/libs/serve-file.js +5 -6
  28. package/dist/js/modern/server/index.js +25 -52
  29. package/dist/js/modern/server/modern-server-split.js +0 -11
  30. package/dist/js/modern/server/modern-server.js +87 -167
  31. package/dist/js/modern/utils.js +12 -27
  32. package/dist/js/modern/worker-server.js +34 -0
  33. package/dist/js/node/constants.js +0 -2
  34. package/dist/js/node/index.js +0 -10
  35. package/dist/js/node/libs/context/context.js +10 -65
  36. package/dist/js/node/libs/context/index.js +0 -3
  37. package/dist/js/node/libs/hook-api/index.js +0 -42
  38. package/dist/js/node/libs/hook-api/route.js +0 -10
  39. package/dist/js/node/libs/hook-api/template.js +0 -22
  40. package/dist/js/node/libs/loadConfig.js +3 -22
  41. package/dist/js/node/libs/metrics.js +6 -6
  42. package/dist/js/node/libs/proxy.js +7 -17
  43. package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -5
  44. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -12
  45. package/dist/js/node/libs/render/cache/index.js +8 -22
  46. package/dist/js/node/libs/render/cache/page-caches/index.js +0 -2
  47. package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -14
  48. package/dist/js/node/libs/render/cache/spr.js +12 -71
  49. package/dist/js/node/libs/render/cache/util.js +0 -18
  50. package/dist/js/node/libs/render/index.js +6 -26
  51. package/dist/js/node/libs/render/measure.js +0 -17
  52. package/dist/js/node/libs/render/modern/index.js +2 -20
  53. package/dist/js/node/libs/render/reader.js +12 -39
  54. package/dist/js/node/libs/render/ssr.js +4 -16
  55. package/dist/js/node/libs/render/static.js +6 -18
  56. package/dist/js/node/libs/render/type.js +0 -1
  57. package/dist/js/node/libs/route/index.js +8 -22
  58. package/dist/js/node/libs/route/matcher.js +18 -34
  59. package/dist/js/node/libs/route/route.js +0 -15
  60. package/dist/js/node/libs/serve-file.js +5 -13
  61. package/dist/js/node/server/index.js +25 -72
  62. package/dist/js/node/server/modern-server-split.js +0 -13
  63. package/dist/js/node/server/modern-server.js +87 -196
  64. package/dist/js/node/utils.js +13 -52
  65. package/dist/js/node/worker-server.js +41 -0
  66. package/dist/js/treeshaking/constants.js +28 -0
  67. package/dist/js/treeshaking/index.js +13 -0
  68. package/dist/js/treeshaking/libs/context/context.js +243 -0
  69. package/dist/js/treeshaking/libs/context/index.js +5 -0
  70. package/dist/js/treeshaking/libs/hook-api/index.js +157 -0
  71. package/dist/js/treeshaking/libs/hook-api/route.js +33 -0
  72. package/dist/js/treeshaking/libs/hook-api/template.js +91 -0
  73. package/dist/js/treeshaking/libs/loadConfig.js +39 -0
  74. package/dist/js/treeshaking/libs/metrics.js +12 -0
  75. package/dist/js/treeshaking/libs/proxy.js +80 -0
  76. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +124 -0
  77. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +464 -0
  78. package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +53 -0
  79. package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +35 -0
  80. package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +121 -0
  81. package/dist/js/treeshaking/libs/render/cache/index.js +184 -0
  82. package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +30 -0
  83. package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +46 -0
  84. package/dist/js/treeshaking/libs/render/cache/spr.js +362 -0
  85. package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
  86. package/dist/js/treeshaking/libs/render/cache/util.js +101 -0
  87. package/dist/js/treeshaking/libs/render/index.js +100 -0
  88. package/dist/js/treeshaking/libs/render/measure.js +61 -0
  89. package/dist/js/treeshaking/libs/render/modern/browser-list.js +7 -0
  90. package/dist/js/treeshaking/libs/render/modern/index.js +39 -0
  91. package/dist/js/treeshaking/libs/render/reader.js +191 -0
  92. package/dist/js/treeshaking/libs/render/ssr.js +98 -0
  93. package/dist/js/treeshaking/libs/render/static.js +84 -0
  94. package/dist/js/treeshaking/libs/render/type.js +6 -0
  95. package/dist/js/treeshaking/libs/route/index.js +94 -0
  96. package/dist/js/treeshaking/libs/route/matcher.js +113 -0
  97. package/dist/js/treeshaking/libs/route/route.js +26 -0
  98. package/dist/js/treeshaking/libs/serve-file.js +75 -0
  99. package/dist/js/treeshaking/server/index.js +339 -0
  100. package/dist/js/treeshaking/server/modern-server-split.js +152 -0
  101. package/dist/js/treeshaking/server/modern-server.js +946 -0
  102. package/dist/js/treeshaking/type.js +1 -0
  103. package/dist/js/treeshaking/utils.js +90 -0
  104. package/dist/js/treeshaking/worker-server.js +56 -0
  105. package/dist/types/index.d.ts +0 -2
  106. package/dist/types/libs/context/context.d.ts +0 -3
  107. package/dist/types/libs/loadConfig.d.ts +0 -1
  108. package/dist/types/libs/render/cache/index.d.ts +0 -2
  109. package/dist/types/libs/render/cache/spr.d.ts +0 -2
  110. package/dist/types/server/index.d.ts +0 -3
  111. package/dist/types/utils.d.ts +2 -3
  112. package/dist/types/worker-server.d.ts +16 -0
  113. package/package.json +31 -15
@@ -1,10 +1,6 @@
1
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
-
3
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; }
4
-
5
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; }
6
-
7
- import { compile } from 'path-to-regexp';
8
4
  import { createDebugger, isProd } from '@modern-js/utils';
9
5
  export const debug = createDebugger('prod-server');
10
6
  export const mergeExtension = users => {
@@ -13,7 +9,8 @@ export const mergeExtension = users => {
13
9
  middleware: output.concat(users)
14
10
  };
15
11
  };
16
- export const noop = () => {// noop
12
+ export const noop = () => {
13
+ // noop
17
14
  };
18
15
  export const createErrorDocument = (status, text) => {
19
16
  const title = `${status}: ${text}`;
@@ -51,44 +48,38 @@ export const createErrorDocument = (status, text) => {
51
48
  export const createMiddlewareCollecter = () => {
52
49
  const webMiddlewares = [];
53
50
  const apiMiddlewares = [];
54
-
55
51
  const addWebMiddleware = input => {
56
52
  webMiddlewares.push(input);
57
53
  };
58
-
59
54
  const addAPIMiddleware = input => {
60
55
  apiMiddlewares.push(input);
61
56
  };
62
-
63
57
  const getMiddlewares = () => ({
64
58
  web: webMiddlewares,
65
59
  api: apiMiddlewares
66
60
  });
67
-
68
61
  return {
69
62
  getMiddlewares,
70
63
  addWebMiddleware,
71
64
  addAPIMiddleware
72
65
  };
73
66
  };
74
- export const toPath = (reg, params) => {
75
- const fn = compile(reg, {
76
- encode: encodeURIComponent
77
- });
78
- return fn(params);
79
- };
80
67
  export const useLocalPrefix = url => {
81
68
  return isProd() && !url.includes('.');
82
69
  };
83
- export const getStaticReg = (output = {}) => {
70
+ export const getStaticReg = (output = {}, html = {}) => {
84
71
  const {
85
- favicon,
86
- faviconByEntries,
87
- cssPath,
88
- jsPath,
89
- mediaPath,
72
+ distPath: {
73
+ css: cssPath,
74
+ js: jsPath,
75
+ media: mediaPath
76
+ } = {},
90
77
  assetPrefix = '/'
91
78
  } = output;
79
+ const {
80
+ favicon,
81
+ faviconByEntries
82
+ } = html;
92
83
  const prefix = useLocalPrefix(assetPrefix) ? assetPrefix : '';
93
84
  const favicons = prepareFavicons(favicon, faviconByEntries);
94
85
  const staticFiles = [cssPath, jsPath, mediaPath].filter(v => Boolean(v));
@@ -100,31 +91,25 @@ export const getStaticReg = (output = {}) => {
100
91
  };
101
92
  export const prepareFavicons = (favicon, faviconByEntries) => {
102
93
  const faviconNames = [];
103
-
104
94
  if (favicon) {
105
95
  faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
106
96
  }
107
-
108
97
  if (faviconByEntries) {
109
98
  Object.keys(faviconByEntries).forEach(f => {
110
99
  const curFavicon = faviconByEntries[f];
111
-
112
100
  if (curFavicon) {
113
101
  faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
114
102
  }
115
103
  });
116
104
  }
117
-
118
105
  return faviconNames;
119
106
  };
120
107
  export const headersWithoutCookie = headers => {
121
108
  if (typeof headers.cookie !== 'undefined') {
122
109
  const safeHeaders = _objectSpread({}, headers);
123
-
124
110
  delete safeHeaders.cookie;
125
111
  return safeHeaders;
126
112
  }
127
-
128
113
  return headers;
129
114
  };
130
115
  export const isRedirect = code => {
@@ -0,0 +1,34 @@
1
+ import { RouteMatchManager } from "./libs/route";
2
+ export const createHandler = manifest => {
3
+ const routeMgr = new RouteMatchManager();
4
+ const {
5
+ pages,
6
+ routes
7
+ } = manifest;
8
+ routeMgr.reset(routes);
9
+ return async ctx => {
10
+ var _ctx$request, _ctx$request$query, _ctx$request2, _ctx$request2$pathnam, _ctx$request3, _ctx$request3$params;
11
+ const pageMatch = routeMgr.match(ctx.url);
12
+ if (!pageMatch) {
13
+ ctx.body = '404: Page not found';
14
+ ctx.status = 404;
15
+ return;
16
+ }
17
+ const page = pages[pageMatch.spec.urlPath];
18
+ (_ctx$request$query = (_ctx$request = ctx.request).query) !== null && _ctx$request$query !== void 0 ? _ctx$request$query : _ctx$request.query = ctx.query;
19
+ (_ctx$request2$pathnam = (_ctx$request2 = ctx.request).pathname) !== null && _ctx$request2$pathnam !== void 0 ? _ctx$request2$pathnam : _ctx$request2.pathname = ctx.pathname;
20
+ (_ctx$request3$params = (_ctx$request3 = ctx.request).params) !== null && _ctx$request3$params !== void 0 ? _ctx$request3$params : _ctx$request3.params = ctx.params;
21
+ const params = pageMatch.parseURLParams(ctx.url);
22
+ ctx.body = await page.serverRender({
23
+ template: page.template,
24
+ query: ctx.query,
25
+ request: ctx.request,
26
+ response: ctx.response,
27
+ pathname: ctx.pathname,
28
+ req: ctx.request,
29
+ res: ctx.response,
30
+ params: ctx.params || params || {}
31
+ });
32
+ ctx.status = 200;
33
+ };
34
+ };
@@ -14,12 +14,10 @@ const AGGRED_DIR = {
14
14
  exports.AGGRED_DIR = AGGRED_DIR;
15
15
  let ApiServerMode;
16
16
  exports.ApiServerMode = ApiServerMode;
17
-
18
17
  (function (ApiServerMode) {
19
18
  ApiServerMode["func"] = "function";
20
19
  ApiServerMode["frame"] = "framework";
21
20
  })(ApiServerMode || (exports.ApiServerMode = ApiServerMode = {}));
22
-
23
21
  const ERROR_DIGEST = {
24
22
  INIT: 'Server init error',
25
23
  ENOTF: 'Page could not be found',
@@ -27,15 +27,10 @@ Object.defineProperty(exports, "createProxyHandler", {
27
27
  }
28
28
  });
29
29
  exports.default = void 0;
30
-
31
30
  var _server = require("./server");
32
-
33
31
  var _modernServer = require("./server/modern-server");
34
-
35
32
  var _proxy = require("./libs/proxy");
36
-
37
33
  var _type = require("./type");
38
-
39
34
  Object.keys(_type).forEach(function (key) {
40
35
  if (key === "default" || key === "__esModule") return;
41
36
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -47,9 +42,7 @@ Object.keys(_type).forEach(function (key) {
47
42
  }
48
43
  });
49
44
  });
50
-
51
45
  var _constants = require("./constants");
52
-
53
46
  Object.keys(_constants).forEach(function (key) {
54
47
  if (key === "default" || key === "__esModule") return;
55
48
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -61,14 +54,11 @@ Object.keys(_constants).forEach(function (key) {
61
54
  }
62
55
  });
63
56
  });
64
-
65
57
  var _default = options => {
66
58
  if (options == null) {
67
59
  throw new Error('can not start mserver without options');
68
60
  }
69
-
70
61
  const server = new _server.Server(options);
71
62
  return server.init();
72
63
  };
73
-
74
64
  exports.default = _default;
@@ -4,23 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ModernServerContext = void 0;
7
-
8
7
  var _url = require("url");
9
-
10
8
  var _querystring = _interopRequireDefault(require("querystring"));
11
-
12
9
  var _buffer = require("buffer");
13
-
14
10
  var _etag = _interopRequireDefault(require("etag"));
15
-
16
11
  var _fresh = _interopRequireDefault(require("fresh"));
17
-
18
12
  var _utils = require("../../utils");
19
-
20
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
14
  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; }
23
-
24
15
  class ModernServerContext {
25
16
  /**
26
17
  * http request
@@ -33,223 +24,177 @@ class ModernServerContext {
33
24
  /**
34
25
  * url params
35
26
  */
27
+
36
28
  get logger() {
37
29
  return this.req.logger;
38
30
  }
39
-
40
31
  get metrics() {
41
32
  return this.req.metrics;
42
33
  }
43
-
44
34
  constructor(req, res, options) {
45
35
  _defineProperty(this, "req", void 0);
46
-
47
36
  _defineProperty(this, "res", void 0);
48
-
49
37
  _defineProperty(this, "params", {});
50
-
51
38
  _defineProperty(this, "serverData", void 0);
52
-
53
39
  _defineProperty(this, "options", {});
54
-
55
40
  this.req = req;
56
41
  this.res = res;
57
42
  this.options = options || {};
58
43
  this.serverData = {};
59
44
  this.bind();
60
45
  }
61
-
62
46
  bind() {
63
47
  const {
64
48
  req,
65
49
  res
66
50
  } = this;
67
-
68
51
  req.get = key => this.getReqHeader(key);
69
-
70
52
  res.set = (key, value) => this.res.setHeader(key, value);
71
-
72
53
  res.send = body => {
73
54
  this.send(body);
74
55
  };
75
- } // compat express res.send, only support etag now
76
-
56
+ }
77
57
 
58
+ // compat express res.send, only support etag now
78
59
  send(body) {
79
60
  try {
80
61
  const generateETag = !this.res.getHeader('ETag') && this.options.etag;
81
-
82
62
  if (body !== undefined && generateETag) {
83
63
  const encoding = typeof body === 'string' ? 'utf-8' : undefined;
84
64
  const buf = !_buffer.Buffer.isBuffer(body) ? _buffer.Buffer.from(body, encoding) : body;
85
65
  const etag = (0, _etag.default)(buf, {
86
66
  weak: true
87
67
  });
88
-
89
68
  if (etag) {
90
69
  this.res.setHeader('ETag', etag);
91
70
  }
92
71
  }
93
-
94
72
  if (this.fresh) {
95
73
  this.status = 304;
96
74
  }
97
75
  } catch (e) {
98
76
  this.logger.error(e.message);
99
77
  }
100
-
101
78
  this.res.end(body);
102
79
  }
103
-
104
80
  setParams(params) {
105
81
  this.params = params;
106
82
  }
107
-
108
83
  setServerData(key, value) {
109
84
  this.serverData[key] = value;
110
85
  }
111
-
112
86
  getReqHeader(key) {
113
87
  const {
114
88
  req
115
89
  } = this;
116
90
  const field = key.toLowerCase();
117
-
118
91
  switch (field) {
119
92
  case 'referer':
120
93
  case 'referrer':
121
94
  return req.headers.referrer || req.headers.referer || '';
122
-
123
95
  default:
124
96
  return req.headers[field] || '';
125
97
  }
126
98
  }
127
-
128
99
  get fresh() {
129
100
  const {
130
101
  status,
131
102
  res,
132
103
  method
133
- } = this; // GET or HEAD for weak freshness validation only
104
+ } = this;
134
105
 
106
+ // GET or HEAD for weak freshness validation only
135
107
  if ('GET' !== method && 'HEAD' !== method) {
136
108
  return false;
137
109
  }
138
-
139
110
  if (status >= 200 && status < 300 || 304 === status) {
140
111
  return (0, _fresh.default)(this.headers, {
141
112
  etag: res.getHeader('ETag'),
142
113
  'last-modified': res.getHeader('Last-Modified')
143
114
  });
144
115
  }
145
-
146
116
  return false;
147
117
  }
148
- /* request property */
149
-
150
118
 
119
+ /* request property */
151
120
  get headers() {
152
121
  return this.req.headers;
153
122
  }
154
-
155
123
  get method() {
156
124
  return this.req.method;
157
125
  }
158
-
159
126
  get url() {
160
127
  return this.req.url || '';
161
128
  }
162
-
163
129
  set url(val) {
164
130
  this.req.url = val;
165
131
  }
166
-
167
132
  get host() {
168
133
  let host = this.getReqHeader('X-Forwarded-Host');
169
-
170
134
  if (!host) {
171
135
  host = this.getReqHeader('Host');
172
136
  }
173
-
174
137
  return host.split(/\s*,\s*/, 1)[0] || '';
175
138
  }
176
-
177
139
  get protocol() {
178
140
  if (this.req.socket.encrypted) {
179
141
  return 'https';
180
142
  }
181
-
182
143
  const proto = this.getReqHeader('X-Forwarded-Proto');
183
144
  return proto ? proto.split(/\s*,\s*/, 1)[0] : 'http';
184
145
  }
185
-
186
146
  get origin() {
187
147
  return `${this.protocol}://${this.host}`;
188
148
  }
189
-
190
149
  get href() {
191
150
  return this.origin + this.url;
192
151
  }
193
-
194
152
  get parsedURL() {
195
153
  const url = new _url.URL(this.req.url, this.origin);
196
154
  return url;
197
155
  }
198
-
199
156
  get path() {
200
157
  return this.parsedURL.pathname;
201
158
  }
202
-
203
159
  set path(p) {
204
- const url = new _url.URL(this.req.url, this.origin); // this should never happened
205
-
160
+ const url = new _url.URL(this.req.url, this.origin);
161
+ // this should never happened
206
162
  if (!url || !p) {
207
163
  return;
208
164
  }
209
-
210
165
  if (url.pathname === p) {
211
166
  return;
212
167
  }
213
-
214
168
  url.pathname = p;
215
169
  this.url = url.toString();
216
170
  }
217
-
218
171
  get querystring() {
219
172
  if (!this.req) {
220
173
  return '';
221
174
  }
222
-
223
175
  return this.parsedURL.search.replace(/^\?/, '') || '';
224
176
  }
225
-
226
177
  get query() {
227
178
  const str = this.querystring;
228
179
  return _querystring.default.parse(str);
229
180
  }
230
- /* response property */
231
-
232
181
 
182
+ /* response property */
233
183
  get status() {
234
184
  return this.res.statusCode;
235
185
  }
236
-
237
186
  set status(statusCode) {
238
187
  this.res.statusCode = statusCode;
239
188
  }
189
+
240
190
  /**
241
191
  * 判断链接是否已经关闭
242
192
  */
243
-
244
-
245
193
  resHasHandled() {
246
194
  return this.res.writableEnded;
247
195
  }
248
-
249
196
  error(dig, e = '') {
250
197
  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, (0, _utils.headersWithoutCookie)(this.headers));
251
198
  }
252
-
253
199
  }
254
-
255
200
  exports.ModernServerContext = ModernServerContext;
@@ -10,9 +10,6 @@ Object.defineProperty(exports, "ModernServerContext", {
10
10
  }
11
11
  });
12
12
  exports.createContext = void 0;
13
-
14
13
  var _context = require("./context");
15
-
16
14
  const createContext = (req, res, options) => new _context.ModernServerContext(req, res, options);
17
-
18
15
  exports.createContext = createContext;
@@ -4,29 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createMiddlewareContext = exports.createAfterRenderContext = exports.createAfterMatchContext = exports.base = void 0;
7
-
8
7
  var _cookie = _interopRequireDefault(require("cookie"));
9
-
10
8
  var _route = require("./route");
11
-
12
9
  var _template = require("./template");
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  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; }
17
-
18
12
  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; }
19
-
20
13
  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; }
21
-
22
14
  class Response {
23
15
  constructor(res) {
24
16
  _defineProperty(this, "cookies", void 0);
25
-
26
17
  _defineProperty(this, "res", void 0);
27
-
28
18
  _defineProperty(this, "_cookie", void 0);
29
-
30
19
  this.res = res;
31
20
  this._cookie = _cookie.default.parse(res.getHeader('set-cookie') || '');
32
21
  this.cookies = {
@@ -37,49 +26,39 @@ class Response {
37
26
  apply: this.applyCookie.bind(this)
38
27
  };
39
28
  }
40
-
41
29
  get(key) {
42
30
  return this.res.getHeader(key);
43
31
  }
44
-
45
32
  set(key, value) {
46
33
  return this.res.setHeader(key, value);
47
34
  }
48
-
49
35
  status(code) {
50
36
  this.res.statusCode = code;
51
37
  }
52
-
53
38
  getCookie(key) {
54
39
  return this._cookie[key];
55
40
  }
56
-
57
41
  setCookie(key, value) {
58
42
  this._cookie[key] = value;
59
43
  }
60
-
61
44
  deleteCookie(key) {
62
45
  if (this._cookie[key]) {
63
46
  delete this._cookie[key];
64
47
  }
65
48
  }
66
-
67
49
  clearCookie() {
68
50
  this._cookie = {};
69
51
  }
70
-
71
52
  applyCookie() {
72
53
  const str = Object.entries(this._cookie).map(([key, value]) => {
73
54
  return _cookie.default.serialize(key, value);
74
55
  }).join('; ');
75
-
76
56
  if (str) {
77
57
  this.res.setHeader('set-cookie', str);
78
58
  } else {
79
59
  this.res.removeHeader('set-cookie');
80
60
  }
81
61
  }
82
-
83
62
  raw(body, {
84
63
  status,
85
64
  headers
@@ -87,32 +66,21 @@ class Response {
87
66
  Object.entries(headers).forEach(([key, value]) => {
88
67
  this.res.setHeader(key, value);
89
68
  });
90
-
91
69
  if (status) {
92
70
  this.res.statusCode = status;
93
71
  }
94
-
95
72
  this.res.end(body);
96
73
  }
97
-
98
74
  }
99
-
100
75
  class Request {
101
76
  constructor(ctx) {
102
77
  _defineProperty(this, "host", void 0);
103
-
104
78
  _defineProperty(this, "pathname", void 0);
105
-
106
79
  _defineProperty(this, "query", void 0);
107
-
108
80
  _defineProperty(this, "headers", void 0);
109
-
110
81
  _defineProperty(this, "cookie", void 0);
111
-
112
82
  _defineProperty(this, "cookies", void 0);
113
-
114
83
  _defineProperty(this, "_cookie", void 0);
115
-
116
84
  this.host = ctx.host;
117
85
  this.pathname = ctx.path;
118
86
  this.query = ctx.query;
@@ -123,13 +91,10 @@ class Request {
123
91
  get: this.getCookie.bind(this)
124
92
  };
125
93
  }
126
-
127
94
  getCookie(key) {
128
95
  return this._cookie[key];
129
96
  }
130
-
131
97
  }
132
-
133
98
  const base = context => {
134
99
  const {
135
100
  res
@@ -141,27 +106,21 @@ const base = context => {
141
106
  metrics: context.metrics
142
107
  };
143
108
  };
144
-
145
109
  exports.base = base;
146
-
147
110
  const createAfterMatchContext = (context, entryName) => {
148
111
  const baseContext = base(context);
149
112
  return _objectSpread(_objectSpread({}, baseContext), {}, {
150
113
  router: new _route.RouteAPI(entryName)
151
114
  });
152
115
  };
153
-
154
116
  exports.createAfterMatchContext = createAfterMatchContext;
155
-
156
117
  const createAfterRenderContext = (context, content) => {
157
118
  const baseContext = base(context);
158
119
  return _objectSpread(_objectSpread({}, baseContext), {}, {
159
120
  template: new _template.TemplateAPI(content)
160
121
  });
161
122
  };
162
-
163
123
  exports.createAfterRenderContext = createAfterRenderContext;
164
-
165
124
  const createMiddlewareContext = context => {
166
125
  const baseContext = base(context);
167
126
  return _objectSpread(_objectSpread({}, baseContext), {}, {
@@ -174,5 +133,4 @@ const createMiddlewareContext = context => {
174
133
  }
175
134
  });
176
135
  };
177
-
178
136
  exports.createMiddlewareContext = createMiddlewareContext;
@@ -4,35 +4,25 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.RouteAPI = void 0;
7
-
8
7
  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; }
9
-
10
8
  class RouteAPI {
11
9
  constructor(entryName) {
12
10
  _defineProperty(this, "current", void 0);
13
-
14
11
  _defineProperty(this, "status", void 0);
15
-
16
12
  _defineProperty(this, "url", void 0);
17
-
18
13
  this.current = entryName;
19
14
  this.status = 200;
20
15
  this.url = '';
21
16
  }
22
-
23
17
  redirect(url, status = 302) {
24
18
  this.url = url;
25
19
  this.status = status;
26
20
  }
27
-
28
21
  rewrite(entryName) {
29
22
  this.current = entryName;
30
23
  }
31
-
32
24
  use(entryName) {
33
25
  this.rewrite(entryName);
34
26
  }
35
-
36
27
  }
37
-
38
28
  exports.RouteAPI = RouteAPI;