Text Case
The ultimate text case transformation library for JavaScript and TypeScript. Convert text between
camelCase
,PascalCase
,snake_case
,kebab-case
,CONSTANT_CASE
,Title Case
,Sentence case
,dot.case
,path/case
,Header-Case
, and many more formats with comprehensive TypeScript support.
๐ Features
- 21 case transformation functions covering all common text formatting needs
- Type-safe with comprehensive TypeScript definitions
- Zero dependencies - lightweight and fast
- Tree-shakeable - import only what you need
- Universal - works in browsers, Node.js, and serverless environments
- Comprehensive testing - 100% test coverage with extensive edge cases
- Professional documentation - detailed examples and API references
- Modern tooling - ES modules, CommonJS, and UMD support
๐ฆ Installation
# npm
npm install text-case
# yarn
yarn add text-case
# pnpm
pnpm add text-case
# bun
bun add text-case
๐ฏ Quick Start
import {
camelCase, // userProfileData
pascalCase, // UserProfileData
kebabCase, // user-profile-data
snakeCase, // user_profile_data
titleCase, // User Profile Data
sentenceCase, // User profile data
constantCase, // USER_PROFILE_DATA
dotCase, // user.profile.data
pathCase, // user/profile/data
headerCase, // User-Profile-Data
capitalCase, // User Profile Data
noCase, // user profile data
paramCase, // user-profile-data (alias for kebab-case)
upperCase, // USER PROFILE DATA
lowerCase, // user profile data
upperCaseFirst, // User profile data
lowerCaseFirst, // user Profile Data
swapCase, // uSER pROFILE dATA
isUpperCase, // Boolean check
isLowerCase, // Boolean check
} from "text-case";
// Transform any text format
const input = "user_profile_data";
console.log(camelCase(input)); // "userProfileData"
console.log(pascalCase(input)); // "UserProfileData"
console.log(kebabCase(input)); // "user-profile-data"
console.log(titleCase(input)); // "User Profile Data"
๐ Available Functions
Core Transformations
Function | Output Example | Description |
---|---|---|
camelCase() |
userProfileData |
First word lowercase, subsequent words capitalized |
pascalCase() |
UserProfileData |
All words capitalized, no separators |
snakeCase() |
user_profile_data |
Lowercase words separated by underscores |
kebabCase() |
user-profile-data |
Lowercase words separated by hyphens |
titleCase() |
User Profile Data |
All words capitalized, separated by spaces |
sentenceCase() |
User profile data |
First word capitalized, rest lowercase |
Specialized Formats
Function | Output Example | Description |
---|---|---|
constantCase() |
USER_PROFILE_DATA |
Uppercase words separated by underscores |
dotCase() |
user.profile.data |
Lowercase words separated by dots |
pathCase() |
user/profile/data |
Lowercase words separated by forward slashes |
headerCase() |
User-Profile-Data |
Capitalized words separated by hyphens |
capitalCase() |
User Profile Data |
All words capitalized, separated by spaces |
noCase() |
user profile data |
Lowercase words separated by spaces |
paramCase() |
user-profile-data |
Alias for kebab-case |
Character Transformations
Function | Output Example | Description |
---|---|---|
upperCase() |
USER PROFILE DATA |
All characters uppercase |
lowerCase() |
user profile data |
All characters lowercase |
upperCaseFirst() |
User profile data |
First character uppercase |
lowerCaseFirst() |
user Profile Data |
First character lowercase |
swapCase() |
uSER pROFILE dATA |
Swap case of all characters |
Validation Utilities
Function | Output Example | Description |
---|---|---|
isUpperCase() |
true/false |
Check if string is uppercase |
isLowerCase() |
true/false |
Check if string is lowercase |
๐ ๏ธ Advanced Usage
Custom Options
All transformation functions accept an optional second parameter for customization:
import { camelCase, snakeCase } from "text-case";
// Custom word splitting
camelCase("XMLHttpRequest", {
splitRegexp: /([a-z])([A-Z])/g,
}); // "xmlHttpRequest"
// Custom character stripping
snakeCase("hello@world.com", {
stripRegexp: /[@.]/g,
}); // "hello_world_com"
// Custom transformations
camelCase("api-v2-endpoint", {
transform: (word, index) => {
if (word === "api") return "API";
if (word === "v2") return "V2";
return word;
},
}); // "APIV2Endpoint"
TypeScript Support
Full TypeScript support with comprehensive type definitions:
import { camelCase, Options } from "text-case";
// Type-safe options
const options: Options = {
splitRegexp: /([a-z])([A-Z])/g,
stripRegexp: /[^a-zA-Z0-9]/g,
transform: (word: string, index: number, words: string[]) =>
word.toLowerCase(),
};
// Type inference
const result: string = camelCase("hello-world", options);
Real-World Examples
API Development
import { camelCase, snakeCase, kebabCase } from "text-case";
// Convert database columns to JavaScript
const dbUser = {
first_name: "John",
last_name: "Doe",
email_address: "john@example.com",
};
const jsUser = Object.fromEntries(
Object.entries(dbUser).map(([key, value]) => [camelCase(key), value]),
);
// { firstName: "John", lastName: "Doe", emailAddress: "john@example.com" }
// Generate API endpoints
const createEndpoint = (resource, action) =>
`/api/${kebabCase(resource)}/${kebabCase(action)}`;
createEndpoint("UserProfile", "GetById"); // "/api/user-profile/get-by-id"
React Development
import { pascalCase, camelCase } from "text-case";
// Component generation
const createComponent = (name) => `
import React from 'react';
interface ${pascalCase(name)}Props {
${camelCase(name)}Data?: any;
}
export const ${pascalCase(name)}: React.FC<${pascalCase(name)}Props> = ({ ${camelCase(name)}Data }) => {
return <div>{/* ${pascalCase(name)} component */}</div>;
};
`;
console.log(createComponent("user_profile_card"));
Configuration Management
import { constantCase, camelCase } from "text-case";
// Environment variables to config object
const envToConfig = (envVars) => {
return Object.fromEntries(
Object.entries(envVars)
.filter(([key]) => key.startsWith("APP_"))
.map(([key, value]) => [camelCase(key.replace("APP_", "")), value]),
);
};
const env = {
APP_DATABASE_URL: "postgres://...",
APP_API_SECRET_KEY: "secret123",
APP_MAX_FILE_SIZE: "10MB",
};
const config = envToConfig(env);
// { databaseUrl: "postgres://...", apiSecretKey: "secret123", maxFileSize: "10MB" }
๐ API Reference
Options Interface
interface Options {
// RegExp to split input into words
splitRegexp?: RegExp;
// RegExp to strip unwanted characters
stripRegexp?: RegExp;
// Custom word transformation function
transform?: (word: string, index: number, words: string[]) => string;
// Custom split function (alternative to splitRegexp)
split?: (value: string) => string[];
// Delimiter between words (for spaced formats)
delimiter?: string;
}
Common Patterns
// Split on camelCase and PascalCase boundaries
const camelSplit = { splitRegexp: /([a-z])([A-Z])/g };
// Preserve numbers as separate words
const numberSplit = { splitRegexp: /([a-zA-Z])(\d)/g };
// Strip special characters
const stripSpecial = { stripRegexp: /[^a-zA-Z0-9]/g };
// Custom acronym handling
const acronymTransform = {
transform: (word) => {
const acronyms = ["API", "URL", "HTTP", "JSON", "XML"];
return acronyms.includes(word.toUpperCase()) ? word.toUpperCase() : word;
},
};
๐ Bundle Size
This package is optimized for minimal bundle size:
- Minified: ~8KB (all functions)
- Gzipped: ~3KB (all functions)
- Tree-shakeable: Yes
- Side effects: None
For even smaller bundles, consider using individual packages:
// โ Imports entire library (~8KB)
import { camelCase } from "text-case";
// โ
Imports only camelCase (~450B)
import { camelCase } from "text-camel-case";
๐ Browser Support
- Modern browsers: ES2015+ (Chrome 51+, Firefox 54+, Safari 10+)
- Node.js: 12+
- TypeScript: 4.0+
- Bundle formats: UMD, ESM, CommonJS
๐งช Testing
# Run tests
pnpm test
# Run tests in watch mode
pnpm test --watch
# Run tests with coverage
pnpm test --coverage
๐ Individual Packages
For optimal bundle size, you can install individual packages:
text-camel-case
- camelCase transformationtext-pascal-case
- PascalCase transformationtext-snake-case
- snake_case transformationtext-kebab-case
- kebab-case transformationtext-title-case
- Title Case transformationtext-sentence-case
- Sentence case transformationtext-constant-case
- CONSTANT_CASE transformationtext-dot-case
- dot.case transformationtext-path-case
- path/case transformationtext-header-case
- Header-Case transformationtext-capital-case
- Capital Case transformationtext-no-case
- no case transformationtext-param-case
- param-case transformationtext-upper-case
- UPPER CASE transformationtext-lower-case
- lower case transformationtext-upper-case-first
- Upper case first transformationtext-lower-case-first
- lower case first transformationtext-swap-case
- sWaP cAsE transformationtext-is-upper-case
- UPPER CASE validationtext-is-lower-case
- lower case validation
๐ License
๐ค Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
๐ Support
- ๐ง Email: selikhov.dmitrey@gmail.com
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
Made with โค๏ธ by Dmitry Selikhov