@modern-js/prod-server 2.5.1-alpha.2 → 2.6.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 (154) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/libs/context/context.js +13 -0
  3. package/dist/cjs/libs/hook-api/index.js +4 -0
  4. package/dist/cjs/libs/loadConfig.js +5 -0
  5. package/dist/cjs/libs/render/cache/__tests__/cache.fun.test.js +4 -0
  6. package/dist/cjs/libs/render/cache/page-caches/lru.js +4 -0
  7. package/dist/cjs/libs/render/cache/spr.js +5 -0
  8. package/dist/cjs/libs/render/cache/util.js +4 -0
  9. package/dist/cjs/libs/render/index.js +4 -0
  10. package/dist/cjs/libs/render/reader.js +9 -0
  11. package/dist/cjs/libs/render/ssr.js +16 -4
  12. package/dist/cjs/libs/render/static.js +4 -0
  13. package/dist/cjs/libs/route/index.js +4 -0
  14. package/dist/cjs/libs/route/matcher.js +4 -0
  15. package/dist/cjs/libs/serve-file.js +26 -19
  16. package/dist/cjs/server/index.js +32 -4
  17. package/dist/cjs/server/modern-server.js +19 -3
  18. package/dist/esm/libs/context/context.js +15 -6
  19. package/dist/esm/libs/render/cache/spr.js +1 -0
  20. package/dist/esm/libs/render/ssr.js +5 -5
  21. package/dist/esm/libs/route/index.js +4 -0
  22. package/dist/esm/libs/route/matcher.js +4 -0
  23. package/dist/esm/libs/serve-file.js +2 -1
  24. package/dist/esm/server/index.js +30 -7
  25. package/dist/esm/server/modern-server.js +17 -4
  26. package/dist/esm-node/libs/context/context.js +9 -0
  27. package/dist/esm-node/libs/loadConfig.js +1 -0
  28. package/dist/esm-node/libs/render/cache/spr.js +1 -0
  29. package/dist/esm-node/libs/render/reader.js +5 -0
  30. package/dist/esm-node/libs/render/ssr.js +12 -4
  31. package/dist/esm-node/libs/route/index.js +4 -0
  32. package/dist/esm-node/libs/route/matcher.js +4 -0
  33. package/dist/esm-node/libs/serve-file.js +22 -19
  34. package/dist/esm-node/server/index.js +28 -4
  35. package/dist/esm-node/server/modern-server.js +15 -3
  36. package/dist/types/libs/context/context.d.ts +1 -1
  37. package/dist/types/libs/render/ssr.d.ts +1 -0
  38. package/dist/types/type.d.ts +1 -8
  39. package/dist/types/utils.d.ts +1 -1
  40. package/package.json +9 -9
  41. package/dist/js/modern/constants.js +0 -35
  42. package/dist/js/modern/index.js +0 -18
  43. package/dist/js/modern/libs/context/context.js +0 -160
  44. package/dist/js/modern/libs/context/index.js +0 -6
  45. package/dist/js/modern/libs/hook-api/index.js +0 -134
  46. package/dist/js/modern/libs/hook-api/route.js +0 -20
  47. package/dist/js/modern/libs/hook-api/template.js +0 -73
  48. package/dist/js/modern/libs/loadConfig.js +0 -62
  49. package/dist/js/modern/libs/logger.js +0 -111
  50. package/dist/js/modern/libs/metrics.js +0 -11
  51. package/dist/js/modern/libs/proxy.js +0 -92
  52. package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -114
  53. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -254
  54. package/dist/js/modern/libs/render/cache/__tests__/cacheable.js +0 -47
  55. package/dist/js/modern/libs/render/cache/__tests__/error-configuration.js +0 -37
  56. package/dist/js/modern/libs/render/cache/__tests__/matched-cache.js +0 -91
  57. package/dist/js/modern/libs/render/cache/index.js +0 -115
  58. package/dist/js/modern/libs/render/cache/page-caches/index.js +0 -32
  59. package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -29
  60. package/dist/js/modern/libs/render/cache/spr.js +0 -248
  61. package/dist/js/modern/libs/render/cache/type.js +0 -0
  62. package/dist/js/modern/libs/render/cache/util.js +0 -102
  63. package/dist/js/modern/libs/render/index.js +0 -86
  64. package/dist/js/modern/libs/render/measure.js +0 -68
  65. package/dist/js/modern/libs/render/reader.js +0 -107
  66. package/dist/js/modern/libs/render/ssr.js +0 -100
  67. package/dist/js/modern/libs/render/static.js +0 -60
  68. package/dist/js/modern/libs/render/type.js +0 -9
  69. package/dist/js/modern/libs/route/index.js +0 -54
  70. package/dist/js/modern/libs/route/matcher.js +0 -87
  71. package/dist/js/modern/libs/route/route.js +0 -16
  72. package/dist/js/modern/libs/serve-file.js +0 -67
  73. package/dist/js/modern/server/index.js +0 -208
  74. package/dist/js/modern/server/modern-server-split.js +0 -74
  75. package/dist/js/modern/server/modern-server.js +0 -554
  76. package/dist/js/modern/type.js +0 -0
  77. package/dist/js/modern/utils.js +0 -136
  78. package/dist/js/modern/worker-server.js +0 -89
  79. package/dist/js/node/constants.js +0 -62
  80. package/dist/js/node/index.js +0 -44
  81. package/dist/js/node/libs/context/context.js +0 -189
  82. package/dist/js/node/libs/context/index.js +0 -30
  83. package/dist/js/node/libs/hook-api/index.js +0 -164
  84. package/dist/js/node/libs/hook-api/route.js +0 -43
  85. package/dist/js/node/libs/hook-api/template.js +0 -97
  86. package/dist/js/node/libs/loadConfig.js +0 -91
  87. package/dist/js/node/libs/logger.js +0 -133
  88. package/dist/js/node/libs/metrics.js +0 -34
  89. package/dist/js/node/libs/proxy.js +0 -114
  90. package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -115
  91. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -245
  92. package/dist/js/node/libs/render/cache/__tests__/cacheable.js +0 -70
  93. package/dist/js/node/libs/render/cache/__tests__/error-configuration.js +0 -60
  94. package/dist/js/node/libs/render/cache/__tests__/matched-cache.js +0 -114
  95. package/dist/js/node/libs/render/cache/index.js +0 -134
  96. package/dist/js/node/libs/render/cache/page-caches/index.js +0 -55
  97. package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -58
  98. package/dist/js/node/libs/render/cache/spr.js +0 -270
  99. package/dist/js/node/libs/render/cache/type.js +0 -15
  100. package/dist/js/node/libs/render/cache/util.js +0 -138
  101. package/dist/js/node/libs/render/index.js +0 -115
  102. package/dist/js/node/libs/render/measure.js +0 -90
  103. package/dist/js/node/libs/render/reader.js +0 -140
  104. package/dist/js/node/libs/render/ssr.js +0 -123
  105. package/dist/js/node/libs/render/static.js +0 -89
  106. package/dist/js/node/libs/render/type.js +0 -32
  107. package/dist/js/node/libs/route/index.js +0 -78
  108. package/dist/js/node/libs/route/matcher.js +0 -106
  109. package/dist/js/node/libs/route/route.js +0 -39
  110. package/dist/js/node/libs/serve-file.js +0 -97
  111. package/dist/js/node/server/index.js +0 -219
  112. package/dist/js/node/server/modern-server-split.js +0 -97
  113. package/dist/js/node/server/modern-server.js +0 -559
  114. package/dist/js/node/type.js +0 -15
  115. package/dist/js/node/utils.js +0 -166
  116. package/dist/js/node/worker-server.js +0 -113
  117. package/dist/js/treeshaking/constants.js +0 -29
  118. package/dist/js/treeshaking/index.js +0 -13
  119. package/dist/js/treeshaking/libs/context/context.js +0 -274
  120. package/dist/js/treeshaking/libs/context/index.js +0 -5
  121. package/dist/js/treeshaking/libs/hook-api/index.js +0 -281
  122. package/dist/js/treeshaking/libs/hook-api/route.js +0 -68
  123. package/dist/js/treeshaking/libs/hook-api/template.js +0 -127
  124. package/dist/js/treeshaking/libs/loadConfig.js +0 -82
  125. package/dist/js/treeshaking/libs/logger.js +0 -205
  126. package/dist/js/treeshaking/libs/metrics.js +0 -6
  127. package/dist/js/treeshaking/libs/proxy.js +0 -244
  128. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +0 -291
  129. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +0 -781
  130. package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +0 -67
  131. package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +0 -45
  132. package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +0 -147
  133. package/dist/js/treeshaking/libs/render/cache/index.js +0 -346
  134. package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +0 -154
  135. package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +0 -84
  136. package/dist/js/treeshaking/libs/render/cache/spr.js +0 -492
  137. package/dist/js/treeshaking/libs/render/cache/type.js +0 -1
  138. package/dist/js/treeshaking/libs/render/cache/util.js +0 -280
  139. package/dist/js/treeshaking/libs/render/index.js +0 -234
  140. package/dist/js/treeshaking/libs/render/measure.js +0 -146
  141. package/dist/js/treeshaking/libs/render/reader.js +0 -339
  142. package/dist/js/treeshaking/libs/render/ssr.js +0 -223
  143. package/dist/js/treeshaking/libs/render/static.js +0 -216
  144. package/dist/js/treeshaking/libs/render/type.js +0 -7
  145. package/dist/js/treeshaking/libs/route/index.js +0 -130
  146. package/dist/js/treeshaking/libs/route/matcher.js +0 -143
  147. package/dist/js/treeshaking/libs/route/route.js +0 -40
  148. package/dist/js/treeshaking/libs/serve-file.js +0 -184
  149. package/dist/js/treeshaking/server/index.js +0 -505
  150. package/dist/js/treeshaking/server/modern-server-split.js +0 -360
  151. package/dist/js/treeshaking/server/modern-server.js +0 -1089
  152. package/dist/js/treeshaking/type.js +0 -1
  153. package/dist/js/treeshaking/utils.js +0 -147
  154. package/dist/js/treeshaking/worker-server.js +0 -233
@@ -66,6 +66,7 @@ class ModernServer {
66
66
  this.staticGenerate = staticGenerate || false;
67
67
  this.runMode = runMode || RUN_MODE.FULL;
68
68
  }
69
+ // server prepare
69
70
  async onInit(runner, app) {
70
71
  var _a, _b;
71
72
  this.runner = runner;
@@ -113,6 +114,7 @@ class ModernServer {
113
114
  this.addHandler(this.routeHandler.bind(this));
114
115
  this.compose();
115
116
  }
117
+ // server ready
116
118
  onRepack(_) {
117
119
  }
118
120
  addBeforeRouteHandler() {
@@ -135,6 +137,7 @@ class ModernServer {
135
137
  const onlyWeb = filepath.startsWith(serverPath);
136
138
  this.prepareFrameHandler({ onlyWeb, onlyApi });
137
139
  }
140
+ // exposed requestHandler
138
141
  getRequestHandler() {
139
142
  return this.requestHandler.bind(this);
140
143
  }
@@ -156,6 +159,8 @@ class ModernServer {
156
159
  async createHTTPServer(handler) {
157
160
  return createServer(handler);
158
161
  }
162
+ /* —————————————————————— function will be overwrite —————————————————————— */
163
+ // get routes info
159
164
  getRoutes() {
160
165
  if (this.presetRoutes) {
161
166
  return this.presetRoutes;
@@ -167,9 +172,12 @@ class ModernServer {
167
172
  }
168
173
  return [];
169
174
  }
175
+ // add promisify request handler to server
176
+ // handler should do not do more things after invoke next
170
177
  addHandler(handler) {
171
178
  this.handlers.push(handler);
172
179
  }
180
+ // return 404 page
173
181
  render404(context) {
174
182
  context.error(ERROR_DIGEST.ENOTF, "404 Not Found");
175
183
  this.renderErrorPage(context, 404);
@@ -187,6 +195,7 @@ class ModernServer {
187
195
  );
188
196
  this.beforeRouteHandler = handler;
189
197
  }
198
+ // gather frame extension and get framework handler
190
199
  async prepareFrameHandler(options) {
191
200
  const { workDir, runner } = this;
192
201
  const { onlyApi, onlyWeb } = options || {};
@@ -224,7 +233,6 @@ class ModernServer {
224
233
  pwd: workDir,
225
234
  config: extension,
226
235
  prefix: Array.isArray(prefix) ? prefix[0] : prefix,
227
- httpMethodDecider: bff == null ? void 0 : bff.httpMethodDecider,
228
236
  render: this.render.bind(this)
229
237
  },
230
238
  { onLast: () => null }
@@ -257,6 +265,7 @@ class ModernServer {
257
265
  async proxy() {
258
266
  return null;
259
267
  }
268
+ // warmup ssr function
260
269
  warmupSSRBundle() {
261
270
  const { distDir } = this;
262
271
  const bundles = this.router.getBundles();
@@ -270,6 +279,8 @@ class ModernServer {
270
279
  createContext(req, res, options = {}) {
271
280
  return createContext(req, res, options);
272
281
  }
282
+ /* —————————————————————— private function —————————————————————— */
283
+ // handler route.json, include api / csr / ssr
273
284
  async routeHandler(context) {
274
285
  const { res } = context;
275
286
  const matched = this.router.match(context.path);
@@ -350,7 +361,7 @@ class ModernServer {
350
361
  templateInjectableStream({
351
362
  prependHead: route.entryName ? `<script>window._SERVER_DATA=${JSON.stringify(
352
363
  context.serverData
353
- )}<\/script>` : void 0
364
+ )}</script>` : void 0
354
365
  })
355
366
  ).pipe(res);
356
367
  return;
@@ -370,7 +381,7 @@ class ModernServer {
370
381
  afterRenderContext.template.prependHead(
371
382
  `<script>window._SERVER_DATA=${JSON.stringify(
372
383
  context.serverData
373
- )}<\/script>`
384
+ )}</script>`
374
385
  );
375
386
  response = afterRenderContext.template.get();
376
387
  }
@@ -386,6 +397,7 @@ class ModernServer {
386
397
  }
387
398
  return false;
388
399
  }
400
+ // compose handlers and create the final handler
389
401
  compose() {
390
402
  const { handlers } = this;
391
403
  if (!Array.isArray(handlers)) {
@@ -3,7 +3,7 @@
3
3
  /// <reference types="node" />
4
4
  /// <reference types="node" />
5
5
  /// <reference types="node/http" />
6
- /// <reference types=".dts-temp/vruupblf2_wmqdzbkln3e/src/type" />
6
+ /// <reference types=".dts-temp/x5zLsplldTCJONgx6eTKT/src/type" />
7
7
  import { IncomingMessage, ServerResponse } from 'http';
8
8
  import { URL } from 'url';
9
9
  import qs from 'querystring';
@@ -7,4 +7,5 @@ export declare const render: (ctx: ModernServerContext, renderOptions: {
7
7
  template: string;
8
8
  entryName: string;
9
9
  staticGenerate: boolean;
10
+ enableUnsafeCtx?: boolean;
10
11
  }, runner: ServerHookRunner) => Promise<RenderResult>;
@@ -26,14 +26,7 @@ export type ModernServerOptions = {
26
26
  ssrOnly?: boolean;
27
27
  webOnly?: boolean;
28
28
  runMode?: string;
29
- appContext?: {
30
- appDirectory: string;
31
- sharedDirectory: string;
32
- apiDirectory: string;
33
- lambdaDirectory: string;
34
- };
35
- serverConfigFile?: string;
36
- proxyTarget?: any;
29
+ [propName: string]: any;
37
30
  };
38
31
  export type RenderResult = {
39
32
  content: string | Buffer;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node/http" />
3
- /// <reference types=".dts-temp/vruupblf2_wmqdzbkln3e/src/type" />
3
+ /// <reference types=".dts-temp/x5zLsplldTCJONgx6eTKT/src/type" />
4
4
  import { IncomingMessage } from 'http';
5
5
  import type { OutputNormalizedConfig, HtmlNormalizedConfig } from '@modern-js/server-core';
6
6
  export declare const debug: any;
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "2.5.1-alpha.2",
14
+ "version": "2.6.0",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/cjs/index.js",
@@ -45,8 +45,6 @@
45
45
  }
46
46
  },
47
47
  "dependencies": {
48
- "@modern-js/utils": "2.5.0",
49
- "@modern-js/server-core": "2.5.1-alpha.0",
50
48
  "etag": "^1.8.1",
51
49
  "fresh": "^0.5.2",
52
50
  "cookie": "^0.4.2",
@@ -55,13 +53,11 @@
55
53
  "lru-cache": "^6.0.0",
56
54
  "merge-deep": "^3.0.3",
57
55
  "path-to-regexp": "^6.2.0",
58
- "serve-static": "^1.14.1"
56
+ "serve-static": "^1.14.1",
57
+ "@modern-js/utils": "2.6.0",
58
+ "@modern-js/server-core": "2.6.0"
59
59
  },
60
60
  "devDependencies": {
61
- "@modern-js/types": "2.5.1-alpha.0",
62
- "@modern-js/server-core": "2.5.1-alpha.0",
63
- "@scripts/jest-config": "2.5.0",
64
- "@scripts/build": "2.5.0",
65
61
  "@types/cookie": "^0.4.1",
66
62
  "@types/jest": "^27",
67
63
  "@types/lru-cache": "^5.1.1",
@@ -74,7 +70,11 @@
74
70
  "jest": "^27",
75
71
  "node-mocks-http": "^1.11.0",
76
72
  "portfinder": "^1.0.28",
77
- "typescript": "^4"
73
+ "typescript": "^4",
74
+ "@modern-js/types": "2.6.0",
75
+ "@modern-js/server-core": "2.6.0",
76
+ "@scripts/jest-config": "2.6.0",
77
+ "@scripts/build": "2.6.0"
78
78
  },
79
79
  "sideEffects": false,
80
80
  "publishConfig": {
@@ -1,35 +0,0 @@
1
- const AGGRED_DIR = {
2
- mock: "config/mock",
3
- server: "server",
4
- api: "api",
5
- shared: "shared",
6
- lambda: "lambda"
7
- };
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
- };
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
35
- };
@@ -1,18 +0,0 @@
1
- import { Server } from "./server";
2
- import { ModernServer } from "./server/modern-server";
3
- import { createProxyHandler } from "./libs/proxy";
4
- export * from "./type";
5
- export * from "./constants";
6
- var src_default = (options) => {
7
- if (options == null) {
8
- throw new Error("can not start mserver without options");
9
- }
10
- const server = new Server(options);
11
- return server.init();
12
- };
13
- export {
14
- ModernServer,
15
- Server,
16
- createProxyHandler,
17
- src_default as default
18
- };
@@ -1,160 +0,0 @@
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";
6
- import { headersWithoutCookie } from "../../utils";
7
- class ModernServerContext {
8
- constructor(req, res, options) {
9
- this.params = {};
10
- this.options = {};
11
- this.req = req;
12
- this.res = res;
13
- this.options = options || {};
14
- this.serverData = {};
15
- this.bind();
16
- }
17
- get logger() {
18
- return this.req.logger;
19
- }
20
- get metrics() {
21
- return this.req.metrics;
22
- }
23
- bind() {
24
- const { req, res } = this;
25
- req.get = (key) => this.getReqHeader(key);
26
- res.set = (key, value) => this.res.setHeader(key, value);
27
- res.send = (body) => {
28
- this.send(body);
29
- };
30
- }
31
- send(body) {
32
- try {
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;
36
- const buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body;
37
- const etag = createEtag(buf, { weak: true });
38
- if (etag) {
39
- this.res.setHeader("ETag", etag);
40
- }
41
- }
42
- if (this.fresh) {
43
- this.status = 304;
44
- }
45
- } catch (e) {
46
- this.logger.error(e.message);
47
- }
48
- this.res.end(body);
49
- }
50
- setParams(params) {
51
- this.params = params;
52
- }
53
- setServerData(key, value) {
54
- this.serverData[key] = value;
55
- }
56
- getReqHeader(key) {
57
- const { req } = this;
58
- const field = key.toLowerCase();
59
- switch (field) {
60
- case "referer":
61
- case "referrer":
62
- return req.headers.referrer || req.headers.referer || "";
63
- default:
64
- return req.headers[field] || "";
65
- }
66
- }
67
- get fresh() {
68
- const { status, res, method } = this;
69
- if ("GET" !== method && "HEAD" !== method) {
70
- return false;
71
- }
72
- if (status >= 200 && status < 300 || 304 === status) {
73
- return fresh(this.headers, {
74
- etag: res.getHeader("ETag"),
75
- "last-modified": res.getHeader("Last-Modified")
76
- });
77
- }
78
- return false;
79
- }
80
- get headers() {
81
- return this.req.headers;
82
- }
83
- get method() {
84
- return this.req.method;
85
- }
86
- get url() {
87
- return this.req.url || "";
88
- }
89
- set url(val) {
90
- this.req.url = val;
91
- }
92
- get host() {
93
- let host = this.getReqHeader("X-Forwarded-Host");
94
- if (!host) {
95
- host = this.getReqHeader("Host");
96
- }
97
- return host.split(/\s*,\s*/, 1)[0] || "";
98
- }
99
- get protocol() {
100
- if (this.req.socket.encrypted) {
101
- return "https";
102
- }
103
- const proto = this.getReqHeader("X-Forwarded-Proto");
104
- return proto ? proto.split(/\s*,\s*/, 1)[0] : "http";
105
- }
106
- get origin() {
107
- return `${this.protocol}://${this.host}`;
108
- }
109
- get href() {
110
- return this.origin + this.url;
111
- }
112
- get parsedURL() {
113
- const url = new URL(this.req.url, this.origin);
114
- return url;
115
- }
116
- get path() {
117
- return this.parsedURL.pathname;
118
- }
119
- set path(p) {
120
- const url = new URL(this.req.url, this.origin);
121
- if (!url || !p) {
122
- return;
123
- }
124
- if (url.pathname === p) {
125
- return;
126
- }
127
- url.pathname = p;
128
- this.url = url.toString();
129
- }
130
- get querystring() {
131
- if (!this.req) {
132
- return "";
133
- }
134
- return this.parsedURL.search.replace(/^\?/, "") || "";
135
- }
136
- get query() {
137
- const str = this.querystring;
138
- return qs.parse(str);
139
- }
140
- get status() {
141
- return this.res.statusCode;
142
- }
143
- set status(statusCode) {
144
- this.res.statusCode = statusCode;
145
- }
146
- resHasHandled() {
147
- return this.res.writableEnded;
148
- }
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,6 +0,0 @@
1
- import { ModernServerContext } from "./context";
2
- const createContext = (req, res, options) => new ModernServerContext(req, res, options);
3
- export {
4
- ModernServerContext,
5
- createContext
6
- };
@@ -1,134 +0,0 @@
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";
21
- import { RouteAPI } from "./route";
22
- import { TemplateAPI } from "./template";
23
- class Response {
24
- constructor(res) {
25
- this.res = res;
26
- this._cookie = cookie.parse(res.getHeader("set-cookie") || "");
27
- this.cookies = {
28
- get: this.getCookie.bind(this),
29
- set: this.setCookie.bind(this),
30
- delete: this.deleteCookie.bind(this),
31
- clear: this.clearCookie.bind(this),
32
- apply: this.applyCookie.bind(this)
33
- };
34
- }
35
- get(key) {
36
- return this.res.getHeader(key);
37
- }
38
- set(key, value) {
39
- return this.res.setHeader(key, value);
40
- }
41
- status(code) {
42
- this.res.statusCode = code;
43
- }
44
- getCookie(key) {
45
- return this._cookie[key];
46
- }
47
- setCookie(key, value) {
48
- this._cookie[key] = value;
49
- }
50
- deleteCookie(key) {
51
- if (this._cookie[key]) {
52
- delete this._cookie[key];
53
- }
54
- }
55
- clearCookie() {
56
- this._cookie = {};
57
- }
58
- applyCookie() {
59
- const str = Object.entries(this._cookie).map(([key, value]) => {
60
- return cookie.serialize(key, value);
61
- }).join("; ");
62
- if (str) {
63
- this.res.setHeader("set-cookie", str);
64
- } else {
65
- this.res.removeHeader("set-cookie");
66
- }
67
- }
68
- raw(body, options) {
69
- const { status, headers = {} } = options || {};
70
- Object.entries(headers).forEach(([key, value]) => {
71
- this.res.setHeader(key, value);
72
- });
73
- if (status) {
74
- this.res.statusCode = status;
75
- }
76
- this.res.end(body);
77
- }
78
- }
79
- class Request {
80
- constructor(ctx) {
81
- this.url = ctx.url;
82
- this.host = ctx.host;
83
- this.pathname = ctx.path;
84
- this.query = ctx.query;
85
- this.headers = ctx.headers;
86
- this.cookie = ctx.headers.cookie || "";
87
- this._cookie = cookie.parse(this.cookie);
88
- this.cookies = {
89
- get: this.getCookie.bind(this)
90
- };
91
- }
92
- getCookie(key) {
93
- return this._cookie[key];
94
- }
95
- }
96
- const base = (context) => {
97
- const { res } = context;
98
- return {
99
- response: new Response(res),
100
- request: new Request(context),
101
- logger: context.logger,
102
- metrics: context.metrics
103
- };
104
- };
105
- const createAfterMatchContext = (context, entryName) => {
106
- const baseContext = base(context);
107
- return __spreadProps(__spreadValues({}, baseContext), {
108
- router: new RouteAPI(entryName)
109
- });
110
- };
111
- const createAfterRenderContext = (context, content) => {
112
- const baseContext = base(context);
113
- return __spreadProps(__spreadValues({}, baseContext), {
114
- template: new TemplateAPI(content)
115
- });
116
- };
117
- const createMiddlewareContext = (context) => {
118
- const baseContext = base(context);
119
- return __spreadProps(__spreadValues({}, baseContext), {
120
- response: __spreadProps(__spreadValues({}, baseContext.response), {
121
- locals: context.res.locals || {}
122
- }),
123
- source: {
124
- req: context.req,
125
- res: context.res
126
- }
127
- });
128
- };
129
- export {
130
- base,
131
- createAfterMatchContext,
132
- createAfterRenderContext,
133
- createMiddlewareContext
134
- };
@@ -1,20 +0,0 @@
1
- class RouteAPI {
2
- constructor(entryName) {
3
- this.current = entryName;
4
- this.status = 200;
5
- this.url = "";
6
- }
7
- redirect(url, status = 302) {
8
- this.url = url;
9
- this.status = status;
10
- }
11
- rewrite(entryName) {
12
- this.current = entryName;
13
- }
14
- use(entryName) {
15
- this.rewrite(entryName);
16
- }
17
- }
18
- export {
19
- RouteAPI
20
- };
@@ -1,73 +0,0 @@
1
- import { Transform } from "stream";
2
- const RegList = {
3
- before: {
4
- head: "<head>",
5
- body: "<body>"
6
- },
7
- after: {
8
- head: "</head>",
9
- body: "</body>"
10
- }
11
- };
12
- class TemplateAPI {
13
- constructor(content) {
14
- this.content = content;
15
- }
16
- get() {
17
- return this.content;
18
- }
19
- set(content) {
20
- this.content = content;
21
- }
22
- prependHead(fragment) {
23
- const { head } = RegList.before;
24
- return this.replace(head, `${head}${fragment}`);
25
- }
26
- appendHead(fragment) {
27
- const { head } = RegList.after;
28
- return this.replace(head, `${fragment}${head}`);
29
- }
30
- prependBody(fragment) {
31
- const { body } = RegList.before;
32
- return this.replace(body, `${body}${fragment}`);
33
- }
34
- appendBody(fragment) {
35
- const { body } = RegList.after;
36
- return this.replace(body, `${fragment}${body}`);
37
- }
38
- replace(reg, text) {
39
- this.content = this.content.replace(reg, text);
40
- }
41
- }
42
- const templateInjectableStream = ({
43
- prependHead,
44
- appendHead,
45
- prependBody,
46
- appendBody
47
- }) => new Transform({
48
- write(chunk, _, callback) {
49
- let chunk_str = chunk.toString();
50
- if (prependHead) {
51
- const { head } = RegList.before;
52
- chunk_str = chunk_str.replace(head, `${head}${prependHead}`);
53
- }
54
- if (appendHead) {
55
- const { head } = RegList.after;
56
- chunk_str = chunk_str.replace(head, `${appendHead}${head}`);
57
- }
58
- if (prependBody) {
59
- const { body } = RegList.before;
60
- chunk_str = chunk_str.replace(body, `${body}${prependBody}`);
61
- }
62
- if (appendBody) {
63
- const { body } = RegList.after;
64
- chunk_str = chunk_str.replace(body, `${appendBody}${body}`);
65
- }
66
- this.push(chunk_str);
67
- callback();
68
- }
69
- });
70
- export {
71
- TemplateAPI,
72
- templateInjectableStream
73
- };