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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +271 -17
  2. package/dist/js/modern/constants.js +32 -27
  3. package/dist/js/modern/index.js +11 -7
  4. package/dist/js/modern/libs/context/context.js +54 -132
  5. package/dist/js/modern/libs/context/index.js +5 -2
  6. package/dist/js/modern/libs/hook-api/index.js +134 -0
  7. package/dist/js/modern/libs/hook-api/route.js +13 -37
  8. package/dist/js/modern/libs/hook-api/template.js +41 -32
  9. package/dist/js/modern/libs/loadConfig.js +46 -32
  10. package/dist/js/modern/libs/metrics.js +6 -7
  11. package/dist/js/modern/libs/proxy.js +70 -44
  12. package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +112 -68
  13. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +246 -225
  14. package/dist/js/modern/libs/render/cache/__tests__/cacheable.js +43 -49
  15. package/dist/js/modern/libs/render/cache/__tests__/error-configuration.js +36 -34
  16. package/dist/js/modern/libs/render/cache/__tests__/matched-cache.js +83 -113
  17. package/dist/js/modern/libs/render/cache/index.js +93 -50
  18. package/dist/js/modern/libs/render/cache/page-caches/index.js +31 -8
  19. package/dist/js/modern/libs/render/cache/page-caches/lru.js +6 -16
  20. package/dist/js/modern/libs/render/cache/spr.js +133 -167
  21. package/dist/js/modern/libs/render/cache/type.js +0 -1
  22. package/dist/js/modern/libs/render/cache/util.js +71 -45
  23. package/dist/js/modern/libs/render/index.js +76 -61
  24. package/dist/js/modern/libs/render/measure.js +42 -34
  25. package/dist/js/modern/libs/render/reader.js +68 -76
  26. package/dist/js/modern/libs/render/ssr.js +63 -33
  27. package/dist/js/modern/libs/render/static.js +51 -37
  28. package/dist/js/modern/libs/render/type.js +9 -7
  29. package/dist/js/modern/libs/route/index.js +12 -30
  30. package/dist/js/modern/libs/route/matcher.js +28 -50
  31. package/dist/js/modern/libs/route/route.js +9 -31
  32. package/dist/js/modern/libs/serve-file.js +40 -20
  33. package/dist/js/modern/server/index.js +152 -168
  34. package/dist/js/modern/server/modern-server-split.js +44 -60
  35. package/dist/js/modern/server/modern-server.js +416 -526
  36. package/dist/js/modern/type.js +0 -1
  37. package/dist/js/modern/utils.js +62 -58
  38. package/dist/js/modern/worker-server.js +54 -0
  39. package/dist/js/node/constants.js +53 -32
  40. package/dist/js/node/index.js +37 -67
  41. package/dist/js/node/libs/context/context.js +84 -150
  42. package/dist/js/node/libs/context/index.js +28 -16
  43. package/dist/js/node/libs/hook-api/index.js +164 -0
  44. package/dist/js/node/libs/hook-api/route.js +35 -45
  45. package/dist/js/node/libs/hook-api/template.js +64 -40
  46. package/dist/js/node/libs/loadConfig.js +74 -55
  47. package/dist/js/node/libs/metrics.js +28 -12
  48. package/dist/js/node/libs/proxy.js +90 -55
  49. package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +99 -61
  50. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +147 -140
  51. package/dist/js/node/libs/render/cache/__tests__/cacheable.js +65 -55
  52. package/dist/js/node/libs/render/cache/__tests__/error-configuration.js +58 -40
  53. package/dist/js/node/libs/render/cache/__tests__/matched-cache.js +105 -119
  54. package/dist/js/node/libs/render/cache/index.js +115 -65
  55. package/dist/js/node/libs/render/cache/page-caches/index.js +54 -16
  56. package/dist/js/node/libs/render/cache/page-caches/lru.js +33 -26
  57. package/dist/js/node/libs/render/cache/spr.js +161 -188
  58. package/dist/js/node/libs/render/cache/type.js +15 -5
  59. package/dist/js/node/libs/render/cache/util.js +99 -63
  60. package/dist/js/node/libs/render/index.js +106 -87
  61. package/dist/js/node/libs/render/measure.js +61 -44
  62. package/dist/js/node/libs/render/reader.js +98 -100
  63. package/dist/js/node/libs/render/ssr.js +92 -58
  64. package/dist/js/node/libs/render/static.js +80 -53
  65. package/dist/js/node/libs/render/type.js +31 -13
  66. package/dist/js/node/libs/route/index.js +35 -44
  67. package/dist/js/node/libs/route/matcher.js +48 -65
  68. package/dist/js/node/libs/route/route.js +29 -37
  69. package/dist/js/node/libs/serve-file.js +74 -37
  70. package/dist/js/node/server/index.js +170 -203
  71. package/dist/js/node/server/modern-server-split.js +70 -73
  72. package/dist/js/node/server/modern-server.js +432 -577
  73. package/dist/js/node/type.js +15 -3
  74. package/dist/js/node/utils.js +87 -93
  75. package/dist/js/node/worker-server.js +77 -0
  76. package/dist/js/treeshaking/constants.js +29 -0
  77. package/dist/js/treeshaking/index.js +13 -0
  78. package/dist/js/treeshaking/libs/context/context.js +274 -0
  79. package/dist/js/treeshaking/libs/context/index.js +5 -0
  80. package/dist/js/treeshaking/libs/hook-api/index.js +281 -0
  81. package/dist/js/treeshaking/libs/hook-api/route.js +68 -0
  82. package/dist/js/treeshaking/libs/hook-api/template.js +127 -0
  83. package/dist/js/treeshaking/libs/loadConfig.js +82 -0
  84. package/dist/js/treeshaking/libs/metrics.js +6 -0
  85. package/dist/js/treeshaking/libs/proxy.js +244 -0
  86. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +291 -0
  87. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +781 -0
  88. package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +67 -0
  89. package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +45 -0
  90. package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +147 -0
  91. package/dist/js/treeshaking/libs/render/cache/index.js +346 -0
  92. package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +154 -0
  93. package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +84 -0
  94. package/dist/js/treeshaking/libs/render/cache/spr.js +492 -0
  95. package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
  96. package/dist/js/treeshaking/libs/render/cache/util.js +280 -0
  97. package/dist/js/treeshaking/libs/render/index.js +233 -0
  98. package/dist/js/treeshaking/libs/render/measure.js +146 -0
  99. package/dist/js/treeshaking/libs/render/reader.js +339 -0
  100. package/dist/js/treeshaking/libs/render/ssr.js +223 -0
  101. package/dist/js/treeshaking/libs/render/static.js +216 -0
  102. package/dist/js/treeshaking/libs/render/type.js +7 -0
  103. package/dist/js/treeshaking/libs/route/index.js +130 -0
  104. package/dist/js/treeshaking/libs/route/matcher.js +138 -0
  105. package/dist/js/treeshaking/libs/route/route.js +40 -0
  106. package/dist/js/treeshaking/libs/serve-file.js +184 -0
  107. package/dist/js/treeshaking/server/index.js +505 -0
  108. package/dist/js/treeshaking/server/modern-server-split.js +360 -0
  109. package/dist/js/treeshaking/server/modern-server.js +1083 -0
  110. package/dist/js/treeshaking/type.js +1 -0
  111. package/dist/js/treeshaking/utils.js +147 -0
  112. package/dist/js/treeshaking/worker-server.js +177 -0
  113. package/dist/types/libs/context/context.d.ts +1 -1
  114. package/dist/types/libs/hook-api/index.d.ts +5 -0
  115. package/dist/types/libs/hook-api/route.d.ts +9 -14
  116. package/dist/types/libs/hook-api/template.d.ts +19 -9
  117. package/dist/types/libs/render/cache/index.d.ts +4 -2
  118. package/dist/types/libs/render/type.d.ts +3 -1
  119. package/dist/types/libs/route/route.d.ts +0 -1
  120. package/dist/types/libs/serve-file.d.ts +2 -1
  121. package/dist/types/server/index.d.ts +2 -0
  122. package/dist/types/server/modern-server.d.ts +11 -11
  123. package/dist/types/type.d.ts +8 -10
  124. package/dist/types/utils.d.ts +3 -4
  125. package/dist/types/worker-server.d.ts +15 -0
  126. package/package.json +31 -45
  127. package/dist/js/modern/libs/render/modern/browser-list.js +0 -7
  128. package/dist/js/modern/libs/render/modern/index.js +0 -48
  129. package/dist/js/node/libs/render/modern/browser-list.js +0 -14
  130. package/dist/js/node/libs/render/modern/index.js +0 -64
  131. package/dist/types/libs/render/modern/browser-list.d.ts +0 -1
  132. package/dist/types/libs/render/modern/index.d.ts +0 -3
@@ -1,255 +1,189 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var context_exports = {};
25
+ __export(context_exports, {
26
+ ModernServerContext: () => ModernServerContext
5
27
  });
6
- exports.ModernServerContext = void 0;
7
-
8
- var _url = require("url");
9
-
10
- var _querystring = _interopRequireDefault(require("querystring"));
11
-
12
- var _buffer = require("buffer");
13
-
14
- var _etag = _interopRequireDefault(require("etag"));
15
-
16
- var _fresh = _interopRequireDefault(require("fresh"));
17
-
18
- var _utils = require("../../utils");
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- 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
-
28
+ module.exports = __toCommonJS(context_exports);
29
+ var import_url = require("url");
30
+ var import_querystring = __toESM(require("querystring"));
31
+ var import_buffer = require("buffer");
32
+ var import_etag = __toESM(require("etag"));
33
+ var import_fresh = __toESM(require("fresh"));
34
+ var import_utils = require("../../utils");
24
35
  class ModernServerContext {
25
- /**
26
- * http request
27
- */
28
-
29
- /**
30
- * http response
31
- */
32
-
33
- /**
34
- * url params
35
- */
36
- get logger() {
37
- return this.req.logger;
38
- }
39
-
40
- get metrics() {
41
- return this.req.metrics;
42
- }
43
-
44
36
  constructor(req, res, options) {
45
- _defineProperty(this, "req", void 0);
46
-
47
- _defineProperty(this, "res", void 0);
48
-
49
- _defineProperty(this, "params", {});
50
-
51
- _defineProperty(this, "serverData", void 0);
52
-
53
- _defineProperty(this, "options", {});
54
-
37
+ this.params = {};
38
+ this.options = {};
55
39
  this.req = req;
56
40
  this.res = res;
57
41
  this.options = options || {};
58
42
  this.serverData = {};
59
43
  this.bind();
60
44
  }
61
-
45
+ get logger() {
46
+ return this.req.logger;
47
+ }
48
+ get metrics() {
49
+ return this.req.metrics;
50
+ }
62
51
  bind() {
63
- const {
64
- req,
65
- res
66
- } = this;
67
-
68
- req.get = key => this.getReqHeader(key);
69
-
52
+ const { req, res } = this;
53
+ req.get = (key) => this.getReqHeader(key);
70
54
  res.set = (key, value) => this.res.setHeader(key, value);
71
-
72
- res.send = body => {
55
+ res.send = (body) => {
73
56
  this.send(body);
74
57
  };
75
- } // compat express res.send, only support etag now
76
-
77
-
58
+ }
78
59
  send(body) {
79
60
  try {
80
- const generateETag = !this.res.getHeader('ETag') && this.options.etag;
81
-
82
- if (body !== undefined && generateETag) {
83
- const encoding = typeof body === 'string' ? 'utf-8' : undefined;
84
- const buf = !_buffer.Buffer.isBuffer(body) ? _buffer.Buffer.from(body, encoding) : body;
85
- const etag = (0, _etag.default)(buf, {
86
- weak: true
87
- });
88
-
61
+ const generateETag = !this.res.getHeader("ETag") && this.options.etag;
62
+ if (body !== void 0 && generateETag) {
63
+ const encoding = typeof body === "string" ? "utf-8" : void 0;
64
+ const buf = !import_buffer.Buffer.isBuffer(body) ? import_buffer.Buffer.from(body, encoding) : body;
65
+ const etag = (0, import_etag.default)(buf, { weak: true });
89
66
  if (etag) {
90
- this.res.setHeader('ETag', etag);
67
+ this.res.setHeader("ETag", etag);
91
68
  }
92
69
  }
93
-
94
70
  if (this.fresh) {
95
71
  this.status = 304;
96
72
  }
97
73
  } catch (e) {
98
74
  this.logger.error(e.message);
99
75
  }
100
-
101
76
  this.res.end(body);
102
77
  }
103
-
104
78
  setParams(params) {
105
79
  this.params = params;
106
80
  }
107
-
108
81
  setServerData(key, value) {
109
82
  this.serverData[key] = value;
110
83
  }
111
-
112
84
  getReqHeader(key) {
113
- const {
114
- req
115
- } = this;
85
+ const { req } = this;
116
86
  const field = key.toLowerCase();
117
-
118
87
  switch (field) {
119
- case 'referer':
120
- case 'referrer':
121
- return req.headers.referrer || req.headers.referer || '';
122
-
88
+ case "referer":
89
+ case "referrer":
90
+ return req.headers.referrer || req.headers.referer || "";
123
91
  default:
124
- return req.headers[field] || '';
92
+ return req.headers[field] || "";
125
93
  }
126
94
  }
127
-
128
95
  get fresh() {
129
- const {
130
- status,
131
- res,
132
- method
133
- } = this; // GET or HEAD for weak freshness validation only
134
-
135
- if ('GET' !== method && 'HEAD' !== method) {
96
+ const { status, res, method } = this;
97
+ if ("GET" !== method && "HEAD" !== method) {
136
98
  return false;
137
99
  }
138
-
139
100
  if (status >= 200 && status < 300 || 304 === status) {
140
- return (0, _fresh.default)(this.headers, {
141
- etag: res.getHeader('ETag'),
142
- 'last-modified': res.getHeader('Last-Modified')
101
+ return (0, import_fresh.default)(this.headers, {
102
+ etag: res.getHeader("ETag"),
103
+ "last-modified": res.getHeader("Last-Modified")
143
104
  });
144
105
  }
145
-
146
106
  return false;
147
107
  }
148
- /* request property */
149
-
150
-
151
108
  get headers() {
152
109
  return this.req.headers;
153
110
  }
154
-
155
111
  get method() {
156
112
  return this.req.method;
157
113
  }
158
-
159
114
  get url() {
160
- return this.req.url || '';
115
+ return this.req.url || "";
161
116
  }
162
-
163
117
  set url(val) {
164
118
  this.req.url = val;
165
119
  }
166
-
167
120
  get host() {
168
- let host = this.getReqHeader('X-Forwarded-Host');
169
-
121
+ let host = this.getReqHeader("X-Forwarded-Host");
170
122
  if (!host) {
171
- host = this.getReqHeader('Host');
123
+ host = this.getReqHeader("Host");
172
124
  }
173
-
174
- return host.split(/\s*,\s*/, 1)[0] || '';
125
+ return host.split(/\s*,\s*/, 1)[0] || "";
175
126
  }
176
-
177
127
  get protocol() {
178
128
  if (this.req.socket.encrypted) {
179
- return 'https';
129
+ return "https";
180
130
  }
181
-
182
- const proto = this.getReqHeader('X-Forwarded-Proto');
183
- return proto ? proto.split(/\s*,\s*/, 1)[0] : 'http';
131
+ const proto = this.getReqHeader("X-Forwarded-Proto");
132
+ return proto ? proto.split(/\s*,\s*/, 1)[0] : "http";
184
133
  }
185
-
186
134
  get origin() {
187
135
  return `${this.protocol}://${this.host}`;
188
136
  }
189
-
190
137
  get href() {
191
138
  return this.origin + this.url;
192
139
  }
193
-
194
140
  get parsedURL() {
195
- const url = new _url.URL(this.req.url, this.origin);
141
+ const url = new import_url.URL(this.req.url, this.origin);
196
142
  return url;
197
143
  }
198
-
199
144
  get path() {
200
145
  return this.parsedURL.pathname;
201
146
  }
202
-
203
147
  set path(p) {
204
- const url = new _url.URL(this.req.url, this.origin); // this should never happened
205
-
148
+ const url = new import_url.URL(this.req.url, this.origin);
206
149
  if (!url || !p) {
207
150
  return;
208
151
  }
209
-
210
152
  if (url.pathname === p) {
211
153
  return;
212
154
  }
213
-
214
155
  url.pathname = p;
215
156
  this.url = url.toString();
216
157
  }
217
-
218
158
  get querystring() {
219
159
  if (!this.req) {
220
- return '';
160
+ return "";
221
161
  }
222
-
223
- return this.parsedURL.search.replace(/^\?/, '') || '';
162
+ return this.parsedURL.search.replace(/^\?/, "") || "";
224
163
  }
225
-
226
164
  get query() {
227
165
  const str = this.querystring;
228
- return _querystring.default.parse(str);
166
+ return import_querystring.default.parse(str);
229
167
  }
230
- /* response property */
231
-
232
-
233
168
  get status() {
234
169
  return this.res.statusCode;
235
170
  }
236
-
237
171
  set status(statusCode) {
238
172
  this.res.statusCode = statusCode;
239
173
  }
240
- /**
241
- * 判断链接是否已经关闭
242
- */
243
-
244
-
245
174
  resHasHandled() {
246
175
  return this.res.writableEnded;
247
176
  }
248
-
249
- error(dig, e = '') {
250
- 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));
177
+ error(dig, e = "") {
178
+ this.logger.error(
179
+ `Web Server Error - ${dig}, error = %s, req.url = %s, req.headers = %o`,
180
+ e instanceof Error ? e.stack || e.message : e,
181
+ this.path,
182
+ (0, import_utils.headersWithoutCookie)(this.headers)
183
+ );
251
184
  }
252
-
253
185
  }
254
-
255
- exports.ModernServerContext = ModernServerContext;
186
+ // Annotate the CommonJS export names for ESM import in node:
187
+ 0 && (module.exports = {
188
+ ModernServerContext
189
+ });
@@ -1,18 +1,30 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "ModernServerContext", {
7
- enumerable: true,
8
- get: function () {
9
- return _context.ModernServerContext;
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
14
  }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var context_exports = {};
19
+ __export(context_exports, {
20
+ ModernServerContext: () => import_context.ModernServerContext,
21
+ createContext: () => createContext
22
+ });
23
+ module.exports = __toCommonJS(context_exports);
24
+ var import_context = require("./context");
25
+ const createContext = (req, res, options) => new import_context.ModernServerContext(req, res, options);
26
+ // Annotate the CommonJS export names for ESM import in node:
27
+ 0 && (module.exports = {
28
+ ModernServerContext,
29
+ createContext
11
30
  });
12
- exports.createContext = void 0;
13
-
14
- var _context = require("./context");
15
-
16
- const createContext = (req, res, options) => new _context.ModernServerContext(req, res, options);
17
-
18
- exports.createContext = createContext;
@@ -0,0 +1,164 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __export = (target, all) => {
25
+ for (var name in all)
26
+ __defProp(target, name, { get: all[name], enumerable: true });
27
+ };
28
+ var __copyProps = (to, from, except, desc) => {
29
+ if (from && typeof from === "object" || typeof from === "function") {
30
+ for (let key of __getOwnPropNames(from))
31
+ if (!__hasOwnProp.call(to, key) && key !== except)
32
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
33
+ }
34
+ return to;
35
+ };
36
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
37
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
38
+ mod
39
+ ));
40
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
41
+ var hook_api_exports = {};
42
+ __export(hook_api_exports, {
43
+ base: () => base,
44
+ createAfterMatchContext: () => createAfterMatchContext,
45
+ createAfterRenderContext: () => createAfterRenderContext,
46
+ createMiddlewareContext: () => createMiddlewareContext
47
+ });
48
+ module.exports = __toCommonJS(hook_api_exports);
49
+ var import_cookie = __toESM(require("cookie"));
50
+ var import_route = require("./route");
51
+ var import_template = require("./template");
52
+ class Response {
53
+ constructor(res) {
54
+ this.res = res;
55
+ this._cookie = import_cookie.default.parse(res.getHeader("set-cookie") || "");
56
+ this.cookies = {
57
+ get: this.getCookie.bind(this),
58
+ set: this.setCookie.bind(this),
59
+ delete: this.deleteCookie.bind(this),
60
+ clear: this.clearCookie.bind(this),
61
+ apply: this.applyCookie.bind(this)
62
+ };
63
+ }
64
+ get(key) {
65
+ return this.res.getHeader(key);
66
+ }
67
+ set(key, value) {
68
+ return this.res.setHeader(key, value);
69
+ }
70
+ status(code) {
71
+ this.res.statusCode = code;
72
+ }
73
+ getCookie(key) {
74
+ return this._cookie[key];
75
+ }
76
+ setCookie(key, value) {
77
+ this._cookie[key] = value;
78
+ }
79
+ deleteCookie(key) {
80
+ if (this._cookie[key]) {
81
+ delete this._cookie[key];
82
+ }
83
+ }
84
+ clearCookie() {
85
+ this._cookie = {};
86
+ }
87
+ applyCookie() {
88
+ const str = Object.entries(this._cookie).map(([key, value]) => {
89
+ return import_cookie.default.serialize(key, value);
90
+ }).join("; ");
91
+ if (str) {
92
+ this.res.setHeader("set-cookie", str);
93
+ } else {
94
+ this.res.removeHeader("set-cookie");
95
+ }
96
+ }
97
+ raw(body, options) {
98
+ const { status, headers = {} } = options || {};
99
+ Object.entries(headers).forEach(([key, value]) => {
100
+ this.res.setHeader(key, value);
101
+ });
102
+ if (status) {
103
+ this.res.statusCode = status;
104
+ }
105
+ this.res.end(body);
106
+ }
107
+ }
108
+ class Request {
109
+ constructor(ctx) {
110
+ this.url = ctx.url;
111
+ this.host = ctx.host;
112
+ this.pathname = ctx.path;
113
+ this.query = ctx.query;
114
+ this.headers = ctx.headers;
115
+ this.cookie = ctx.headers.cookie || "";
116
+ this._cookie = import_cookie.default.parse(this.cookie);
117
+ this.cookies = {
118
+ get: this.getCookie.bind(this)
119
+ };
120
+ }
121
+ getCookie(key) {
122
+ return this._cookie[key];
123
+ }
124
+ }
125
+ const base = (context) => {
126
+ const { res } = context;
127
+ return {
128
+ response: new Response(res),
129
+ request: new Request(context),
130
+ logger: context.logger,
131
+ metrics: context.metrics
132
+ };
133
+ };
134
+ const createAfterMatchContext = (context, entryName) => {
135
+ const baseContext = base(context);
136
+ return __spreadProps(__spreadValues({}, baseContext), {
137
+ router: new import_route.RouteAPI(entryName)
138
+ });
139
+ };
140
+ const createAfterRenderContext = (context, content) => {
141
+ const baseContext = base(context);
142
+ return __spreadProps(__spreadValues({}, baseContext), {
143
+ template: new import_template.TemplateAPI(content)
144
+ });
145
+ };
146
+ const createMiddlewareContext = (context) => {
147
+ const baseContext = base(context);
148
+ return __spreadProps(__spreadValues({}, baseContext), {
149
+ response: __spreadProps(__spreadValues({}, baseContext.response), {
150
+ locals: context.res.locals || {}
151
+ }),
152
+ source: {
153
+ req: context.req,
154
+ res: context.res
155
+ }
156
+ });
157
+ };
158
+ // Annotate the CommonJS export names for ESM import in node:
159
+ 0 && (module.exports = {
160
+ base,
161
+ createAfterMatchContext,
162
+ createAfterRenderContext,
163
+ createMiddlewareContext
164
+ });
@@ -1,53 +1,43 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var route_exports = {};
19
+ __export(route_exports, {
20
+ RouteAPI: () => RouteAPI
5
21
  });
6
- exports.createRouteAPI = void 0;
7
-
8
- 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
-
22
+ module.exports = __toCommonJS(route_exports);
10
23
  class RouteAPI {
11
- constructor(matched, router, url) {
12
- _defineProperty(this, "router", void 0);
13
-
14
- _defineProperty(this, "current", void 0);
15
-
16
- _defineProperty(this, "url", void 0);
17
-
18
- this.current = matched;
19
- this.router = router;
20
- this.url = url;
24
+ constructor(entryName) {
25
+ this.current = entryName;
26
+ this.status = 200;
27
+ this.url = "";
21
28
  }
22
-
23
- cur() {
24
- return this.current.generate(this.url);
29
+ redirect(url, status = 302) {
30
+ this.url = url;
31
+ this.status = status;
25
32
  }
26
-
27
- get(entryName) {
28
- const {
29
- router
30
- } = this;
31
- const matched = router.matchEntry(entryName);
32
- return matched ? matched.generate(this.url) : null;
33
+ rewrite(entryName) {
34
+ this.current = entryName;
33
35
  }
34
-
35
36
  use(entryName) {
36
- const {
37
- router
38
- } = this;
39
- const matched = router.matchEntry(entryName);
40
-
41
- if (matched) {
42
- this.current = matched;
43
- return true;
44
- } else {
45
- return false;
46
- }
37
+ this.rewrite(entryName);
47
38
  }
48
-
49
39
  }
50
-
51
- const createRouteAPI = (matched, router, url) => new RouteAPI(matched, router, url);
52
-
53
- exports.createRouteAPI = createRouteAPI;
40
+ // Annotate the CommonJS export names for ESM import in node:
41
+ 0 && (module.exports = {
42
+ RouteAPI
43
+ });