diff --git a/doc/api/path.md b/doc/api/path.md index 0bbb5b80c57ef3..5b66e54f9393d2 100644 --- a/doc/api/path.md +++ b/doc/api/path.md @@ -62,7 +62,7 @@ example, `path.resolve('C:\\')` can potentially return a different result than `path.resolve('C:')`. For more information, see [this MSDN page][MSDN-Rel-Path]. -## `path.basename(path[, ext])` +## `path.basename(path[, suffix])` * `path` {string} -* `ext` {string} An optional file extension +* `suffix` {string} An optional suffix to remove * Returns: {string} The `path.basename()` method returns the last portion of a `path`, similar to -the Unix `basename` command. Trailing directory separators are ignored, see -[`path.sep`][]. +the Unix `basename` command. Trailing [directory separators][`path.sep`] are +ignored. ```js path.basename('/foo/bar/baz/asdf/quux.html'); @@ -101,7 +101,7 @@ path.win32.basename('C:\\foo.HTML', '.html'); // Returns: 'foo.HTML' ``` -A [`TypeError`][] is thrown if `path` is not a string or if `ext` is given +A [`TypeError`][] is thrown if `path` is not a string or if `suffix` is given and is not a string. ## `path.delimiter` diff --git a/lib/path.js b/lib/path.js index fd95361dd02842..e662e50d6c6b4b 100644 --- a/lib/path.js +++ b/lib/path.js @@ -743,12 +743,12 @@ const win32 = { /** * @param {string} path - * @param {string} [ext] + * @param {string} [suffix] * @returns {string} */ - basename(path, ext) { - if (ext !== undefined) - validateString(ext, 'ext'); + basename(path, suffix) { + if (suffix !== undefined) + validateString(suffix, 'ext'); validateString(path, 'path'); let start = 0; let end = -1; @@ -763,10 +763,10 @@ const win32 = { start = 2; } - if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { - if (ext === path) + if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) { + if (suffix === path) return ''; - let extIdx = ext.length - 1; + let extIdx = suffix.length - 1; let firstNonSlashEnd = -1; for (let i = path.length - 1; i >= start; --i) { const code = StringPrototypeCharCodeAt(path, i); @@ -786,7 +786,7 @@ const win32 = { } if (extIdx >= 0) { // Try to match the explicit extension - if (code === StringPrototypeCharCodeAt(ext, extIdx)) { + if (code === StringPrototypeCharCodeAt(suffix, extIdx)) { if (--extIdx === -1) { // We matched the extension, so mark this as the end of our path // component @@ -1300,22 +1300,22 @@ const posix = { /** * @param {string} path - * @param {string} [ext] + * @param {string} [suffix] * @returns {string} */ - basename(path, ext) { - if (ext !== undefined) - validateString(ext, 'ext'); + basename(path, suffix) { + if (suffix !== undefined) + validateString(suffix, 'ext'); validateString(path, 'path'); let start = 0; let end = -1; let matchedSlash = true; - if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { - if (ext === path) + if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) { + if (suffix === path) return ''; - let extIdx = ext.length - 1; + let extIdx = suffix.length - 1; let firstNonSlashEnd = -1; for (let i = path.length - 1; i >= 0; --i) { const code = StringPrototypeCharCodeAt(path, i); @@ -1335,7 +1335,7 @@ const posix = { } if (extIdx >= 0) { // Try to match the explicit extension - if (code === StringPrototypeCharCodeAt(ext, extIdx)) { + if (code === StringPrototypeCharCodeAt(suffix, extIdx)) { if (--extIdx === -1) { // We matched the extension, so mark this as the end of our path // component