{"id":22392218,"url":"https://github.com/idimetrix/text-case","last_synced_at":"2026-01-16T17:48:42.046Z","repository":{"id":38554272,"uuid":"231425642","full_name":"idimetrix/text-case","owner":"idimetrix","description":"Convert text between `camelCase`, `PascalCase`, `Capital Case`, `Header-Case`, `Title Case`, `path/case`, `snake_case`, `param-case`, `dot.case`, `CONSTANT_CASE`, `lower case`, `lOWER CASE FIRST`, `UPPER CASE`, `Upper case first` and other","archived":false,"fork":false,"pushed_at":"2023-01-06T02:24:16.000Z","size":6796,"stargazers_count":6,"open_issues_count":193,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-29T07:42:16.815Z","etag":null,"topics":["camel-case","capital-case","case","change","change-case","constant-case","convert","dot-case","header-case","javascript","lowercase","no-case","param-case","pascal-case","path-case","sentence-case","snake-case","transformer","uppercase"],"latest_commit_sha":null,"homepage":"https://idimetrix.github.io/text-case","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idimetrix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-02T17:09:13.000Z","updated_at":"2024-10-22T08:23:17.000Z","dependencies_parsed_at":"2023-02-05T03:01:35.999Z","dependency_job_id":null,"html_url":"https://github.com/idimetrix/text-case","commit_stats":null,"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idimetrix%2Ftext-case","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idimetrix%2Ftext-case/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idimetrix%2Ftext-case/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idimetrix%2Ftext-case/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idimetrix","download_url":"https://codeload.github.com/idimetrix/text-case/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228230821,"owners_count":17888708,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["camel-case","capital-case","case","change","change-case","constant-case","convert","dot-case","header-case","javascript","lowercase","no-case","param-case","pascal-case","path-case","sentence-case","snake-case","transformer","uppercase"],"created_at":"2024-12-05T04:15:48.563Z","updated_at":"2026-01-16T17:48:42.028Z","avatar_url":"https://github.com/idimetrix.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Text Case\n\n[![NPM version][npm-image]][npm-url]\n[![NPM downloads][downloads-image]][downloads-url]\n[![Bundle size][bundlephobia-image]][bundlephobia-url]\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/idimetrix/text-case/ci.yml?branch=main)](https://github.com/idimetrix/text-case/actions)\n[![codecov](https://codecov.io/gh/idimetrix/text-case/branch/main/graph/badge.svg)](https://codecov.io/gh/idimetrix/text-case)\n\n\u003e **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.\n\n## 🚀 Features\n\n- **21 case transformation functions** covering all common text formatting needs\n- **Type-safe** with comprehensive TypeScript definitions\n- **Zero dependencies** - lightweight and fast\n- **Tree-shakeable** - import only what you need\n- **Universal** - works in browsers, Node.js, and serverless environments\n- **Comprehensive testing** - 100% test coverage with extensive edge cases\n- **Professional documentation** - detailed examples and API references\n- **Modern tooling** - ES modules, CommonJS, and UMD support\n- **Monorepo architecture** - individual packages for optimal bundle size\n\n## 📦 Installation\n\n### All packages (recommended)\n\n```bash\n# npm\nnpm install text-case\n\n# yarn\nyarn add text-case\n\n# pnpm\npnpm add text-case\n\n# bun\nbun add text-case\n```\n\n### Individual packages\n\n```bash\n# Install only what you need\nnpm install text-camel-case text-kebab-case text-snake-case\n```\n\n## 🎯 Quick Start\n\n```javascript\nimport {\n  camelCase, // userProfileData\n  pascalCase, // UserProfileData\n  kebabCase, // user-profile-data\n  snakeCase, // user_profile_data\n  titleCase, // User Profile Data\n  sentenceCase, // User profile data\n  constantCase, // USER_PROFILE_DATA\n  dotCase, // user.profile.data\n  pathCase, // user/profile/data\n  headerCase, // User-Profile-Data\n  capitalCase, // User Profile Data\n  noCase, // user profile data\n  upperCase, // USER PROFILE DATA\n  lowerCase, // user profile data\n  upperCaseFirst, // User profile data\n  lowerCaseFirst, // user Profile Data\n  swapCase, // uSER pROFILE dATA\n  isUpperCase, // Boolean check\n  isLowerCase, // Boolean check\n} from \"text-case\";\n\n// Transform any text format\nconst input = \"user_profile_data\";\n\nconsole.log(camelCase(input)); // \"userProfileData\"\nconsole.log(pascalCase(input)); // \"UserProfileData\"\nconsole.log(kebabCase(input)); // \"user-profile-data\"\nconsole.log(titleCase(input)); // \"User Profile Data\"\n```\n\n## 📚 Available Packages\n\n### Core Transformations\n\n| Package                                          | Output Example      | Use Cases                               | Size  | NPM                                                                                                             |\n| ------------------------------------------------ | ------------------- | --------------------------------------- | ----- | --------------------------------------------------------------------------------------------------------------- |\n| [`text-camel-case`](./packages/camel-case)       | `userProfileData`   | JavaScript variables, object properties | ~450B | [![npm](https://img.shields.io/npm/v/text-camel-case.svg)](https://www.npmjs.com/package/text-camel-case)       |\n| [`text-pascal-case`](./packages/pascal-case)     | `UserProfileData`   | Class names, components, types          | ~400B | [![npm](https://img.shields.io/npm/v/text-pascal-case.svg)](https://www.npmjs.com/package/text-pascal-case)     |\n| [`text-snake-case`](./packages/snake-case)       | `user_profile_data` | Database columns, Python variables      | ~300B | [![npm](https://img.shields.io/npm/v/text-snake-case.svg)](https://www.npmjs.com/package/text-snake-case)       |\n| [`text-kebab-case`](./packages/kebab-case)       | `user-profile-data` | CSS classes, URLs, HTML attributes      | ~350B | [![npm](https://img.shields.io/npm/v/text-kebab-case.svg)](https://www.npmjs.com/package/text-kebab-case)       |\n| [`text-title-case`](./packages/title-case)       | `User Profile Data` | Headers, titles, proper nouns           | ~350B | [![npm](https://img.shields.io/npm/v/text-title-case.svg)](https://www.npmjs.com/package/text-title-case)       |\n| [`text-sentence-case`](./packages/sentence-case) | `User profile data` | Sentences, descriptions                 | ~320B | [![npm](https://img.shields.io/npm/v/text-sentence-case.svg)](https://www.npmjs.com/package/text-sentence-case) |\n\n### Specialized Formats\n\n| Package                                          | Output Example      | Use Cases                        | Size  | NPM                                                                                                             |\n| ------------------------------------------------ | ------------------- | -------------------------------- | ----- | --------------------------------------------------------------------------------------------------------------- |\n| [`text-constant-case`](./packages/constant-case) | `USER_PROFILE_DATA` | Environment variables, constants | ~380B | [![npm](https://img.shields.io/npm/v/text-constant-case.svg)](https://www.npmjs.com/package/text-constant-case) |\n| [`text-dot-case`](./packages/dot-case)           | `user.profile.data` | Object paths, file names         | ~280B | [![npm](https://img.shields.io/npm/v/text-dot-case.svg)](https://www.npmjs.com/package/text-dot-case)           |\n| [`text-path-case`](./packages/path-case)         | `user/profile/data` | File paths, URLs                 | ~300B | [![npm](https://img.shields.io/npm/v/text-path-case.svg)](https://www.npmjs.com/package/text-path-case)         |\n| [`text-header-case`](./packages/header-case)     | `User-Profile-Data` | HTTP headers, train-case         | ~340B | [![npm](https://img.shields.io/npm/v/text-header-case.svg)](https://www.npmjs.com/package/text-header-case)     |\n| [`text-capital-case`](./packages/capital-case)   | `User Profile Data` | Business titles, formal text     | ~330B | [![npm](https://img.shields.io/npm/v/text-capital-case.svg)](https://www.npmjs.com/package/text-capital-case)   |\n| [`text-no-case`](./packages/no-case)             | `user profile data` | Search queries, plain text       | ~280B | [![npm](https://img.shields.io/npm/v/text-no-case.svg)](https://www.npmjs.com/package/text-no-case)             |\n| [`text-param-case`](./packages/param-case)       | `user-profile-data` | URL parameters, kebab-case alias | ~350B | [![npm](https://img.shields.io/npm/v/text-param-case.svg)](https://www.npmjs.com/package/text-param-case)       |\n\n### Character Transformations\n\n| Package                                                | Output Example      | Use Cases                    | Size  | NPM                                                                                                                   |\n| ------------------------------------------------------ | ------------------- | ---------------------------- | ----- | --------------------------------------------------------------------------------------------------------------------- |\n| [`text-upper-case`](./packages/upper-case)             | `USER PROFILE DATA` | Constants, emphasis          | ~120B | [![npm](https://img.shields.io/npm/v/text-upper-case.svg)](https://www.npmjs.com/package/text-upper-case)             |\n| [`text-lower-case`](./packages/lower-case)             | `user profile data` | Normalization, search        | ~120B | [![npm](https://img.shields.io/npm/v/text-lower-case.svg)](https://www.npmjs.com/package/text-lower-case)             |\n| [`text-upper-case-first`](./packages/upper-case-first) | `User profile data` | Sentences, proper formatting | ~130B | [![npm](https://img.shields.io/npm/v/text-upper-case-first.svg)](https://www.npmjs.com/package/text-upper-case-first) |\n| [`text-lower-case-first`](./packages/lower-case-first) | `user Profile Data` | camelCase conversion         | ~130B | [![npm](https://img.shields.io/npm/v/text-lower-case-first.svg)](https://www.npmjs.com/package/text-lower-case-first) |\n| [`text-swap-case`](./packages/swap-case)               | `uSER pROFILE dATA` | Creative text, obfuscation   | ~140B | [![npm](https://img.shields.io/npm/v/text-swap-case.svg)](https://www.npmjs.com/package/text-swap-case)               |\n\n### Validation Utilities\n\n| Package                                          | Output Example | Use Cases                      | Size  | NPM                                                                                                             |\n| ------------------------------------------------ | -------------- | ------------------------------ | ----- | --------------------------------------------------------------------------------------------------------------- |\n| [`text-is-upper-case`](./packages/is-upper-case) | `true/false`   | Input validation, conditionals | ~100B | [![npm](https://img.shields.io/npm/v/text-is-upper-case.svg)](https://www.npmjs.com/package/text-is-upper-case) |\n| [`text-is-lower-case`](./packages/is-lower-case) | `true/false`   | Input validation, conditionals | ~100B | [![npm](https://img.shields.io/npm/v/text-is-lower-case.svg)](https://www.npmjs.com/package/text-is-lower-case) |\n\n## 🛠️ Advanced Usage\n\n### Custom Options\n\nAll transformation functions accept an optional second parameter for customization:\n\n```javascript\nimport { camelCase, snakeCase } from \"text-case\";\n\n// Custom word splitting\ncamelCase(\"XMLHttpRequest\", {\n  splitRegexp: /([a-z])([A-Z])/g,\n}); // \"xmlHttpRequest\"\n\n// Custom character stripping\nsnakeCase(\"hello@world.com\", {\n  stripRegexp: /[@.]/g,\n}); // \"hello_world_com\"\n\n// Custom transformations\ncamelCase(\"api-v2-endpoint\", {\n  transform: (word, index) =\u003e {\n    if (word === \"api\") return \"API\";\n    if (word === \"v2\") return \"V2\";\n    return word;\n  },\n}); // \"APIV2Endpoint\"\n```\n\n### TypeScript Support\n\nFull TypeScript support with comprehensive type definitions:\n\n```typescript\nimport { camelCase, PascalCase, Options } from \"text-case\";\n\n// Type-safe options\nconst options: Options = {\n  splitRegexp: /([a-z])([A-Z])/g,\n  stripRegexp: /[^a-zA-Z0-9]/g,\n  transform: (word: string, index: number, words: string[]) =\u003e\n    word.toLowerCase(),\n};\n\n// Type inference\nconst result: string = camelCase(\"hello-world\", options);\n\n// Generic type support for consistent transformations\nfunction transformKeys\u003cT extends Record\u003cstring, any\u003e\u003e(\n  obj: T,\n  transformer: (key: string) =\u003e string,\n): Record\u003cstring, T[keyof T]\u003e {\n  return Object.fromEntries(\n    Object.entries(obj).map(([key, value]) =\u003e [transformer(key), value]),\n  );\n}\n\nconst data = { user_name: \"John\", email_address: \"john@example.com\" };\nconst camelData = transformKeys(data, camelCase);\n// { userName: \"John\", emailAddress: \"john@example.com\" }\n```\n\n### Real-World Examples\n\n#### API Development\n\n```javascript\nimport { camelCase, snakeCase, kebabCase } from \"text-case\";\n\n// Convert database columns to JavaScript\nconst dbUser = {\n  first_name: \"John\",\n  last_name: \"Doe\",\n  email_address: \"john@example.com\",\n};\nconst jsUser = Object.fromEntries(\n  Object.entries(dbUser).map(([key, value]) =\u003e [camelCase(key), value]),\n);\n// { firstName: \"John\", lastName: \"Doe\", emailAddress: \"john@example.com\" }\n\n// Generate API endpoints\nconst createEndpoint = (resource, action) =\u003e\n  `/api/${kebabCase(resource)}/${kebabCase(action)}`;\n\ncreateEndpoint(\"UserProfile\", \"GetById\"); // \"/api/user-profile/get-by-id\"\n```\n\n#### React Development\n\n```javascript\nimport { pascalCase, camelCase } from \"text-case\";\n\n// Component generation\nconst createComponent = (name) =\u003e `\n  import React from 'react';\n\n  interface ${pascalCase(name)}Props {\n    ${camelCase(name)}Data?: any;\n  }\n\n  export const ${pascalCase(name)}: React.FC\u003c${pascalCase(name)}Props\u003e = ({ ${camelCase(name)}Data }) =\u003e {\n    return \u003cdiv\u003e{/* ${pascalCase(name)} component */}\u003c/div\u003e;\n  };\n`;\n\nconsole.log(createComponent(\"user_profile_card\"));\n```\n\n#### CSS-in-JS\n\n```javascript\nimport { camelCase } from \"text-case\";\n\n// Convert CSS properties\nconst cssToJS = (cssText) =\u003e {\n  return cssText.replace(\n    /([a-z])-([a-z])/g,\n    (match, p1, p2) =\u003e p1 + p2.toUpperCase(),\n  );\n};\n\nconst styles = {\n  backgroundColor: \"#fff\", // from background-color\n  fontSize: \"16px\", // from font-size\n  marginTop: \"10px\", // from margin-top\n};\n```\n\n#### Configuration Management\n\n```javascript\nimport { constantCase, camelCase } from \"text-case\";\n\n// Environment variables to config object\nconst envToConfig = (envVars) =\u003e {\n  return Object.fromEntries(\n    Object.entries(envVars)\n      .filter(([key]) =\u003e key.startsWith(\"APP_\"))\n      .map(([key, value]) =\u003e [camelCase(key.replace(\"APP_\", \"\")), value]),\n  );\n};\n\nconst env = {\n  APP_DATABASE_URL: \"postgres://...\",\n  APP_API_SECRET_KEY: \"secret123\",\n  APP_MAX_FILE_SIZE: \"10MB\",\n};\n\nconst config = envToConfig(env);\n// { databaseUrl: \"postgres://...\", apiSecretKey: \"secret123\", maxFileSize: \"10MB\" }\n```\n\n## 🏗️ Framework Integration\n\n### Express.js\n\n```javascript\nimport express from \"express\";\nimport { kebabCase } from \"text-case\";\n\nconst app = express();\n\n// Auto-generate kebab-case routes\nconst createRoute = (name, handler) =\u003e {\n  app.get(`/${kebabCase(name)}`, handler);\n};\n\ncreateRoute(\"getUserProfile\", (req, res) =\u003e res.json({ profile: {} }));\n// Creates route: GET /get-user-profile\n```\n\n### Next.js\n\n```javascript\n// pages/[...slug].js\nimport { pathCase } from \"text-case\";\n\nexport async function getStaticPaths() {\n  const pages = [\"About Us\", \"Contact Form\", \"Privacy Policy\"];\n\n  return {\n    paths: pages.map((page) =\u003e ({\n      params: { slug: pathCase(page).split(\"/\") },\n    })),\n    fallback: false,\n  };\n}\n```\n\n### Vue.js\n\n```javascript\nimport { pascalCase } from \"text-case\";\n\n// Dynamic component registration\nconst components = [\"UserCard\", \"ProductList\", \"CheckoutForm\"];\n\ncomponents.forEach((name) =\u003e {\n  app.component(pascalCase(name), () =\u003e import(`./components/${name}.vue`));\n});\n```\n\n## 🧪 Testing\n\nEach package includes comprehensive test suites with:\n\n- **Basic transformations** - Standard use cases\n- **Edge cases** - Empty strings, special characters, unicode\n- **Complex inputs** - Mixed cases, numbers, symbols\n- **Performance tests** - Large string handling\n- **Error handling** - Null/undefined inputs\n- **Real-world scenarios** - Practical examples\n\n### Running Tests\n\n```bash\n# Run all tests\npnpm test\n\n# Run tests for specific package\npnpm --filter text-camel-case test\n\n# Run tests with coverage\npnpm test --coverage\n\n# Run tests in watch mode\npnpm test --watch\n```\n\n## 📊 Bundle Size Comparison\n\n| Package             | Minified  | Gzipped  | Tree-shakeable |\n| ------------------- | --------- | -------- | -------------- |\n| `text-case` (all)   | ~8KB      | ~3KB     | ✅             |\n| Individual packages | 100B-450B | 50B-250B | ✅             |\n\nImport only what you need for optimal bundle size:\n\n```javascript\n// ❌ Imports entire library (~8KB)\nimport { camelCase } from \"text-case\";\n\n// ✅ Imports only camelCase (~450B)\nimport { camelCase } from \"text-camel-case\";\n```\n\n## 🌍 Browser Support\n\n- **Modern browsers**: ES2015+ (Chrome 51+, Firefox 54+, Safari 10+)\n- **Node.js**: 12+\n- **TypeScript**: 4.0+\n- **Bundle formats**: UMD, ESM, CommonJS\n\n## 📖 API Reference\n\n### Options Interface\n\n```typescript\ninterface Options {\n  // RegExp to split input into words\n  splitRegexp?: RegExp;\n\n  // RegExp to strip unwanted characters\n  stripRegexp?: RegExp;\n\n  // Custom word transformation function\n  transform?: (word: string, index: number, words: string[]) =\u003e string;\n\n  // Custom split function (alternative to splitRegexp)\n  split?: (value: string) =\u003e string[];\n\n  // Delimiter between words (for spaced formats)\n  delimiter?: string;\n}\n```\n\n### Common Patterns\n\n```javascript\n// Split on camelCase and PascalCase boundaries\nconst camelSplit = { splitRegexp: /([a-z])([A-Z])/g };\n\n// Preserve numbers as separate words\nconst numberSplit = { splitRegexp: /([a-zA-Z])(\\d)/g };\n\n// Strip special characters\nconst stripSpecial = { stripRegexp: /[^a-zA-Z0-9]/g };\n\n// Custom acronym handling\nconst acronymTransform = {\n  transform: (word) =\u003e {\n    const acronyms = [\"API\", \"URL\", \"HTTP\", \"JSON\", \"XML\"];\n    return acronyms.includes(word.toUpperCase()) ? word.toUpperCase() : word;\n  },\n};\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details.\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/idimetrix/text-case.git\ncd text-case\n\n# Install dependencies\npnpm install\n\n# Build all packages\npnpm build\n\n# Run tests\npnpm test\n\n# Type check\npnpm typecheck\n\n# Lint code\npnpm lint\n```\n\n### Deployment Steps\n\n```bash\n# Build all packages\npnpm run build\n\n# Run all tests\npnpm test\n\n# Format and lint code\npnpm run format\npnpm run lint\n\n# Update version and publish\npnpm run release\n```\n\n### Package Structure\n\n```\npackages/\n├── camel-case/          # camelCase transformation\n├── pascal-case/         # PascalCase transformation\n├── snake-case/          # snake_case transformation\n├── kebab-case/          # kebab-case transformation\n├── title-case/          # Title Case transformation\n├── sentence-case/       # Sentence case transformation\n├── constant-case/       # CONSTANT_CASE transformation\n├── dot-case/            # dot.case transformation\n├── path-case/           # path/case transformation\n├── header-case/         # Header-Case transformation\n├── capital-case/        # Capital Case transformation\n├── no-case/             # no case transformation\n├── param-case/          # param-case transformation\n├── upper-case/          # UPPER CASE transformation\n├── lower-case/          # lower case transformation\n├── upper-case-first/    # Upper case first transformation\n├── lower-case-first/    # lower case first transformation\n├── swap-case/           # sWaP cAsE transformation\n├── is-upper-case/       # UPPER CASE validation\n└── is-lower-case/       # lower case validation\n```\n\n## 📜 License\n\n[MIT](./LICENSE) © [Dmitry Selikhov](https://github.com/idimetrix)\n\n## 🆘 Support\n\n- 📧 **Email**: [selikhov.dmitrey@gmail.com](mailto:selikhov.dmitrey@gmail.com)\n- 🐛 **Issues**: [GitHub Issues](https://github.com/idimetrix/text-case/issues)\n- 💬 **Discussions**: [GitHub Discussions](https://github.com/idimetrix/text-case/discussions)\n- 📖 **Documentation**: [Individual package READMEs](./packages/)\n\n## 🔗 Related Projects\n\n- [change-case](https://github.com/blakeembrey/change-case) - The original inspiration\n- [lodash](https://lodash.com/) - Utility library with some case functions\n- [just](https://github.com/angus-c/just) - Functional programming utilities\n\n## 🏆 Why Choose Text Case?\n\n- **🎯 Focused**: Specialized in text case transformations\n- **📦 Modular**: Use only what you need\n- **🔒 Reliable**: Extensively tested and battle-tested\n- **⚡ Fast**: Optimized for performance\n- **🛡️ Type-safe**: Full TypeScript support\n- **📚 Well-documented**: Comprehensive guides and examples\n- **🔄 Consistent**: Uniform API across all packages\n- **🌟 Modern**: Built with modern JavaScript standards\n\n---\n\n**Made with ❤️ by [Dmitry Selikhov](https://github.com/idimetrix)**\n\n[npm-image]: https://img.shields.io/npm/v/text-case.svg?style=flat\n[npm-url]: https://npmjs.org/package/text-case\n[downloads-image]: https://img.shields.io/npm/dm/text-case.svg?style=flat\n[downloads-url]: https://npmjs.org/package/text-case\n[bundlephobia-image]: https://img.shields.io/bundlephobia/minzip/text-case.svg\n[bundlephobia-url]: https://bundlephobia.com/result?p=text-case\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidimetrix%2Ftext-case","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidimetrix%2Ftext-case","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidimetrix%2Ftext-case/lists"}