Skip to content

Commit f605345

Browse files
committed
refactor: minor improvements
1 parent cf0ea60 commit f605345

File tree

18 files changed

+115
-215
lines changed

18 files changed

+115
-215
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@
9292
"markdownlint": "^0.37.3",
9393
"ofetch": "^1.4.1",
9494
"picocolors": "^1.1.1",
95-
"publint": "^0.3.1",
95+
"publint": "^0.3.2",
9696
"react": "^19.0.0",
9797
"react-dom": "^19.0.0",
9898
"skott": "^0.35.4",

packages/plugins/eslint-plugin/src/configs/disable-debug.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { entries, fromEntries } from "@eslint-react/eff";
1+
import { entries, fromEntries } from "../utils";
22

33
import { rules as debugRules } from "./debug";
44

packages/plugins/eslint-plugin/src/configs/disable-dom.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { entries, fromEntries } from "@eslint-react/eff";
2-
1+
import { entries, fromEntries } from "../utils";
32
import { rules as domRules } from "./dom";
43

54
export const name = "@eslint-react/disable-dom";

packages/plugins/eslint-plugin/src/configs/disable-web-api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { entries, fromEntries } from "@eslint-react/eff";
1+
import { entries, fromEntries } from "../utils";
22

33
import { rules as webApiRules } from "./web-api";
44

packages/plugins/eslint-plugin/src/configs/off.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { entries, fromEntries } from "@eslint-react/eff";
1+
import { entries, fromEntries } from "../utils";
22

33
import { rules as allRules } from "./all";
44
import { rules as disableTypeCheckedRules } from "./disable-type-checked";
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import type { Pretty } from "@eslint-react/eff";
2+
3+
// Ported from: https://github.com/remeda/remeda/blob/9d742036f6c9cdc216e2c771805051855e7e7ac4/src/entries.ts
4+
type EntriesEntryForKey<T, Key extends keyof T> = Key extends number | string ? [key: `${Key}`, value: Required<T>[Key]]
5+
: never;
6+
type EntriesEntry<T> = Pretty<{ [P in keyof T]-?: EntriesEntryForKey<T, P> }[keyof T]>;
7+
export function entries<T extends {}>(data: T): Array<EntriesEntry<T>>;
8+
export function entries(): <T extends {}>(data: T) => Array<EntriesEntry<T>>;
9+
export function entries(...args: ReadonlyArray<unknown>): unknown {
10+
return Object.entries(args);
11+
}
12+
13+
// Ported from: https://github.com/remeda/remeda/blob/9d742036f6c9cdc216e2c771805051855e7e7ac4/src/fromEntries.ts
14+
type IterableContainer<T = unknown> = readonly [] | ReadonlyArray<T>;
15+
type FromEntriesEntry<Key extends PropertyKey = PropertyKey, Value = unknown> = readonly [
16+
key: Key,
17+
value: Value,
18+
];
19+
type FromEntries<Entries> = Entries extends readonly [
20+
infer First,
21+
...infer Tail,
22+
] ? FromEntriesTuple<First, Tail>
23+
: Entries extends readonly [...infer Head, infer Last] ? FromEntriesTuple<Last, Head>
24+
: Entries extends IterableContainer<FromEntriesEntry> ? FromEntriesArray<Entries>
25+
: "ERROR: Entries array-like could not be inferred";
26+
type FromEntriesTuple<E, Rest> = E extends FromEntriesEntry ? FromEntries<Rest> & Record<E[0], E[1]>
27+
: "ERROR: Array-like contains a non-entry element";
28+
type FromEntriesArray<Entries extends IterableContainer<FromEntriesEntry>> = string extends AllKeys<Entries>
29+
? Record<string, Entries[number][1]>
30+
: number extends AllKeys<Entries> ? Record<number, Entries[number][1]>
31+
: symbol extends AllKeys<Entries> ? Record<symbol, Entries[number][1]>
32+
: FromEntriesArrayWithLiteralKeys<Entries>;
33+
type FromEntriesArrayWithLiteralKeys<Entries extends IterableContainer<FromEntriesEntry>> = {
34+
[P in AllKeys<Entries>]?: ValueForKey<Entries, P>;
35+
};
36+
type AllKeys<Entries extends IterableContainer<FromEntriesEntry>> = Extract<
37+
Entries[number],
38+
FromEntriesEntry
39+
>[0];
40+
type ValueForKey<
41+
Entries extends IterableContainer<FromEntriesEntry>,
42+
K extends PropertyKey,
43+
> = (Extract<Entries[number], FromEntriesEntry<K>> extends never ? Entries[number]
44+
: Extract<Entries[number], FromEntriesEntry<K>>)[1];
45+
export function fromEntries<Entries extends IterableContainer<FromEntriesEntry>>(
46+
entries: Entries,
47+
): Pretty<FromEntries<Entries>>;
48+
export function fromEntries(): <Entries extends IterableContainer<FromEntriesEntry>>(
49+
entries: Entries,
50+
) => Pretty<FromEntries<Entries>>;
51+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
52+
export function fromEntries(...args: ReadonlyArray<any>): unknown {
53+
return Object.fromEntries(args);
54+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
export * from "./entries";
12
export * from "./pad-keys-left";
23
export * from "./transform-keys";
4+
export * from "./type-of";

packages/utilities/eff/docs/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,8 @@
2222

2323
- [birecord](functions/birecord.md)
2424
- [dual](functions/dual.md)
25-
- [entries](functions/entries.md)
2625
- [flip](functions/flip.md)
2726
- [flow](functions/flow.md)
28-
- [fromEntries](functions/fromEntries.md)
2927
- [getOrUpdate](functions/getOrUpdate.md)
3028
- [identity](functions/identity.md)
3129
- [isArray](functions/isArray.md)

packages/utilities/eff/docs/functions/entries.md

Lines changed: 0 additions & 47 deletions
This file was deleted.

packages/utilities/eff/docs/functions/fromEntries.md

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)