@modern-js/prod-server 2.28.0 → 2.29.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 (36) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/libs/context/context.js +10 -4
  3. package/dist/cjs/libs/hook-api/index.js +2 -1
  4. package/dist/cjs/libs/hook-api/index.worker.js +2 -1
  5. package/dist/cjs/libs/render/ssr.js +3 -19
  6. package/dist/cjs/libs/reporter.js +22 -0
  7. package/dist/cjs/libs/serverTiming.js +27 -0
  8. package/dist/cjs/server/modernServer.js +23 -2
  9. package/dist/cjs/utils.js +33 -0
  10. package/dist/cjs/workerServer.js +12 -3
  11. package/dist/esm/libs/context/context.js +8 -2
  12. package/dist/esm/libs/hook-api/index.js +2 -1
  13. package/dist/esm/libs/hook-api/index.worker.js +2 -1
  14. package/dist/esm/libs/render/ssr.js +6 -29
  15. package/dist/esm/libs/reporter.js +12 -0
  16. package/dist/esm/libs/serverTiming.js +27 -0
  17. package/dist/esm/server/modernServer.js +57 -26
  18. package/dist/esm/utils.js +57 -0
  19. package/dist/esm/workerServer.js +13 -4
  20. package/dist/esm-node/libs/context/context.js +8 -2
  21. package/dist/esm-node/libs/hook-api/index.js +2 -1
  22. package/dist/esm-node/libs/hook-api/index.worker.js +2 -1
  23. package/dist/esm-node/libs/render/ssr.js +3 -19
  24. package/dist/esm-node/libs/reporter.js +12 -0
  25. package/dist/esm-node/libs/serverTiming.js +17 -0
  26. package/dist/esm-node/server/modernServer.js +24 -3
  27. package/dist/esm-node/utils.js +30 -0
  28. package/dist/esm-node/workerServer.js +12 -3
  29. package/dist/types/libs/context/context.d.ts +5 -2
  30. package/dist/types/libs/hook-api/index.worker.d.ts +2 -1
  31. package/dist/types/libs/reporter.d.ts +2 -0
  32. package/dist/types/libs/serverTiming.d.ts +12 -0
  33. package/dist/types/server/modernServer.d.ts +1 -1
  34. package/dist/types/type.d.ts +1 -0
  35. package/dist/types/utils.d.ts +3 -2
  36. package/package.json +8 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @modern-js/prod-server
2
2
 
3
+ ## 2.29.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 16e5195: feat(prod-server): add body parser
8
+ feat(prod-server): 增加 body 解析器
9
+ - cba7675: feat: add a server reporter that report server cost, logger about error, info etc.
10
+ feat: 添加一个 server 端 reporter,来报告 server 端耗时,报错等
11
+
12
+ ### Patch Changes
13
+
14
+ - 76ace5d: fix(prod-server): bff may run bodyParser by themself, so we need't to run
15
+ fix(prod-server): bff 可能会在内部运行, 所以我们不需要运行
16
+ - Updated dependencies [e6b5355]
17
+ - Updated dependencies [93db783]
18
+ - Updated dependencies [cba7675]
19
+ - Updated dependencies [99052ea]
20
+ - Updated dependencies [1d71d2e]
21
+ - @modern-js/utils@2.29.0
22
+ - @modern-js/server-core@2.29.0
23
+ - @modern-js/plugin@2.29.0
24
+
3
25
  ## 2.28.0
4
26
 
5
27
  ### Minor Changes
@@ -15,7 +15,10 @@ const _querystring = /* @__PURE__ */ _interop_require_default._(require("queryst
15
15
  const _buffer = require("buffer");
16
16
  const _etag = /* @__PURE__ */ _interop_require_default._(require("etag"));
17
17
  const _fresh = /* @__PURE__ */ _interop_require_default._(require("fresh"));
18
- const _utils = require("../../utils");
18
+ const _utils = require("@modern-js/utils");
19
+ const _serverTiming = require("../serverTiming");
20
+ const _reporter = require("../reporter");
21
+ const _utils1 = require("../../utils");
19
22
  const MOCK_URL_BASE = "https://modernjs.dev/";
20
23
  class ModernServerContext {
21
24
  get logger() {
@@ -157,18 +160,21 @@ class ModernServerContext {
157
160
  return this.res.writableEnded;
158
161
  }
159
162
  error(dig, e = "") {
160
- 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));
163
+ 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, _utils1.headersWithoutCookie)(this.headers));
161
164
  }
162
165
  constructor(req, res, options) {
166
+ var _options;
163
167
  _define_property._(this, "req", void 0);
164
168
  _define_property._(this, "res", void 0);
165
169
  _define_property._(this, "params", {});
166
- _define_property._(this, "serverData", void 0);
170
+ _define_property._(this, "reporter", _reporter.defaultReporter);
171
+ _define_property._(this, "serverTiming", void 0);
172
+ _define_property._(this, "serverData", {});
167
173
  _define_property._(this, "options", {});
168
174
  this.req = req;
169
175
  this.res = res;
170
176
  this.options = options || {};
171
- this.serverData = {};
177
+ this.serverTiming = new _serverTiming.ServerTiming(res, (0, _utils.cutNameByHyphen)(((_options = options) === null || _options === void 0 ? void 0 : _options.metaName) || "modern-js"));
172
178
  this.bind();
173
179
  }
174
180
  }
@@ -27,10 +27,11 @@ const _route = require("./route");
27
27
  const _template = require("./template");
28
28
  const _base = require("./base");
29
29
  const base = (context) => {
30
- const { res } = context;
30
+ const { res, reporter } = context;
31
31
  return {
32
32
  response: new _base.BaseResponse(res),
33
33
  request: new _base.BaseRequest(context),
34
+ reporter,
34
35
  logger: context.logger,
35
36
  metrics: context.metrics
36
37
  };
@@ -56,7 +56,7 @@ class ServerResponse {
56
56
  }
57
57
  }
58
58
  const base = (context) => {
59
- const { req, res, logger, metrics } = context;
59
+ const { req, res, logger, metrics, reporter } = context;
60
60
  const serverResponse = new ServerResponse(res);
61
61
  const { host, pathname, searchParams } = new URL(req.url);
62
62
  const headers = {};
@@ -65,6 +65,7 @@ const base = (context) => {
65
65
  });
66
66
  return {
67
67
  response: new _base.BaseResponse(serverResponse),
68
+ reporter,
68
69
  request: new _base.BaseRequest({
69
70
  url: req.url,
70
71
  host,
@@ -22,7 +22,6 @@ const render = async (ctx, renderOptions, runner) => {
22
22
  const loadableStats = _utils.fs.existsSync(loadableUri) ? require(loadableUri) : "";
23
23
  const routesManifestUri = _path.default.join(distDir, _utils.ROUTE_MANIFEST_FILE);
24
24
  const routeManifest = _utils.fs.existsSync(routesManifestUri) ? require(routesManifestUri) : void 0;
25
- const body = await getRequestBody(ctx.req);
26
25
  const context = {
27
26
  request: {
28
27
  baseUrl: urlPath,
@@ -32,7 +31,7 @@ const render = async (ctx, renderOptions, runner) => {
32
31
  query: ctx.query,
33
32
  url: ctx.href,
34
33
  headers: ctx.headers,
35
- body
34
+ body: ctx.req.body
36
35
  },
37
36
  response: {
38
37
  setHeader: (key, value) => {
@@ -51,6 +50,8 @@ const render = async (ctx, renderOptions, runner) => {
51
50
  staticGenerate,
52
51
  logger: void 0,
53
52
  metrics: void 0,
53
+ reporter: ctx.reporter,
54
+ serverTiming: ctx.serverTiming,
54
55
  req: ctx.req,
55
56
  res: ctx.res,
56
57
  enableUnsafeCtx,
@@ -84,20 +85,3 @@ const render = async (ctx, renderOptions, runner) => {
84
85
  };
85
86
  }
86
87
  };
87
- const getRequestBody = (req) => new Promise((resolve, reject) => {
88
- var _req;
89
- if (((_req = req) === null || _req === void 0 ? void 0 : _req.method) && req.method.toLowerCase() !== "get") {
90
- let body = "";
91
- req.on("data", (chunk) => {
92
- body += chunk.toString();
93
- });
94
- req.on("end", () => {
95
- resolve(body);
96
- });
97
- req.on("error", (err) => {
98
- reject(err);
99
- });
100
- } else {
101
- resolve(void 0);
102
- }
103
- });
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "defaultReporter", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return defaultReporter;
9
+ }
10
+ });
11
+ const defaultReporter = {
12
+ init() {
13
+ },
14
+ reportError() {
15
+ },
16
+ reportTiming() {
17
+ },
18
+ reportInfo() {
19
+ },
20
+ reportWarn() {
21
+ }
22
+ };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ServerTiming", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ServerTiming;
9
+ }
10
+ });
11
+ const _define_property = require("@swc/helpers/_/_define_property");
12
+ const SERVER_TIMING = "Server-Timing";
13
+ class ServerTiming {
14
+ addServeTiming(name, dur, desc) {
15
+ const _name = `bd-${this.meta}-${name}`;
16
+ const serverTiming = this.res.getHeader(SERVER_TIMING) || this.res.getHeader(SERVER_TIMING.toLocaleLowerCase());
17
+ const value = `${_name};${desc ? `decs="${desc}";` : ""} dur=${dur}`;
18
+ this.res.setHeader(SERVER_TIMING, serverTiming ? `${serverTiming}, ${value}` : value);
19
+ return this;
20
+ }
21
+ constructor(res, meta) {
22
+ _define_property._(this, "meta", void 0);
23
+ _define_property._(this, "res", void 0);
24
+ this.meta = meta;
25
+ this.res = res;
26
+ }
27
+ }
@@ -14,6 +14,7 @@ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildc
14
14
  const _http = require("http");
15
15
  const _path = /* @__PURE__ */ _interop_require_default._(require("path"));
16
16
  const _utils = require("@modern-js/utils");
17
+ const _time = require("@modern-js/utils/universal/time");
17
18
  const _route = require("../libs/route");
18
19
  const _render = require("../libs/render");
19
20
  const _serveFile = require("../libs/serveFile");
@@ -76,7 +77,9 @@ class ModernServer {
76
77
  async render(req, res, url) {
77
78
  req.logger = req.logger || this.logger;
78
79
  req.metrics = req.metrics || this.metrics;
79
- const context = (0, _context.createContext)(req, res);
80
+ const context = (0, _context.createContext)(req, res, {
81
+ metaName: this.metaName
82
+ });
80
83
  const matched = this.router.match(url || context.path);
81
84
  if (!matched) {
82
85
  return null;
@@ -277,23 +280,35 @@ class ModernServer {
277
280
  /* —————————————————————— private function —————————————————————— */
278
281
  // handler route.json, include api / csr / ssr
279
282
  async routeHandler(context) {
280
- const { res } = context;
283
+ const { res, req, reporter } = context;
281
284
  const matched = this.router.match(context.path);
282
285
  if (!matched) {
283
286
  this.render404(context);
284
287
  return;
285
288
  }
289
+ await reporter.init({
290
+ match: matched
291
+ });
292
+ const end = (0, _time.time)();
293
+ res.on("finish", () => {
294
+ const cost = end();
295
+ reporter.reportTiming("server_handle_request", cost);
296
+ });
286
297
  let route = matched.generate(context.url);
287
298
  if (route.isApi) {
288
299
  await this.handleAPI(context);
289
300
  return;
290
301
  }
302
+ await (0, _utils1.bodyParser)(req);
291
303
  if (route.entryName) {
292
304
  const afterMatchContext = (0, _hookapi.createAfterMatchContext)(context, route.entryName);
293
305
  if (this.runMode === _constants.RUN_MODE.FULL) {
306
+ const end2 = (0, _time.time)();
294
307
  await this.runner.afterMatch(afterMatchContext, {
295
308
  onLast: _utils1.noop
296
309
  });
310
+ const cost = end2();
311
+ reporter.reportTiming("server_hook_after_render", cost);
297
312
  }
298
313
  if (this.isSend(res)) {
299
314
  return;
@@ -315,7 +330,10 @@ class ModernServer {
315
330
  if (this.frameWebHandler) {
316
331
  res.locals = res.locals || {};
317
332
  const middlewareContext = (0, _hookapi.createMiddlewareContext)(context);
333
+ const end2 = (0, _time.time)();
318
334
  await this.frameWebHandler(middlewareContext);
335
+ const cost = end2();
336
+ reporter.reportTiming("server_middleware", cost);
319
337
  res.locals = {
320
338
  ...res.locals,
321
339
  ...middlewareContext.response.locals
@@ -337,9 +355,12 @@ class ModernServer {
337
355
  if (route.entryName) {
338
356
  const afterRenderContext = (0, _hookapi.createAfterRenderContext)(context, response.toString());
339
357
  if (this.runMode === _constants.RUN_MODE.FULL) {
358
+ const end2 = (0, _time.time)();
340
359
  await this.runner.afterRender(afterRenderContext, {
341
360
  onLast: _utils1.noop
342
361
  });
362
+ const cost = end2();
363
+ reporter.reportTiming("server_hook_after_render", cost);
343
364
  }
344
365
  if (this.isSend(res)) {
345
366
  return;
package/dist/cjs/utils.js CHANGED
@@ -36,6 +36,9 @@ _export(exports, {
36
36
  },
37
37
  isRedirect: function() {
38
38
  return isRedirect;
39
+ },
40
+ bodyParser: function() {
41
+ return bodyParser;
39
42
  }
40
43
  });
41
44
  const _utils = require("@modern-js/utils");
@@ -159,3 +162,33 @@ const isRedirect = (code) => {
159
162
  308
160
163
  ].includes(code);
161
164
  };
165
+ function parseBodyTypes(headers, body) {
166
+ switch (headers["content-type"]) {
167
+ case "application/json":
168
+ return JSON.parse(body);
169
+ default:
170
+ return body;
171
+ }
172
+ }
173
+ const getRequestBody = (req) => new Promise((resolve, reject) => {
174
+ var _req;
175
+ if (((_req = req) === null || _req === void 0 ? void 0 : _req.method) && req.method.toLowerCase() !== "get") {
176
+ let body = "";
177
+ req.on("data", (chunk) => {
178
+ body += chunk.toString();
179
+ });
180
+ req.on("end", () => {
181
+ resolve(parseBodyTypes(req.headers, body));
182
+ });
183
+ req.on("error", (err) => {
184
+ reject(err);
185
+ });
186
+ } else {
187
+ resolve(void 0);
188
+ }
189
+ });
190
+ const bodyParser = async (req) => {
191
+ if (!req.body) {
192
+ req.body = await getRequestBody(req);
193
+ }
194
+ };
@@ -23,6 +23,7 @@ const _indexworker = require("./libs/hook-api/index.worker");
23
23
  const _logger = require("./libs/logger");
24
24
  const _route = require("./libs/route");
25
25
  const _metrics = require("./libs/metrics");
26
+ const _reporter = require("./libs/reporter");
26
27
  class ReturnResponse {
27
28
  /**
28
29
  * Iterate a Object
@@ -101,7 +102,8 @@ const createHandler = (manifest) => {
101
102
  level: "warn"
102
103
  });
103
104
  const metrics = _metrics.metrics;
104
- const hookContext = createWorkerHookContext(request.url, logger, metrics);
105
+ const reporter = _reporter.defaultReporter;
106
+ const hookContext = createWorkerHookContext(request.url, logger, metrics, reporter);
105
107
  const afterMatchHookContext = (0, _indexworker.createAfterMatchContext)(hookContext, entryName);
106
108
  (_page = page) === null || _page === void 0 ? void 0 : (_page_serverHooks = _page.serverHooks) === null || _page_serverHooks === void 0 ? void 0 : (_page_serverHooks_afterMatch = _page_serverHooks.afterMatch) === null || _page_serverHooks_afterMatch === void 0 ? void 0 : _page_serverHooks_afterMatch.call(_page_serverHooks, afterMatchHookContext, () => void 0);
107
109
  if (checkIsSent(hookContext)) {
@@ -137,9 +139,15 @@ const createHandler = (manifest) => {
137
139
  template: page.template,
138
140
  entryName: page.entryName,
139
141
  logger,
142
+ reporter: _reporter.defaultReporter,
140
143
  metrics,
141
144
  // FIXME: pass correctly req & res
142
145
  req: request,
146
+ serverTiming: {
147
+ addServeTiming() {
148
+ return this;
149
+ }
150
+ },
143
151
  res: responseLike
144
152
  };
145
153
  const body = await page.serverRender(serverRenderContext);
@@ -184,7 +192,7 @@ function createResponse(template) {
184
192
  return RESPONSE_NOTFOUND;
185
193
  }
186
194
  }
187
- function createWorkerHookContext(url, logger, metrics) {
195
+ function createWorkerHookContext(url, logger, metrics, reporter) {
188
196
  const [res, req] = [
189
197
  {
190
198
  headers: new Headers(),
@@ -198,7 +206,8 @@ function createWorkerHookContext(url, logger, metrics) {
198
206
  res,
199
207
  req,
200
208
  logger,
201
- metrics
209
+ metrics,
210
+ reporter
202
211
  };
203
212
  }
204
213
  function applyMiddlewares(ctx, middleware) {
@@ -7,21 +7,27 @@ import qs from "querystring";
7
7
  import { Buffer } from "buffer";
8
8
  import createEtag from "etag";
9
9
  import fresh from "fresh";
10
+ import { cutNameByHyphen } from "@modern-js/utils";
11
+ import { ServerTiming } from "../serverTiming";
12
+ import { defaultReporter } from "../reporter";
10
13
  import { headersWithoutCookie } from "../../utils";
11
14
  var MOCK_URL_BASE = "https://modernjs.dev/";
12
15
  export var ModernServerContext = /* @__PURE__ */ function() {
13
16
  "use strict";
14
17
  function ModernServerContext2(req, res, options) {
15
18
  _class_call_check(this, ModernServerContext2);
19
+ var _options;
16
20
  _define_property(this, "req", void 0);
17
21
  _define_property(this, "res", void 0);
18
22
  _define_property(this, "params", {});
19
- _define_property(this, "serverData", void 0);
23
+ _define_property(this, "reporter", defaultReporter);
24
+ _define_property(this, "serverTiming", void 0);
25
+ _define_property(this, "serverData", {});
20
26
  _define_property(this, "options", {});
21
27
  this.req = req;
22
28
  this.res = res;
23
29
  this.options = options || {};
24
- this.serverData = {};
30
+ this.serverTiming = new ServerTiming(res, cutNameByHyphen(((_options = options) === null || _options === void 0 ? void 0 : _options.metaName) || "modern-js"));
25
31
  this.bind();
26
32
  }
27
33
  _create_class(ModernServerContext2, [
@@ -4,10 +4,11 @@ import { RouteAPI } from "./route";
4
4
  import { TemplateAPI } from "./template";
5
5
  import { BaseRequest, BaseResponse } from "./base";
6
6
  export var base = function(context) {
7
- var res = context.res;
7
+ var res = context.res, reporter = context.reporter;
8
8
  return {
9
9
  response: new BaseResponse(res),
10
10
  request: new BaseRequest(context),
11
+ reporter: reporter,
11
12
  logger: context.logger,
12
13
  metrics: context.metrics
13
14
  };
@@ -55,7 +55,7 @@ var ServerResponse = /* @__PURE__ */ function() {
55
55
  return ServerResponse2;
56
56
  }();
57
57
  export var base = function(context) {
58
- var req = context.req, res = context.res, logger = context.logger, metrics = context.metrics;
58
+ var req = context.req, res = context.res, logger = context.logger, metrics = context.metrics, reporter = context.reporter;
59
59
  var serverResponse = new ServerResponse(res);
60
60
  var _ref = new URL(req.url), host = _ref.host, pathname = _ref.pathname, searchParams = _ref.searchParams;
61
61
  var headers = {};
@@ -64,6 +64,7 @@ export var base = function(context) {
64
64
  });
65
65
  return {
66
66
  response: new BaseResponse(serverResponse),
67
+ reporter: reporter,
67
68
  request: new BaseRequest({
68
69
  url: req.url,
69
70
  host: host,
@@ -7,7 +7,7 @@ import { createLogger, createMetrics } from "./measure";
7
7
  import { injectServerDataStream, injectServerData } from "./utils";
8
8
  export var render = function() {
9
9
  var _ref = _async_to_generator(function(ctx, renderOptions, runner) {
10
- var _ctx_res, urlPath, bundle, distDir, template, entryName, staticGenerate, _renderOptions_enableUnsafeCtx, enableUnsafeCtx, nonce, bundleJS, loadableUri, loadableStats, routesManifestUri, routeManifest, body, context, bundleJSContent, serverRender, content, _context_redirection, url, _context_redirection_status, status;
10
+ var _ctx_res, urlPath, bundle, distDir, template, entryName, staticGenerate, _renderOptions_enableUnsafeCtx, enableUnsafeCtx, nonce, bundleJS, loadableUri, loadableStats, routesManifestUri, routeManifest, context, bundleJSContent, serverRender, content, _context_redirection, url, _context_redirection_status, status;
11
11
  return _ts_generator(this, function(_state) {
12
12
  switch (_state.label) {
13
13
  case 0:
@@ -17,12 +17,6 @@ export var render = function() {
17
17
  loadableStats = fs.existsSync(loadableUri) ? require(loadableUri) : "";
18
18
  routesManifestUri = path.join(distDir, ROUTE_MANIFEST_FILE);
19
19
  routeManifest = fs.existsSync(routesManifestUri) ? require(routesManifestUri) : void 0;
20
- return [
21
- 4,
22
- getRequestBody(ctx.req)
23
- ];
24
- case 1:
25
- body = _state.sent();
26
20
  context = {
27
21
  request: {
28
22
  baseUrl: urlPath,
@@ -32,7 +26,7 @@ export var render = function() {
32
26
  query: ctx.query,
33
27
  url: ctx.href,
34
28
  headers: ctx.headers,
35
- body: body
29
+ body: ctx.req.body
36
30
  },
37
31
  response: {
38
32
  setHeader: function(key, value) {
@@ -51,6 +45,8 @@ export var render = function() {
51
45
  staticGenerate: staticGenerate,
52
46
  logger: void 0,
53
47
  metrics: void 0,
48
+ reporter: ctx.reporter,
49
+ serverTiming: ctx.serverTiming,
54
50
  req: ctx.req,
55
51
  res: ctx.res,
56
52
  enableUnsafeCtx: enableUnsafeCtx,
@@ -63,14 +59,14 @@ export var render = function() {
63
59
  4,
64
60
  Promise.resolve(require(bundleJS))
65
61
  ];
66
- case 2:
62
+ case 1:
67
63
  bundleJSContent = _state.sent();
68
64
  serverRender = bundleJSContent[SERVER_RENDER_FUNCTION_NAME];
69
65
  return [
70
66
  4,
71
67
  cache(serverRender, ctx)(context)
72
68
  ];
73
- case 3:
69
+ case 2:
74
70
  content = _state.sent();
75
71
  _context_redirection = context.redirection, url = _context_redirection.url, _context_redirection_status = _context_redirection.status, status = _context_redirection_status === void 0 ? 302 : _context_redirection_status;
76
72
  if (url) {
@@ -112,22 +108,3 @@ export var render = function() {
112
108
  return _ref.apply(this, arguments);
113
109
  };
114
110
  }();
115
- var getRequestBody = function(req) {
116
- return new Promise(function(resolve, reject) {
117
- var _req;
118
- if (((_req = req) === null || _req === void 0 ? void 0 : _req.method) && req.method.toLowerCase() !== "get") {
119
- var body = "";
120
- req.on("data", function(chunk) {
121
- body += chunk.toString();
122
- });
123
- req.on("end", function() {
124
- resolve(body);
125
- });
126
- req.on("error", function(err) {
127
- reject(err);
128
- });
129
- } else {
130
- resolve(void 0);
131
- }
132
- });
133
- };
@@ -0,0 +1,12 @@
1
+ export var defaultReporter = {
2
+ init: function init() {
3
+ },
4
+ reportError: function reportError() {
5
+ },
6
+ reportTiming: function reportTiming() {
7
+ },
8
+ reportInfo: function reportInfo() {
9
+ },
10
+ reportWarn: function reportWarn() {
11
+ }
12
+ };
@@ -0,0 +1,27 @@
1
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
2
+ import { _ as _create_class } from "@swc/helpers/_/_create_class";
3
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
4
+ var SERVER_TIMING = "Server-Timing";
5
+ export var ServerTiming = /* @__PURE__ */ function() {
6
+ "use strict";
7
+ function ServerTiming2(res, meta) {
8
+ _class_call_check(this, ServerTiming2);
9
+ _define_property(this, "meta", void 0);
10
+ _define_property(this, "res", void 0);
11
+ this.meta = meta;
12
+ this.res = res;
13
+ }
14
+ _create_class(ServerTiming2, [
15
+ {
16
+ key: "addServeTiming",
17
+ value: function addServeTiming(name, dur, desc) {
18
+ var _name = "bd-".concat(this.meta, "-").concat(name);
19
+ var serverTiming = this.res.getHeader(SERVER_TIMING) || this.res.getHeader(SERVER_TIMING.toLocaleLowerCase());
20
+ var value = "".concat(_name, ";").concat(desc ? 'decs="'.concat(desc, '";') : "", " dur=").concat(dur);
21
+ this.res.setHeader(SERVER_TIMING, serverTiming ? "".concat(serverTiming, ", ").concat(value) : value);
22
+ return this;
23
+ }
24
+ }
25
+ ]);
26
+ return ServerTiming2;
27
+ }();