From 144d11a9b3b6bf795301af33a2917beb68de937b Mon Sep 17 00:00:00 2001 From: Jason Mulligan Date: Fri, 4 Jan 2019 15:28:42 -0500 Subject: [PATCH] Removing some `RegExp` --- lib/middleware.js | 12 ++++++------ lib/regex.js | 9 +-------- lib/tenso.js | 6 +++--- lib/utility.js | 6 ++++-- package-lock.json | 2 +- package.json | 2 +- 6 files changed, 16 insertions(+), 21 deletions(-) diff --git a/lib/middleware.js b/lib/middleware.js index de97dcfc..e5565613 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -82,16 +82,16 @@ function parse (req, res, next) { exception; if (req.body !== "") { - const type = req.headers["content-type"]; + const type = req.headers["content-type"] || ""; - if (regex.encodeForm.test(type) === true) { + if (type.includes("application/x-www-form-urlencoded") === true) { const args = req.body ? retsu.chunk(req.body.split(regex.bodySplit), 2) : []; req.body = {}; each(args, i => { req.body[i[0]] = coerce(decodeURIComponent(i[1])); }); - } else if (regex.encodeJson.test(type) === true || regex.jsonWrap.test(req.body) === true) { + } else if (type.includes("application/json") === true || regex.jsonWrap.test(req.body) === true) { try { req.body = JSON.parse(req.body); } catch (e) { @@ -138,7 +138,7 @@ function payload (req, res, next) { function keymaster (req, res) { // No authentication, or it's already happened if (req.protect === false || req.protectAsync === false || (req.session !== void 0 && req.isAuthenticated() === true) === true) { - const method = regex.head.test(req.method) ? "GET" : req.method, + const method = req.method === "HEAD" ? "GET" : req.method, routes = req.server.router.middleware.get(method) || new Map(), uri = req.parsed.pathname; let result; @@ -170,7 +170,7 @@ function keymaster (req, res) { } else { res.send(result); } - } else if (regex.options.test(method) && req.allow.includes("GET") === true) { + } else if (method === "OPTIONS" && req.allow.includes("GET") === true) { res.send(STATUS_CODES[204], 204); } else { res.error(404); @@ -212,7 +212,7 @@ function stream (req, res) { letag = headers.etag = req.server.etag(req.parsed.pathname, req.file.stats.size, req.file.stats.mtime); } - if (regex.getOnly.test(req.method) === true) { + if (req.method === "GET") { if (letag !== void 0 && req.headers["if-none-match"] === letag) { delete headers["content-length"]; res.send("", 304, headers); diff --git a/lib/regex.js b/lib/regex.js index c9568c9d..2f20c257 100644 --- a/lib/regex.js +++ b/lib/regex.js @@ -7,11 +7,7 @@ module.exports = { collection: /(.*)(\/.*)$/, def: /deflate/, dir: /\/$/, - encodeForm: /application\/x-www-form-urlencoded/, - encodeJson: /application\/json/, - head: /^HEAD$/, "get": /^(GET|HEAD|OPTIONS)$/, - getOnly: /^GET$/, hasParam: /\/:\w*/, hasOrderByDesc: /(\?|&)order_by=desc/, hypermedia: /(([a-z]+(_)?)?id|url|uri)$/i, @@ -22,13 +18,10 @@ module.exports = { leftBrace: /\(/, mimetype: /;.*/, modify: /DELETE|PATCH|POST|PUT/, - options: /^OPTIONS$/, orderBy: /^order_by\=/, - private: /private/, scheme: /^(\w+\:\/\/)|\//, trailing: /_.*$/, trailingS: /s$/, trailingSlash: /\/$/, - trailingY: /y$/, - unsortable: /boolean|number|string|void 0/ + trailingY: /y$/ }; diff --git a/lib/tenso.js b/lib/tenso.js index d641142a..c5564a8c 100644 --- a/lib/tenso.js +++ b/lib/tenso.js @@ -258,7 +258,7 @@ class Tenso extends Base { } headers (req, res, status, body, headers) { - if (req.protect === true && regex.private.test(headers["cache-control"]) === false) { + if (req.protect === true && (headers["cache-control"] || "").includes("private") === false) { headers["cache-control"] = (headers["cache-control"] || res.getHeader("cache-control") || "").replace(/(private|public)(,\s)?/g, ""); headers["cache-control"] = `private${(headers["cache-control"].length > 0 ? ", " : "")}${(headers["cache-control"] || "")}`; } @@ -274,7 +274,7 @@ class Tenso extends Base { delete headers["last-modified"]; } - if (regex.head.test(req.method) === true) { + if (req.method === "HEAD") { headers.connection = "close"; } @@ -426,7 +426,7 @@ class Tenso extends Base { result = this.render(req, res, utility.hypermedia(this, req, utility.serialize(req, body, status), headers), headers); headers["content-length"] = Buffer.byteLength(result); - if (regex.head.test(req.method)) { + if (req.method === "HEAD") { result = ""; } } else { diff --git a/lib/utility.js b/lib/utility.js index 113e89fe..f65100b8 100644 --- a/lib/utility.js +++ b/lib/utility.js @@ -539,7 +539,7 @@ function hypermedia (server, req, rep, headers) { if (exists) { if (Array.isArray(rep.data)) { - if (regex.getOnly.test(req.method) === true && (rep.status >= 200 && rep.status <= 206)) { + if (req.method === "GET" && (rep.status >= 200 && rep.status <= 206)) { if (isNaN(page) || page <= 0) { page = 1; } @@ -623,7 +623,9 @@ function sort (arg, req) { let output; if (typeof req.parsed.search === "string" && req.parsed.searchParams.has("order_by") && Array.isArray(arg)) { - if (regex.unsortable.test(typeof arg[0]) === false && arg[0] !== null) { + const type = typeof arg[0]; + + if (type !== "boolean" && type !== "number" && type !== "string" && type !== "undefined" && arg[0] !== null) { output = keysort(clone(arg), req.parsed.search.replace("?", "").split("&").filter(i => regex.orderBy.test(i)).reduce((a, b) => [...a, decodeURIComponent(b.replace(regex.orderBy, ""))], []).join(", ")); } else { // Primitives, regular Array.sort() diff --git a/package-lock.json b/package-lock.json index daa5f6e2..5c0d835f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "tenso", - "version": "10.0.23", + "version": "10.0.24", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 53402f5d..c014a30a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tenso", "description": "Tensō is an HTTP/HTTP2 REST API framework", - "version": "10.0.23", + "version": "10.0.24", "homepage": "http://avoidwork.github.io/tenso", "author": "Jason Mulligan ", "repository": {