Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

deep-case-crafter

gyrgy22MIT0.0.5TypeScript support: included

Transforms deeply nested object, array, Map, and Set keys between common case formats while preserving TypeScript type safety

camelcase, pascalcase, snakecase, kebabcase, case-conversion, deep-conversion, object-transform, key-transform, typescript, typescript-utils, deep-map, map-keys, case-utils, case-changer, json-utils, case-format, deep-case, convert-case, string-utils, key-mapper, key-converter

readme

DeepCaseCrafter

🚀 DeepCaseCrafter is a TypeScript utility that transforms deeply nested object keys into different case formats while maintaining type safety. It supports objects, arrays, Maps, and Sets and allows custom recursion depth.

npm version License: MIT TypeScript

Features

  • 🔄 Automatically converts keys to camelCase, PascalCase, snake_case, and kebab-case.
  • 🌍 Works with deeply nested structures, including objects, arrays, Maps, and Sets.
  • Maintains TypeScript type inference for better auto-completion.
  • 🔍 Preserves special keys (__, --, leading numbers, special characters).
  • Performance-optimized with minimal overhead.
  • 🎛 Configurable recursion depth (default: 3).

📦 Installation

npm install deep-case-crafter

🚀 Quick Start

1️⃣ Basic Usage – Just Call transform

import transform from 'deep-case-crafter';

const input = { user_id: 1, first_name: 'John' };
const result = transform(input);

console.log(result);
// Output: { userId: 1, firstName: 'John' }

(Automatically converts from `snakecasetocamelCase`)_


2️⃣ Specify the targetCase

const input = { user_id: 1, first_name: 'John' };

const pascalCaseResult = transform(input, { targetCase: 'pascal' });
console.log(pascalCaseResult);
// Output: { UserId: 1, FirstName: 'John' }

const kebabCaseResult = transform(input, { targetCase: 'kebab' });
console.log(kebabCaseResult);
// Output: { "user-id": 1, "first-name": "John" }

3️⃣ Explicitly Define sourceCase for TypeScript Benefits

TypeScript automatically infers key changes when sourceCase is set.

const input = { user_id: 1, first_name: 'John' };
const result = transform(input, { targetCase: 'camel', sourceCase: 'snake' });

console.log(result);
// Output: { userId: 1, firstName: 'John' }

4️⃣ Transform Deeply Nested Structures

const nestedInput = {
  user_info: { first_name: 'John', last_name: 'Doe' },
  posts: [{ post_id: 1, post_title: 'Hello' }],
};

const transformed = transform(nestedInput, {
  targetCase: 'camel',
  sourceCase: 'snake',
});

console.log(transformed);
// Output:
// {
//   userInfo: { firstName: 'John', lastName: 'Doe' },
//   posts: [{ postId: 1, postTitle: 'Hello' }]
// }

5️⃣ Transforming a Map

const mapInput = new Map([
  ['user_id', 1],
  ['first_name', 'John'],
]);

const result = transform(mapInput, {
  targetCase: 'camel',
  sourceCase: 'snake',
});

console.log(result.get('userId')); // 1
console.log(result.get('firstName')); // 'John'

6️⃣ Transforming a Set

const setInput = new Set(['user_id', 'first_name']);
const result = transform(setInput, {
  targetCase: 'camel',
  sourceCase: 'snake',
});

console.log(result); // Set { 'userId', 'firstName' }

📖 API

transform(data, options)

  • data: The data structure to transform (object, array, Map, or Set).
  • options:
    • targetCase (optional): 'camel' | 'snake' | 'pascal' | 'kebab' (default: 'camel')
    • sourceCase (optional): Required for TypeScript inference ('snake' | 'camel' | 'pascal' | 'kebab').
    • depth (optional): Recursion depth (default: 3, use Infinity for full recursion).

🚨 Key Preservation Rules

  • Keys that start with special characters or numbers are not transformed.
  • Keys with __ or -- remain unchanged.
  • Numbers at the end of keys are preserved.

⚡ Performance & Benchmarks

DeepCaseCrafter is optimized for speed and efficiency:

Transform Deep Object (Depth 5, Width 10)
x 361,538 ops/sec ±0.12% (91 runs sampled)

💡 Contributing

  1. Fork the repository.
  2. Create a new branch (feature/my-feature).
  3. Commit your changes (git commit -m "Add new feature").
  4. Submit a pull request 🚀.

📜 License

MIT