diff options
| author | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
|---|---|---|
| committer | Shipwreckt <me@shipwreckt.co.uk> | 2025-10-31 20:02:14 +0000 |
| commit | 7a52ddeba2a68388b544f529d2d92104420f77b0 (patch) | |
| tree | 15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/@sindresorhus/slugify/readme.md | |
| parent | 53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff) | |
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@sindresorhus/slugify/readme.md')
| -rw-r--r-- | node_modules/@sindresorhus/slugify/readme.md | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/node_modules/@sindresorhus/slugify/readme.md b/node_modules/@sindresorhus/slugify/readme.md new file mode 100644 index 0000000..95b7b3d --- /dev/null +++ b/node_modules/@sindresorhus/slugify/readme.md @@ -0,0 +1,273 @@ +# slugify + +> Slugify a string + +Useful for URLs, filenames, and IDs. + +It handles most major languages, including [German (umlauts)](https://en.wikipedia.org/wiki/Germanic_umlaut), Vietnamese, Arabic, Russian, [and more](https://github.com/sindresorhus/transliterate#supported-languages). + +## Install + +``` +$ npm install @sindresorhus/slugify +``` + +## Usage + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('I ♥ Dogs'); +//=> 'i-love-dogs' + +slugify(' Déjà Vu! '); +//=> 'deja-vu' + +slugify('fooBar 123 $#%'); +//=> 'foo-bar-123' + +slugify('я люблю единорогов'); +//=> 'ya-lyublyu-edinorogov' +``` + +## API + +### slugify(string, options?) + +#### string + +Type: `string` + +String to slugify. + +#### options + +Type: `object` + +##### separator + +Type: `string`\ +Default: `'-'` + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('BAR and baz'); +//=> 'bar-and-baz' + +slugify('BAR and baz', {separator: '_'}); +//=> 'bar_and_baz' + +slugify('BAR and baz', {separator: ''}); +//=> 'barandbaz' +``` + +##### lowercase + +Type: `boolean`\ +Default: `true` + +Make the slug lowercase. + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('Déjà Vu!'); +//=> 'deja-vu' + +slugify('Déjà Vu!', {lowercase: false}); +//=> 'Deja-Vu' +``` + +##### decamelize + +Type: `boolean`\ +Default: `true` + +Convert camelcase to separate words. Internally it does `fooBar` → `foo bar`. + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('fooBar'); +//=> 'foo-bar' + +slugify('fooBar', {decamelize: false}); +//=> 'foobar' +``` + +##### customReplacements + +Type: `Array<string[]>`\ +Default: `[ + ['&', ' and '], + ['🦄', ' unicorn '], + ['♥', ' love '] +]` + +Add your own custom replacements. + +The replacements are run on the original string before any other transformations. + +This only overrides a default replacement if you set an item with the same key, like `&`. + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('Foo@unicorn', { + customReplacements: [ + ['@', 'at'] + ] +}); +//=> 'fooatunicorn' +``` + +Add a leading and trailing space to the replacement to have it separated by dashes: + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('foo@unicorn', { + customReplacements: [ + ['@', ' at '] + ] +}); +//=> 'foo-at-unicorn' +``` + +Another example: + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('I love 🐶', { + customReplacements: [ + ['🐶', 'dogs'] + ] +}); +//=> 'i-love-dogs' +``` + +##### preserveLeadingUnderscore + +Type: `boolean`\ +Default: `false` + +If your string starts with an underscore, it will be preserved in the slugified string. + +Sometimes leading underscores are intentional, for example, filenames representing hidden paths on a website. + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('_foo_bar'); +//=> 'foo-bar' + +slugify('_foo_bar', {preserveLeadingUnderscore: true}); +//=> '_foo-bar' +``` + +##### preserveTrailingDash + +Type: `boolean`\ +Default: `false` + +If your string ends with a dash, it will be preserved in the slugified string. + +For example, using slugify on an input field would allow for validation while not preventing the user from writing a slug. + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('foo-bar-'); +//=> 'foo-bar' + +slugify('foo-bar-', {preserveTrailingDash: true}); +//=> 'foo-bar-' +``` + +##### preserveCharacters + +Type: `string[]`\ +Default: `[]` + +Preserve certain characters. + +It cannot contain the `separator`. + +For example, if you want to slugify URLs, but preserve the HTML fragment `#` character. + +```js +import slugify from '@sindresorhus/slugify'; + +slugify('foo_bar#baz', {preserveCharacters: ['#']}); +//=> 'foo-bar#baz' +``` + +### slugifyWithCounter() + +Returns a new instance of `slugify(string, options?)` with a counter to handle multiple occurrences of the same string. + +#### Example + +```js +import {slugifyWithCounter} from '@sindresorhus/slugify'; + +const slugify = slugifyWithCounter(); + +slugify('foo bar'); +//=> 'foo-bar' + +slugify('foo bar'); +//=> 'foo-bar-2' + +slugify.reset(); + +slugify('foo bar'); +//=> 'foo-bar' +``` + +#### Use-case example of counter + +If, for example, you have a document with multiple sections where each subsection has an example. + +```md +## Section 1 + +### Example + +## Section 2 + +### Example +``` + +You can then use `slugifyWithCounter()` to generate unique HTML `id`'s to ensure anchors will link to the right headline. + +### slugify.reset() + +Reset the counter + +#### Example + +```js +import {slugifyWithCounter} from '@sindresorhus/slugify'; + +const slugify = slugifyWithCounter(); + +slugify('foo bar'); +//=> 'foo-bar' + +slugify('foo bar'); +//=> 'foo-bar-2' + +slugify.reset(); + +slugify('foo bar'); +//=> 'foo-bar' +``` + +## Related + +- [slugify-cli](https://github.com/sindresorhus/slugify-cli) - CLI for this module +- [transliterate](https://github.com/sindresorhus/transliterate) - Convert Unicode characters to Latin characters using transliteration +- [filenamify](https://github.com/sindresorhus/filenamify) - Convert a string to a valid safe filename |
