mirror of
https://github.com/sindresorhus/type-fest.git
synced 2026-02-01 15:59:43 +00:00
Fix handling of pascal case inputs in DelimiterCase (#302)
This commit is contained in:
parent
55ed9d1f75
commit
2b7ad9a72d
8
source/delimiter-case.d.ts
vendored
8
source/delimiter-case.d.ts
vendored
@ -24,8 +24,9 @@ Format a specific part of the splitted string literal that `StringArrayToDelimit
|
||||
|
||||
@see StringArrayToDelimiterCase
|
||||
*/
|
||||
type StringPartToDelimiterCase<StringPart extends string, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> =
|
||||
type StringPartToDelimiterCase<StringPart extends string, Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> =
|
||||
StringPart extends UsedWordSeparators ? Delimiter :
|
||||
Start extends true ? Lowercase<StringPart> :
|
||||
StringPart extends UsedUpperCaseCharacters ? `${Delimiter}${Lowercase<StringPart>}` :
|
||||
StringPart;
|
||||
|
||||
@ -36,9 +37,9 @@ It receives `UsedWordSeparators` and `UsedUpperCaseCharacters` as input to ensur
|
||||
|
||||
@see SplitIncludingDelimiters
|
||||
*/
|
||||
type StringArrayToDelimiterCase<Parts extends readonly any[], UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> =
|
||||
type StringArrayToDelimiterCase<Parts extends readonly any[], Start extends boolean, UsedWordSeparators extends string, UsedUpperCaseCharacters extends string, Delimiter extends string> =
|
||||
Parts extends [`${infer FirstPart}`, ...infer RemainingParts]
|
||||
? `${StringPartToDelimiterCase<FirstPart, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}${StringArrayToDelimiterCase<RemainingParts, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}`
|
||||
? `${StringPartToDelimiterCase<FirstPart, Start, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}${StringArrayToDelimiterCase<RemainingParts, false, UsedWordSeparators, UsedUpperCaseCharacters, Delimiter>}`
|
||||
: '';
|
||||
|
||||
/**
|
||||
@ -81,6 +82,7 @@ const rawCliOptions: OddlyCasedProperties<SomeOptions> = {
|
||||
export type DelimiterCase<Value, Delimiter extends string> = Value extends string
|
||||
? StringArrayToDelimiterCase<
|
||||
SplitIncludingDelimiters<Value, WordSeparators | UpperCaseCharacters>,
|
||||
true,
|
||||
WordSeparators,
|
||||
UpperCaseCharacters,
|
||||
Delimiter
|
||||
|
||||
@ -16,6 +16,9 @@ expectType<'foo#bar'>(delimiterFromCamel);
|
||||
const delimiterFromComplexCamel: DelimiterCase<'fooBarAbc123', '#'> = 'foo#bar#abc123';
|
||||
expectType<'foo#bar#abc123'>(delimiterFromComplexCamel);
|
||||
|
||||
const delimiterFromPascal: DelimiterCase<'FooBar', '#'> = 'foo#bar';
|
||||
expectType<'foo#bar'>(delimiterFromPascal);
|
||||
|
||||
const delimiterFromKebab: DelimiterCase<'foo-bar', '#'> = 'foo#bar';
|
||||
expectType<'foo#bar'>(delimiterFromKebab);
|
||||
|
||||
|
||||
@ -4,6 +4,9 @@ import {SnakeCase} from '../index';
|
||||
const snakeFromCamel: SnakeCase<'fooBar'> = 'foo_bar';
|
||||
expectType<'foo_bar'>(snakeFromCamel);
|
||||
|
||||
const snakeFromPascal: SnakeCase<'FooBar'> = 'foo_bar';
|
||||
expectType<'foo_bar'>(snakeFromPascal);
|
||||
|
||||
const snakeFromKebab: SnakeCase<'foo-bar'> = 'foo_bar';
|
||||
expectType<'foo_bar'>(snakeFromKebab);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user