barehttp 0.4.1 → 0.4.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.
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Execution = void 0;
7
7
  const hyperid_1 = __importDefault(require("hyperid"));
8
- const generateId = hyperid_1.default();
8
+ const generateId = (0, hyperid_1.default)();
9
9
  class Execution {
10
10
  id;
11
11
  type;
@@ -23,7 +23,7 @@ exports.logMe = exports.logHttp = void 0;
23
23
  const pino_1 = __importStar(require("pino"));
24
24
  const serializers_1 = require("./serializers");
25
25
  const env_1 = require("../env");
26
- const asyncDest = env_1.envs.isProd ? [pino_1.destination({ sync: false })] : [];
26
+ const asyncDest = env_1.envs.isProd ? [(0, pino_1.destination)({ sync: false })] : [];
27
27
  const pinoCommonOptions = {
28
28
  timestamp: () => `,"time":"${new Date()[env_1.envs.isProd ? 'toISOString' : 'toLocaleTimeString']()}"`,
29
29
  formatters: {
@@ -32,36 +32,18 @@ const pinoCommonOptions = {
32
32
  messageKey: 'message',
33
33
  prettyPrint: !env_1.envs.isProd,
34
34
  };
35
- const logger = pino_1.default(pinoCommonOptions, asyncDest[0]);
36
- if (env_1.envs.isProd) {
37
- setInterval(function () {
38
- logger.flush();
39
- }, 10000).unref();
40
- const handler = pino_1.default.final(logger, (err, finalLogger, evt) => {
41
- finalLogger.info(`${evt} caught`);
42
- if (err)
43
- finalLogger.error(err, 'error caused exit');
44
- process.exit(err ? 1 : 0);
45
- });
46
- // catch all the ways node might exit
47
- process.on('beforeExit', () => handler(null, 'beforeExit'));
48
- process.on('exit', () => handler(null, 'exit'));
49
- process.on('uncaughtException', (err) => handler(err, 'uncaughtException'));
50
- process.on('SIGINT', () => handler(null, 'SIGINT'));
51
- process.on('SIGQUIT', () => handler(null, 'SIGQUIT'));
52
- process.on('SIGTERM', () => handler(null, 'SIGTERM'));
53
- }
35
+ const logger = (0, pino_1.default)(pinoCommonOptions, asyncDest[0]);
54
36
  const logHttp = (...params) => {
55
- const { level, logObject } = serializers_1.serializeHttp(...params);
37
+ const { level, logObject } = (0, serializers_1.serializeHttp)(...params);
56
38
  logger[level](logObject);
57
39
  };
58
40
  exports.logHttp = logHttp;
59
41
  // TODO: remove the test condition
60
42
  exports.logMe = {
61
- debug: (...args) => !env_1.envs.isTest && logger.debug(serializers_1.serializeLog(...args)),
62
- info: (...args) => !env_1.envs.isTest && logger.info(serializers_1.serializeLog(...args)),
63
- warn: (...args) => !env_1.envs.isTest && logger.warn(serializers_1.serializeLog(...args)),
64
- error: (...args) => !env_1.envs.isTest && logger.error(serializers_1.serializeLog(...args)),
65
- fatal: (...args) => !env_1.envs.isTest && logger.fatal(serializers_1.serializeLog(...args)),
66
- trace: (...args) => !env_1.envs.isTest && logger.trace(serializers_1.serializeLog(...args)),
43
+ debug: (...args) => !env_1.envs.isTest && logger.debug((0, serializers_1.serializeLog)(...args)),
44
+ info: (...args) => !env_1.envs.isTest && logger.info((0, serializers_1.serializeLog)(...args)),
45
+ warn: (...args) => !env_1.envs.isTest && logger.warn((0, serializers_1.serializeLog)(...args)),
46
+ error: (...args) => !env_1.envs.isTest && logger.error((0, serializers_1.serializeLog)(...args)),
47
+ fatal: (...args) => !env_1.envs.isTest && logger.fatal((0, serializers_1.serializeLog)(...args)),
48
+ trace: (...args) => !env_1.envs.isTest && logger.trace((0, serializers_1.serializeLog)(...args)),
67
49
  };
@@ -26,7 +26,7 @@ const parseArgs = (argSlice) => argSlice.map((arg) => {
26
26
  return arg;
27
27
  });
28
28
  function serializeLog(...args) {
29
- const site = callsites_1.default()[2];
29
+ const site = (0, callsites_1.default)()[2];
30
30
  const meta = {
31
31
  timestamp: Date.now(),
32
32
  location: `${site.getFileName()}:${site.getLineNumber()}:${site.getColumnNumber()}`,
@@ -16,7 +16,7 @@ class CookiesManager {
16
16
  this.flow = flow;
17
17
  const secret = this.options.secret || '';
18
18
  const enableRotation = Array.isArray(secret);
19
- this.signer = typeof secret === 'string' || enableRotation ? signer_1.secretsOperator(secret) : null;
19
+ this.signer = typeof secret === 'string' || enableRotation ? (0, signer_1.secretsOperator)(secret) : null;
20
20
  }
21
21
  setCookie(name, value, options, signer) {
22
22
  const localSigner = signer || this.signer;
package/lib/request.js CHANGED
@@ -12,7 +12,7 @@ const cookie_manager_1 = require("./middlewares/cookies/cookie-manager");
12
12
  const util_1 = require("util");
13
13
  const stream_1 = require("stream");
14
14
  const url_1 = __importDefault(require("url"));
15
- const generateId = hyperid_1.default();
15
+ const generateId = (0, hyperid_1.default)();
16
16
  const statusTuples = Object.entries(utils_1.StatusCodes).reduce((acc, [name, status]) => {
17
17
  acc[status] = utils_1.StatusPhrases[name];
18
18
  return acc;
@@ -59,7 +59,7 @@ class BareRequest {
59
59
  }
60
60
  // call logging section
61
61
  if (options?.logging === true) {
62
- _originalResponse.on('close', () => logger_1.logHttp(this.headers, this.startDate, this.remoteClient, _originalRequest, _originalResponse));
62
+ _originalResponse.on('close', () => (0, logger_1.logHttp)(this.headers, this.startDate, this.remoteClient, _originalRequest, _originalResponse));
63
63
  }
64
64
  }
65
65
  readBody() {
@@ -90,7 +90,7 @@ class BareRequest {
90
90
  case 'text/plain':
91
91
  return wholeChunk.toString();
92
92
  case 'application/json':
93
- return safe_json_1.JSONParse(wholeChunk.toString());
93
+ return (0, safe_json_1.JSONParse)(wholeChunk.toString());
94
94
  case 'application/x-www-form-urlencoded':
95
95
  const store = {};
96
96
  for (const curr of wholeChunk.toString().split('&')) {
@@ -194,7 +194,7 @@ class BareRequest {
194
194
  }
195
195
  json(data) {
196
196
  // to generate with fast-json-stringify schema issue #1
197
- const jsoned = safe_json_1.JSONStringify(data);
197
+ const jsoned = (0, safe_json_1.JSONStringify)(data);
198
198
  this.setHeader('Content-Type', 'application/json');
199
199
  this._send(jsoned ? jsoned : undefined);
200
200
  }
package/lib/server.js CHANGED
@@ -21,7 +21,7 @@ class BareServer {
21
21
  #middlewares = [];
22
22
  #routes = new Map();
23
23
  #routesLib = new Map();
24
- #router = find_my_way_1.default({ ignoreTrailingSlash: true });
24
+ #router = (0, find_my_way_1.default)({ ignoreTrailingSlash: true });
25
25
  #errorHandler = this.basicErrorHandler;
26
26
  #corsInstance;
27
27
  #port = 3000;
@@ -30,7 +30,7 @@ class BareServer {
30
30
  constructor(bareOptions = {}) {
31
31
  this.bareOptions = bareOptions;
32
32
  // init
33
- this.server = http_1.createServer(this.#listener.bind(this));
33
+ this.server = (0, http_1.createServer)(this.#listener.bind(this));
34
34
  this.attachGracefulHandlers();
35
35
  this.attachRoutesDeclarator();
36
36
  this.mainOptionsSetter();
@@ -41,7 +41,7 @@ class BareServer {
41
41
  const flow = new request_1.BareRequest(request, response, { logging, requestTimeFormat });
42
42
  // init and attach request uuid to the context
43
43
  if (this.bareOptions.context) {
44
- context_1.newContext('request');
44
+ (0, context_1.newContext)('request');
45
45
  context_1.context.current?.store.set('id', flow.ID.code);
46
46
  }
47
47
  // attach a flow to the flow memory storage
@@ -71,7 +71,7 @@ class BareServer {
71
71
  this.#host = typeof bo.serverAddress === 'string' ? bo.serverAddress : '0.0.0.0';
72
72
  // context setting
73
73
  if (bo.context)
74
- context_1.enableContext();
74
+ (0, context_1.enableContext)();
75
75
  // ws attachment
76
76
  if (bo.ws) {
77
77
  this.ws = new websocket_1.WebSocketServer(this.server, bo.wsOptions);
@@ -151,7 +151,7 @@ class BareServer {
151
151
  registerReport() {
152
152
  this.setRoute('GET', '/_report', false, (flow) => {
153
153
  flow.setHeader('Content-Type', 'text/html');
154
- flow.send(report_1.generateReport(this.#routes));
154
+ flow.send((0, report_1.generateReport)(this.#routes));
155
155
  });
156
156
  }
157
157
  handleRoute(req, routeParams, handle, encodedRoute, opts) {
package/lib/websocket.js CHANGED
@@ -9,7 +9,7 @@ const callsites_1 = __importDefault(require("callsites"));
9
9
  const hyperid_1 = __importDefault(require("hyperid"));
10
10
  const logger_1 = require("./logger");
11
11
  const utils_1 = require("./utils");
12
- const generateId = hyperid_1.default();
12
+ const generateId = (0, hyperid_1.default)();
13
13
  class WebSocketServer {
14
14
  opts;
15
15
  _internal;
@@ -42,21 +42,21 @@ class WebSocketServer {
42
42
  if (response instanceof Promise) {
43
43
  response
44
44
  .then((answer) => this.doUpgrade(answer, request, socket, head))
45
- .catch((e) => this.rejectUpgrade(socket, e?.message, e));
45
+ .catch((e) => this.rejectUpgrade(request, socket, e?.message, e));
46
46
  }
47
47
  else {
48
48
  this.doUpgrade(response, request, socket, head);
49
49
  }
50
50
  }
51
51
  catch (e) {
52
- this.rejectUpgrade(socket, e?.message, e);
52
+ this.rejectUpgrade(request, socket, e?.message, e);
53
53
  }
54
54
  });
55
55
  this.customUpgradeDone = true;
56
56
  }
57
57
  doUpgrade(answer, request, socket, head) {
58
58
  if (!answer.access)
59
- this.rejectUpgrade(socket, answer.message);
59
+ this.rejectUpgrade(request, socket, answer.message);
60
60
  else {
61
61
  this._internal.handleUpgrade(request, socket, head, (ws) => {
62
62
  const userClient = {
@@ -68,15 +68,15 @@ class WebSocketServer {
68
68
  });
69
69
  }
70
70
  }
71
- rejectUpgrade(socket, message = 'Not Authorized', data) {
72
- logger_1.logMe.warn(message || `Upgrade rejected for the client from ${socket.remoteAddress}`, data);
71
+ rejectUpgrade(request, socket, message = 'Not Authorized', data) {
72
+ logger_1.logMe.warn(message || `Upgrade rejected for the client from ${request.socket.remoteAddress}`, data);
73
73
  socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n'); // TODO: enhance to be able to personalize this
74
74
  socket.destroy();
75
75
  }
76
76
  attachTypesHandling() {
77
77
  this._internal.on('connection', (ws, _, client) => {
78
78
  ws.onmessage = (event) => {
79
- const decode = utils_1.JSONParse(event.data);
79
+ const decode = (0, utils_1.JSONParse)(event.data);
80
80
  if (decode === null) {
81
81
  logger_1.logMe.error('Incorrect data received from the client', {
82
82
  data: event.data,
@@ -105,7 +105,7 @@ class WebSocketServer {
105
105
  .then((resolvedResponse) => {
106
106
  if (!resolvedResponse)
107
107
  return;
108
- this.send({ ws, client }, utils_1.JSONStringify({ type: `${decode.type}_RESPONSE`, ...resolvedResponse }));
108
+ this.send({ ws, client }, (0, utils_1.JSONStringify)({ type: `${decode.type}_RESPONSE`, ...resolvedResponse }));
109
109
  })
110
110
  .catch((e) => logger_1.logMe.error(`Error working out a handler for type ${decode.type}`, {
111
111
  error: e,
@@ -116,7 +116,7 @@ class WebSocketServer {
116
116
  else {
117
117
  if (!response)
118
118
  return;
119
- this.send({ ws, client }, utils_1.JSONStringify({ type: `${decode.type}_RESPONSE`, ...response }));
119
+ this.send({ ws, client }, (0, utils_1.JSONStringify)({ type: `${decode.type}_RESPONSE`, ...response }));
120
120
  }
121
121
  }
122
122
  catch (e) {
@@ -147,7 +147,7 @@ class WebSocketServer {
147
147
  if (typeof receiver.handler !== 'function') {
148
148
  throw new Error(`Can't declare a handler with type ${typeof receiver.handler}, should be a function with following signature: WsMessageHandler<T,?>`);
149
149
  }
150
- const place = callsites_1.default()[2];
150
+ const place = (0, callsites_1.default)()[2];
151
151
  const loc = `${place.getFileName()}:${place.getLineNumber()}:${place.getColumnNumber()}`;
152
152
  this.#types.set(receiver.type, { loc, handler: receiver.handler });
153
153
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "barehttp",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "Lightweight and fast Node.js web server",
5
5
  "main": "lib/index.js",
6
6
  "directories": {
@@ -15,7 +15,7 @@
15
15
  "build:dev": "rm -rf ./dev-lib && tsc -p tsconfig.dev.json",
16
16
  "test": "jest --runInBand --coverage",
17
17
  "lint": "eslint ./src --fix",
18
- "release": "semantic-release"
18
+ "release": "semantic-release -e ./.releaserc.json"
19
19
  },
20
20
  "keywords": [
21
21
  "nodejs",
@@ -36,34 +36,36 @@
36
36
  "callsites": "^3.1.0",
37
37
  "cookie": "^0.4.1",
38
38
  "cookie-signature": "^1.1.0",
39
- "find-my-way": "^4.3.0",
40
- "hyperid": "^2.1.0",
41
- "pino": "^6.11.3",
42
- "pino-pretty": "^5.0.2",
43
- "ws": "^7.4.6"
39
+ "find-my-way": "^5.0.0",
40
+ "hyperid": "^2.3.1",
41
+ "pino": "^7.5.1",
42
+ "pino-pretty": "^7.2.0",
43
+ "ws": "^8.3.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@ts-morph/bootstrap": "^0.9.1",
47
- "@types/cookie": "^0.4.0",
46
+ "@semantic-release/git": "^10.0.1",
47
+ "@semantic-release/github": "^8.0.2",
48
+ "@ts-morph/bootstrap": "^0.12.2",
49
+ "@types/cookie": "^0.4.1",
48
50
  "@types/cookie-signature": "^1.0.3",
49
- "@types/jest": "^26.0.23",
50
- "@types/node": "^15.0.2",
51
- "@types/pino": "^6.3.8",
52
- "@types/ws": "^7.4.7",
53
- "@typescript-eslint/eslint-plugin": "^4.22.1",
54
- "@typescript-eslint/parser": "^4.22.1",
51
+ "@types/jest": "^27.0.3",
52
+ "@types/node": "^14.17.0",
53
+ "@types/pino": "^7.0.5",
54
+ "@types/ws": "^8.2.1",
55
+ "@typescript-eslint/eslint-plugin": "^5.5.0",
56
+ "@typescript-eslint/parser": "^5.5.0",
55
57
  "axios": "^0.21.1",
56
- "eslint": "^7.26.0",
57
- "eslint-plugin-import": "^2.22.1",
58
- "eslint-plugin-jest": "^24.3.6",
58
+ "eslint": "^8.3.0",
59
+ "eslint-plugin-import": "^2.25.3",
60
+ "eslint-plugin-jest": "^25.3.0",
59
61
  "express": "^4.17.1",
60
- "fastify": "^3.15.1",
61
- "jest": "^26.6.3",
62
- "semantic-release": "^17.4.2",
62
+ "fastify": "^3.24.1",
63
+ "jest": "^27.4.3",
64
+ "semantic-release": "^18.0.1",
63
65
  "supertest": "^6.1.3",
64
- "ts-jest": "^26.5.6",
66
+ "ts-jest": "^27.0.7",
65
67
  "ts-node-dev": "^1.1.6",
66
- "typescript": "^4.3.2"
68
+ "typescript": "^4.5.2"
67
69
  },
68
70
  "optionalDependencies": {
69
71
  "bufferutil": "^4.0.3",