Skip to content

Files

Latest commit

a2d949d · Nov 30, 2023

History

History

remark-remove-url-trailing-slash

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Nov 30, 2023
Nov 28, 2023
Nov 28, 2023
Nov 30, 2023
Oct 27, 2022
Nov 29, 2023
Nov 30, 2023
Oct 27, 2022
Oct 27, 2022
Jan 29, 2023

Black Lives Matter! Last commit timestamp Codecov Source license Monthly Downloads NPM version Uses Semantic Release!

remark-remove-url-trailing-slash

This is a unified (remark) plugin that removes trailing slashes from the ends of all URL paths (not query strings or hashes).

Since this is not always a purely cosmetic change, you might also be interested in remark-ignore, which lets you instruct remark not to transform parts of your Markdown documents (such as a link).

See also the onlyConsiderHostUrls option.


Install

Due to the nature of the unified ecosystem, this package is ESM only and cannot be require'd.

npm install --save-dev remark-remove-url-trailing-slash

Usage

Via API

import { read } from 'to-vfile';
import { remark } from 'remark';
import remarkRemoveUrlTrailingSlash from 'remark-remove-url-trailing-slash';

const file = await remark()
  .use(remarkRemoveUrlTrailingSlash)
  .process(await read('example.md'));

console.log(String(file));
remark -o --use remove-url-trailing-slash README.md

In package.json:

  /* … */
  "remarkConfig": {
    "plugins": [
      "remark-remove-url-trailing-slash"
      /* … */
    ]
  },
  /* … */

In .remarkrc.js:

module.exports = {
  plugins: [
    // …
    'remove-url-trailing-slash'
  ]
};

In .remarkrc.mjs:

import remarkRemoveUrlTrailingSlash from 'remark-remove-url-trailing-slash';

export default {
  plugins: [
    // …
    remarkRemoveUrlTrailingSlash
  ]
};

API

Detailed interface information can be found under docs/.

Options

This plugin recognizes the following options:

onlyConsiderHostUrls

Valid values: boolean
Default: false

Trailing slashes will be removed from all URL paths by default, including single-character / paths (i.e. "empty" paths).

If this option is true, trailing slashes will only be removed from non-relative URLs with empty paths, e.g. https://example.com/#readme => https://example.com#readme.

Examples

Suppose we have the following Markdown file example.md:

[link 1](https://example.com)  
[link 2](https://example.com/)  
[link 3](https://example.com/some/path/)  
[link 4](https://example.com/#readme)  
[link 5](https://example.com/some/path/#readme)  
[link 6](https://example.com/some/path/#readme/)  
[link 7][1]

[1]: https://www.youtube.com/watch/?v=dFs4yX4V7NQ/

Using the Default Configuration

Running the following JavaScript:

import { read } from 'to-vfile';
import { remark } from 'remark';
import remarkRemoveUrlTrailingSlash from 'remark-remove-url-trailing-slash';

const file = await remark()
  .use(remarkRemoveUrlTrailingSlash)
  .process(await read('example.md'));

console.log(String(file));

Would output the following:

[link 1](https://example.com)  
[link 2](https://example.com)  
[link 3](https://example.com/some/path)  
[link 4](https://example.com#readme)  
[link 5](https://example.com/some/path#readme)  
[link 6](https://example.com/some/path#readme/)  
[link 7][1]

[1]: https://www.youtube.com/watch?v=dFs4yX4V7NQ/

Using onlyConsiderHostUrls

Running the following JavaScript:

import { read } from 'to-vfile';
import { remark } from 'remark';
import remarkRemoveUrlTrailingSlash from 'remark-remove-url-trailing-slash';

const file = await remark()
  .use(remarkRemoveUrlTrailingSlash, {
    // Do not change URLs with paths
    excludeHeadingLevel: { onlyConsiderHostUrls: true }
  })
  .process(await read('example.md'));

console.log(String(file));

Would output the following:

[link 1](https://example.com)  
[link 2](https://example.com)  
[link 3](https://example.com/some/path/)  
[link 4](https://example.com#readme)  
[link 5](https://example.com/some/path/#readme)  
[link 6](https://example.com/some/path/#readme/)  
[link 7][1]

[1]: https://www.youtube.com/watch/?v=dFs4yX4V7NQ/

Related

Contributing and Support

New issues and pull requests are always welcome and greatly appreciated! 🤩 Just as well, you can star 🌟 this project to let me know you found it useful! ✊🏿 Thank you!

See CONTRIBUTING.md and SUPPORT.md for more information.

Contributors

See the table of contributors.