fnts 3.0.2 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lens/get.d.ts +1 -1
- package/lens/set.d.ts +5 -6
- package/lens/set.js +1 -6
- package/package.json +2 -2
- package/tsconfig.json +0 -1
- package/types/flatten.d.ts +20 -16
- package/types/unshift.d.ts +6 -6
package/lens/get.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { Flatten, Flattenable } from '../types/flatten';
|
|
|
6
6
|
* Gets the value type inside a nested object type `Source` by provided `Path`
|
|
7
7
|
* written in dot-notation.
|
|
8
8
|
*/
|
|
9
|
-
export type Get<Source extends Flattenable, Path extends
|
|
9
|
+
export type Get<Source extends Flattenable, Path extends Flatten<Source>> = Source extends Record<string, unknown> ? (Path extends keyof Source ? Source[Path] : (Path extends `${infer Left}.${infer Right}` ? (Left extends keyof Source ? (Source[Left] extends Flattenable ? Get<Source[Left], Right> : never) : never) : never)) : Source extends any[] ? (Path extends `${number}` ? Source[number] : (Path extends `${infer Left}.${infer Right}` ? (Left extends `${number}` ? (Source[number] extends Flattenable ? Get<Source[number], Right> : never) : never) : never)) : never;
|
|
10
10
|
/**
|
|
11
11
|
* Gets the value inside a nested `source` object by provided `path`
|
|
12
12
|
* written in dot-notation.
|
package/lens/set.d.ts
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Lens
|
|
3
3
|
*/
|
|
4
|
-
import type { Unshift } from '../types/unshift';
|
|
5
4
|
import type { Flatten, Flattenable } from '../types/flatten';
|
|
6
5
|
import type { Get } from './get.js';
|
|
7
6
|
/**
|
|
8
7
|
* Sets the `Value` type inside a nested object type `Source` by provided `Path`
|
|
9
8
|
* written in dot-notation.
|
|
10
9
|
*/
|
|
11
|
-
export type Set<Source extends Flattenable, Path extends
|
|
12
|
-
[Key in keyof Source]: Key extends
|
|
13
|
-
} : Path extends keyof Source ? {
|
|
14
|
-
[Key in keyof Source]: Key extends
|
|
15
|
-
} : never : Source extends any[] ? Path extends `${
|
|
10
|
+
export type Set<Source extends Flattenable, Path extends Flatten<Source>, Value extends Get<Source, Path>> = Source extends Record<string, unknown> ? (Path extends keyof Source ? {
|
|
11
|
+
[Key in keyof Source]: Key extends Path ? Value : Source[Key];
|
|
12
|
+
} : (Path extends `${infer Left}.${infer Right}` ? (Left extends keyof Source ? (Source[Left] extends Flattenable ? {
|
|
13
|
+
[Key in keyof Source]: (Key extends Left ? Set<Source[Left], Right, Value> : Source[Key]);
|
|
14
|
+
} : never) : never) : never)) : Source extends any[] ? (Path extends `${number}` ? Value[] : (Path extends `${infer Left}.${infer Right}` ? (Left extends `${number}` ? (Source[number] extends Flattenable ? Set<Source[number], Right, Value>[] : never) : never) : never)) : never;
|
|
16
15
|
/**
|
|
17
16
|
* Sets the `value` inside a nested `source` object by provided `path`
|
|
18
17
|
* written in dot-notation.
|
package/lens/set.js
CHANGED
|
@@ -12,7 +12,6 @@ export default function set(...args) {
|
|
|
12
12
|
return (path, value) => setter(args[0], path, value);
|
|
13
13
|
}
|
|
14
14
|
case 2: {
|
|
15
|
-
// @ts-ignore
|
|
16
15
|
return (source) => setter(source, args[0], args[1]);
|
|
17
16
|
}
|
|
18
17
|
case 3: {
|
|
@@ -21,10 +20,7 @@ export default function set(...args) {
|
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
|
-
function setter(source, path, value
|
|
25
|
-
// @ts-ignore
|
|
26
|
-
) {
|
|
27
|
-
// @ts-ignore
|
|
23
|
+
function setter(source, path, value) {
|
|
28
24
|
const keys = path.split('.');
|
|
29
25
|
const length = keys.length;
|
|
30
26
|
let result = structuredClone(source);
|
|
@@ -40,6 +36,5 @@ function setter(source, path, value
|
|
|
40
36
|
scope = scope?.[keys?.[index]];
|
|
41
37
|
}
|
|
42
38
|
}
|
|
43
|
-
// @ts-ignore
|
|
44
39
|
return result;
|
|
45
40
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fnts",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Dmytro Vasylkivskyi",
|
|
6
6
|
"description": "TypeScript / JavaScript FP utilities",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"repository": "https://github.com/drizzer14/fnts",
|
|
17
17
|
"type": "module",
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"typescript": ">=5.0
|
|
19
|
+
"typescript": ">=5.0"
|
|
20
20
|
},
|
|
21
21
|
"peerDependenciesMeta": {
|
|
22
22
|
"typescript": {
|
package/tsconfig.json
CHANGED
package/types/flatten.d.ts
CHANGED
|
@@ -12,23 +12,27 @@ export type Flattenable = Record<string, unknown> | any[]
|
|
|
12
12
|
* combined through dot-notation.
|
|
13
13
|
*/
|
|
14
14
|
export type Flatten<
|
|
15
|
-
Source extends
|
|
16
|
-
> =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
| keyof Source
|
|
20
|
-
| keyof {
|
|
15
|
+
Source extends Flattenable,
|
|
16
|
+
> = (
|
|
17
|
+
Source extends Record<string, unknown>
|
|
18
|
+
? (keyof {
|
|
21
19
|
[
|
|
22
20
|
Key in keyof Source as
|
|
23
21
|
Key extends string
|
|
24
|
-
? Source[Key] extends
|
|
25
|
-
? `${Key}.${Flatten<Source[Key]>}`
|
|
26
|
-
: Source[Key] extends any[]
|
|
27
|
-
?
|
|
28
|
-
|
|
29
|
-
: `${Key}.${number}`
|
|
30
|
-
: Key
|
|
22
|
+
? (Source[Key] extends Flattenable
|
|
23
|
+
? Key | `${Key}.${Flatten<Source[Key]>}`
|
|
24
|
+
: (Source[Key] extends any[]
|
|
25
|
+
? Key | `${Key}.${number}.${Flatten<Source[Key][number]>}`
|
|
26
|
+
: Key))
|
|
31
27
|
: never
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
|
|
28
|
+
]: void
|
|
29
|
+
})
|
|
30
|
+
: (Source extends any[]
|
|
31
|
+
? (Source[number] extends Flattenable
|
|
32
|
+
? `${number}` | `${number}.${Flatten<Source[number]>}`
|
|
33
|
+
: `${number}`)
|
|
34
|
+
: never)
|
|
35
|
+
// So that Flatten is recognized to always return strings
|
|
36
|
+
) extends infer Key extends string
|
|
37
|
+
? Key
|
|
38
|
+
: never
|
package/types/unshift.d.ts
CHANGED
|
@@ -8,9 +8,9 @@ import { Slice } from './slice'
|
|
|
8
8
|
/**
|
|
9
9
|
* Replaces `T` element on specified index `I` with `E`.
|
|
10
10
|
*/
|
|
11
|
-
export type Unshift<
|
|
12
|
-
|
|
13
|
-
? [
|
|
14
|
-
:
|
|
15
|
-
? [...Trim<
|
|
16
|
-
: [...Trim<
|
|
11
|
+
export type Unshift<Array extends ReadonlyArray<any>, Index extends number, Element> =
|
|
12
|
+
Index extends 0
|
|
13
|
+
? [Element, ...Slice<Array, 1>]
|
|
14
|
+
: Index extends Trim<Array, 1>['length']
|
|
15
|
+
? [...Trim<Array, 1>, Element]
|
|
16
|
+
: [...Trim<Array, Slice<Array, Index>['length']>, Element, ...Slice<Slice<Array, Index>, 1>]
|