-
Notifications
You must be signed in to change notification settings - Fork 1
/
multi-dict.d.ts
105 lines (100 loc) · 2.43 KB
/
multi-dict.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
type GenericConstructor = new (...args: unknown[]) => object
interface TreeOptions<
DType extends GenericConstructor,
Types extends GenericConstructor[]
> {
defaultType?: DType
types?: Types
}
declare class Tree<
Keys extends any[],
Val,
DType extends GenericConstructor = typeof Map,
Types extends GenericConstructor[] = []
> {
private root: DType
public options: TreeOptions<DType, Types>
constructor(options: TreeOptions<DType, Types>)
get(keys: Keys, value: false): DType | Types[number] | undefined
get(keys: Keys, value: true): Val | undefined
set(keys: Keys, value: Val): void
has(keys: Keys): boolean
clear(): void
level(keys: Keys): Item<Keys, Val>[]
private createNode(depth: number): DType | Types[number]
}
declare class Item<Keys extends any[], Val> {
public keys: Keys
public value: Val
constructor(keys: Keys, value: Val)
}
export default class MultiDict<
Keys extends any[],
Val,
DType extends GenericConstructor = typeof Map,
Types extends GenericConstructor[] = []
> {
private tree: Tree<Keys, Val, DType, Types>
private items: Set<Item<Keys, Val>>
/**
* @param entries Iterable of [...keys, value] entries.
* @param options
*/
constructor(entries?: [...Keys, Val][], options?: TreeOptions<DType, Types>)
get size(): number
get [Symbol.toStringTag](): "MultiDict"
set(...keysAndValue: [...Keys, Val]): this
get(...keys: Keys): Val | undefined
/**
* Check if an entry exists. Always false for partial key paths.
*/
has(...keys: Keys): boolean
/**
* Delete an entry.
*/
delete(...keys: Keys): boolean
/**
* Remove all entries
*/
clear(): void
/**
* Create a new dictionary from the given level.
*/
level<NewKeys extends any[]>(
...keys: Keys
): MultiDict<NewKeys, Val, DType, Types>
/**
* Get an iterator for each of the entries.
*
* @generator
*/
[Symbol.iterator](): IterableIterator<[Keys, Val]>
/**
* Get an iterator for each of the entries.
*
* @generator
*/
entries(): IterableIterator<[Keys, Val]>
/**
* Get an iterator for each of the keys.
*
* @generator
*/
keys(): IterableIterator<Keys>
/**
* Get an iterator for each of the values.
*
* @generator
*/
values(): IterableIterator<Val>
/**
* Call a callback for each of the registered entries.
*
* @param callback
* @param thisArg Optional 'this' context for the callback
*/
forEach<ThisArg>(
callback: (this: ThisArg, key: Keys, val: Val, dict: this) => void,
thisArg: ThisArg
): void
}