Skip to content

Commit 04d4c73

Browse files
committed
refactor: replace birecord dependency with @eslint-react/types and update related imports
1 parent fe906c3 commit 04d4c73

File tree

10 files changed

+137
-6
lines changed

10 files changed

+137
-6
lines changed

packages/core/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
"@typescript-eslint/type-utils": "^8.18.2",
5353
"@typescript-eslint/types": "^8.18.2",
5454
"@typescript-eslint/utils": "^8.18.2",
55-
"birecord": "^0.1.1",
5655
"short-unique-id": "^5.2.0",
5756
"ts-pattern": "^5.6.0"
5857
},

packages/core/src/phase/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import birecord from "birecord";
1+
import { birecord } from "@eslint-react/types";
22

33
export const ERPhaseRelevance = birecord({
44
mount: "unmount",

packages/plugins/eslint-plugin-react-web-api/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
"@typescript-eslint/scope-manager": "^8.18.2",
6060
"@typescript-eslint/types": "^8.18.2",
6161
"@typescript-eslint/utils": "^8.18.2",
62-
"birecord": "^0.1.1",
6362
"string-ts": "^2.2.0",
6463
"ts-pattern": "^5.6.0"
6564
},

packages/types/docs/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
# @eslint-react/types
66

7+
## Classes
8+
9+
- [BiRecord](classes/BiRecord.md)
10+
711
## Type Aliases
812

913
- [ArrayElement](type-aliases/ArrayElement.md)
@@ -26,6 +30,7 @@
2630
## Functions
2731

2832
- [asConst](functions/asConst.md)
33+
- [birecord](functions/birecord.md)
2934
- [entries](functions/entries.md)
3035
- [fromEntries](functions/fromEntries.md)
3136
- [narrow](functions/narrow.md)
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
[**@eslint-react/types**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/types](../README.md) / BiRecord
6+
7+
# Class: BiRecord\<T\>
8+
9+
## Type Parameters
10+
11+
**T** *extends* `Record`\<`any`, `any`\>
12+
13+
## Constructors
14+
15+
### new BiRecord()
16+
17+
> **new BiRecord**\<`T`\>(`original`, `reversed`): [`BiRecord`](BiRecord.md)\<`T`\>
18+
19+
#### Parameters
20+
21+
##### original
22+
23+
`T`
24+
25+
##### reversed
26+
27+
`Reverse`\<`T`\> = `...`
28+
29+
#### Returns
30+
31+
[`BiRecord`](BiRecord.md)\<`T`\>
32+
33+
## Properties
34+
35+
### original
36+
37+
> **original**: `T`
38+
39+
***
40+
41+
### reversed
42+
43+
> **reversed**: `Reverse`\<`T`\>
44+
45+
## Methods
46+
47+
### get()
48+
49+
> **get**\<`U`\>(`key`): `U` *extends* keyof `T` ? `T`\[`U`\<`U`\>\] : `U` *extends* `T`\[keyof `T`\] ? `Reverse`\<`T`\>\[`U`\<`U`\>\] : `unknown`
50+
51+
#### Type Parameters
52+
53+
**U** *extends* `any`
54+
55+
#### Parameters
56+
57+
##### key
58+
59+
`U`
60+
61+
#### Returns
62+
63+
`U` *extends* keyof `T` ? `T`\[`U`\<`U`\>\] : `U` *extends* `T`\[keyof `T`\] ? `Reverse`\<`T`\>\[`U`\<`U`\>\] : `unknown`
64+
65+
***
66+
67+
### has()
68+
69+
> **has**(`key`): key is keyof T \| T\[keyof T\]
70+
71+
#### Parameters
72+
73+
##### key
74+
75+
`any`
76+
77+
#### Returns
78+
79+
key is keyof T \| T\[keyof T\]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[**@eslint-react/types**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/types](../README.md) / birecord
6+
7+
# Function: birecord()
8+
9+
> **birecord**\<`T`\>(`original`): [`BiRecord`](../classes/BiRecord.md)\<`T`\>
10+
11+
## Type Parameters
12+
13+
**T** *extends* `Record`\<`any`, `any`\>
14+
15+
## Parameters
16+
17+
### original
18+
19+
`T`
20+
21+
## Returns
22+
23+
[`BiRecord`](../classes/BiRecord.md)\<`T`\>

packages/types/src/helpers.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,34 @@ export function fromEntries(...args: ReadonlyArray<any>): unknown {
181181
return Object.fromEntries(args);
182182
}
183183

184+
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-type-assertion */
185+
type Reverse<T extends Record<any, any>> = { [U in keyof T as T[U]]: U };
186+
187+
function reverse<T extends Record<any, any>>(record: T): Reverse<T> {
188+
return Object.fromEntries(
189+
Object.entries(record).map(([key, value]) => [value, key]),
190+
);
191+
}
192+
193+
export function birecord<const T extends Record<any, any>>(
194+
original: T,
195+
): BiRecord<T> {
196+
return new BiRecord(original);
197+
}
198+
199+
export class BiRecord<const T extends Record<any, any>> {
200+
constructor(public original: T, public reversed = reverse(original)) {}
201+
get<U extends keyof T | T[keyof T]>(
202+
key: U,
203+
): U extends keyof T ? T[U] : U extends T[keyof T] ? Reverse<T>[U] : unknown {
204+
return this.original[key] ?? this.reversed[key as T[keyof T]];
205+
}
206+
has(key: any): key is keyof T | T[keyof T] {
207+
return key in this.original || key in this.reversed;
208+
}
209+
}
210+
/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-type-assertion */
211+
184212
// #endregion
185213

186214
// #region Array Helpers

packages/utilities/ast/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
"@typescript-eslint/types": "^8.18.2",
4747
"@typescript-eslint/typescript-estree": "^8.18.2",
4848
"@typescript-eslint/utils": "^8.18.2",
49-
"birecord": "^0.1.1",
5049
"string-ts": "^2.2.0",
5150
"ts-pattern": "^5.6.0"
5251
},

packages/utilities/jsx/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
"@typescript-eslint/scope-manager": "^8.18.2",
4949
"@typescript-eslint/types": "^8.18.2",
5050
"@typescript-eslint/utils": "^8.18.2",
51-
"birecord": "^0.1.1",
5251
"ts-pattern": "^5.6.0"
5352
},
5453
"devDependencies": {

packages/utilities/jsx/src/xhtml-entities.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import birecord from "birecord";
1+
import { birecord } from "@eslint-react/types";
22

33
export const xhtmlEntities = birecord({
44
Aacute: "\u00C1",

0 commit comments

Comments
 (0)