@h3ravel/arquebus 0.5.0 → 0.6.0
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/README.md +20 -1
- package/bin/index.cjs +196 -144
- package/bin/index.js +177 -94
- package/bin/seeders-8GJzfIIN.js +3 -0
- package/bin/seeders-ByeSoCAQ.cjs +131 -0
- package/bin/seeders-CltigymO.js +79 -0
- package/bin/seeders-_xJ6VGVS.cjs +3 -0
- package/dist/browser/index.cjs +9 -9
- package/dist/browser/index.d.cts +7 -7
- package/dist/browser/index.d.ts +7 -7
- package/dist/browser/index.js +9 -9
- package/dist/index.cjs +252 -121
- package/dist/index.d.cts +40 -8
- package/dist/index.d.ts +40 -8
- package/dist/index.js +245 -119
- package/dist/inspector/index.cjs +105 -33
- package/dist/inspector/index.js +102 -33
- package/dist/migrations/index.cjs +144 -126
- package/dist/migrations/index.d.cts +10 -10
- package/dist/migrations/index.d.ts +10 -10
- package/dist/migrations/index.js +148 -130
- package/dist/migrations/stubs/migration-js.stub +1 -1
- package/dist/migrations/stubs/migration-ts.stub +1 -1
- package/dist/migrations/stubs/migration.create-js.stub +5 -5
- package/dist/migrations/stubs/migration.create-ts.stub +5 -5
- package/dist/migrations/stubs/migration.update-js.stub +2 -2
- package/dist/migrations/stubs/migration.update-ts.stub +3 -3
- package/dist/seeders/index.cjs +141 -0
- package/dist/seeders/index.d.cts +4766 -0
- package/dist/seeders/index.d.ts +4766 -0
- package/dist/seeders/index.js +118 -0
- package/dist/seeders/index.ts +3 -0
- package/dist/seeders/runner.ts +102 -0
- package/dist/seeders/seeder-creator.ts +42 -0
- package/dist/seeders/seeder.ts +10 -0
- package/dist/stubs/seeder-js.stub +13 -0
- package/dist/stubs/seeder-ts.stub +9 -0
- package/package.json +14 -3
- package/types/builder.ts +153 -80
- package/types/container.ts +79 -66
- package/types/generics.ts +75 -37
- package/types/modeling.ts +213 -158
- package/types/query-builder.ts +221 -191
- package/types/query-methods.ts +145 -109
- package/types/utils.ts +64 -56
package/types/query-methods.ts
CHANGED
|
@@ -4,41 +4,51 @@ import type { Knex } from 'knex'
|
|
|
4
4
|
import type { Model } from 'src/model'
|
|
5
5
|
import type { PrimitiveValue } from './generics'
|
|
6
6
|
|
|
7
|
-
type Operator = string
|
|
8
|
-
type ColumnRef = string | Raw
|
|
9
|
-
type FieldExpression = string
|
|
10
|
-
type JsonObjectOrFieldExpression = object | object[] | FieldExpression
|
|
11
|
-
|
|
12
|
-
type TableRef<QB extends AnyQueryBuilder> =
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
type Operator = string
|
|
8
|
+
type ColumnRef = string | Raw
|
|
9
|
+
type FieldExpression = string
|
|
10
|
+
type JsonObjectOrFieldExpression = object | object[] | FieldExpression
|
|
11
|
+
|
|
12
|
+
type TableRef<QB extends AnyQueryBuilder> =
|
|
13
|
+
| ColumnRef
|
|
14
|
+
| AnyQueryBuilder
|
|
15
|
+
| CallbackVoid<QB>
|
|
16
|
+
type Selection<QB extends AnyQueryBuilder> =
|
|
17
|
+
| ColumnRef
|
|
18
|
+
| AnyQueryBuilder
|
|
19
|
+
| CallbackVoid<QB>
|
|
20
|
+
type QBOrCallback<QB extends AnyQueryBuilder> =
|
|
21
|
+
| AnyQueryBuilder
|
|
22
|
+
| CallbackVoid<QB>
|
|
15
23
|
|
|
16
24
|
interface CallbackVoid<T> {
|
|
17
|
-
|
|
25
|
+
(this: T, arg: T): void
|
|
18
26
|
}
|
|
19
27
|
|
|
20
|
-
export type Raw = Knex.Raw
|
|
28
|
+
export type Raw = Knex.Raw
|
|
21
29
|
|
|
22
|
-
export type OrderByDirection = 'asc' | 'desc' | 'ASC' | 'DESC'
|
|
30
|
+
export type OrderByDirection = 'asc' | 'desc' | 'ASC' | 'DESC'
|
|
23
31
|
|
|
24
32
|
export interface OrderByDescriptor {
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
column: ColumnRef
|
|
34
|
+
order?: OrderByDirection
|
|
27
35
|
}
|
|
28
36
|
|
|
29
|
-
export type AnyQueryBuilder<M extends Model = any, R = any> =
|
|
37
|
+
export type AnyQueryBuilder<M extends Model = any, R = any> =
|
|
38
|
+
| IQueryBuilder<M, R>
|
|
39
|
+
| IBuilder<M, R>
|
|
30
40
|
|
|
31
|
-
export type Expression<T> = T | Raw | AnyQueryBuilder
|
|
41
|
+
export type Expression<T> = T | Raw | AnyQueryBuilder
|
|
32
42
|
|
|
33
|
-
export type ColumnRefOrOrderByDescriptor = ColumnRef | OrderByDescriptor
|
|
43
|
+
export type ColumnRefOrOrderByDescriptor = ColumnRef | OrderByDescriptor
|
|
34
44
|
|
|
35
45
|
export interface RawInterface<R> {
|
|
36
|
-
|
|
46
|
+
(sql: string, ...bindings: any[]): R
|
|
37
47
|
}
|
|
38
48
|
|
|
39
49
|
export interface BaseSetOperations<QB extends AnyQueryBuilder> {
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
(callbackOrBuilder: QBOrCallback<QB>, wrap?: boolean): QB
|
|
51
|
+
(callbacksOrBuilders: QBOrCallback<QB>[], wrap?: boolean): QB
|
|
42
52
|
}
|
|
43
53
|
|
|
44
54
|
export type JoinRawMethod<QB extends AnyQueryBuilder> = RawInterface<QB> & {}
|
|
@@ -48,156 +58,182 @@ export type OrderByRawMethod<QB extends AnyQueryBuilder> = RawInterface<QB> & {}
|
|
|
48
58
|
export type WhereRawMethod<QB extends AnyQueryBuilder> = RawInterface<QB> & {}
|
|
49
59
|
|
|
50
60
|
export interface GroupByMethod<QB extends AnyQueryBuilder> {
|
|
51
|
-
|
|
52
|
-
|
|
61
|
+
(...columns: ColumnRef[]): QB
|
|
62
|
+
(columns: ColumnRef[]): QB
|
|
53
63
|
}
|
|
54
64
|
|
|
55
|
-
export type WithRelationType =
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
export type WithRelationType =
|
|
66
|
+
| {
|
|
67
|
+
[key: string]: <T extends IBuilder<any>>(builder: T) => T | void
|
|
68
|
+
}
|
|
69
|
+
| string
|
|
70
|
+
| string[]
|
|
58
71
|
|
|
59
|
-
export interface SetOperationsMethod<QB extends AnyQueryBuilder>
|
|
60
|
-
|
|
72
|
+
export interface SetOperationsMethod<QB extends AnyQueryBuilder>
|
|
73
|
+
extends BaseSetOperations<QB> {
|
|
74
|
+
(...callbacksOrBuilders: QBOrCallback<QB>[]): QB
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
export interface SelectMethod<QB extends AnyQueryBuilder> {
|
|
64
|
-
|
|
65
|
-
|
|
78
|
+
<QBP extends QB>(...columns: Selection<QBP>[]): QB
|
|
79
|
+
<QBP extends QB>(columns: Selection<QBP>[]): QB
|
|
66
80
|
}
|
|
67
81
|
|
|
68
82
|
export interface WhereMethod<QB extends AnyQueryBuilder> {
|
|
69
|
-
|
|
70
|
-
|
|
83
|
+
(col: ColumnRef, op: Operator, expr: Expression<PrimitiveValue>): QB
|
|
84
|
+
(col: ColumnRef, expr: Expression<PrimitiveValue>): QB
|
|
71
85
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
86
|
+
(condition: boolean): QB
|
|
87
|
+
(cb: CallbackVoid<QB>): QB
|
|
88
|
+
(raw: Raw): QB
|
|
89
|
+
<QBA extends AnyQueryBuilder>(qb: QBA): QB
|
|
76
90
|
|
|
77
|
-
|
|
91
|
+
(obj: object): QB
|
|
78
92
|
}
|
|
79
93
|
|
|
80
94
|
export interface WhereWrappedMethod<QB extends AnyQueryBuilder> {
|
|
81
|
-
|
|
95
|
+
(cb: CallbackVoid<QB>): QB
|
|
82
96
|
}
|
|
83
97
|
|
|
84
98
|
export interface WhereFieldExpressionMethod<QB extends AnyQueryBuilder> {
|
|
85
|
-
|
|
99
|
+
(fieldExpression: FieldExpression): QB
|
|
86
100
|
}
|
|
87
101
|
|
|
88
102
|
export interface WhereExistsMethod<QB extends AnyQueryBuilder> {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
103
|
+
(cb: CallbackVoid<QB>): QB
|
|
104
|
+
(raw: Raw): QB
|
|
105
|
+
<QBA extends AnyQueryBuilder>(qb: QBA): QB
|
|
92
106
|
}
|
|
93
107
|
|
|
94
108
|
export interface WhereInMethod<QB extends AnyQueryBuilder> {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
109
|
+
(col: ColumnRef | ColumnRef[], expr: Expression<PrimitiveValue>[]): QB
|
|
110
|
+
(col: ColumnRef | ColumnRef[], cb: CallbackVoid<QB>): QB
|
|
111
|
+
(col: ColumnRef | ColumnRef[], qb: AnyQueryBuilder): QB
|
|
98
112
|
}
|
|
99
113
|
|
|
100
114
|
export interface WhereBetweenMethod<QB extends AnyQueryBuilder> {
|
|
101
|
-
|
|
115
|
+
(
|
|
116
|
+
column: ColumnRef,
|
|
117
|
+
range: [Expression<PrimitiveValue>, Expression<PrimitiveValue>],
|
|
118
|
+
): QB
|
|
102
119
|
}
|
|
103
120
|
|
|
104
121
|
export interface WhereNullMethod<QB extends AnyQueryBuilder> {
|
|
105
|
-
|
|
122
|
+
(column: ColumnRef): QB
|
|
106
123
|
}
|
|
107
124
|
|
|
108
125
|
export interface OrderByMethod<QB extends AnyQueryBuilder> {
|
|
109
|
-
|
|
110
|
-
|
|
126
|
+
(column: ColumnRef, order?: OrderByDirection): QB
|
|
127
|
+
(columns: ColumnRefOrOrderByDescriptor[]): QB
|
|
111
128
|
}
|
|
112
129
|
|
|
113
130
|
export interface WhereJsonExpressionMethod<QB extends AnyQueryBuilder> {
|
|
114
|
-
|
|
131
|
+
(fieldExpression: FieldExpression, keys: string | string[]): QB
|
|
115
132
|
}
|
|
116
133
|
|
|
117
134
|
export interface ReturningMethod<QB extends AnyQueryBuilder> {
|
|
118
|
-
|
|
135
|
+
(
|
|
136
|
+
key: FieldExpression | FieldExpression[],
|
|
137
|
+
options?: { [key: string]: any },
|
|
138
|
+
): QB
|
|
119
139
|
}
|
|
120
140
|
|
|
121
141
|
export interface FirstOrFailMethod<QB extends AnyQueryBuilder> {
|
|
122
|
-
|
|
142
|
+
(): Promise<QB>
|
|
123
143
|
}
|
|
124
144
|
|
|
125
145
|
export interface AddSelectMethod<QB extends AnyQueryBuilder> {
|
|
126
|
-
|
|
146
|
+
(params: string[]): QB
|
|
127
147
|
}
|
|
128
148
|
|
|
129
149
|
export interface ForceDeleteMethod {
|
|
130
|
-
|
|
150
|
+
(): Promise<boolean | number>
|
|
131
151
|
}
|
|
132
152
|
|
|
133
153
|
export interface RestoreMethod {
|
|
134
|
-
|
|
154
|
+
(): Promise<number>
|
|
135
155
|
}
|
|
136
156
|
|
|
137
157
|
export interface WhereColumnMethod<QB extends AnyQueryBuilder> {
|
|
138
|
-
|
|
139
|
-
|
|
158
|
+
(col1: ColumnRef, op: Operator, col2: ColumnRef): QB
|
|
159
|
+
(col1: ColumnRef, col2: ColumnRef): QB
|
|
140
160
|
}
|
|
141
161
|
|
|
142
162
|
export interface JoinMethod<QB extends AnyQueryBuilder> {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
163
|
+
(
|
|
164
|
+
table: TableRef<QB>,
|
|
165
|
+
leftCol: ColumnRef,
|
|
166
|
+
op: Operator,
|
|
167
|
+
rightCol: ColumnRef,
|
|
168
|
+
): QB
|
|
169
|
+
(table: TableRef<QB>, leftCol: ColumnRef, rightCol: ColumnRef): QB
|
|
170
|
+
(table: TableRef<QB>, cb: CallbackVoid<Knex.JoinClause>): QB
|
|
171
|
+
(table: TableRef<QB>, raw: Raw): QB
|
|
172
|
+
(raw: Raw): QB
|
|
148
173
|
}
|
|
149
174
|
|
|
150
175
|
export interface WhereJsonMethod<QB extends AnyQueryBuilder> {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export interface UnionMethod<QB extends AnyQueryBuilder>
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
176
|
+
(
|
|
177
|
+
fieldExpression: FieldExpression,
|
|
178
|
+
jsonObjectOrFieldExpression: JsonObjectOrFieldExpression,
|
|
179
|
+
): QB
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export interface UnionMethod<QB extends AnyQueryBuilder>
|
|
183
|
+
extends BaseSetOperations<QB> {
|
|
184
|
+
(arg1: QBOrCallback<QB>, wrap?: boolean): QB
|
|
185
|
+
(arg1: QBOrCallback<QB>, arg2: QBOrCallback<QB>, wrap?: boolean): QB
|
|
186
|
+
(
|
|
187
|
+
arg1: QBOrCallback<QB>,
|
|
188
|
+
arg2: QBOrCallback<QB>,
|
|
189
|
+
arg3: QBOrCallback<QB>,
|
|
190
|
+
wrap?: boolean,
|
|
191
|
+
): QB
|
|
192
|
+
(
|
|
193
|
+
arg1: QBOrCallback<QB>,
|
|
194
|
+
arg2: QBOrCallback<QB>,
|
|
195
|
+
arg3: QBOrCallback<QB>,
|
|
196
|
+
arg4: QBOrCallback<QB>,
|
|
197
|
+
wrap?: boolean,
|
|
198
|
+
): QB
|
|
199
|
+
(
|
|
200
|
+
arg1: QBOrCallback<QB>,
|
|
201
|
+
arg2: QBOrCallback<QB>,
|
|
202
|
+
arg3: QBOrCallback<QB>,
|
|
203
|
+
arg4: QBOrCallback<QB>,
|
|
204
|
+
arg5: QBOrCallback<QB>,
|
|
205
|
+
wrap?: boolean,
|
|
206
|
+
): QB
|
|
207
|
+
(
|
|
208
|
+
arg1: QBOrCallback<QB>,
|
|
209
|
+
arg2: QBOrCallback<QB>,
|
|
210
|
+
arg3: QBOrCallback<QB>,
|
|
211
|
+
arg4: QBOrCallback<QB>,
|
|
212
|
+
arg5: QBOrCallback<QB>,
|
|
213
|
+
arg6: QBOrCallback<QB>,
|
|
214
|
+
wrap?: boolean,
|
|
215
|
+
): QB
|
|
216
|
+
(
|
|
217
|
+
arg1: QBOrCallback<QB>,
|
|
218
|
+
arg2: QBOrCallback<QB>,
|
|
219
|
+
arg3: QBOrCallback<QB>,
|
|
220
|
+
arg4: QBOrCallback<QB>,
|
|
221
|
+
arg5: QBOrCallback<QB>,
|
|
222
|
+
arg6: QBOrCallback<QB>,
|
|
223
|
+
arg7: QBOrCallback<QB>,
|
|
224
|
+
wrap?: boolean,
|
|
225
|
+
): QB
|
|
195
226
|
}
|
|
196
227
|
|
|
197
228
|
export interface JoinMethod<QB extends AnyQueryBuilder> {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
229
|
+
(
|
|
230
|
+
table: TableRef<QB>,
|
|
231
|
+
leftCol: ColumnRef,
|
|
232
|
+
op: Operator,
|
|
233
|
+
rightCol: ColumnRef,
|
|
234
|
+
): QB
|
|
235
|
+
(table: TableRef<QB>, leftCol: ColumnRef, rightCol: ColumnRef): QB
|
|
236
|
+
(table: TableRef<QB>, cb: CallbackVoid<Knex.JoinClause>): QB
|
|
237
|
+
(table: TableRef<QB>, raw: Raw): QB
|
|
238
|
+
(raw: Raw): QB
|
|
203
239
|
}
|
package/types/utils.ts
CHANGED
|
@@ -6,65 +6,73 @@ import type { IModel } from './modeling'
|
|
|
6
6
|
import type Model from 'src/model'
|
|
7
7
|
import type { TGeneric } from './generics'
|
|
8
8
|
|
|
9
|
-
export interface ICollection<T extends Model | BModel>
|
|
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
|
-
|
|
9
|
+
export interface ICollection<T extends Model | BModel>
|
|
10
|
+
extends BaseCollection<T> {
|
|
11
|
+
items?: T[]
|
|
12
|
+
load(...relations: T[]): Promise<ICollection<T>>
|
|
13
|
+
loadAggregate(
|
|
14
|
+
relations: T | T[],
|
|
15
|
+
column: string,
|
|
16
|
+
action?: string | null,
|
|
17
|
+
): Promise<this>
|
|
18
|
+
loadCount(relation: T, column: string): Promise<this>
|
|
19
|
+
loadMax(relation: T, column: string): Promise<this>
|
|
20
|
+
loadMin(relation: T, column: string): Promise<this>
|
|
21
|
+
loadSum(relation: T, column: string): Promise<this>
|
|
22
|
+
loadAvg(relation: T, column: string): Promise<this>
|
|
23
|
+
mapThen(callback: () => void): Promise<any>
|
|
24
|
+
modelKeys(): string[] | number[]
|
|
25
|
+
contains(key: IModel | any, operator?: any, value?: any): boolean
|
|
26
|
+
diff(items: ICollection<T> | any[]): ICollection<T>
|
|
27
|
+
except(keys: any[]): ICollection<T>
|
|
28
|
+
intersect(items: T[]): ICollection<T>
|
|
29
|
+
unique(key?: any, strict?: boolean): ICollection<T>
|
|
30
|
+
find(key: any, defaultValue?: any): any
|
|
31
|
+
fresh(withs?: any[]): Promise<ICollection<T>>
|
|
32
|
+
makeVisible(attributes: string | string[]): this
|
|
33
|
+
makeHidden(attributes: string | string[]): this
|
|
34
|
+
append(attributes: string[]): this
|
|
35
|
+
only(keys: null | any[]): this
|
|
36
|
+
getDictionary(items?: any[]): TGeneric
|
|
37
|
+
toQuery(): IBuilder<T, any>
|
|
38
|
+
toData(): any
|
|
39
|
+
toJSON(): any
|
|
40
|
+
toJson(): string
|
|
41
|
+
toString(): string
|
|
42
|
+
[key: string]: any
|
|
43
|
+
[Symbol.iterator]: () => Iterator<T>
|
|
39
44
|
}
|
|
40
45
|
|
|
41
46
|
export interface IPaginatorParams {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
current_page: number
|
|
48
|
+
data: any[]
|
|
49
|
+
per_page: number
|
|
50
|
+
total: number
|
|
51
|
+
last_page: number
|
|
52
|
+
count: number
|
|
53
|
+
paginated?: boolean
|
|
49
54
|
}
|
|
50
55
|
|
|
51
|
-
export interface IPaginator<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
56
|
+
export interface IPaginator<
|
|
57
|
+
T extends Model | BModel,
|
|
58
|
+
K extends IPaginatorParams = IPaginatorParams,
|
|
59
|
+
> {
|
|
60
|
+
formatter?(paginator: IPaginator<any>): any | null
|
|
61
|
+
setFormatter?(formatter: (paginator: IPaginator<any>) => any | null): void
|
|
62
|
+
setItems(items: T[] | Collection<T>): void
|
|
63
|
+
hasMorePages(): boolean
|
|
64
|
+
get(index: number): T | null
|
|
65
|
+
count(): number
|
|
66
|
+
items(): Collection<T>
|
|
67
|
+
map(callback: (value: T, index: number) => T): Collection<T>
|
|
68
|
+
currentPage(): number
|
|
69
|
+
perPage(): number
|
|
70
|
+
lastPage(): number
|
|
71
|
+
firstItem(): number | null
|
|
72
|
+
lastItem(): number | null
|
|
73
|
+
total(): number
|
|
74
|
+
toData<U = K>(): U
|
|
75
|
+
toJSON<U = K>(): U
|
|
76
|
+
toJson(): string
|
|
77
|
+
[Symbol.iterator]?(): { next: () => { value: T; done: boolean } }
|
|
70
78
|
}
|