
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
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, FromCase, ToCase>
etc.), as well as for detecting cases, case names as constants and as literal string types grouped into unions, etc.
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 { changeCase } from "change-case-ts";
import z from "zod";
const envSchema = z.object({
MY_ENV_VAR: z.string(),
});
const camelCaseEnvSchema = envSchema.transform((vars) =>
changeCase(vars, "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 { changeCase } from "change-case-ts";
import z from "zod";
const envSchema = z.object({
MY_ENV_VAR: z.string(),
});
const camelCaseEnvSchema = envSchema.transform((vars) =>
changeCase(vars, "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.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.