From 213d831ae3403402d55d3d084b2434c3ba8da70f Mon Sep 17 00:00:00 2001 From: sevenwithawp Date: Sat, 9 Jul 2022 21:28:02 +0300 Subject: [PATCH] refactor(ext) Decrease of StringPrototypeReplace recurrent usage (#15058) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bartek IwaƄczuk --- ext/console/02_console.js | 31 ++++++++++++------------------- ext/fetch/21_formdata.js | 25 ++++++++++++------------- 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/ext/console/02_console.js b/ext/console/02_console.js index b98a4a1ba8..0f7b1a8db3 100644 --- a/ext/console/02_console.js +++ b/ext/console/02_console.js @@ -720,27 +720,20 @@ // Replace escape sequences that can modify output. function replaceEscapeSequences(string) { + const escapeMap = { + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + "\t": "\\t", + "\v": "\\v", + }; + return StringPrototypeReplace( StringPrototypeReplace( - StringPrototypeReplace( - StringPrototypeReplace( - StringPrototypeReplace( - StringPrototypeReplace( - StringPrototypeReplace(string, /[\b]/g, "\\b"), - /\f/g, - "\\f", - ), - /\n/g, - "\\n", - ), - /\r/g, - "\\r", - ), - /\t/g, - "\\t", - ), - /\v/g, - "\\v", + string, + /([\b\f\n\r\t\v])/g, + (c) => escapeMap[c], ), // deno-lint-ignore no-control-regex /[\x00-\x1f\x7f-\x9f]/g, diff --git a/ext/fetch/21_formdata.js b/ext/fetch/21_formdata.js index a134fe5f73..72f83a8601 100644 --- a/ext/fetch/21_formdata.js +++ b/ext/fetch/21_formdata.js @@ -271,20 +271,19 @@ webidl.configurePrototype(FormData); const FormDataPrototype = FormData.prototype; - const escape = (str, isFilename) => - StringPrototypeReplace( - StringPrototypeReplace( - StringPrototypeReplace( - isFilename ? str : StringPrototypeReplace(str, /\r?\n|\r/g, "\r\n"), - /\n/g, - "%0A", - ), - /\r/g, - "%0D", - ), - /"/g, - "%22", + const escape = (str, isFilename) => { + const escapeMap = { + "\n": "%0A", + "\r": "%0D", + '"': "%22", + }; + + return StringPrototypeReplace( + isFilename ? str : StringPrototypeReplace(str, /\r?\n|\r/g, "\r\n"), + /([\n\r"])/g, + (c) => escapeMap[c], ); + }; /** * convert FormData to a Blob synchronous without reading all of the files