
Product
Announcing Socket Fix 2.0
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
change-case-ts
Advanced tools
This library contains functions and types to convert strings, tuple members and property names from one case to another.
While there are plenty of other packages that does the same at runtime, this library is built for full type support.
Useful for converting known models for interacting with external APIs.
The main export of interest is changeCase
. It's parameters are the value which to change, the optional source case, and the target case. If no source case is provided, the library will try and detect it. changeCase
works for strings, tuple/array-values, and object keys, in that order. Use changeArrayCase
, changeStringCase
, or changeKeysCase
to specify the target, if needed.
The library also exports types correlating to the functions mentioned above (such as ChangeCase<Value, ToCase, FromCase>
etc.), as well as for detecting cases, case names as constants and as literal string types grouped into unions, etc.
Last but not least are the functional variants of the case changing functions: caseChanger
, stringCaseChanger
, arrayCaseChanger
and keysCaseChanger
. These can be useful for instance when using transform
with Zod schemas (z.object({ FOO_BAR: z.string() }).transform(caseChanger("camelCase"))
).
Setup:
npm install change-case-ts
Code:
import { changeCase } from "change-case-ts";
Setup:
deno add jsr:change-case-ts
Code:
import { changeCase } from "change-case-ts";
import { changeCase } from "change-case-ts";
const stringLiteral = changeCase("howAboutThemApples", "SCREAMING-KEBAB-CASE");
stringLiteral satisfies "HOW-ABOUT-THEM-APPLES";
import { changeCase } from "change-case-ts";
const stringLiteral = changeCase("howAboutThemApples", "SCREAMING-KEBAB-CASE");
stringLiteral satisfies "HOW-ABOUT-THEM-APPLES";
import { changeCase } from "change-case-ts";
const objectKeys = changeCase(
{
some_number: 123,
an_array: [
{
with_a_prop: true,
},
],
},
"camelCase",
);
objectKeys satisfies {
someNumber: 123;
anArray: [{
withAProp: true;
}];
};
import { changeCase } from "change-case-ts";
const objectKeys = changeCase(
{
some_number: 123,
an_array: [
{
with_a_prop: true,
},
],
},
"camelCase",
);
objectKeys satisfies {
someNumber: 123;
anArray: [{
withAProp: true;
}];
};
import { changeCase } from "change-case-ts";
const tuples = changeCase(["foo-bar", "baz", 123], "PascalCase");
tuples satisfies ["FooBar", "Baz", 123];
import { changeCase } from "change-case-ts";
const tuples = changeCase(["foo-bar", "baz", 123], "PascalCase");
tuples satisfies ["FooBar", "Baz", 123];
// We can't use `changeCase` in this example, as it will try and change any string literal values within the given array instead of the keys in the object items, so we specifically use `changeKeysCase` instead to remove the ambiguity.
import { changeKeysCase } from "change-case-ts";
type Response = Array<{ foo_bar: string }>;
const response: Response = await fetch(
"https://www.example.com",
).then((res) => res.json());
const result = changeKeysCase(response, "camelCase");
result satisfies Array<{ fooBar: string }>;
// We can't use `changeCase` in this example, as it will try and change any string literal values within the given array instead of the keys in the object items, so we specifically use `changeKeysCase` instead to remove the ambiguity.
import { changeKeysCase } from "change-case-ts";
type Response = Array<{ foo_bar: string }>;
const response: Response = await fetch(
"https://www.example.com",
).then((res) => res.json());
const result = changeKeysCase(response, "camelCase");
result satisfies Array<{ fooBar: string }>;
Setup:
npm install --save-dev @types/node
npm install dotenv zod change-case-ts
echo "MY_ENV_VAR='Hello, world!'" >> .env
Code:
import "dotenv/config";
import { caseChanger } from "change-case-ts";
import z from "zod";
const envSchema = z.object({
MY_ENV_VAR: z.string(),
});
const camelCaseEnvSchema = envSchema.transform(
caseChanger("camelCase"),
);
const env = camelCaseEnvSchema.parse(process.env);
env satisfies {
myEnvVar: string;
};
console.log(env.myEnvVar);
Setup:
deno add npm:zod jsr:@std/dotenv jsr:change-case-ts
echo "MY_ENV_VAR='Hello, world!'" >> .env
Code:
import "@std/dotenv/load";
import { caseChanger } from "change-case-ts";
import z from "zod";
const envSchema = z.object({
MY_ENV_VAR: z.string(),
});
const camelCaseEnvSchema = envSchema.transform(
caseChanger("camelCase"),
);
const env = camelCaseEnvSchema.parse(Deno.env.toObject());
env satisfies {
myEnvVar: string;
};
console.log(env.myEnvVar);
The following cases are currently supported:
lowercase
UPPERCASE
camelCase
PascalCase
snake_case
UPPER_SNAKE_CASE
(a.k.a. SCREAMING_SNAKE_CASE
and CONSTANT_CASE
)kebab-case
UPPER-KEBAB-CASE
(a.k.a. SCREAMING-KEBAB-CASE
)Missing a case? File an issue on GitHub
FAQs
Type-aware case changer for strings and properties
The npm package change-case-ts receives a total of 8 weekly downloads. As such, change-case-ts popularity was classified as not popular.
We found that change-case-ts demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.