caseforge 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/core/toCamelCase.d.ts +3 -3
- package/dist/core/toKebabCase.d.ts +3 -3
- package/dist/core/toPascalCase.d.ts +3 -3
- package/dist/core/toSnakeCase.d.ts +3 -3
- package/dist/core/toUpperCase.d.ts +3 -3
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/caseforge)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://github.com/chikadahiroki/caseforge)
|
|
5
6
|
|
|
6
7
|
> Type-safe and lightweight case conversion library for TypeScript.
|
|
7
8
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Converts a string to camelCase format at the type level.
|
|
3
3
|
* @example "user_name" -> "userName"
|
|
4
4
|
*/
|
|
5
|
-
type CamelCase<S extends string> = S extends `${infer A}_${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B>>}` : S extends `${infer A}-${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B>>}` : Uncapitalize<S>;
|
|
5
|
+
export type CamelCase<S extends string> = S extends `${infer A}_${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B>>}` : S extends `${infer A}-${infer B}` ? `${Lowercase<A>}${Capitalize<CamelCase<B>>}` : Uncapitalize<S>;
|
|
6
6
|
/**
|
|
7
7
|
* Converts all object keys to camelCase format at the type level.
|
|
8
8
|
* @example { user_name: "John Doe" } -> { userName: "John Doe" }
|
|
9
9
|
*/
|
|
10
|
-
type CamelCaseKeys<T> = {
|
|
10
|
+
export type CamelCaseKeys<T> = {
|
|
11
11
|
[K in keyof T as CamelCase<K & string>]: T[K] extends readonly (infer U)[] ? U extends object ? readonly CamelCaseKeys<U>[] : T[K] : T[K] extends object ? CamelCaseKeys<T[K]> : T[K];
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -16,5 +16,5 @@ type CamelCaseKeys<T> = {
|
|
|
16
16
|
* @returns The camelCase string or object.
|
|
17
17
|
*/
|
|
18
18
|
export declare function toCamelCase<T extends string>(input: T): CamelCase<T>;
|
|
19
|
+
export declare function toCamelCase<T extends object>(input: readonly T[]): CamelCaseKeys<T>[];
|
|
19
20
|
export declare function toCamelCase<T extends object>(input: T): CamelCaseKeys<T>;
|
|
20
|
-
export {};
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Converts a string to kebab-case format at the type level.
|
|
3
3
|
* @example "userName" -> "user-name"
|
|
4
4
|
*/
|
|
5
|
-
type KebabCase<S extends string, First extends boolean = true> = S extends `${infer C}${infer R}` ? C extends "_" ? `-${KebabCase<R, false>}` : C extends Uppercase<C> ? First extends true ? `${Lowercase<C>}${KebabCase<R, false>}` : `-${Lowercase<C>}${KebabCase<R, false>}` : `${C}${KebabCase<R, false>}` : S;
|
|
5
|
+
export type KebabCase<S extends string, First extends boolean = true> = S extends `${infer C}${infer R}` ? C extends "_" ? `-${KebabCase<R, false>}` : C extends Uppercase<C> ? First extends true ? `${Lowercase<C>}${KebabCase<R, false>}` : `-${Lowercase<C>}${KebabCase<R, false>}` : `${C}${KebabCase<R, false>}` : S;
|
|
6
6
|
/**
|
|
7
7
|
* Converts all object keys to kebab-case format at the type level.
|
|
8
8
|
* @example { userName: "John Doe" } -> { "user-name": "John Doe" }
|
|
9
9
|
*/
|
|
10
|
-
type KebabCaseKeys<T> = {
|
|
10
|
+
export type KebabCaseKeys<T> = {
|
|
11
11
|
[K in keyof T as KebabCase<K & string>]: T[K] extends readonly (infer U)[] ? U extends object ? readonly KebabCaseKeys<U>[] : T[K] : T[K] extends object ? KebabCaseKeys<T[K]> : T[K];
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -16,5 +16,5 @@ type KebabCaseKeys<T> = {
|
|
|
16
16
|
* @returns The kebab-case string or object.
|
|
17
17
|
*/
|
|
18
18
|
export declare function toKebabCase<T extends string>(input: T): KebabCase<T>;
|
|
19
|
+
export declare function toKebabCase<T extends object>(input: readonly T[]): KebabCaseKeys<T>[];
|
|
19
20
|
export declare function toKebabCase<T extends object>(input: T): KebabCaseKeys<T>;
|
|
20
|
-
export {};
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Converts a string to PascalCase format at the type level.
|
|
3
3
|
* @example "user_name" -> "UserName"
|
|
4
4
|
*/
|
|
5
|
-
type PascalCase<S extends string> = S extends `${infer Head}_${infer Tail}` ? `${Capitalize<Lowercase<Head>>}${PascalCase<Tail>}` : S extends `${infer Head}-${infer Tail}` ? `${Capitalize<Lowercase<Head>>}${PascalCase<Tail>}` : S extends `${infer First}${infer Rest}` ? `${Capitalize<First>}${Rest}` : S;
|
|
5
|
+
export type PascalCase<S extends string> = S extends `${infer Head}_${infer Tail}` ? `${Capitalize<Lowercase<Head>>}${PascalCase<Tail>}` : S extends `${infer Head}-${infer Tail}` ? `${Capitalize<Lowercase<Head>>}${PascalCase<Tail>}` : S extends `${infer First}${infer Rest}` ? `${Capitalize<First>}${Rest}` : S;
|
|
6
6
|
/**
|
|
7
7
|
* Converts all object keys to PascalCase format at the type level.
|
|
8
8
|
* @example { user_name: "John Doe" } -> { UserName: "John Doe" }
|
|
9
9
|
*/
|
|
10
|
-
type PascalCaseKeys<T> = {
|
|
10
|
+
export type PascalCaseKeys<T> = {
|
|
11
11
|
[K in keyof T as PascalCase<K & string>]: T[K] extends readonly (infer U)[] ? U extends object ? readonly PascalCaseKeys<U>[] : T[K] : T[K] extends object ? PascalCaseKeys<T[K]> : T[K];
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -16,5 +16,5 @@ type PascalCaseKeys<T> = {
|
|
|
16
16
|
* @returns The PascalCase string or object.
|
|
17
17
|
*/
|
|
18
18
|
export declare function toPascalCase<T extends string>(input: T): PascalCase<T>;
|
|
19
|
+
export declare function toPascalCase<T extends object>(input: readonly T[]): PascalCaseKeys<T>[];
|
|
19
20
|
export declare function toPascalCase<T extends object>(input: T): PascalCaseKeys<T>;
|
|
20
|
-
export {};
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Converts a string to snake_case format at the type level.
|
|
3
3
|
* @example "userName" -> "user_name"
|
|
4
4
|
*/
|
|
5
|
-
type SnakeCase<S extends string, First extends boolean = true> = S extends `${infer C}${infer R}` ? C extends "_" | "-" ? `_${SnakeCase<R, false>}` : C extends Uppercase<C> ? First extends true ? `${Lowercase<C>}${SnakeCase<R, false>}` : `_${Lowercase<C>}${SnakeCase<R, false>}` : `${C}${SnakeCase<R, false>}` : S;
|
|
5
|
+
export type SnakeCase<S extends string, First extends boolean = true> = S extends `${infer C}${infer R}` ? C extends "_" | "-" ? `_${SnakeCase<R, false>}` : C extends Uppercase<C> ? First extends true ? `${Lowercase<C>}${SnakeCase<R, false>}` : `_${Lowercase<C>}${SnakeCase<R, false>}` : `${C}${SnakeCase<R, false>}` : S;
|
|
6
6
|
/**
|
|
7
7
|
* Converts all object keys to snake_case format at the type level.
|
|
8
8
|
* @example { userName: "John Doe" } -> { user_name: "John Doe" }
|
|
9
9
|
*/
|
|
10
|
-
type SnakeCaseKeys<T> = {
|
|
10
|
+
export type SnakeCaseKeys<T> = {
|
|
11
11
|
[K in keyof T as SnakeCase<K & string>]: T[K] extends readonly (infer U)[] ? U extends object ? readonly SnakeCaseKeys<U>[] : T[K] : T[K] extends object ? SnakeCaseKeys<T[K]> : T[K];
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -16,5 +16,5 @@ type SnakeCaseKeys<T> = {
|
|
|
16
16
|
* @returns The snake_case string or object.
|
|
17
17
|
*/
|
|
18
18
|
export declare function toSnakeCase<T extends string>(input: T): SnakeCase<T>;
|
|
19
|
+
export declare function toSnakeCase<T extends object>(input: readonly T[]): SnakeCaseKeys<T>[];
|
|
19
20
|
export declare function toSnakeCase<T extends object>(input: T): SnakeCaseKeys<T>;
|
|
20
|
-
export {};
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Converts a string to UPPER_SNAKE_CASE format at the type level.
|
|
3
3
|
* @example "userName" -> "USER_NAME"
|
|
4
4
|
*/
|
|
5
|
-
type UpperCase<S extends string, First extends boolean = true> = S extends `${infer C}${infer R}` ? C extends "_" | "-" ? `_${UpperCase<R, false>}` : C extends Uppercase<C> ? First extends true ? `${Uppercase<C>}${UpperCase<R, false>}` : `_${Uppercase<C>}${UpperCase<R, false>}` : `${Uppercase<C>}${UpperCase<R, false>}` : Uppercase<S>;
|
|
5
|
+
export type UpperCase<S extends string, First extends boolean = true> = S extends `${infer C}${infer R}` ? C extends "_" | "-" ? `_${UpperCase<R, false>}` : C extends Uppercase<C> ? First extends true ? `${Uppercase<C>}${UpperCase<R, false>}` : `_${Uppercase<C>}${UpperCase<R, false>}` : `${Uppercase<C>}${UpperCase<R, false>}` : Uppercase<S>;
|
|
6
6
|
/**
|
|
7
7
|
* Converts all object keys to UPPER_SNAKE_CASE format at the type level.
|
|
8
8
|
* @example { userName: "John Doe" } -> { USER_NAME: "John Doe" }
|
|
9
9
|
*/
|
|
10
|
-
type UpperCaseKeys<T> = {
|
|
10
|
+
export type UpperCaseKeys<T> = {
|
|
11
11
|
[K in keyof T as UpperCase<K & string>]: T[K] extends readonly (infer U)[] ? U extends object ? readonly UpperCaseKeys<U>[] : T[K] : T[K] extends object ? UpperCaseKeys<T[K]> : T[K];
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
@@ -16,5 +16,5 @@ type UpperCaseKeys<T> = {
|
|
|
16
16
|
* @returns The UPPER_SNAKE_CASE string or object.
|
|
17
17
|
*/
|
|
18
18
|
export declare function toUpperCase<T extends string>(input: T): UpperCase<T>;
|
|
19
|
+
export declare function toUpperCase<T extends object>(input: readonly T[]): UpperCaseKeys<T>[];
|
|
19
20
|
export declare function toUpperCase<T extends object>(input: T): UpperCaseKeys<T>;
|
|
20
|
-
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { toCamelCase } from "./core/toCamelCase";
|
|
2
|
-
export { toKebabCase } from "./core/toKebabCase";
|
|
3
|
-
export { toPascalCase } from "./core/toPascalCase";
|
|
4
|
-
export { toSnakeCase } from "./core/toSnakeCase";
|
|
5
|
-
export { toUpperCase } from "./core/toUpperCase";
|
|
1
|
+
export { type CamelCase, type CamelCaseKeys, toCamelCase, } from "./core/toCamelCase";
|
|
2
|
+
export { type KebabCase, type KebabCaseKeys, toKebabCase, } from "./core/toKebabCase";
|
|
3
|
+
export { type PascalCase, type PascalCaseKeys, toPascalCase, } from "./core/toPascalCase";
|
|
4
|
+
export { type SnakeCase, type SnakeCaseKeys, toSnakeCase, } from "./core/toSnakeCase";
|
|
5
|
+
export { toUpperCase, type UpperCase, type UpperCaseKeys, } from "./core/toUpperCase";
|
|
6
6
|
export { isCamelCase, isKebabCase, isPascalCase, isSnakeCase, isUpperCase, } from "./utils/caseGuards";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var q={LEADING_UPPER:/^[A-Z]/,UPPERCASE:/[A-Z]/g,LEADING_LOWER:/^[a-z]/,SEPARATOR_WITH_CHAR:/[_-]+(.)/g,EDGE_SEPARATORS:/^[_-]+|[_-]+$/g,CONSECUTIVE_SEPARATORS:/[_-]+/g,CAMEL_CASE:/^[a-z][a-zA-Z0-9]*$/,KEBAB_CASE:/^[a-z][a-z0-9-]*$/,PASCAL_CASE:/^[A-Z][a-zA-Z0-9]*$/,SNAKE_CASE:/^[a-z][a-z0-9_]*$/,UPPER_SNAKE_CASE:/^[A-Z][A-Z0-9_]*$/};function
|
|
1
|
+
var q={LEADING_UPPER:/^[A-Z]/,UPPERCASE:/[A-Z]/g,LEADING_LOWER:/^[a-z]/,SEPARATOR_WITH_CHAR:/[_-]+(.)/g,EDGE_SEPARATORS:/^[_-]+|[_-]+$/g,CONSECUTIVE_SEPARATORS:/[_-]+/g,CAMEL_CASE:/^[a-z][a-zA-Z0-9]*$/,KEBAB_CASE:/^[a-z][a-z0-9-]*$/,PASCAL_CASE:/^[A-Z][a-zA-Z0-9]*$/,SNAKE_CASE:/^[a-z][a-z0-9_]*$/,UPPER_SNAKE_CASE:/^[A-Z][A-Z0-9_]*$/};function D(x){return typeof x==="string"}function H(x){return Array.isArray(x)}function J(x){return typeof x==="object"&&x!==null&&!H(x)}function Y(x){return x instanceof Date||x instanceof RegExp||typeof x==="function"}function L(x,z){let Q={};for(let[G,V]of Object.entries(x)){let W=z(G);if(Y(V))Q[W]=V;else if(H(V))Q[W]=V.map((X)=>J(X)&&!H(X)?L(X,z):X);else if(J(V))Q[W]=L(V,z);else Q[W]=V}return Q}function Z(x){return x.replace(q.LEADING_UPPER,(z)=>z.toLowerCase()).replace(q.SEPARATOR_WITH_CHAR,(z,Q)=>Q.toUpperCase()).replace(q.EDGE_SEPARATORS,"")}function $(x){if(D(x))return Z(x);if(H(x))return x.map((z)=>$(z));if(J(x))return L(x,Z);return x}function B(x){return x.replace(q.UPPERCASE,(z)=>`-${z.toLowerCase()}`).replace(q.CONSECUTIVE_SEPARATORS,"-").replace(q.EDGE_SEPARATORS,"")}function F(x){if(D(x))return B(x);if(H(x))return x.map((z)=>F(z));if(J(x))return L(x,B);return x}function I(x){return x.replace(q.SEPARATOR_WITH_CHAR,(z,Q)=>Q.toUpperCase()).replace(q.EDGE_SEPARATORS,"").replace(q.LEADING_LOWER,(z)=>z.toUpperCase())}function M(x){if(D(x))return I(x);if(H(x))return x.map((z)=>M(z));if(J(x))return L(x,I);return x}function U(x){return x.replace(q.UPPERCASE,(z)=>`_${z.toLowerCase()}`).replace(q.CONSECUTIVE_SEPARATORS,"_").replace(q.EDGE_SEPARATORS,"")}function w(x){if(D(x))return U(x);if(H(x))return x.map((z)=>w(z));if(J(x))return L(x,U);return x}function d(x){return x.replace(q.UPPERCASE,(z)=>`_${z.toLowerCase()}`).replace(q.CONSECUTIVE_SEPARATORS,"_").replace(q.EDGE_SEPARATORS,"").toUpperCase()}function C(x){if(D(x))return d(x);if(H(x))return x.map((z)=>C(z));if(J(x))return L(x,d);return x}function K(x){if(!D(x))return!1;return q.CAMEL_CASE.test(x)&&!x.includes("_")&&!x.includes("-")}function _(x){if(!D(x))return!1;return q.SNAKE_CASE.test(x)&&!x.includes("-")&&!q.UPPERCASE.test(x)}function O(x){if(!D(x))return!1;return q.KEBAB_CASE.test(x)&&!x.includes("_")&&!q.UPPERCASE.test(x)}function k(x){if(!D(x))return!1;return q.PASCAL_CASE.test(x)&&!x.includes("_")&&!x.includes("-")}function y(x){if(!D(x))return!1;return q.UPPER_SNAKE_CASE.test(x)&&!x.includes("-")}export{C as toUpperCase,w as toSnakeCase,M as toPascalCase,F as toKebabCase,$ as toCamelCase,y as isUpperCase,_ as isSnakeCase,k as isPascalCase,O as isKebabCase,K as isCamelCase};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "caseforge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "caseforge - Effortlessly convert between snake_case, camelCase, and more in TypeScript. Zero dependencies, type-safe, and easy to use for any project.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"author": "Chikada Hiroki",
|
|
52
52
|
"license": "MIT",
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@biomejs/biome": "2.
|
|
55
|
-
"@types/bun": "^1.3.
|
|
54
|
+
"@biomejs/biome": "2.4.6",
|
|
55
|
+
"@types/bun": "^1.3.10",
|
|
56
56
|
"typescript": "^5.9.3"
|
|
57
57
|
}
|
|
58
58
|
}
|