New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@bedard/types

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bedard/types - npm Package Compare versions

Comparing version 0.6.0 to 0.7.0

dist/CamelCaseKeys.d.ts

15

CHANGELOG.md
# Changelog
## 0.7.0
- [`CamelCaseKeys`](https://github.com/scottbedard/types#camelcasekeyst)
- [`CamelCaseKeysDeep`](https://github.com/scottbedard/types#camelcasekeysdeept)
- [`KebabCaseKeys`](https://github.com/scottbedard/types#kebabcasekeyst)
- [`KebabCaseKeysDeep`](https://github.com/scottbedard/types#kebabcasekeysdeept)
- [`MapUppercase<T>`](https://github.com/scottbedard/types#mapuppercaset)
- [`PascalCaseKeys`](https://github.com/scottbedard/types#pascalcasekeyst)
- [`PascalCaseKeysDeep`](https://github.com/scottbedard/types#pascalcasekeysdeept)
- [`ScreamingSnakeCase<T>`](https://github.com/scottbedard/types#screamingsnakecaset)
- [`ScreamingSnakeCaseKeys`](https://github.com/scottbedard/types#screamingsnakecasekeyst)
- [`ScreamingSnakeCaseKeysDeep`](https://github.com/scottbedard/types#screamingsnakecasekeysdeept)
- [`SnakeCaseKeys`](https://github.com/scottbedard/types#snakecasekeyst)
- [`SnakeCaseKeysDeep`](https://github.com/scottbedard/types#snakecasekeysdeept)
## 0.6.0

@@ -4,0 +19,0 @@

34

dist/BreakWords.d.ts
import { Alphabet } from './utils'
import { Equal } from './Equal'
import { Last } from './Last'
import { Split } from './Split'

@@ -27,15 +28,28 @@

// break words by case
// break word by casing change
type BreakCase<
T extends string,
> = T extends Uppercase<T>
? [T]
: T extends Lowercase<T>
? [T]
: BreakCaseMixed<T>
// break mixed case words by casing change
type BreakCaseMixed<
T extends string,
CurrentWord extends string = '',
Words extends string[] = [],
> = Equal<CurrentWord, ''> extends true
? T extends `${infer First}${infer Rest}`
? BreakCase<Rest, First, Words>
: never
: T extends `${infer First}${infer Rest}`
? First extends Alphabet
? BreakCase<Rest, `${CurrentWord}${First}`, Words>
: BreakCase<T, '', [...Words, CurrentWord]>
: [...Words, CurrentWord]
> = T extends `${infer CurrentChar}${infer RestChars}`
? CurrentWord extends ''
? BreakCaseMixed<RestChars, CurrentChar, Words>
: SameWord<CurrentChar, Last<CurrentWord>> extends true
? BreakCaseMixed<RestChars, `${CurrentWord}${CurrentChar}`, Words>
: BreakCaseMixed<RestChars, CurrentChar, [...Words, CurrentWord]>
: [...Words, CurrentWord]
type SameWord<A, B> = A extends Lowercase<A>
? true
: B extends Uppercase<B>
? true
: false

@@ -5,6 +5,8 @@ /**

type Alphabet = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";
declare const version = "0.6.0";
declare const version = "0.7.0";
export { AllEqual } from './AllEqual';
export { BreakWords } from './BreakWords';
export { CamelCase } from './CamelCase';
export { CamelCaseKeys } from './CamelCaseKeys';
export { CamelCaseKeysDeep } from './CamelCaseKeysDeep';
export { Difference } from './Difference';

@@ -18,5 +20,8 @@ export { Equal } from './Equal';

export { KebabCase } from './KebabCase';
export { KebabCaseKeys } from './KebabCaseKeys';
export { KebabCaseKeysDeep } from './KebabCaseKeysDeep';
export { Last } from './Last';
export { MapCapitalize } from './MapCapitalize';
export { MapLowercase } from './MapLowercase';
export { MapUppercase } from './MapUppercase';
export { Not } from './Not';

@@ -26,5 +31,12 @@ export { NotEqual } from './NotEqual';

export { PascalCase } from './PascalCase';
export { PascalCaseKeys } from './PascalCaseKeys';
export { PascalCaseKeysDeep } from './PascalCaseKeysDeep';
export { Pop } from './Pop';
export { ScreamingSnakeCase } from './ScreamingSnakeCase';
export { ScreamingSnakeCaseKeys } from './ScreamingSnakeCaseKeys';
export { ScreamingSnakeCaseKeysDeep } from './ScreamingSnakeCaseKeysDeep';
export { Shift } from './Shift';
export { SnakeCase } from './SnakeCase';
export { SnakeCaseKeys } from './SnakeCaseKeys';
export { SnakeCaseKeysDeep } from './SnakeCaseKeysDeep';
export { Split } from './Split';

@@ -31,0 +43,0 @@ export { SymmetricDifference } from './SymetricDifference';

@@ -5,6 +5,8 @@ /**

type Alphabet = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z";
declare const version = "0.6.0";
declare const version = "0.7.0";
export { AllEqual } from './AllEqual';
export { BreakWords } from './BreakWords';
export { CamelCase } from './CamelCase';
export { CamelCaseKeys } from './CamelCaseKeys';
export { CamelCaseKeysDeep } from './CamelCaseKeysDeep';
export { Difference } from './Difference';

@@ -18,5 +20,8 @@ export { Equal } from './Equal';

export { KebabCase } from './KebabCase';
export { KebabCaseKeys } from './KebabCaseKeys';
export { KebabCaseKeysDeep } from './KebabCaseKeysDeep';
export { Last } from './Last';
export { MapCapitalize } from './MapCapitalize';
export { MapLowercase } from './MapLowercase';
export { MapUppercase } from './MapUppercase';
export { Not } from './Not';

@@ -26,5 +31,12 @@ export { NotEqual } from './NotEqual';

export { PascalCase } from './PascalCase';
export { PascalCaseKeys } from './PascalCaseKeys';
export { PascalCaseKeysDeep } from './PascalCaseKeysDeep';
export { Pop } from './Pop';
export { ScreamingSnakeCase } from './ScreamingSnakeCase';
export { ScreamingSnakeCaseKeys } from './ScreamingSnakeCaseKeys';
export { ScreamingSnakeCaseKeysDeep } from './ScreamingSnakeCaseKeysDeep';
export { Shift } from './Shift';
export { SnakeCase } from './SnakeCase';
export { SnakeCaseKeys } from './SnakeCaseKeys';
export { SnakeCaseKeysDeep } from './SnakeCaseKeysDeep';
export { Split } from './Split';

@@ -31,0 +43,0 @@ export { SymmetricDifference } from './SymetricDifference';

@@ -1,3 +0,3 @@

const version = '0.6.0';
const version = '0.7.0';
export { version };

@@ -5,4 +5,4 @@ 'use strict';

const version = '0.6.0';
const version = '0.7.0';
exports.version = version;

@@ -7,7 +7,7 @@ /**

*/
export type MapCapitalize<
T extends string[],
Acc extends string[] = [],
export type MapCapitalize<
T extends string[],
Acc extends string[] = [],
> = T extends [infer Head, ...infer Tail]
? MapCapitalize<Tail, [...Acc, Capitalize<Head>]>
: Acc
? MapCapitalize<Tail, [...Acc, Capitalize<Head>]>
: Acc

@@ -12,2 +12,2 @@ import { BreakWords } from './BreakWords'

*/
export type PascalCase<T extends string> = Capitalize<Join<MapCapitalize<MapLowercase<BreakWords<T>>>>>
export type PascalCase<T extends string> = Join<MapCapitalize<MapLowercase<BreakWords<T>>>>
import { BreakWords } from './BreakWords'
import { Join } from './Join'
import { MapLowercase } from './MapLowercase'

@@ -11,2 +10,2 @@ /**

*/
export type SnakeCase<T extends string> = Join<MapLowercase<BreakWords<T>>, '_'>
export type SnakeCase<T extends string> = Lowercase<Join<BreakWords<T>, '_'>>

@@ -0,1 +1,3 @@

import { Equal } from './Equal'
/**

@@ -19,7 +21,8 @@ * Split `Source` by `Delimeter`.

Delimeter extends string = '',
Parts extends string[] = [],
> = Source extends `${infer Head}${Delimeter}${infer Tail}`
? [Head, ...WalkString<Tail, Delimeter>]
: Source extends Delimeter
? []
: [Source]
? WalkString<Tail, Delimeter, [...Parts, Head]>
: Equal<Source, ''> extends true
? Parts
: [...Parts, Source]

@@ -26,0 +29,0 @@ // walk over strings and split each by delimeter

@@ -35,3 +35,3 @@ {

},
"version": "0.6.0"
"version": "0.7.0"
}

@@ -24,2 +24,4 @@ # `@bedard/types`

- [`CamelCase<T>`](#camelcaset)
- [`CamelCaseKeys<T>`](#camelcasekeyst)
- [`CamelCaseKeysDeep<T>`](#camelcasekeysdeept)
- [`Difference<A, B>`](#differencea-b)

@@ -33,5 +35,8 @@ - [`Equal<A, B>`](#equala-b)

- [`KebabCase<T>`](#kebabcaset)
- [`KebabCaseKeys<T>`](#kebabcasekeyst)
- [`KebabCaseKeysDeep<T>`](#kebabcasekeysdeept)
- [`Last<T>`](#lastt)
- [`MapCapitalize<T>`](#mapcapitalizet)
- [`MapLowercase<T>`](#maplowercaset)
- [`MapUppercase<T>`](#mapuppercaset)
- [`Not<T>`](#nott)

@@ -41,5 +46,12 @@ - [`NotEqual<A, B>`](#notequala-b)

- [`PascalCase<T>`](#pascalcaset)
- [`PascalCaseKeys<T>`](#pascalcasekeyst)
- [`PascalCaseKeysDeep<T>`](#pascalcasekeysdeept)
- [`Pop<T>`](#popt)
- [`ScreamingSnakeCase<T>`](#screamingsnakecaset)
- [`ScreamingSnakeCaseKeys<T>`](#screamingsnakecasekeyst)
- [`ScreamingSnakeCaseKeysDeep<T>`](#screamingsnakecasekeysdeept)
- [`Shift<T>`](#shiftt)
- [`SnakeCase<T>`](#snakecaset)
- [`SnakeCaseKeys<T>`](#snakecasekeyst)
- [`SnakeCaseKeysDeep<T>`](#snakecasekeysdeept)
- [`Split<Source, Delimeter>`](#splitsource-delimeter)

@@ -64,3 +76,3 @@ - [`SymmetricDifference<A, B>`](#symmetricdifferencea-b)

Explode a string by common word breaks. This currently includes spaces, hyphens, underscores, and camel casing.
Explode a string by common word breaks. This currently includes spaces, hyphens, underscores, and casing changes.

@@ -70,3 +82,3 @@ ```ts

type Words = BreakWords<'one two-three_fourFive'> // ['one', 'two', 'three', 'four', 'Five']
type Words = BreakWords<'one twoThree-four'> // ['one', 'two', 'Three', 'four']
```

@@ -84,2 +96,22 @@

### `CamelCaseKeys<T>`
Camel case object keys.
```ts
import { CamelCaseKeys } from '@bedard/types'
type Obj = CamelCaseKeys<{ foo_bar: any }> // { fooBar: any }
```
### `CamelCaseKeysDeep<T>`
Deeply camel case object keys.
```ts
import { CamelCaseKeysDeep } from '@bedard/types'
type Obj = CamelCaseKeysDeep<{ foo_bar: { one_two: any }}> // { fooBar: { oneTwo: any }}
```
### `Difference<A, B>`

@@ -168,2 +200,22 @@

### `KebabCaseKeys<T>`
Kebab case object keys.
```ts
import { KebabCaseKeys } from '@bedard/types'
type Obj = KebabCaseKeys<{ foo_bar: any }> // { 'foo-bar': any }
```
### `KebabCaseKeysDeep<T>`
Deeply kebab case object keys.
```ts
import { KebabCaseKeysDeep } from '@bedard/types'
type Obj = KebabCaseKeysDeep<{ foo_bar: { one_two: any }}> // { 'foo-bar': { 'one-two': any }}
```
### `Last<T>`

@@ -200,2 +252,12 @@

### `MapUppercase<T>`
Map strings to uppercase.
```ts
import { MapUppercase } from '@bedard/types'
type Upper = MapUppercase<['a', 'b']> // ['A', 'B']
```
### `Not<T>`

@@ -243,2 +305,22 @@

### `PascalCaseKeys<T>`
Kebab case object keys.
```ts
import { PascalCaseKeys } from '@bedard/types'
type Obj = PascalCaseKeys<{ foo_bar: any }> // { 'foo-bar': any }
```
### `PascalCaseKeysDeep<T>`
Deeply pascal case object keys.
```ts
import { PascalCaseKeysDeep } from '@bedard/types'
type Obj = PascalCaseKeysDeep<{ foo_bar: { one_two: any }}> // { FooBar: { OneTwo: any }}
```
### `Pop<T>`

@@ -254,2 +336,32 @@

### `ScreamingSnakeCase<T>`
Convert a string to screaming snake case.
```ts
import { ScreamingSnakeCase } from '@bedard/types'
type Str = ScreamingSnakeCase<'fooBar'> // 'FOO_BAR'
```
### `ScreamingSnakeCaseKeys<T>`
Screaming snake case object keys.
```ts
import { ScreamingSnakeCaseKeys } from '@bedard/types'
type Obj = ScreamingSnakeCaseKeys<{ foo_bar: any }> // { FOO_BAR: any }
```
### `ScreamingSnakeCaseKeysDeep<T>`
Deeply screaming snake case object keys.
```ts
import { ScreamingSnakeCaseKeysDeep } from '@bedard/types'
type Obj = ScreamingSnakeCaseKeysDeep<{ foo_bar: { one_two: any }}> // { FOO_BAR: { ONE_TWO: any }}
```
### `Shift<T>`

@@ -275,2 +387,22 @@

### `SnakeCaseKeys<T>`
Snake case object keys.
```ts
import { SnakeCaseKeys } from '@bedard/types'
type Obj = SnakeCaseKeys<{ fooBar: any }> // { foo_bar: any }
```
### `SnakeCaseKeysDeep<T>`
Deeply snake case object keys.
```ts
import { SnakeCaseKeysDeep } from '@bedard/types'
type Obj = SnakeCaseKeysDeep<{ fooBar: { oneTwo: any }}> // { foo_bar: { one_two: any }}
```
### `Split<Source, Delimeter>`

@@ -277,0 +409,0 @@

import { Alphabet } from './utils'
import { Equal } from './Equal'
import { Last } from './Last'
import { Split } from './Split'

@@ -27,15 +28,28 @@

// break words by case
// break word by casing change
type BreakCase<
T extends string,
> = T extends Uppercase<T>
? [T]
: T extends Lowercase<T>
? [T]
: BreakCaseMixed<T>
// break mixed case words by casing change
type BreakCaseMixed<
T extends string,
CurrentWord extends string = '',
Words extends string[] = [],
> = Equal<CurrentWord, ''> extends true
? T extends `${infer First}${infer Rest}`
? BreakCase<Rest, First, Words>
: never
: T extends `${infer First}${infer Rest}`
? First extends Alphabet
? BreakCase<Rest, `${CurrentWord}${First}`, Words>
: BreakCase<T, '', [...Words, CurrentWord]>
: [...Words, CurrentWord]
> = T extends `${infer CurrentChar}${infer RestChars}`
? CurrentWord extends ''
? BreakCaseMixed<RestChars, CurrentChar, Words>
: SameWord<CurrentChar, Last<CurrentWord>> extends true
? BreakCaseMixed<RestChars, `${CurrentWord}${CurrentChar}`, Words>
: BreakCaseMixed<RestChars, CurrentChar, [...Words, CurrentWord]>
: [...Words, CurrentWord]
type SameWord<A, B> = A extends Lowercase<A>
? true
: B extends Uppercase<B>
? true
: false

@@ -9,4 +9,4 @@ import {

it('explodes a string into parts', () => {
type Test = Expect<Equal<['one', 'two', 'three', 'four', 'Five'], BreakWords<'one two-three_fourFive'>>>
type Test = Expect<Equal<['one', 'two', 'three', 'four', 'Five', 'SIX', 'SEVEN'], BreakWords<'one two-three_fourFiveSIX_SEVEN'>>>
})
})

@@ -8,8 +8,21 @@ import {

describe('CamelCase', () => {
it('converts string to camel case', () => {
type FromCamel = Expect<Equal<'fooBarBaz', CamelCase<'fooBarBaz'>>>
type FromKebab = Expect<Equal<'fooBarBaz', CamelCase<'foo-bar-baz'>>>
type FromPascal = Expect<Equal<'fooBarBaz', CamelCase<'fooBarBaz'>>>
type FromSnake = Expect<Equal<'fooBarBaz', CamelCase<'foo_bar_baz'>>>
it('from camel', () => {
type Test = Expect<Equal<'fooBarBaz', CamelCase<'fooBarBaz'>>>
})
it('from kebab', () => {
type Test = Expect<Equal<'fooBarBaz', CamelCase<'foo-bar-baz'>>>
})
it('from pascal', () => {
type Test = Expect<Equal<'fooBarBaz', CamelCase<'fooBarBaz'>>>
})
it('from screaming snake', () => {
type Test = Expect<Equal<'fooBarBaz', CamelCase<'FOO_BAR_BAZ'>>>
})
it('from snake', () => {
type Test = Expect<Equal<'fooBarBaz', CamelCase<'foo_bar_baz'>>>
})
})
export { AllEqual } from './AllEqual'
export { BreakWords } from './BreakWords'
export { CamelCase } from './CamelCase'
export { CamelCaseKeys } from './CamelCaseKeys'
export { CamelCaseKeysDeep } from './CamelCaseKeysDeep'
export { Difference } from './Difference'

@@ -12,5 +14,8 @@ export { Equal } from './Equal'

export { KebabCase } from './KebabCase'
export { KebabCaseKeys } from './KebabCaseKeys'
export { KebabCaseKeysDeep } from './KebabCaseKeysDeep'
export { Last } from './Last'
export { MapCapitalize } from './MapCapitalize'
export { MapLowercase } from './MapLowercase'
export { MapUppercase } from './MapUppercase'
export { Not } from './Not'

@@ -20,5 +25,12 @@ export { NotEqual } from './NotEqual'

export { PascalCase } from './PascalCase'
export { PascalCaseKeys } from './PascalCaseKeys'
export { PascalCaseKeysDeep } from './PascalCaseKeysDeep'
export { Pop } from './Pop'
export { ScreamingSnakeCase } from './ScreamingSnakeCase'
export { ScreamingSnakeCaseKeys } from './ScreamingSnakeCaseKeys'
export { ScreamingSnakeCaseKeysDeep } from './ScreamingSnakeCaseKeysDeep'
export { Shift } from './Shift'
export { SnakeCase } from './SnakeCase'
export { SnakeCaseKeys } from './SnakeCaseKeys'
export { SnakeCaseKeysDeep } from './SnakeCaseKeysDeep'
export { Split } from './Split'

@@ -31,2 +43,2 @@ export { SymmetricDifference } from './SymetricDifference'

export const version = '0.6.0'
export const version = '0.7.0'

@@ -8,8 +8,21 @@ import {

describe('KebabCase', () => {
it('converts string to kebab case', () => {
type FromCamel = Expect<Equal<'foo-bar-baz', KebabCase<'fooBarBaz'>>>
type FromKebab = Expect<Equal<'foo-bar-baz', KebabCase<'foo-bar-baz'>>>
type FromPascal = Expect<Equal<'foo-bar-baz', KebabCase<'fooBarBaz'>>>
type FromSnake = Expect<Equal<'foo-bar-baz', KebabCase<'foo_bar_baz'>>>
it('from camel', () => {
type Test = Expect<Equal<'foo-bar-baz', KebabCase<'fooBarBaz'>>>
})
it('from kebab', () => {
type Test = Expect<Equal<'foo-bar-baz', KebabCase<'foo-bar-baz'>>>
})
it('from pascal', () => {
type Test = Expect<Equal<'foo-bar-baz', KebabCase<'fooBarBaz'>>>
})
it('from screaming snake', () => {
type Test = Expect<Equal<'foo-bar-baz', KebabCase<'FOO_BAR_BAZ'>>>
})
it('from snake', () => {
type Test = Expect<Equal<'foo-bar-baz', KebabCase<'foo_bar_baz'>>>
})
})

@@ -7,7 +7,7 @@ /**

*/
export type MapCapitalize<
T extends string[],
Acc extends string[] = [],
export type MapCapitalize<
T extends string[],
Acc extends string[] = [],
> = T extends [infer Head, ...infer Tail]
? MapCapitalize<Tail, [...Acc, Capitalize<Head>]>
: Acc
? MapCapitalize<Tail, [...Acc, Capitalize<Head>]>
: Acc

@@ -12,2 +12,2 @@ import { BreakWords } from './BreakWords'

*/
export type PascalCase<T extends string> = Capitalize<Join<MapCapitalize<MapLowercase<BreakWords<T>>>>>
export type PascalCase<T extends string> = Join<MapCapitalize<MapLowercase<BreakWords<T>>>>

@@ -8,8 +8,21 @@ import {

describe('PascalCase', () => {
it('converts string to pascal case', () => {
type FromCamel = Expect<Equal<'FooBarBaz', PascalCase<'fooBarBaz'>>>
type FromKebab = Expect<Equal<'FooBarBaz', PascalCase<'foo-bar-baz'>>>
type FromPascal = Expect<Equal<'FooBarBaz', PascalCase<'fooBarBaz'>>>
type FromSnake = Expect<Equal<'FooBarBaz', PascalCase<'foo_bar_baz'>>>
it('from camel', () => {
type Test = Expect<Equal<'FooBarBaz', PascalCase<'fooBarBaz'>>>
})
it('from kebab', () => {
type Test = Expect<Equal<'FooBarBaz', PascalCase<'foo-bar-baz'>>>
})
it('from pascal', () => {
type Test = Expect<Equal<'FooBarBaz', PascalCase<'fooBarBaz'>>>
})
it('from screaming snake', () => {
type Test = Expect<Equal<'FooBarBaz', PascalCase<'FOO_BAR_BAZ'>>>
})
it('from snake', () => {
type Test = Expect<Equal<'FooBarBaz', PascalCase<'foo_bar_baz'>>>
})
})
import { BreakWords } from './BreakWords'
import { Join } from './Join'
import { MapLowercase } from './MapLowercase'

@@ -11,2 +10,2 @@ /**

*/
export type SnakeCase<T extends string> = Join<MapLowercase<BreakWords<T>>, '_'>
export type SnakeCase<T extends string> = Lowercase<Join<BreakWords<T>, '_'>>

@@ -8,8 +8,21 @@ import {

describe('SnakeCase', () => {
it('converts string to snake case', () => {
type FromCamel = Expect<Equal<'foo_bar_baz', SnakeCase<'fooBarBaz'>>>
type FromKebab = Expect<Equal<'foo_bar_baz', SnakeCase<'foo-bar-baz'>>>
type FromPascal = Expect<Equal<'foo_bar_baz', SnakeCase<'fooBarBaz'>>>
type FromSnake = Expect<Equal<'foo_bar_baz', SnakeCase<'foo_bar_baz'>>>
it('from camel', () => {
type Test = Expect<Equal<'foo_bar_baz', SnakeCase<'fooBarBaz'>>>
})
it('from kebab', () => {
type Test = Expect<Equal<'foo_bar_baz', SnakeCase<'foo-bar-baz'>>>
})
it('from pascal', () => {
type Test = Expect<Equal<'foo_bar_baz', SnakeCase<'fooBarBaz'>>>
})
it('from screaming snake', () => {
type Test = Expect<Equal<'foo_bar_baz', SnakeCase<'FOO_BAR_BAZ'>>>
})
it('from snake', () => {
type Test = Expect<Equal<'foo_bar_baz', SnakeCase<'foo_bar_baz'>>>
})
})

@@ -0,1 +1,3 @@

import { Equal } from './Equal'
/**

@@ -19,7 +21,8 @@ * Split `Source` by `Delimeter`.

Delimeter extends string = '',
Parts extends string[] = [],
> = Source extends `${infer Head}${Delimeter}${infer Tail}`
? [Head, ...WalkString<Tail, Delimeter>]
: Source extends Delimeter
? []
: [Source]
? WalkString<Tail, Delimeter, [...Parts, Head]>
: Equal<Source, ''> extends true
? Parts
: [...Parts, Source]

@@ -26,0 +29,0 @@ // walk over strings and split each by delimeter

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc