From 77c2af96ad536db96395d8083f3973c45c9dc0bc Mon Sep 17 00:00:00 2001 From: Ayoub Mabrouk Date: Wed, 21 Jan 2026 02:21:53 +0100 Subject: [PATCH] refactor: extract helper for argument normalization Extract repetitive argument handling into a normalizeArguments() helper. This centralizes logic used in types(), encodings(), charsets(), and languages(), reducing duplication and improving maintainability. - Add normalizeArguments() for flattened argument lists - Use Array.from() instead of manual loop - Update JSDoc types - Use const for helper return values --- index.js | 52 ++++++++++++++++++++-------------------------------- 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/index.js b/index.js index 7d335f8..f7b0f94 100644 --- a/index.js +++ b/index.js @@ -82,15 +82,8 @@ function Accepts (req) { Accepts.prototype.type = Accepts.prototype.types = function (types_) { - var types = types_ - // support flattened arguments - if (types && !Array.isArray(types)) { - types = new Array(arguments.length) - for (var i = 0; i < types.length; i++) { - types[i] = arguments[i] - } - } + const types = normalizeArguments(types_, arguments) // no types, return all requested types if (!types || types.length === 0) { @@ -126,15 +119,8 @@ Accepts.prototype.types = function (types_) { Accepts.prototype.encoding = Accepts.prototype.encodings = function (encodings_) { - var encodings = encodings_ - // support flattened arguments - if (encodings && !Array.isArray(encodings)) { - encodings = new Array(arguments.length) - for (var i = 0; i < encodings.length; i++) { - encodings[i] = arguments[i] - } - } + const encodings = normalizeArguments(encodings_, arguments) // no encodings, return all requested encodings if (!encodings || encodings.length === 0) { @@ -159,15 +145,8 @@ Accepts.prototype.encodings = function (encodings_) { Accepts.prototype.charset = Accepts.prototype.charsets = function (charsets_) { - var charsets = charsets_ - // support flattened arguments - if (charsets && !Array.isArray(charsets)) { - charsets = new Array(arguments.length) - for (var i = 0; i < charsets.length; i++) { - charsets[i] = arguments[i] - } - } + const charsets = normalizeArguments(charsets_, arguments) // no charsets, return all requested charsets if (!charsets || charsets.length === 0) { @@ -194,15 +173,8 @@ Accepts.prototype.lang = Accepts.prototype.langs = Accepts.prototype.language = Accepts.prototype.languages = function (languages_) { - var languages = languages_ - // support flattened arguments - if (languages && !Array.isArray(languages)) { - languages = new Array(arguments.length) - for (var i = 0; i < languages.length; i++) { - languages[i] = arguments[i] - } - } + const languages = normalizeArguments(languages_, arguments) // no languages, return all requested languages if (!languages || languages.length === 0) { @@ -212,6 +184,22 @@ Accepts.prototype.languages = function (languages_) { return this.negotiator.languages(languages)[0] || false } +/** + * Normalize a possibly-flattened argument list into an array. + * + * @param {string|Array|undefined} firstArg + * @param {ArrayLike} args + * @return {Array|undefined} + * @private + */ + +function normalizeArguments (firstArg, args) { + if (firstArg && !Array.isArray(firstArg)) { + return Array.from(args) + } + return firstArg +} + /** * Convert extnames to mime. *