From fdc51a1331620e67beb530fc7419ee015e053182 Mon Sep 17 00:00:00 2001 From: Sergey Golovin Date: Thu, 1 Mar 2018 22:18:37 +0300 Subject: [PATCH] url: remove redundant function PR-URL: https://github.com/nodejs/node/pull/19076 Reviewed-By: Ruben Bridgewater --- lib/internal/url.js | 3 +- lib/url.js | 94 ++++++++++----------------------------------- 2 files changed, 21 insertions(+), 76 deletions(-) diff --git a/lib/internal/url.js b/lib/internal/url.js index 1e31bc9ad873f2..d79d9b13bd058a 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -878,8 +878,7 @@ function serializeParams(array) { const firstEncodedParam = encodeStr(array[0], noEscape, paramHexTable); const firstEncodedValue = encodeStr(array[1], noEscape, paramHexTable); - let output = - `${firstEncodedParam}=${firstEncodedValue}`; + let output = `${firstEncodedParam}=${firstEncodedValue}`; for (var i = 2; i < len; i += 2) { const encodedParam = encodeStr(array[i], noEscape, paramHexTable); diff --git a/lib/url.js b/lib/url.js index df9d917a479aba..9ada211cae7b9f 100644 --- a/lib/url.js +++ b/lib/url.js @@ -36,7 +36,8 @@ const { URLSearchParams, domainToASCII, domainToUnicode, - formatSymbol + formatSymbol, + encodeStr, } = require('internal/url'); // Original url.parse() API @@ -541,10 +542,27 @@ function urlFormat(urlObject, options) { return urlObject.format(); } +// These characters do not need escaping: +// ! - . _ ~ +// ' ( ) * : +// digits +// alpha (uppercase) +// alpha (lowercase) +const noEscapeAuth = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x00 - 0x0F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x10 - 0x1F + 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, // 0x20 - 0x2F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, // 0x30 - 0x3F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 - 0x4F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 0x50 - 0x5F + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 0x6F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0 // 0x70 - 0x7F +]; + Url.prototype.format = function format() { var auth = this.auth || ''; if (auth) { - auth = encodeAuth(auth); + auth = encodeStr(auth, noEscapeAuth, hexTable); auth += '@'; } @@ -929,78 +947,6 @@ Url.prototype.parseHost = function parseHost() { if (host) this.hostname = host; }; -// These characters do not need escaping: -// ! - . _ ~ -// ' ( ) * : -// digits -// alpha (uppercase) -// alpha (lowercase) -const noEscapeAuth = [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x00 - 0x0F - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x10 - 0x1F - 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, // 0x20 - 0x2F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, // 0x30 - 0x3F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 - 0x4F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, // 0x50 - 0x5F - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 0x6F - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0 // 0x70 - 0x7F -]; - -function encodeAuth(str) { - // faster encodeURIComponent alternative for encoding auth uri components - var out = ''; - var lastPos = 0; - for (var i = 0; i < str.length; ++i) { - var c = str.charCodeAt(i); - - // ASCII - if (c < 0x80) { - if (noEscapeAuth[c] === 1) - continue; - if (lastPos < i) - out += str.slice(lastPos, i); - lastPos = i + 1; - out += hexTable[c]; - continue; - } - - if (lastPos < i) - out += str.slice(lastPos, i); - - // Multi-byte characters ... - if (c < 0x800) { - lastPos = i + 1; - out += hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]; - continue; - } - if (c < 0xD800 || c >= 0xE000) { - lastPos = i + 1; - out += hexTable[0xE0 | (c >> 12)] + - hexTable[0x80 | ((c >> 6) & 0x3F)] + - hexTable[0x80 | (c & 0x3F)]; - continue; - } - // Surrogate pair - ++i; - var c2; - if (i < str.length) - c2 = str.charCodeAt(i) & 0x3FF; - else - c2 = 0; - lastPos = i + 1; - c = 0x10000 + (((c & 0x3FF) << 10) | c2); - out += hexTable[0xF0 | (c >> 18)] + - hexTable[0x80 | ((c >> 12) & 0x3F)] + - hexTable[0x80 | ((c >> 6) & 0x3F)] + - hexTable[0x80 | (c & 0x3F)]; - } - if (lastPos === 0) - return str; - if (lastPos < str.length) - return out + str.slice(lastPos); - return out; -} - module.exports = { // Original API Url,