# scule

> String case utils

Latest version **1.3.0** (published 2024-02-06) · MIT license · 0 weekly downloads

## Install

```sh
npm install scule
pnpm add scule
yarn add scule
bun add scule
```

## Health

**Score 45/100 (D)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 1.3.0 |
| Published | 2024-02-06 |
| First published | 2021-02-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 28.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 514 |
| Maintainers | pi0 |

## Links

- npm: https://www.npmjs.com/package/scule
- Repository: https://github.com/unjs/scule
- Homepage: https://github.com/unjs/scule#readme
- Issues: https://github.com/unjs/scule/issues
- npm.io page: https://npm.io/package/scule

## Recent versions

- 1.3.0 (latest) — 2024-02-06
- 1.2.0 — 2024-01-10
- 1.1.1 — 2023-11-30
- 1.1.0 — 2023-11-15
- 1.0.0 — 2022-11-14
- 0.3.2 — 2022-07-27
- 0.3.1 — 2022-07-27
- 0.3.0 — 2022-07-27
- 0.2.1 — 2021-04-28
- 0.2.0 — 2021-04-22
- 0.1.1 — 2021-02-16
- 0.1.0 — 2021-02-16
- 0.0.1 — 2021-02-16

## README

# 🧵 Scule

[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![bundle][bundle-src]][bundle-href]
[![Codecov][codecov-src]][codecov-href]

<!-- ![](.github/banner.svg) -->

## Install

Install using npm or yarn:

```bash
npm i scule
```

Import:

```js
// CommonJS
const { pascalCase } = require("scule");

// ESM
import { pascalCase } from "scule";
```

**Notice:** You may need to transpile package for legacy environments.

## Utils

### `pascalCase(str, opts?: { normalize })`

Splits string and joins by PascalCase convention:

```ts
pascalCase("foo-bar_baz");
// FooBarBaz
```

**Notice:** If an uppercase letter is followed by other uppercase letters (like `FooBAR`), they are preserved. You can use `{ normalize: true }` for strictly following pascalCase convention.

### `camelCase(str, opts?: { normalize })`

Splits string and joins by camelCase convention:

```ts
camelCase("foo-bar_baz");
// fooBarBaz
```

### `kebabCase(str)`

Splits string and joins by kebab-case convention:

```ts
kebabCase("fooBar_Baz");
// foo-bar-baz
```

**Notice:** It does **not** preserve case.

### `snakeCase`

Splits string and joins by snake_case convention:

```ts
snakeCase("foo-barBaz");
// foo_bar_baz
```

### `flatCase`

Splits string and joins by flatcase convention:

```ts
flatCase("foo-barBaz");
// foobarbaz
```

### `trainCase(str, opts?: { normalize })`

Split string and joins by Train-Case (a.k.a. HTTP-Header-Case) convention:

```ts
trainCase("FooBARb");
// Foo-Ba-Rb
```

**Notice:** If an uppercase letter is followed by other uppercase letters (like `WWWAuthenticate`), they are preserved (=> `WWW-Authenticate`). You can use `{ normalize: true }` for strictly only having the first letter uppercased.

### `titleCase(str, opts?: { normalize })`

With Title Case all words are capitalized, except for minor words.
A compact regex of common minor words (such as `a`, `for`, `to`) is used to automatically keep them lower case.

```ts
titleCase("this-IS-aTitle");
// This is a Title
```

### `upperFirst(str)`

Converts first character to upper case:

```ts
upperFirst("hello world!");
// Hello world!
```

### `lowerFirst(str)`

Converts first character to lower case:

```ts
lowerFirst("Hello world!");
// hello world!
```

### `splitByCase(str, splitters?)`

- Splits string by the splitters provided (default: `['-', '_', '/', '.']`)
- Splits when case changes from lower to upper or upper to lower
- Ignores numbers for case changes
- Case is preserved in returned value
- Is an irreversible function since splitters are omitted

## Development

- Clone this repository
- Install latest LTS version of [Node.js](https://nodejs.org/en/)
- Enable [Corepack](https://github.com/nodejs/corepack) using corepack enable
- Install dependencies using pnpm install
- Run interactive tests using pnpm dev

## License

[MIT](./LICENSE)

<!-- Badges -->

[npm-version-src]: https://img.shields.io/npm/v/scule?style=flat&colorA=18181B&colorB=F0DB4F
[npm-version-href]: https://npmjs.com/package/scule
[npm-downloads-src]: https://img.shields.io/npm/dm/scule?style=flat&colorA=18181B&colorB=F0DB4F
[npm-downloads-href]: https://npmjs.com/package/scule
[codecov-src]: https://img.shields.io/codecov/c/gh/unjs/scule/main?style=flat&colorA=18181B&colorB=F0DB4F
[codecov-href]: https://codecov.io/gh/unjs/scule
[bundle-src]: https://img.shields.io/bundlephobia/minzip/scule?style=flat&colorA=18181B&colorB=F0DB4F
[bundle-href]: https://bundlephobia.com/result?p=scule

---
_Source: https://npm.io/package/scule · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
