summaryrefslogtreecommitdiff
path: root/node_modules/@sindresorhus/slugify/readme.md
diff options
context:
space:
mode:
authorShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
committerShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
commit7a52ddeba2a68388b544f529d2d92104420f77b0 (patch)
tree15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/@sindresorhus/slugify/readme.md
parent53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff)
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@sindresorhus/slugify/readme.md')
-rw-r--r--node_modules/@sindresorhus/slugify/readme.md273
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