Convert into upper case text with an underscore between words
npm install text-constant-case[![NPM version][npm-image]][npm-url]
[![NPM downloads][downloads-image]][downloads-url]
[![Bundle size][bundlephobia-image]][bundlephobia-url]


> Transform text to CONSTANT_CASE format - uppercase words separated by underscores.
- Lightweight - Only ~450B minified + gzipped
- Type-safe - Full TypeScript support with comprehensive type definitions
- Zero dependencies - No external dependencies
- Tree-shakeable - ES modules support
- Universal - Works in browsers, Node.js, and serverless environments
- Well-tested - Comprehensive test suite with edge cases
- Customizable - Support for custom transform functions and options
``bashnpm
npm install text-constant-case
๐ฏ Quick Start
`javascript
import { constantCase } from "text-constant-case";console.log(constantCase("hello world")); // "HELLO_WORLD"
console.log(constantCase("camelCase")); // "CAMEL_CASE"
console.log(constantCase("kebab-case")); // "KEBAB_CASE"
`๐ Usage
$3
`javascript
import { constantCase } from "text-constant-case";console.log(constantCase("hello world")); // "HELLO_WORLD"
`$3
`javascript
const { constantCase } = require("text-constant-case");console.log(constantCase("hello world")); // "HELLO_WORLD"
`$3
`typescript
import { constantCase } from "text-constant-case";const result: string = constantCase("hello world");
console.log(result); // "HELLO_WORLD"
`๐ Transformation Examples
$3
`javascript
import { constantCase } from "text-constant-case";// Simple cases
constantCase("hello world"); // "HELLO_WORLD"
constantCase("Hello World"); // "HELLO_WORLD"
constantCase("HELLO WORLD"); // "HELLO_WORLD"
// From other cases
constantCase("camelCase"); // "CAMEL_CASE"
constantCase("PascalCase"); // "PASCAL_CASE"
constantCase("snake_case"); // "SNAKE_CASE"
constantCase("kebab-case"); // "KEBAB_CASE"
constantCase("dot.case"); // "DOT_CASE"
// Complex examples
constantCase("XMLHttpRequest"); // "XML_HTTP_REQUEST"
constantCase("iPhone"); // "I_PHONE"
constantCase("version 1.2.3"); // "VERSION_1_2_3"
`$3
`javascript
import { constantCase } from "text-constant-case";// Custom transform function
constantCase("hello world", {
transform: (word, index, words) => {
// Custom transformation logic
return word.toUpperCase();
},
}); // "HELLO_WORLD"
// Custom split regex
constantCase("hello-world_test", {
splitRegexp: /[-_\s]+/,
}); // "HELLO_WORLD_TEST"
// Strip specific characters
constantCase("hello@world#test", {
stripRegexp: /[@#]/g,
}); // "HELLO_WORLD_TEST"
`๐ Real-World Examples
$3
`javascript
import { constantCase } from "text-constant-case";// Convert configuration keys to environment variable format
constantCase("database url"); // "DATABASE_URL"
constantCase("api secret key"); // "API_SECRET_KEY"
constantCase("max file size"); // "MAX_FILE_SIZE"
constantCase("redis host"); // "REDIS_HOST"
constantCase("jwt expiration"); // "JWT_EXPIRATION"
`$3
`javascript
import { constantCase } from "text-constant-case";// HTTP status codes
constantCase("ok"); // "OK"
constantCase("not found"); // "NOT_FOUND"
constantCase("internal server error"); // "INTERNAL_SERVER_ERROR"
constantCase("bad request"); // "BAD_REQUEST"
// User roles
constantCase("admin user"); // "ADMIN_USER"
constantCase("guest user"); // "GUEST_USER"
constantCase("super admin"); // "SUPER_ADMIN"
constantCase("read only"); // "READ_ONLY"
`$3
`javascript
import { constantCase } from "text-constant-case";function createEnvironmentConfig(config) {
const envConfig = {};
for (const [key, value] of Object.entries(config)) {
const envKey = constantCase(key);
envConfig[envKey] = value;
}
return envConfig;
}
const appConfig = {
"database host": "localhost",
"database port": 5432,
"api base url": "https://api.example.com",
"jwt secret": "secret-key",
"session timeout": 3600,
};
console.log(createEnvironmentConfig(appConfig));
// {
// "DATABASE_HOST": "localhost",
// "DATABASE_PORT": 5432,
// "API_BASE_URL": "https://api.example.com",
// "JWT_SECRET": "secret-key",
// "SESSION_TIMEOUT": 3600
// }
`$3
`javascript
import { constantCase } from "text-constant-case";class ErrorCodeGenerator {
static generate(message) {
return constantCase(message);
}
static createErrorMap(errors) {
const errorMap = {};
errors.forEach((error, index) => {
const code = this.generate(error);
errorMap[code] = {
code,
message: error,
id: index + 1,
};
});
return errorMap;
}
}
const errorMessages = [
"invalid email address",
"password too short",
"user not found",
"access denied",
"database connection failed",
];
console.log(ErrorCodeGenerator.createErrorMap(errorMessages));
// {
// "INVALID_EMAIL_ADDRESS": { code: "INVALID_EMAIL_ADDRESS", message: "invalid email address", id: 1 },
// "PASSWORD_TOO_SHORT": { code: "PASSWORD_TOO_SHORT", message: "password too short", id: 2 },
// "USER_NOT_FOUND": { code: "USER_NOT_FOUND", message: "user not found", id: 3 },
// "ACCESS_DENIED": { code: "ACCESS_DENIED", message: "access denied", id: 4 },
// "DATABASE_CONNECTION_FAILED": { code: "DATABASE_CONNECTION_FAILED", message: "database connection failed", id: 5 }
// }
`$3
`javascript
import { constantCase } from "text-constant-case";function createApiConstants(endpoints) {
const constants = {};
endpoints.forEach((endpoint) => {
const constantName = constantCase(endpoint.name);
constants[constantName] = {
url: endpoint.url,
method: endpoint.method,
name: constantName,
};
});
return constants;
}
const apiEndpoints = [
{ name: "get user profile", url: "/api/user/profile", method: "GET" },
{ name: "update user settings", url: "/api/user/settings", method: "PUT" },
{ name: "delete user account", url: "/api/user/account", method: "DELETE" },
{ name: "create new post", url: "/api/posts", method: "POST" },
];
console.log(createApiConstants(apiEndpoints));
// {
// "GET_USER_PROFILE": { url: "/api/user/profile", method: "GET", name: "GET_USER_PROFILE" },
// "UPDATE_USER_SETTINGS": { url: "/api/user/settings", method: "PUT", name: "UPDATE_USER_SETTINGS" },
// "DELETE_USER_ACCOUNT": { url: "/api/user/account", method: "DELETE", name: "DELETE_USER_ACCOUNT" },
// "CREATE_NEW_POST": { url: "/api/posts", method: "POST", name: "CREATE_NEW_POST" }
// }
`$3
`javascript
import { constantCase } from "text-constant-case";class SchemaGenerator {
static generateTableConstants(tables) {
const constants = {};
tables.forEach((table) => {
const tableName = constantCase(table.name);
constants[tableName] = table.name;
// Generate column constants
if (table.columns) {
table.columns.forEach((column) => {
const columnKey =
${tableName}_${constantCase(column)};
constants[columnKey] = column;
});
}
}); return constants;
}
}
const databaseTables = [
{
name: "user_profiles",
columns: [
"user id",
"first name",
"last name",
"email address",
"created at",
],
},
{
name: "blog_posts",
columns: ["post id", "title", "content", "author id", "published at"],
},
];
console.log(SchemaGenerator.generateTableConstants(databaseTables));
// {
// "USER_PROFILES": "user_profiles",
// "USER_PROFILES_USER_ID": "user id",
// "USER_PROFILES_FIRST_NAME": "first name",
// "USER_PROFILES_LAST_NAME": "last name",
// "USER_PROFILES_EMAIL_ADDRESS": "email address",
// "USER_PROFILES_CREATED_AT": "created at",
// "BLOG_POSTS": "blog_posts",
// "BLOG_POSTS_POST_ID": "post id",
// "BLOG_POSTS_TITLE": "title",
// "BLOG_POSTS_CONTENT": "content",
// "BLOG_POSTS_AUTHOR_ID": "author id",
// "BLOG_POSTS_PUBLISHED_AT": "published at"
// }
`$3
`javascript
import { constantCase } from "text-constant-case";function generateBuildConstants(config) {
const constants = {};
function processObject(obj, prefix = "") {
for (const [key, value] of Object.entries(obj)) {
const constantKey = prefix
?
${prefix}_${constantCase(key)}
: constantCase(key); if (
typeof value === "object" &&
value !== null &&
!Array.isArray(value)
) {
processObject(value, constantKey);
} else {
constants[constantKey] = value;
}
}
}
processObject(config);
return constants;
}
const buildConfig = {
"app name": "MyApp",
version: "1.0.0",
"build settings": {
"output directory": "dist",
"source maps": true,
"minify code": true,
},
"server settings": {
port: 3000,
host: "localhost",
"ssl enabled": false,
},
};
console.log(generateBuildConstants(buildConfig));
// {
// "APP_NAME": "MyApp",
// "VERSION": "1.0.0",
// "BUILD_SETTINGS_OUTPUT_DIRECTORY": "dist",
// "BUILD_SETTINGS_SOURCE_MAPS": true,
// "BUILD_SETTINGS_MINIFY_CODE": true,
// "SERVER_SETTINGS_PORT": 3000,
// "SERVER_SETTINGS_HOST": "localhost",
// "SERVER_SETTINGS_SSL_ENABLED": false
// }
`๐ API Reference
$3
Transforms text to CONSTANT_CASE format.
#### Parameters
-
input (string): The string to transform
- options (object, optional): Configuration options
- transform (function): Custom transform function for each word
- splitRegexp (RegExp): Custom regex for splitting words
- stripRegexp (RegExp): Custom regex for stripping characters#### Returns
-
string: The CONSTANT_CASE formatted string#### Options Interface
`typescript
interface Options {
transform?: (word: string, index: number, words: string[]) => string;
splitRegexp?: RegExp;
stripRegexp?: RegExp;
}
`๐ Bundle Size
This package is optimized for minimal bundle size:
- Minified: ~450B
- Gzipped: ~300B
- Tree-shakeable: Yes
- Side effects: None
๐ Browser Support
- Modern browsers: ES2015+ (Chrome 51+, Firefox 54+, Safari 10+)
- Node.js: 12+
- TypeScript: 4.0+
- Bundle formats: UMD, ESM, CommonJS
๐งช Testing
`bash
Run tests
pnpm testRun tests in watch mode
pnpm test --watchRun tests with coverage
pnpm test --coverageType checking
pnpm typecheckLinting
pnpm lint
`๐ Related Packages
text-camel-case - Convert to camelCase
- text-capital-case - Convert to Capital Case
- text-dot-case - Convert to dot.case
- text-header-case - Convert to Header-Case
- text-is-lower-case - Check if text is lower case
- text-case - All case transformations in one package๐ License
๐ค Contributing
1. Fork the repository
2. Create your feature branch (
git checkout -b feature/amazing-feature)
3. Commit your changes (git commit -m 'Add some amazing feature')
4. Push to the branch (git push origin feature/amazing-feature`)- ๐ง Email: selikhov.dmitrey@gmail.com
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
- ๐ Documentation: Full Documentation
---
Made with โค๏ธ by Dmitry Selikhov
[npm-image]: https://img.shields.io/npm/v/text-constant-case.svg?style=flat
[npm-url]: https://npmjs.org/package/text-constant-case
[downloads-image]: https://img.shields.io/npm/dm/text-constant-case.svg?style=flat
[downloads-url]: https://npmjs.org/package/text-constant-case
[bundlephobia-image]: https://img.shields.io/bundlephobia/minzip/text-constant-case.svg
[bundlephobia-url]: https://bundlephobia.com/result?p=text-constant-case