fleethub-core 1.6.2 → 1.7.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.
@@ -3,46 +3,6 @@
3
3
  /**
4
4
  */
5
5
  export function set_panic_hook(): void;
6
- export interface EBonuses {
7
- firepower: number;
8
- torpedo: number;
9
- anti_air: number;
10
- armor: number;
11
- evasion: number;
12
- asw: number;
13
- los: number;
14
- bombing: number;
15
- accuracy: number;
16
- range: number;
17
- }
18
-
19
- export interface ShipInput {
20
- ship_id: number;
21
- ctype: number;
22
- stype: number;
23
- yomi: string;
24
- }
25
-
26
- export interface GearInput {
27
- gear_id: number;
28
- types: GearTypeIdArray;
29
- firepower: number;
30
- torpedo: number;
31
- anti_air: number;
32
- armor: number;
33
- evasion: number;
34
- asw: number;
35
- los: number;
36
- bombing: number;
37
- accuracy: number;
38
- range: number;
39
- radius: number;
40
- stars: number;
41
- ace: number;
42
- }
43
-
44
- export type GearVecInput = GearInput[];
45
-
46
6
  export type ShipType =
47
7
  | "Unknown"
48
8
  | "DE"
@@ -78,46 +38,40 @@ export type ShipCategory =
78
38
  | "Submarine"
79
39
  | "AuxiliaryShip";
80
40
 
81
- export type AirStateRank = "Rank0" | "Rank1" | "Rank2" | "Rank3";
41
+ export type ShellingSpecialAttack =
42
+ | { DayCutin: DayCutin }
43
+ | { FleetCutin: FleetCutin };
82
44
 
83
- export type AirState =
84
- | "AirSupremacy"
85
- | "AirSuperiority"
86
- | "AirParity"
87
- | "AirDenial"
88
- | "AirIncapability";
45
+ export type DayCutin =
46
+ | "MainMain"
47
+ | "MainAp"
48
+ | "MainRadar"
49
+ | "MainSec"
50
+ | "DoubleAttack"
51
+ | "FBA"
52
+ | "BBA"
53
+ | "BA"
54
+ | "Zuiun"
55
+ | "AirSea";
89
56
 
90
- export interface FleetCutinAnalysis {
91
- shelling: FleetCutinInfo[];
92
- night: FleetCutinInfo[];
57
+ export interface ShellingSupportSimulatorParams {
58
+ attacker_formation: Formation;
59
+ target_formation: Formation;
60
+ engagement: Engagement;
61
+ custom_mods: CustomModifiers;
93
62
  }
94
63
 
95
- export interface FleetCutinInfo {
96
- cutin: FleetCutin;
97
- rate: number | null;
98
- formation: Formation;
99
- items: FleetCutinInfoItem[];
100
- }
64
+ export type ShellingAttackType = "Normal" | "Carrier";
101
65
 
102
- export interface FleetCutinInfoItem {
103
- ship_id: number;
104
- cutin: FleetCutin;
105
- fleet_cutin_mod: number;
106
- stats: AttackStats;
107
- }
66
+ export type AirWaveType = "Jet" | "LandBase" | "Carrier";
108
67
 
109
- export interface DamageInfo {
110
- miss_damage_min: number;
111
- miss_damage_max: number;
112
- normal_damage_min: number;
113
- normal_damage_max: number;
114
- critical_damage_min: number;
115
- critical_damage_max: number;
116
- normal_scratch_rate: number;
117
- critical_scratch_rate: number;
118
- damage_map: NumMap<number, number>;
119
- damage_state_map: NumMap<DamageState, number>;
120
- }
68
+ export type OrgType =
69
+ | "Single"
70
+ | "CarrierTaskForce"
71
+ | "SurfaceTaskForce"
72
+ | "TransportEscort"
73
+ | "EnemySingle"
74
+ | "EnemyCombined";
121
75
 
122
76
  export interface WarfareContext {
123
77
  attacker_env: WarfareShipEnvironment;
@@ -136,6 +90,21 @@ export interface WarfareShipEnvironment {
136
90
  fleet_los_mod: number | null;
137
91
  }
138
92
 
93
+ export interface CompMeta {
94
+ fleets: Record<FleetType, FleetMeta>;
95
+ }
96
+
97
+ export interface FleetMeta {
98
+ id: string;
99
+ len: number;
100
+ ships: [string, ShipMeta | null][];
101
+ }
102
+
103
+ export interface ShipMeta {
104
+ id: string;
105
+ ship_id: number;
106
+ }
107
+
139
108
  export interface AttackPower {
140
109
  precap: number;
141
110
  is_capped: boolean;
@@ -182,28 +151,9 @@ export interface AttackPowerModifier {
182
151
  b: number;
183
152
  }
184
153
 
185
- export type OrgType =
186
- | "Single"
187
- | "CarrierTaskForce"
188
- | "SurfaceTaskForce"
189
- | "TransportEscort"
190
- | "EnemySingle"
191
- | "EnemyCombined";
192
-
193
- export interface CompMeta {
194
- fleets: Record<FleetType, FleetMeta>;
195
- }
196
-
197
- export interface FleetMeta {
198
- id: string;
199
- len: number;
200
- ships: [string, ShipMeta | null][];
201
- }
154
+ export type NumMap<K, V> = Partial<Record<K, V>>;
202
155
 
203
- export interface ShipMeta {
204
- id: string;
205
- ship_id: number;
206
- }
156
+ export type Role = "Main" | "Escort";
207
157
 
208
158
  export interface MasterData {
209
159
  gears: MasterGear[];
@@ -231,26 +181,6 @@ export interface MasterAttrRule<T> {
231
181
  expr: string;
232
182
  }
233
183
 
234
- export type NumMap<K, V> = Partial<Record<K, V>>;
235
-
236
- export type ShellingSpecialAttack =
237
- | { DayCutin: DayCutin }
238
- | { FleetCutin: FleetCutin };
239
-
240
- export type DayCutin =
241
- | "MainMain"
242
- | "MainAp"
243
- | "MainRadar"
244
- | "MainSec"
245
- | "DoubleAttack"
246
- | "FBA"
247
- | "BBA"
248
- | "BA"
249
- | "Zuiun"
250
- | "AirSea";
251
-
252
- export type Role = "Main" | "Escort";
253
-
254
184
  export type GearCategory =
255
185
  | "Fighter"
256
186
  | "Bomber"
@@ -328,15 +258,6 @@ export type GearType =
328
258
 
329
259
  export type Engagement = "GreenT" | "Parallel" | "HeadOn" | "RedT";
330
260
 
331
- export interface ShellingSupportSimulatorParams {
332
- attacker_formation: Formation;
333
- target_formation: Formation;
334
- engagement: Engagement;
335
- custom_mods: CustomModifiers;
336
- }
337
-
338
- export type ShellingAttackType = "Normal" | "Carrier";
339
-
340
261
  export interface CompDayCutinRateInfo {
341
262
  main: FleetDayCutinRateInfo;
342
263
  escort: FleetDayCutinRateInfo | null;
@@ -359,6 +280,46 @@ export interface DayCutinRateInfo {
359
280
  total_cutin_rate: number | null;
360
281
  }
361
282
 
283
+ export interface EBonuses {
284
+ firepower: number;
285
+ torpedo: number;
286
+ anti_air: number;
287
+ armor: number;
288
+ evasion: number;
289
+ asw: number;
290
+ los: number;
291
+ bombing: number;
292
+ accuracy: number;
293
+ range: number;
294
+ }
295
+
296
+ export interface ShipInput {
297
+ ship_id: number;
298
+ ctype: number;
299
+ stype: number;
300
+ yomi: string;
301
+ }
302
+
303
+ export interface GearInput {
304
+ gear_id: number;
305
+ types: GearTypeIdArray;
306
+ firepower: number;
307
+ torpedo: number;
308
+ anti_air: number;
309
+ armor: number;
310
+ evasion: number;
311
+ asw: number;
312
+ los: number;
313
+ bombing: number;
314
+ accuracy: number;
315
+ range: number;
316
+ radius: number;
317
+ stars: number;
318
+ ace: number;
319
+ }
320
+
321
+ export type GearVecInput = GearInput[];
322
+
362
323
  export type ShipAttr =
363
324
  | "Unknown"
364
325
  | "Abyssal"
@@ -375,6 +336,15 @@ export type ShipAttr =
375
336
  | "BattleshipSummerPrincess"
376
337
  | "HeavyCruiserSummerPrincess";
377
338
 
339
+ export type AirStateRank = "Rank0" | "Rank1" | "Rank2" | "Rank3";
340
+
341
+ export type AirState =
342
+ | "AirSupremacy"
343
+ | "AirSuperiority"
344
+ | "AirParity"
345
+ | "AirDenial"
346
+ | "AirIncapability";
347
+
378
348
  export interface MasterIBonuses {
379
349
  shelling_power: MasterIBonusRule[];
380
350
  carrier_shelling_power: MasterIBonusRule[];
@@ -405,6 +375,38 @@ export interface NightSituation {
405
375
  searchlight: boolean;
406
376
  }
407
377
 
378
+ export interface FleetCutinAnalysis {
379
+ shelling: FleetCutinInfo[];
380
+ night: FleetCutinInfo[];
381
+ }
382
+
383
+ export interface FleetCutinInfo {
384
+ cutin: FleetCutin;
385
+ rate: number | null;
386
+ formation: Formation;
387
+ items: FleetCutinInfoItem[];
388
+ }
389
+
390
+ export interface FleetCutinInfoItem {
391
+ ship_id: number;
392
+ cutin: FleetCutin;
393
+ fleet_cutin_mod: number;
394
+ stats: AttackStats;
395
+ }
396
+
397
+ export interface DamageInfo {
398
+ miss_damage_min: number;
399
+ miss_damage_max: number;
400
+ normal_damage_min: number;
401
+ normal_damage_max: number;
402
+ critical_damage_min: number;
403
+ critical_damage_max: number;
404
+ normal_scratch_rate: number;
405
+ critical_scratch_rate: number;
406
+ damage_map: NumMap<number, number>;
407
+ damage_state_map: NumMap<DamageState, number>;
408
+ }
409
+
408
410
  export type GearAttr =
409
411
  | "Unknown"
410
412
  | "Abyssal"
@@ -454,27 +456,6 @@ export type SingleFormation =
454
456
 
455
457
  export type FleetType = "Main" | "Escort" | "RouteSup" | "BossSup";
456
458
 
457
- export interface AttackInfo<AttackType, Cutin> {
458
- attack_type: AttackType;
459
- items: AttackInfoItem<Cutin>[];
460
- damage_state_map: NumMap<DamageState, number> | null;
461
- }
462
-
463
- export interface AttackInfoItem<Cutin> {
464
- cutin: Cutin;
465
- rate: number | null;
466
- stats: AttackStats;
467
- }
468
-
469
- export interface AttackStats {
470
- attack_power: AttackPower | null;
471
- attack_power_params: AttackPowerParams | null;
472
- hits: number;
473
- hit_rate: HitRate | null;
474
- hit_rate_params: HitRateParams | null;
475
- damage: DamageInfo | null;
476
- }
477
-
478
459
  export interface CompAntiAirInfo {
479
460
  fleet_adjusted_anti_air: number;
480
461
  ships: ShipAntiAirInfo[];
@@ -505,6 +486,122 @@ export interface AirstrikeContactChance {
505
486
  total: number;
506
487
  }
507
488
 
489
+ export type SlotSizeVec = (number | null)[];
490
+
491
+ export type NightAttackType = "Normal" | "ArkRoyal" | "Carrier";
492
+
493
+ export type NightSpecialAttack =
494
+ | { NightCutin: NightCutin }
495
+ | { FleetCutin: FleetCutin };
496
+
497
+ export type NightCutin =
498
+ | "MainTorpRadar"
499
+ | "TorpLookoutRadar"
500
+ | "TorpTsloTorp"
501
+ | "TorpTsloDrum"
502
+ | "DoubleAttack"
503
+ | "TorpTorpMain"
504
+ | "TorpTorpTorp"
505
+ | "MainMainSec"
506
+ | "MainMainMain"
507
+ | "SubTorpTorp"
508
+ | "SubRadarTorp"
509
+ | "Cvci1_25"
510
+ | "Cvci1_20"
511
+ | "Cvci1_18"
512
+ | "Photobomber";
513
+
514
+ export interface MasterGear {
515
+ gear_id: number;
516
+ name: string;
517
+ types: GearTypeIdArray;
518
+ special_type?: number;
519
+ max_hp?: number;
520
+ firepower?: number;
521
+ armor?: number;
522
+ torpedo?: number;
523
+ anti_air?: number;
524
+ speed?: number;
525
+ bombing?: number;
526
+ asw?: number;
527
+ los?: number;
528
+ luck?: number;
529
+ accuracy?: number;
530
+ evasion?: number;
531
+ range?: number;
532
+ radius?: number;
533
+ cost?: number;
534
+ improvable?: boolean;
535
+ ship_anti_air_resistance?: number;
536
+ fleet_anti_air_resistance?: number;
537
+ }
538
+
539
+ export interface MasterEquippable {
540
+ equip_stype: EquipStype[];
541
+ equip_exslot: number[];
542
+ equip_ship: MstEquipShip[];
543
+ equip_exslot_ship: MstEquipExslotShip[];
544
+ }
545
+
546
+ export interface MstEquipExslotShip {
547
+ api_slotitem_id: number;
548
+ api_ship_ids: number[];
549
+ }
550
+
551
+ export interface MstEquipShip {
552
+ api_ship_id: number;
553
+ api_equip_type: number[];
554
+ }
555
+
556
+ export interface EquipStype {
557
+ id: number;
558
+ equip_type: number[];
559
+ }
560
+
561
+ export interface HitRate {
562
+ total: number;
563
+ normal: number;
564
+ critical: number;
565
+ }
566
+
567
+ export interface HitRateParams {
568
+ accuracy_term: number;
569
+ evasion_term: number;
570
+ target_morale_mod: number;
571
+ critical_rate_constant: number;
572
+ critical_percentage_bonus: number;
573
+ hit_percentage_bonus: number;
574
+ }
575
+
576
+ export type NightBattleAttackType =
577
+ | { t: "NightAttack"; c: NightAttackType }
578
+ | { t: "Asw"; c: AswAttackType };
579
+
580
+ export type DayBattleAttackType =
581
+ | { t: "Shelling"; c: ShellingAttackType }
582
+ | { t: "Asw"; c: AswAttackType };
583
+
584
+ export interface AttackInfo<AttackType, Cutin> {
585
+ attack_type: AttackType;
586
+ items: AttackInfoItem<Cutin>[];
587
+ damage_state_map: NumMap<DamageState, number> | null;
588
+ }
589
+
590
+ export interface AttackInfoItem<Cutin> {
591
+ cutin: Cutin;
592
+ rate: number | null;
593
+ stats: AttackStats;
594
+ }
595
+
596
+ export interface AttackStats {
597
+ attack_power: AttackPower | null;
598
+ attack_power_params: AttackPowerParams | null;
599
+ hits: number;
600
+ hit_rate: HitRate | null;
601
+ hit_rate_params: HitRateParams | null;
602
+ damage: DamageInfo | null;
603
+ }
604
+
508
605
  export type ShipStateMap = Record<ShipKey, ShipState>;
509
606
 
510
607
  export type ShipKey = "s1" | "s2" | "s3" | "s4" | "s5" | "s6" | "s7";
@@ -555,7 +652,7 @@ export interface FleetState {
555
652
  s7?: ShipState;
556
653
  }
557
654
 
558
- export interface ShipState {
655
+ export interface ShipState extends GearVecState, SlotSizeVecState {
559
656
  id?: string;
560
657
  ship_id: number;
561
658
  level?: number;
@@ -572,26 +669,23 @@ export interface ShipState {
572
669
  asw_mod?: number;
573
670
  los_mod?: number;
574
671
  luck_mod?: number;
575
- g1?: GearState;
576
- g2?: GearState;
577
- g3?: GearState;
578
- g4?: GearState;
579
- g5?: GearState;
580
- gx?: GearState;
672
+ }
673
+
674
+ export interface SlotSizeVecState {
581
675
  ss1?: number;
582
676
  ss2?: number;
583
677
  ss3?: number;
584
678
  ss4?: number;
585
679
  ss5?: number;
586
- overrides?: ShipOverrides;
587
680
  }
588
681
 
589
- export interface ShipOverrides {
590
- naked_max_hp?: number;
591
- naked_luck?: number;
592
- naked_evasion?: number;
593
- naked_asw?: number;
594
- naked_los?: number;
682
+ export interface GearVecState {
683
+ g1?: GearState;
684
+ g2?: GearState;
685
+ g3?: GearState;
686
+ g4?: GearState;
687
+ g5?: GearState;
688
+ gx?: GearState;
595
689
  }
596
690
 
597
691
  export interface GearState {
@@ -601,55 +695,69 @@ export interface GearState {
601
695
  stars?: number;
602
696
  }
603
697
 
604
- export interface MasterEquippable {
605
- equip_stype: EquipStype[];
606
- equip_exslot: number[];
607
- equip_ship: MstEquipShip[];
608
- equip_exslot_ship: MstEquipExslotShip[];
698
+ export interface MasterShip {
699
+ ship_id: number;
700
+ name: string;
701
+ yomi: string;
702
+ stype: number;
703
+ ctype: number;
704
+ sort_id?: number;
705
+ max_hp: StatInterval;
706
+ firepower: StatInterval;
707
+ armor: StatInterval;
708
+ torpedo: StatInterval;
709
+ evasion: StatInterval;
710
+ anti_air: StatInterval;
711
+ asw: StatInterval;
712
+ los: StatInterval;
713
+ luck: StatInterval;
714
+ torpedo_accuracy?: number;
715
+ basic_evasion_term?: number;
716
+ speed: number;
717
+ range?: number;
718
+ fuel?: number;
719
+ ammo?: number;
720
+ next_id?: number;
721
+ next_level?: number;
722
+ slotnum: number;
723
+ slots: SlotSizeVec;
724
+ stock: GearState[];
725
+ speed_group?: SpeedGroup;
726
+ useful?: boolean;
609
727
  }
610
728
 
611
- export interface MstEquipExslotShip {
612
- api_slotitem_id: number;
613
- api_ship_ids: number[];
729
+ export type StatInterval = [number | null, number | null];
730
+
731
+ export interface WarfareInfo {
732
+ day: AttackInfo<DayBattleAttackType, DayCutin | null> | null;
733
+ closing_torpedo: AttackInfo<null, null> | null;
734
+ night: AttackInfo<NightBattleAttackType, NightCutin | null> | null;
735
+ shelling_support: AttackInfo<null, null> | null;
736
+ opening_asw: AttackInfo<null, null> | null;
614
737
  }
615
738
 
616
- export interface MstEquipShip {
617
- api_ship_id: number;
618
- api_equip_type: number[];
739
+ export interface WarfareAnalyzerContext {
740
+ attacker_env: WarfareAnalyzerShipEnvironment;
741
+ target_env: WarfareAnalyzerShipEnvironment;
742
+ engagement: Engagement;
743
+ air_state: AirState;
619
744
  }
620
745
 
621
- export interface EquipStype {
622
- id: number;
623
- equip_type: number[];
746
+ export interface WarfareAnalyzerShipEnvironment {
747
+ org_type: OrgType;
748
+ role: Role;
749
+ ship_index: number;
750
+ fleet_len: number;
751
+ formation: Formation;
752
+ fleet_los_mod: number | null;
753
+ night_situation: NightSituation;
754
+ custom_mods: CustomModifiers;
624
755
  }
625
756
 
626
- export type SlotSizeVec = (number | null)[];
757
+ export type GearTypeIdArray = [number, number, number, number, number];
627
758
 
628
759
  export type Side = "Player" | "Enemy";
629
760
 
630
- export type NightAttackType = "Normal" | "ArkRoyal" | "Carrier";
631
-
632
- export type NightSpecialAttack =
633
- | { NightCutin: NightCutin }
634
- | { FleetCutin: FleetCutin };
635
-
636
- export type NightCutin =
637
- | "MainTorpRadar"
638
- | "TorpLookoutRadar"
639
- | "TorpTsloTorp"
640
- | "TorpTsloDrum"
641
- | "DoubleAttack"
642
- | "TorpTorpMain"
643
- | "TorpTorpTorp"
644
- | "MainMainSec"
645
- | "MainMainMain"
646
- | "SubTorpTorp"
647
- | "SubRadarTorp"
648
- | "Cvci1_25"
649
- | "Cvci1_20"
650
- | "Cvci1_18"
651
- | "Photobomber";
652
-
653
761
  export interface BattleConfig {
654
762
  formation: Record<Formation, NestedFormationDef>;
655
763
  anti_air_cutin: Record<number, AntiAirCutinDef>;
@@ -702,114 +810,6 @@ export interface FormationWarfareDef {
702
810
  evasion_mod: number | null;
703
811
  }
704
812
 
705
- export interface MasterGear {
706
- gear_id: number;
707
- name: string;
708
- types: GearTypeIdArray;
709
- special_type?: number;
710
- max_hp?: number;
711
- firepower?: number;
712
- armor?: number;
713
- torpedo?: number;
714
- anti_air?: number;
715
- speed?: number;
716
- bombing?: number;
717
- asw?: number;
718
- los?: number;
719
- luck?: number;
720
- accuracy?: number;
721
- evasion?: number;
722
- range?: number;
723
- radius?: number;
724
- cost?: number;
725
- improvable?: boolean;
726
- ship_anti_air_resistance?: number;
727
- fleet_anti_air_resistance?: number;
728
- }
729
-
730
- export interface HitRate {
731
- total: number;
732
- normal: number;
733
- critical: number;
734
- }
735
-
736
- export interface HitRateParams {
737
- accuracy_term: number;
738
- evasion_term: number;
739
- target_morale_mod: number;
740
- critical_rate_constant: number;
741
- critical_percentage_bonus: number;
742
- hit_percentage_bonus: number;
743
- }
744
-
745
- export type NightBattleAttackType =
746
- | { t: "NightAttack"; c: NightAttackType }
747
- | { t: "Asw"; c: AswAttackType };
748
-
749
- export type DayBattleAttackType =
750
- | { t: "Shelling"; c: ShellingAttackType }
751
- | { t: "Asw"; c: AswAttackType };
752
-
753
- export type GearTypeIdArray = [number, number, number, number, number];
754
-
755
- export interface MasterShip {
756
- ship_id: number;
757
- name: string;
758
- yomi: string;
759
- stype: number;
760
- ctype: number;
761
- sort_id?: number;
762
- max_hp: StatInterval;
763
- firepower: StatInterval;
764
- armor: StatInterval;
765
- torpedo: StatInterval;
766
- evasion: StatInterval;
767
- anti_air: StatInterval;
768
- asw: StatInterval;
769
- los: StatInterval;
770
- luck: StatInterval;
771
- torpedo_accuracy?: number;
772
- speed: number;
773
- range?: number;
774
- fuel?: number;
775
- ammo?: number;
776
- next_id?: number;
777
- next_level?: number;
778
- slotnum: number;
779
- slots: SlotSizeVec;
780
- stock: GearState[];
781
- speed_group?: SpeedGroup;
782
- useful?: boolean;
783
- }
784
-
785
- export type StatInterval = [number | null, number | null];
786
-
787
- export interface WarfareInfo {
788
- day: AttackInfo<DayBattleAttackType, DayCutin | null> | null;
789
- closing_torpedo: AttackInfo<null, null> | null;
790
- night: AttackInfo<NightBattleAttackType, NightCutin | null> | null;
791
- shelling_support: AttackInfo<null, null> | null;
792
- opening_asw: AttackInfo<null, null> | null;
793
- }
794
-
795
- export interface WarfareAnalyzerContext {
796
- attacker_env: WarfareAnalyzerShipEnvironment;
797
- target_env: WarfareAnalyzerShipEnvironment;
798
- engagement: Engagement;
799
- air_state: AirState;
800
- }
801
-
802
- export interface WarfareAnalyzerShipEnvironment {
803
- org_type: OrgType;
804
- role: Role;
805
- ship_index: number;
806
- fleet_len: number;
807
- formation: Formation;
808
- fleet_los_mod: number | null;
809
- night_situation: NightSituation;
810
- custom_mods: CustomModifiers;
811
- }
812
-
813
813
  export type SpecialEnemyType =
814
814
  | "None"
815
815
  | "SoftSkinned"
@@ -835,8 +835,6 @@ export type FleetCutin =
835
835
 
836
836
  export type ContactRank = "Rank1" | "Rank2" | "Rank3";
837
837
 
838
- export type AirWaveType = "Jet" | "LandBase" | "Carrier";
839
-
840
838
  export interface SimulatorResult {
841
839
  items: SimulatorResultItem[];
842
840
  sunk_vec: [number, number, number][];