@bedard/types
Advanced tools
Comparing version 0.4.0 to 0.5.1
# Changelog | ||
## 0.5.0 | ||
- [`BreakWords<T>`](https://github.com/scottbedard/types#breakcaset) | ||
- [`CamelCase<T>`](https://github.com/scottbedard/types#camelcaset) | ||
- [`MapCapitalize<T>`](https://github.com/scottbedard/types#mapcapitalizet) | ||
- [`MapLowercase<T>`](https://github.com/scottbedard/types#maplowercaset) | ||
- [`PascalCase<T>`](https://github.com/scottbedard/types#pascalcaset) | ||
- [`SnakeCase<T>`](https://github.com/scottbedard/types#snakecaset) | ||
## 0.4.0 | ||
@@ -4,0 +12,0 @@ |
@@ -1,2 +0,8 @@ | ||
declare const version = "0.4.0"; | ||
/** | ||
* Lowercase English alphabet | ||
*/ | ||
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.5.1"; | ||
export { BreakWords } from './BreakWords'; | ||
export { CamelCase } from './CamelCase'; | ||
export { Difference } from './Difference'; | ||
@@ -7,6 +13,10 @@ export { Equal } from './Equal'; | ||
export { Join } from './Join'; | ||
export { MapCapitalize } from './MapCapitalize'; | ||
export { MapLowercase } from './MapLowercase'; | ||
export { NotEqual } from './NotEqual'; | ||
export { Opaque } from './Opaque'; | ||
export { PascalCase } from './PascalCase'; | ||
export { Pop } from './Pop'; | ||
export { Shift } from './Shift'; | ||
export { SnakeCase } from './SnakeCase'; | ||
export { Split } from './Split'; | ||
@@ -17,2 +27,2 @@ export { SymmetricDifference } from './SymetricDifference'; | ||
export { XOR } from './XOR'; | ||
export { version }; | ||
export { Alphabet, version }; |
@@ -1,2 +0,8 @@ | ||
declare const version = "0.4.0"; | ||
/** | ||
* Lowercase English alphabet | ||
*/ | ||
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.5.1"; | ||
export { BreakWords } from './BreakWords'; | ||
export { CamelCase } from './CamelCase'; | ||
export { Difference } from './Difference'; | ||
@@ -7,6 +13,10 @@ export { Equal } from './Equal'; | ||
export { Join } from './Join'; | ||
export { MapCapitalize } from './MapCapitalize'; | ||
export { MapLowercase } from './MapLowercase'; | ||
export { NotEqual } from './NotEqual'; | ||
export { Opaque } from './Opaque'; | ||
export { PascalCase } from './PascalCase'; | ||
export { Pop } from './Pop'; | ||
export { Shift } from './Shift'; | ||
export { SnakeCase } from './SnakeCase'; | ||
export { Split } from './Split'; | ||
@@ -17,2 +27,2 @@ export { SymmetricDifference } from './SymetricDifference'; | ||
export { XOR } from './XOR'; | ||
export { version }; | ||
export { Alphabet, version }; |
@@ -1,3 +0,3 @@ | ||
const version = '0.4.0'; | ||
const version = '0.5.1'; | ||
export { version }; |
@@ -5,4 +5,4 @@ 'use strict'; | ||
const version = '0.4.0'; | ||
const version = '0.5.1'; | ||
exports.version = version; |
@@ -10,7 +10,33 @@ /** | ||
Source extends string, | ||
Delimeter extends string | string[] = '' | ||
> = Delimeter extends string[] | ||
? WalkDelimeters<[Source], Delimeter> | ||
: WalkString<Source, Delimeter> | ||
// walk over single string and split by delimeter | ||
type WalkString< | ||
Source extends string, | ||
Delimeter extends string = '', | ||
> = Source extends `${infer Head}${Delimeter}${infer Tail}` | ||
? [Head, ...Split<Tail, Delimeter>] | ||
? [Head, ...WalkString<Tail, Delimeter>] | ||
: Source extends Delimeter | ||
? [] | ||
: [Source] | ||
// walk over strings and split each by delimeter | ||
type WalkParts< | ||
Parts extends string[], | ||
Delimeter extends string, | ||
Acc extends string[] = [], | ||
> = Parts extends [infer Head, ...infer Tail] | ||
? WalkParts<Tail, Delimeter, [...Acc, ...WalkString<Head, Delimeter>]> | ||
: Acc | ||
// walk over delimeters and split parts by current delimeter | ||
type WalkDelimeters< | ||
Parts extends string[], | ||
Delimeters extends string[], | ||
Acc extends string[] = [], | ||
> = Delimeters extends [infer Head, ...infer Tail] | ||
? WalkDelimeters<WalkParts<Parts, Head>, Tail> | ||
: Parts |
@@ -8,6 +8,9 @@ { | ||
"devDependencies": { | ||
"@types/jest": "^27.0.2", | ||
"copyfiles": "^2.4.1", | ||
"jest": "^27.2.1", | ||
"rollup": "^2.56.3", | ||
"rollup-plugin-delete": "^2.0.0", | ||
"rollup-plugin-ts": "^1.4.2", | ||
"ts-jest": "^27.0.5", | ||
"typescript": "^4.4.3" | ||
@@ -29,5 +32,7 @@ }, | ||
"publish:ci": "node ./scripts/publish.js", | ||
"test": "tsc tests/*.ts --listFiles --noEmit" | ||
"test:clear": "jest --clearCache", | ||
"test:watch": "jest --watch", | ||
"test": "jest" | ||
}, | ||
"version": "0.4.0" | ||
"version": "0.5.1" | ||
} |
@@ -21,2 +21,4 @@ # `@bedard/types` | ||
- [`BreakWords<T>`](#breakwordst) | ||
- [`CamelCase<T>`](#camelcaset) | ||
- [`Difference<A, B>`](#differencea-b) | ||
@@ -27,6 +29,10 @@ - [`Equal<A, B>`](#equala-b) | ||
- [`Join<Parts, Delimeter>`](#joinparts-delimeter) | ||
- [`MapCapitalize<T>`](#mapcapitalizet) | ||
- [`MapLowercase<T>`](#maplowercaset) | ||
- [`NotEqual<A, B>`](#notequala-b) | ||
- [`Opaque<T, Token>`](#opaquet-token) | ||
- [`PascalCase<T>`](#pascalcaset) | ||
- [`Pop<T>`](#popt) | ||
- [`Shift<T>`](#shiftt) | ||
- [`SnakeCase<T>`](#snakecaset) | ||
- [`Split<Source, Delimeter>`](#splitsource-delimeter) | ||
@@ -38,2 +44,22 @@ - [`SymmetricDifference<A, B>`](#symmetricdifferencea-b) | ||
### `BreakWords<T>` | ||
Explode a string by common word breaks. This currently includes spaces, hyphens, underscores, and camel casing. | ||
```ts | ||
import { BreakWords } from '@bedard/types' | ||
type Words = BreakWords<'one two-three_fourFive'> // ['one', 'two', 'three', 'four', 'Five'] | ||
``` | ||
### `CamelCase<T>` | ||
Convert a string to camel case. | ||
```ts | ||
import { CamelCase } from '@bedard/types' | ||
type Str = CamelCase<'foo-bar'> // 'fooBar' | ||
``` | ||
### `Difference<A, B>` | ||
@@ -91,2 +117,22 @@ | ||
### `MapCapitalize<T>` | ||
Capitalize the first letter of each string. | ||
```ts | ||
import { MapCapitalize } from '@bedard/types' | ||
type Capitalized = MapLowercase<['foo', 'bar']> // ['Foo', 'Bar'] | ||
``` | ||
### `MapLowercase<T>` | ||
Map strings to lowercase. | ||
```ts | ||
import { MapLowercase } from '@bedard/types' | ||
type Lower = MapLowercase<['A', 'B']> // ['a', 'b'] | ||
``` | ||
### `NotEqual<A, B>` | ||
@@ -114,2 +160,12 @@ | ||
### `PascalCase<T>` | ||
Convert a string to pascal case. | ||
```ts | ||
import { PascalCase } from '@bedard/types' | ||
type Str = PascalCase<'foo-bar'> // 'FooBar' | ||
``` | ||
### `Pop<T>` | ||
@@ -135,5 +191,15 @@ | ||
### `SnakeCase<T>` | ||
Convert a string to snake case. | ||
```ts | ||
import { SnakeCase } from '@bedard/types' | ||
type Str = SnakeCase<'fooBar'> // 'foo_bar' | ||
``` | ||
### `Split<Source, Delimeter>` | ||
Split `Source` by `Delimeter`. This type is the opposite of [`Join`](#joinparts-delimeter). | ||
Split `Source` by `Delimeter`. This type is the opposite of [`Join`](#joinparts-delimeter). Note that to split by multiple delimeters the second argument must be a `string[]`, as unions will create a [distributive conditional type](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types). | ||
@@ -145,3 +211,5 @@ ```ts | ||
type Parts = Split<'a.b.c', '.'> // ['a', 'b', 'c'] | ||
type SingleDelimeter = Split<'a.b.c', '.'> // ['a', 'b', 'c'] | ||
type MultipleDelimeters = Split<'a.b-c', ['.', '-']> // ['a', 'b', 'c'] | ||
``` | ||
@@ -148,0 +216,0 @@ |
@@ -0,1 +1,3 @@ | ||
export { BreakWords } from './BreakWords' | ||
export { CamelCase } from './CamelCase' | ||
export { Difference } from './Difference' | ||
@@ -6,6 +8,10 @@ export { Equal } from './Equal' | ||
export { Join } from './Join' | ||
export { MapCapitalize } from './MapCapitalize' | ||
export { MapLowercase } from './MapLowercase' | ||
export { NotEqual } from './NotEqual' | ||
export { Opaque } from './Opaque' | ||
export { PascalCase } from './PascalCase' | ||
export { Pop } from './Pop' | ||
export { Shift } from './Shift' | ||
export { SnakeCase } from './SnakeCase' | ||
export { Split } from './Split' | ||
@@ -16,3 +22,4 @@ export { SymmetricDifference } from './SymetricDifference' | ||
export { XOR } from './XOR' | ||
export * from './utils' | ||
export const version = '0.4.0' | ||
export const version = '0.5.1' |
@@ -10,7 +10,33 @@ /** | ||
Source extends string, | ||
Delimeter extends string | string[] = '' | ||
> = Delimeter extends string[] | ||
? WalkDelimeters<[Source], Delimeter> | ||
: WalkString<Source, Delimeter> | ||
// walk over single string and split by delimeter | ||
type WalkString< | ||
Source extends string, | ||
Delimeter extends string = '', | ||
> = Source extends `${infer Head}${Delimeter}${infer Tail}` | ||
? [Head, ...Split<Tail, Delimeter>] | ||
? [Head, ...WalkString<Tail, Delimeter>] | ||
: Source extends Delimeter | ||
? [] | ||
: [Source] | ||
// walk over strings and split each by delimeter | ||
type WalkParts< | ||
Parts extends string[], | ||
Delimeter extends string, | ||
Acc extends string[] = [], | ||
> = Parts extends [infer Head, ...infer Tail] | ||
? WalkParts<Tail, Delimeter, [...Acc, ...WalkString<Head, Delimeter>]> | ||
: Acc | ||
// walk over delimeters and split parts by current delimeter | ||
type WalkDelimeters< | ||
Parts extends string[], | ||
Delimeters extends string[], | ||
Acc extends string[] = [], | ||
> = Delimeters extends [infer Head, ...infer Tail] | ||
? WalkDelimeters<WalkParts<Parts, Head>, Tail> | ||
: Parts |
Sorry, the diff of this file is not supported yet
39602
76
976
259
8