@open-discord-bots/framework 0.2.11 → 0.2.12
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/dist/api/main.js +1 -1
- package/dist/api/modules/action.d.ts +9 -9
- package/dist/api/modules/action.js +3 -3
- package/dist/api/modules/base.d.ts +5 -3
- package/dist/api/modules/base.js +8 -4
- package/dist/api/modules/builder.d.ts +41 -41
- package/dist/api/modules/builder.js +20 -20
- package/dist/api/modules/checker.d.ts +3 -3
- package/dist/api/modules/client.js +2 -2
- package/dist/api/modules/console.d.ts +15 -15
- package/dist/api/modules/console.js +31 -31
- package/dist/api/modules/event.js +2 -2
- package/dist/api/modules/helpmenu.js +1 -1
- package/dist/api/modules/progressbar.js +1 -0
- package/dist/api/modules/responder.d.ts +37 -37
- package/dist/api/modules/responder.js +13 -13
- package/dist/api/modules/statistic.js +0 -2
- package/dist/api/modules/worker.d.ts +14 -14
- package/dist/api/modules/worker.js +9 -9
- package/dist/cli/editConfig.js +6 -20
- package/dist/startup/pluginLauncher.js +6 -4
- package/dist/utilities/index.d.ts +2 -2
- package/package.json +4 -4
- package/src/api/main.ts +1 -1
- package/src/api/modules/action.ts +10 -10
- package/src/api/modules/base.ts +12 -8
- package/src/api/modules/builder.ts +53 -53
- package/src/api/modules/checker.ts +3 -3
- package/src/api/modules/client.ts +15 -15
- package/src/api/modules/component.txt +350 -0
- package/src/api/modules/config.ts +1 -1
- package/src/api/modules/console.ts +26 -26
- package/src/api/modules/database.ts +1 -1
- package/src/api/modules/event.ts +5 -5
- package/src/api/modules/helpmenu.ts +3 -3
- package/src/api/modules/language.ts +1 -1
- package/src/api/modules/plugin.ts +1 -1
- package/src/api/modules/progressbar.ts +3 -1
- package/src/api/modules/responder.ts +43 -43
- package/src/api/modules/statistic.ts +0 -1
- package/src/api/modules/worker.ts +25 -25
- package/src/cli/editConfig.ts +20 -34
- package/src/startup/compilation.ts +2 -2
- package/src/startup/pluginLauncher.ts +9 -6
- package/src/utilities/index.ts +3 -3
- package/tsconfig.json +1 -0
|
@@ -15,20 +15,20 @@ import { ODDropdownData, ODMessageBuildResult, ODMessageBuildSentResult, ODModal
|
|
|
15
15
|
*
|
|
16
16
|
* This class can't be used stand-alone & needs to be extended from!
|
|
17
17
|
*/
|
|
18
|
-
export class ODResponderImplementation<Instance,
|
|
18
|
+
export class ODResponderImplementation<Instance,Origin extends string,Params,WorkerIds extends string = string> extends ODManagerData {
|
|
19
19
|
/**The manager that has all workers of this implementation */
|
|
20
|
-
workers: ODWorkerManager<Instance,
|
|
20
|
+
workers: ODWorkerManager<Instance,Origin,Params,WorkerIds>
|
|
21
21
|
/**The `commandName` or `customId` needs to match this string or regex for this responder to be executed. */
|
|
22
22
|
match: string|RegExp
|
|
23
23
|
|
|
24
|
-
constructor(id:ODValidId, match:string|RegExp, callback?:ODWorkerCallback<Instance,
|
|
24
|
+
constructor(id:ODValidId, match:string|RegExp, callback?:ODWorkerCallback<Instance,Origin,Params>, priority?:number, callbackId?:ODValidId){
|
|
25
25
|
super(id)
|
|
26
26
|
this.match = match
|
|
27
27
|
this.workers = new ODWorkerManager("descending")
|
|
28
28
|
if (callback) this.workers.add(new ODWorker(callbackId ? callbackId : id,priority ?? 0,callback))
|
|
29
29
|
}
|
|
30
30
|
/**Execute all workers & return the result. */
|
|
31
|
-
async respond(instance:Instance,
|
|
31
|
+
async respond(instance:Instance, origin:Origin, params:Params): Promise<void> {
|
|
32
32
|
throw new ODSystemError("Tried to build an unimplemented ODResponderImplementation")
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -36,7 +36,7 @@ export class ODResponderImplementation<Instance,Source extends string,Params,Wor
|
|
|
36
36
|
/**## ODResponderTimeoutErrorCallback `type`
|
|
37
37
|
* This is the callback for the responder timeout function. It will be executed when something went wrong or the action takes too much time.
|
|
38
38
|
*/
|
|
39
|
-
export type ODResponderTimeoutErrorCallback<Instance,
|
|
39
|
+
export type ODResponderTimeoutErrorCallback<Instance, Origin extends "slash"|"text"|"button"|"dropdown"|"modal"|"other"|"context-menu"|"autocomplete"> = (instance:Instance, origin:Origin) => void|Promise<void>
|
|
40
40
|
|
|
41
41
|
/**## ODResponderManager `class`
|
|
42
42
|
* This is an Open Discord responder manager.
|
|
@@ -86,7 +86,7 @@ export class ODResponderManager<
|
|
|
86
86
|
/**## ODCommandResponderManagerIdConstraint `type`
|
|
87
87
|
* The constraint/layout for id mappings/interfaces of the `ODCommandResponderManager` class.
|
|
88
88
|
*/
|
|
89
|
-
export type ODCommandResponderManagerIdConstraint = Record<string,{
|
|
89
|
+
export type ODCommandResponderManagerIdConstraint = Record<string,{origin:"slash"|"text",params:object,workers:string}>
|
|
90
90
|
|
|
91
91
|
/**## ODCommandResponderManager `class`
|
|
92
92
|
* This is an Open Discord command responder manager.
|
|
@@ -141,14 +141,14 @@ export class ODCommandResponderManager<IdList extends ODCommandResponderManagerI
|
|
|
141
141
|
return res
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
get<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["
|
|
144
|
+
get<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["origin"],IdList[CommandResponderId]["params"],IdList[CommandResponderId]["workers"]>
|
|
145
145
|
get(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null
|
|
146
146
|
|
|
147
147
|
get(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null {
|
|
148
148
|
return super.get(id)
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
remove<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["
|
|
151
|
+
remove<CommandResponderId extends keyof ODNoGeneric<IdList>>(id:CommandResponderId): ODCommandResponder<IdList[CommandResponderId]["origin"],IdList[CommandResponderId]["params"],IdList[CommandResponderId]["workers"]>
|
|
152
152
|
remove(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null
|
|
153
153
|
|
|
154
154
|
remove(id:ODValidId): ODCommandResponder<"slash"|"text",any>|null {
|
|
@@ -471,26 +471,26 @@ export class ODCommandResponderInstance {
|
|
|
471
471
|
*
|
|
472
472
|
* This class manages all workers which are executed when the related command is triggered.
|
|
473
473
|
*/
|
|
474
|
-
export class ODCommandResponder<
|
|
474
|
+
export class ODCommandResponder<Origin extends "slash"|"text",Params,WorkerIds extends string = string> extends ODResponderImplementation<ODCommandResponderInstance,Origin,Params,WorkerIds> {
|
|
475
475
|
/**The prefix of the text command needs to match this */
|
|
476
476
|
prefix: string
|
|
477
477
|
|
|
478
|
-
constructor(id:ODValidId, prefix:string, match:string|RegExp, callback?:ODWorkerCallback<ODCommandResponderInstance,
|
|
478
|
+
constructor(id:ODValidId, prefix:string, match:string|RegExp, callback?:ODWorkerCallback<ODCommandResponderInstance,Origin,Params>, priority?:number, callbackId?:ODValidId){
|
|
479
479
|
super(id,match,callback,priority,callbackId)
|
|
480
480
|
this.prefix = prefix
|
|
481
481
|
}
|
|
482
482
|
|
|
483
483
|
/**Respond to this command */
|
|
484
|
-
async respond(instance:ODCommandResponderInstance,
|
|
484
|
+
async respond(instance:ODCommandResponderInstance, origin:Origin, params:Params){
|
|
485
485
|
//wait for workers to finish
|
|
486
|
-
await this.workers.executeWorkers(instance,
|
|
486
|
+
await this.workers.executeWorkers(instance,origin,params)
|
|
487
487
|
}
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
/**## ODButtonResponderManagerIdConstraint `type`
|
|
491
491
|
* The constraint/layout for id mappings/interfaces of the `ODButtonResponderManager` class.
|
|
492
492
|
*/
|
|
493
|
-
export type ODButtonResponderManagerIdConstraint = Record<string,{
|
|
493
|
+
export type ODButtonResponderManagerIdConstraint = Record<string,{origin:"button",params:object,workers:string}>
|
|
494
494
|
|
|
495
495
|
/**## ODButtonResponderManager `class`
|
|
496
496
|
* This is an Open Discord button responder manager.
|
|
@@ -543,14 +543,14 @@ export class ODButtonResponderManager<IdList extends ODButtonResponderManagerIdC
|
|
|
543
543
|
return res
|
|
544
544
|
}
|
|
545
545
|
|
|
546
|
-
get<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["
|
|
546
|
+
get<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["origin"],IdList[ButtonResponderId]["params"],IdList[ButtonResponderId]["workers"]>
|
|
547
547
|
get(id:ODValidId): ODButtonResponder<"button",any>|null
|
|
548
548
|
|
|
549
549
|
get(id:ODValidId): ODButtonResponder<"button",any>|null {
|
|
550
550
|
return super.get(id)
|
|
551
551
|
}
|
|
552
552
|
|
|
553
|
-
remove<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["
|
|
553
|
+
remove<ButtonResponderId extends keyof ODNoGeneric<IdList>>(id:ButtonResponderId): ODButtonResponder<IdList[ButtonResponderId]["origin"],IdList[ButtonResponderId]["params"],IdList[ButtonResponderId]["workers"]>
|
|
554
554
|
remove(id:ODValidId): ODButtonResponder<"button",any>|null
|
|
555
555
|
|
|
556
556
|
remove(id:ODValidId): ODButtonResponder<"button",any>|null {
|
|
@@ -703,18 +703,18 @@ export class ODButtonResponderInstance {
|
|
|
703
703
|
*
|
|
704
704
|
* This class manages all workers which are executed when the related button is triggered.
|
|
705
705
|
*/
|
|
706
|
-
export class ODButtonResponder<
|
|
706
|
+
export class ODButtonResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODButtonResponderInstance,Origin,Params,WorkerIds> {
|
|
707
707
|
/**Respond to this button */
|
|
708
|
-
async respond(instance:ODButtonResponderInstance,
|
|
708
|
+
async respond(instance:ODButtonResponderInstance, origin:Origin, params:Params){
|
|
709
709
|
//wait for workers to finish
|
|
710
|
-
await this.workers.executeWorkers(instance,
|
|
710
|
+
await this.workers.executeWorkers(instance,origin,params)
|
|
711
711
|
}
|
|
712
712
|
}
|
|
713
713
|
|
|
714
714
|
/**## ODDropdownResponderManagerIdConstraint `type`
|
|
715
715
|
* The constraint/layout for id mappings/interfaces of the `ODDropdownResponderManager` class.
|
|
716
716
|
*/
|
|
717
|
-
export type ODDropdownResponderManagerIdConstraint = Record<string,{
|
|
717
|
+
export type ODDropdownResponderManagerIdConstraint = Record<string,{origin:"dropdown",params:object,workers:string}>
|
|
718
718
|
|
|
719
719
|
/**## ODDropdownResponderManager `class`
|
|
720
720
|
* This is an Open Discord dropdown responder manager.
|
|
@@ -767,14 +767,14 @@ export class ODDropdownResponderManager<IdList extends ODDropdownResponderManage
|
|
|
767
767
|
return res
|
|
768
768
|
}
|
|
769
769
|
|
|
770
|
-
get<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["
|
|
770
|
+
get<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["origin"],IdList[DropdownResponderId]["params"],IdList[DropdownResponderId]["workers"]>
|
|
771
771
|
get(id:ODValidId): ODDropdownResponder<"dropdown",any>|null
|
|
772
772
|
|
|
773
773
|
get(id:ODValidId): ODDropdownResponder<"dropdown",any>|null {
|
|
774
774
|
return super.get(id)
|
|
775
775
|
}
|
|
776
776
|
|
|
777
|
-
remove<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["
|
|
777
|
+
remove<DropdownResponderId extends keyof ODNoGeneric<IdList>>(id:DropdownResponderId): ODDropdownResponder<IdList[DropdownResponderId]["origin"],IdList[DropdownResponderId]["params"],IdList[DropdownResponderId]["workers"]>
|
|
778
778
|
remove(id:ODValidId): ODDropdownResponder<"dropdown",any>|null
|
|
779
779
|
|
|
780
780
|
remove(id:ODValidId): ODDropdownResponder<"dropdown",any>|null {
|
|
@@ -1018,18 +1018,18 @@ export class ODDropdownResponderInstance {
|
|
|
1018
1018
|
*
|
|
1019
1019
|
* This class manages all workers which are executed when the related dropdown is triggered.
|
|
1020
1020
|
*/
|
|
1021
|
-
export class ODDropdownResponder<
|
|
1021
|
+
export class ODDropdownResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODDropdownResponderInstance,Origin,Params,WorkerIds> {
|
|
1022
1022
|
/**Respond to this dropdown */
|
|
1023
|
-
async respond(instance:ODDropdownResponderInstance,
|
|
1023
|
+
async respond(instance:ODDropdownResponderInstance, origin:Origin, params:Params){
|
|
1024
1024
|
//wait for workers to finish
|
|
1025
|
-
await this.workers.executeWorkers(instance,
|
|
1025
|
+
await this.workers.executeWorkers(instance,origin,params)
|
|
1026
1026
|
}
|
|
1027
1027
|
}
|
|
1028
1028
|
|
|
1029
1029
|
/**## ODModalResponderManagerIdConstraint `type`
|
|
1030
1030
|
* The constraint/layout for id mappings/interfaces of the `ODModalResponderManager` class.
|
|
1031
1031
|
*/
|
|
1032
|
-
export type ODModalResponderManagerIdConstraint = Record<string,{
|
|
1032
|
+
export type ODModalResponderManagerIdConstraint = Record<string,{origin:"modal",params:object,workers:string}>
|
|
1033
1033
|
|
|
1034
1034
|
/**## ODModalResponderManager `class`
|
|
1035
1035
|
* This is an Open Discord modal responder manager.
|
|
@@ -1082,14 +1082,14 @@ export class ODModalResponderManager<IdList extends ODModalResponderManagerIdCon
|
|
|
1082
1082
|
return res
|
|
1083
1083
|
}
|
|
1084
1084
|
|
|
1085
|
-
get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["
|
|
1085
|
+
get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
|
|
1086
1086
|
get(id:ODValidId): ODModalResponder<"modal",any>|null
|
|
1087
1087
|
|
|
1088
1088
|
get(id:ODValidId): ODModalResponder<"modal",any>|null {
|
|
1089
1089
|
return super.get(id)
|
|
1090
1090
|
}
|
|
1091
1091
|
|
|
1092
|
-
remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["
|
|
1092
|
+
remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODModalResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
|
|
1093
1093
|
remove(id:ODValidId): ODModalResponder<"modal",any>|null
|
|
1094
1094
|
|
|
1095
1095
|
remove(id:ODValidId): ODModalResponder<"modal",any>|null {
|
|
@@ -1225,18 +1225,18 @@ export class ODModalResponderInstance {
|
|
|
1225
1225
|
*
|
|
1226
1226
|
* This class manages all workers which are executed when the related modal is triggered.
|
|
1227
1227
|
*/
|
|
1228
|
-
export class ODModalResponder<
|
|
1228
|
+
export class ODModalResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODModalResponderInstance,Origin,Params,WorkerIds> {
|
|
1229
1229
|
/**Respond to this modal */
|
|
1230
|
-
async respond(instance:ODModalResponderInstance,
|
|
1230
|
+
async respond(instance:ODModalResponderInstance, origin:Origin, params:Params){
|
|
1231
1231
|
//wait for workers to finish
|
|
1232
|
-
await this.workers.executeWorkers(instance,
|
|
1232
|
+
await this.workers.executeWorkers(instance,origin,params)
|
|
1233
1233
|
}
|
|
1234
1234
|
}
|
|
1235
1235
|
|
|
1236
1236
|
/**## ODContextMenuResponderManagerIdConstraint `type`
|
|
1237
1237
|
* The constraint/layout for id mappings/interfaces of the `ODContextMenuResponderManager` class.
|
|
1238
1238
|
*/
|
|
1239
|
-
export type ODContextMenuResponderManagerIdConstraint = Record<string,{
|
|
1239
|
+
export type ODContextMenuResponderManagerIdConstraint = Record<string,{origin:"context-menu",params:object,workers:string}>
|
|
1240
1240
|
|
|
1241
1241
|
/**## ODContextMenuResponderManager `class`
|
|
1242
1242
|
* This is an Open Discord context menu responder manager.
|
|
@@ -1282,14 +1282,14 @@ export class ODContextMenuResponderManager<IdList extends ODContextMenuResponder
|
|
|
1282
1282
|
return res
|
|
1283
1283
|
}
|
|
1284
1284
|
|
|
1285
|
-
get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["
|
|
1285
|
+
get<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
|
|
1286
1286
|
get(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null
|
|
1287
1287
|
|
|
1288
1288
|
get(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null {
|
|
1289
1289
|
return super.get(id)
|
|
1290
1290
|
}
|
|
1291
1291
|
|
|
1292
|
-
remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["
|
|
1292
|
+
remove<ModalResponderId extends keyof ODNoGeneric<IdList>>(id:ModalResponderId): ODContextMenuResponder<IdList[ModalResponderId]["origin"],IdList[ModalResponderId]["params"],IdList[ModalResponderId]["workers"]>
|
|
1293
1293
|
remove(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null
|
|
1294
1294
|
|
|
1295
1295
|
remove(id:ODValidId): ODContextMenuResponder<"context-menu",any>|null {
|
|
@@ -1411,18 +1411,18 @@ export class ODContextMenuResponderInstance {
|
|
|
1411
1411
|
*
|
|
1412
1412
|
* This class manages all workers which are executed when the related context menu is triggered.
|
|
1413
1413
|
*/
|
|
1414
|
-
export class ODContextMenuResponder<
|
|
1414
|
+
export class ODContextMenuResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODContextMenuResponderInstance,Origin,Params,WorkerIds> {
|
|
1415
1415
|
/**Respond to this button */
|
|
1416
|
-
async respond(instance:ODContextMenuResponderInstance,
|
|
1416
|
+
async respond(instance:ODContextMenuResponderInstance, origin:Origin, params:Params){
|
|
1417
1417
|
//wait for workers to finish
|
|
1418
|
-
await this.workers.executeWorkers(instance,
|
|
1418
|
+
await this.workers.executeWorkers(instance,origin,params)
|
|
1419
1419
|
}
|
|
1420
1420
|
}
|
|
1421
1421
|
|
|
1422
1422
|
/**## ODAutocompleteResponderManagerIdConstraint `type`
|
|
1423
1423
|
* The constraint/layout for id mappings/interfaces of the `ODAutocompleteResponderManager` class.
|
|
1424
1424
|
*/
|
|
1425
|
-
export type ODAutocompleteResponderManagerIdConstraint = Record<string,{
|
|
1425
|
+
export type ODAutocompleteResponderManagerIdConstraint = Record<string,{origin:"autocomplete",params:object,workers:string}>
|
|
1426
1426
|
|
|
1427
1427
|
/**## ODAutocompleteResponderManager `class`
|
|
1428
1428
|
* This is an Open Discord autocomplete responder manager.
|
|
@@ -1468,14 +1468,14 @@ export class ODAutocompleteResponderManager<IdList extends ODAutocompleteRespond
|
|
|
1468
1468
|
return res
|
|
1469
1469
|
}
|
|
1470
1470
|
|
|
1471
|
-
get<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["
|
|
1471
|
+
get<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["origin"],IdList[AutocompleteResponderId]["params"],IdList[AutocompleteResponderId]["workers"]>
|
|
1472
1472
|
get(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null
|
|
1473
1473
|
|
|
1474
1474
|
get(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null {
|
|
1475
1475
|
return super.get(id)
|
|
1476
1476
|
}
|
|
1477
1477
|
|
|
1478
|
-
remove<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["
|
|
1478
|
+
remove<AutocompleteResponderId extends keyof ODNoGeneric<IdList>>(id:AutocompleteResponderId): ODAutocompleteResponder<IdList[AutocompleteResponderId]["origin"],IdList[AutocompleteResponderId]["params"],IdList[AutocompleteResponderId]["workers"]>
|
|
1479
1479
|
remove(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null
|
|
1480
1480
|
|
|
1481
1481
|
remove(id:ODValidId): ODAutocompleteResponder<"autocomplete",any>|null {
|
|
@@ -1564,18 +1564,18 @@ export class ODAutocompleteResponderInstance {
|
|
|
1564
1564
|
*
|
|
1565
1565
|
* This class manages all workers which are executed when the related autocomplete is triggered.
|
|
1566
1566
|
*/
|
|
1567
|
-
export class ODAutocompleteResponder<
|
|
1567
|
+
export class ODAutocompleteResponder<Origin extends string,Params,WorkerIds extends string = string> extends ODResponderImplementation<ODAutocompleteResponderInstance,Origin,Params,WorkerIds> {
|
|
1568
1568
|
/**The slash command of the autocomplete should match the following regex. */
|
|
1569
1569
|
cmdMatch: string|RegExp
|
|
1570
1570
|
|
|
1571
|
-
constructor(id:ODValidId,cmdMatch:string|RegExp,match:string|RegExp,callback?:ODWorkerCallback<ODAutocompleteResponderInstance,
|
|
1571
|
+
constructor(id:ODValidId,cmdMatch:string|RegExp,match:string|RegExp,callback?:ODWorkerCallback<ODAutocompleteResponderInstance,Origin,Params>,priority?:number,callbackId?:ODValidId){
|
|
1572
1572
|
super(id,match,callback,priority,callbackId)
|
|
1573
1573
|
this.cmdMatch = cmdMatch
|
|
1574
1574
|
}
|
|
1575
1575
|
|
|
1576
1576
|
/**Respond to this autocomplete interaction. */
|
|
1577
|
-
async respond(instance:ODAutocompleteResponderInstance,
|
|
1577
|
+
async respond(instance:ODAutocompleteResponderInstance, origin:Origin, params:Params){
|
|
1578
1578
|
//wait for workers to finish
|
|
1579
|
-
await this.workers.executeWorkers(instance,
|
|
1579
|
+
await this.workers.executeWorkers(instance,origin,params)
|
|
1580
1580
|
}
|
|
1581
1581
|
}
|
|
@@ -91,7 +91,6 @@ export class ODStatisticManager<IdList extends ODStatisticManagerIdConstraint =
|
|
|
91
91
|
if (!this.database) return
|
|
92
92
|
const data = await this.database.getAll()
|
|
93
93
|
for (const d of data){
|
|
94
|
-
if (!this.database) return
|
|
95
94
|
await this.database.delete(d.category,d.key)
|
|
96
95
|
}
|
|
97
96
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
///////////////////////////////////////
|
|
2
2
|
//WORKER MODULE
|
|
3
3
|
///////////////////////////////////////
|
|
4
|
-
import { ODId, ODManager, ODManagerData, ODValidId } from "./base"
|
|
4
|
+
import { ODId, ODManager, ODManagerData, ODSystemError, ODValidId } from "./base"
|
|
5
5
|
|
|
6
6
|
/**## ODWorkerCallback `type`
|
|
7
7
|
* This is the callback used in `ODWorker`!
|
|
8
8
|
*/
|
|
9
|
-
export type ODWorkerCallback<Instance,
|
|
9
|
+
export type ODWorkerCallback<Instance, Origin extends string, Params> = (instance:Instance, params:Params, origin:Origin, cancel:() => void) => void|Promise<void>
|
|
10
10
|
|
|
11
11
|
/**## ODWorker `class`
|
|
12
12
|
* This is an Open Discord worker.
|
|
@@ -15,16 +15,16 @@ export type ODWorkerCallback<Instance, Source extends string, Params> = (instanc
|
|
|
15
15
|
*
|
|
16
16
|
* - It has an `id` for identification of the function
|
|
17
17
|
* - A `priority` to know when to execute this callback (related to others)
|
|
18
|
-
* - It knows who called this callback (`
|
|
18
|
+
* - It knows who called this callback (`origin`)
|
|
19
19
|
* - And much more!
|
|
20
20
|
*/
|
|
21
|
-
export class ODWorker<Instance,
|
|
21
|
+
export class ODWorker<Instance, Origin extends string, Params> extends ODManagerData {
|
|
22
22
|
/**The priority of this worker */
|
|
23
23
|
priority: number
|
|
24
24
|
/**The main callback of this worker */
|
|
25
|
-
callback: ODWorkerCallback<Instance,
|
|
25
|
+
callback: ODWorkerCallback<Instance,Origin,Params>
|
|
26
26
|
|
|
27
|
-
constructor(id:ODValidId, priority:number, callback:ODWorkerCallback<Instance,
|
|
27
|
+
constructor(id:ODValidId, priority:number, callback:ODWorkerCallback<Instance,Origin,Params>){
|
|
28
28
|
super(id)
|
|
29
29
|
this.priority = priority
|
|
30
30
|
this.callback = callback
|
|
@@ -38,11 +38,11 @@ export class ODWorker<Instance, Source extends string, Params> extends ODManager
|
|
|
38
38
|
*
|
|
39
39
|
* You can register a custom worker in this class to create a message or button.
|
|
40
40
|
*/
|
|
41
|
-
export class ODWorkerManager<Instance,
|
|
41
|
+
export class ODWorkerManager<Instance, Origin extends string, Params,WorkerIds extends string = string> extends ODManager<ODWorker<Instance,Origin,Params>> {
|
|
42
42
|
/**The order of execution for workers inside this manager. */
|
|
43
43
|
#priorityOrder: "ascending"|"descending"
|
|
44
44
|
/**The backup worker will be executed when one of the workers fails or cancels execution. */
|
|
45
|
-
backupWorker: ODWorker<{reason:"error"|"cancel"},
|
|
45
|
+
backupWorker: ODWorker<{reason:"error"|"cancel"},Origin,Params>|null = null
|
|
46
46
|
|
|
47
47
|
constructor(priorityOrder:"ascending"|"descending"){
|
|
48
48
|
super()
|
|
@@ -58,8 +58,8 @@ export class ODWorkerManager<Instance, Source extends string, Params,WorkerIds e
|
|
|
58
58
|
else return b.priority-a.priority
|
|
59
59
|
})
|
|
60
60
|
}
|
|
61
|
-
/**Execute all workers on an instance using the given
|
|
62
|
-
async executeWorkers(instance:Instance,
|
|
61
|
+
/**Execute all workers on an instance using the given origin & parameters. */
|
|
62
|
+
async executeWorkers(instance:Instance, origin:Origin, params:Params){
|
|
63
63
|
const derefParams = {...params}
|
|
64
64
|
const workers = this.getSortedWorkers(this.#priorityOrder)
|
|
65
65
|
let didCancel = false
|
|
@@ -68,40 +68,40 @@ export class ODWorkerManager<Instance, Source extends string, Params,WorkerIds e
|
|
|
68
68
|
for (const worker of workers){
|
|
69
69
|
if (didCancel) break
|
|
70
70
|
try {
|
|
71
|
-
await worker.callback(instance,derefParams,
|
|
71
|
+
await worker.callback(instance,derefParams,origin,() => {
|
|
72
72
|
didCancel = true
|
|
73
73
|
})
|
|
74
|
-
}catch(err){
|
|
75
|
-
process.emit("uncaughtException",err)
|
|
74
|
+
}catch(err:any){
|
|
75
|
+
process.emit("uncaughtException",new ODSystemError(err))
|
|
76
76
|
didCrash = true
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
if (didCancel && this.backupWorker){
|
|
80
80
|
try{
|
|
81
|
-
await this.backupWorker.callback({reason:"cancel"},derefParams,
|
|
82
|
-
}catch(err){
|
|
83
|
-
process.emit("uncaughtException",err)
|
|
81
|
+
await this.backupWorker.callback({reason:"cancel"},derefParams,origin,() => {})
|
|
82
|
+
}catch(err:any){
|
|
83
|
+
process.emit("uncaughtException",new ODSystemError(err))
|
|
84
84
|
}
|
|
85
85
|
}else if (didCrash && this.backupWorker){
|
|
86
86
|
try{
|
|
87
|
-
await this.backupWorker.callback({reason:"error"},derefParams,
|
|
88
|
-
}catch(err){
|
|
89
|
-
process.emit("uncaughtException",err)
|
|
87
|
+
await this.backupWorker.callback({reason:"error"},derefParams,origin,() => {})
|
|
88
|
+
}catch(err:any){
|
|
89
|
+
process.emit("uncaughtException",new ODSystemError(err))
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
get(id:WorkerIds): ODWorker<Instance,
|
|
95
|
-
get(id:ODValidId): ODWorker<Instance,
|
|
94
|
+
get(id:WorkerIds): ODWorker<Instance,Origin,Params>
|
|
95
|
+
get(id:ODValidId): ODWorker<Instance,Origin,Params>|null
|
|
96
96
|
|
|
97
|
-
get(id:ODValidId): ODWorker<Instance,
|
|
97
|
+
get(id:ODValidId): ODWorker<Instance,Origin,Params>|null {
|
|
98
98
|
return super.get(id)
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
remove(id:WorkerIds): ODWorker<Instance,
|
|
102
|
-
remove(id:ODValidId): ODWorker<Instance,
|
|
101
|
+
remove(id:WorkerIds): ODWorker<Instance,Origin,Params>
|
|
102
|
+
remove(id:ODValidId): ODWorker<Instance,Origin,Params>|null
|
|
103
103
|
|
|
104
|
-
remove(id:ODValidId): ODWorker<Instance,
|
|
104
|
+
remove(id:ODValidId): ODWorker<Instance,Origin,Params>|null {
|
|
105
105
|
return super.remove(id)
|
|
106
106
|
}
|
|
107
107
|
|
package/src/cli/editConfig.ts
CHANGED
|
@@ -37,7 +37,7 @@ export class ODCliEditConfigInstance {
|
|
|
37
37
|
await this.chooseConfigStructure(checker,async () => {await this.renderEditConfig(backFn)},checker.structure,configData,{},NaN,["("+checker.config.path+")"])
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
private async chooseConfigStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:
|
|
40
|
+
private async chooseConfigStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:Record<string,any>|any[],parentIndex:string|number,path:(string|number)[]){
|
|
41
41
|
if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data) await this.renderConfigObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)
|
|
42
42
|
else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data) await this.renderConfigEnabledObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)
|
|
43
43
|
else if (structure instanceof api.ODCheckerObjectSwitchStructure && typeof data == "object" && !Array.isArray(data) && data) await this.renderConfigObjectSwitchStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)
|
|
@@ -50,7 +50,7 @@ export class ODCliEditConfigInstance {
|
|
|
50
50
|
else terminal.red.bold("❌ Unable to detect type of variable! Please try to edit this property in the JSON file itself!")
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
private async renderConfigObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,data:
|
|
53
|
+
private async renderConfigObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,data:Record<string,any>,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
|
|
54
54
|
if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OD CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
|
|
55
55
|
renderHeader(this.opts,path)
|
|
56
56
|
terminal(ansis.bold.green("Please select which variable you would like to edit.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
|
|
@@ -81,7 +81,7 @@ export class ODCliEditConfigInstance {
|
|
|
81
81
|
await this.chooseConfigStructure(checker,async () => {await this.renderConfigObjectStructureSelector(checker,backFn,structure,data,parent,parentIndex,path)},subStructure.checker,subData,data,subStructure.key,[...path,subStructure.key])
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
private async renderConfigEnabledObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerEnabledObjectStructure,data:
|
|
84
|
+
private async renderConfigEnabledObjectStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerEnabledObjectStructure,data:Record<string,any>,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
|
|
85
85
|
if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OD CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
|
|
86
86
|
const enabledProperty = structure.options.property
|
|
87
87
|
const subStructure = structure.options.checker
|
|
@@ -96,7 +96,7 @@ export class ODCliEditConfigInstance {
|
|
|
96
96
|
await this.chooseConfigStructure(checker,backFn,subStructure,data,parent,parentIndex,path)
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
private async renderConfigObjectSwitchStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectSwitchStructure,data:
|
|
99
|
+
private async renderConfigObjectSwitchStructureSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerObjectSwitchStructure,data:Record<string,any>,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
|
|
100
100
|
if (typeof data != "object" || Array.isArray(data)) throw new api.ODSystemError("OD CLI => Property is not of the type 'object'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
|
|
101
101
|
if (!structure.options.objects) return await backFn()
|
|
102
102
|
|
|
@@ -174,7 +174,7 @@ export class ODCliEditConfigInstance {
|
|
|
174
174
|
await this.chooseConfigStructure(checker,async () => {await this.renderConfigArrayStructureEditSelector(checker,backFn,arrayStructure,structure,data,parent,parentIndex,path)},structure,subData,data,dataAnswer.selectedIndex,[...path,dataAnswer.selectedIndex])
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
private async renderConfigArrayStructureMoveSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:
|
|
177
|
+
private async renderConfigArrayStructureMoveSelector(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),arrayStructure:api.ODCheckerArrayStructure,structure:api.ODCheckerStructure,data:any[],parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]): Promise<void> {
|
|
178
178
|
const propertyName = arrayStructure.options.cliDisplayPropertyName ?? "index"
|
|
179
179
|
renderHeader(this.opts,path)
|
|
180
180
|
terminal(ansis.bold.green("Please select the "+propertyName+" you would like to move.\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
|
|
@@ -267,7 +267,7 @@ export class ODCliEditConfigInstance {
|
|
|
267
267
|
await backFn()
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
private async renderConfigBooleanStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerBooleanStructure,data:boolean,parent:
|
|
270
|
+
private async renderConfigBooleanStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerBooleanStructure,data:boolean,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
|
|
271
271
|
if (typeof data != "boolean") throw new api.ODSystemError("OD CLI => Property is not of the type 'boolean'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
|
|
272
272
|
renderHeader(this.opts,path)
|
|
273
273
|
terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the boolean property "+ansis.blue("\""+parentIndex+"\"") : "boolean property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
|
|
@@ -309,7 +309,7 @@ export class ODCliEditConfigInstance {
|
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
-
private async renderConfigNumberStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNumberStructure,data:number,parent:
|
|
312
|
+
private async renderConfigNumberStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNumberStructure,data:number,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[],prefillValue?:string){
|
|
313
313
|
if (typeof data != "number") throw new api.ODSystemError("OD CLI => Property is not of the type 'number'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
|
|
314
314
|
renderHeader(this.opts,path)
|
|
315
315
|
terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the number property "+ansis.blue("\""+parentIndex+"\"") : "number property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n"))
|
|
@@ -348,7 +348,7 @@ export class ODCliEditConfigInstance {
|
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
350
|
|
|
351
|
-
private async renderConfigStringStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStringStructure,data:string,parent:
|
|
351
|
+
private async renderConfigStringStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerStringStructure,data:string,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[],prefillValue?:string){
|
|
352
352
|
if (typeof data != "string") throw new api.ODSystemError("OD CLI => Property is not of the type 'string'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
|
|
353
353
|
renderHeader(this.opts,path)
|
|
354
354
|
terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the string property "+ansis.blue("\""+parentIndex+"\"") : "string property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(insert a new value and press enter, go back using escape)\n"))
|
|
@@ -409,7 +409,7 @@ export class ODCliEditConfigInstance {
|
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
411
|
|
|
412
|
-
private async renderConfigNullStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNullStructure,data:null,parent:
|
|
412
|
+
private async renderConfigNullStructureEditor(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),structure:api.ODCheckerNullStructure,data:null,parent:Record<string,any>,parentIndex:string|number,path:(string|number)[]){
|
|
413
413
|
if (data !== null) throw new api.ODSystemError("OD CLI => Property is not of the type 'null'. Please check your config for possible errors. (index: "+parentIndex+", path: "+path.join(".")+")")
|
|
414
414
|
renderHeader(this.opts,path)
|
|
415
415
|
terminal(ansis.bold.green("You are now editing "+(typeof parentIndex == "string" ? "the null property "+ansis.blue("\""+parentIndex+"\"") : "null property "+ansis.blue("#"+(parentIndex+1)))+".\n")+ansis.italic.gray("(use arrow keys to navigate, go back using escape)\n"))
|
|
@@ -486,7 +486,7 @@ export class ODCliEditConfigInstance {
|
|
|
486
486
|
else if (answer.selectedText.startsWith("Edit as null") && structure.options.null) await this.renderConfigNullStructureEditor(checker,async () => {await this.renderConfigTypeSwitchStructureEditor(checker,backFn,structure,data,parent,parentIndex,path)},structure.options.null,null,parent,parentIndex,path)
|
|
487
487
|
}
|
|
488
488
|
|
|
489
|
-
private getArrayPreviewStructureNameLength(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:
|
|
489
|
+
private getArrayPreviewStructureNameLength(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:Record<string,any>,parentIndex:string|number): number {
|
|
490
490
|
if (structure instanceof api.ODCheckerBooleanStructure && typeof data == "boolean") return data.toString().length
|
|
491
491
|
else if (structure instanceof api.ODCheckerNumberStructure && typeof data == "number") return data.toString().length
|
|
492
492
|
else if (structure instanceof api.ODCheckerStringStructure && typeof data == "string") return data.length
|
|
@@ -494,7 +494,7 @@ export class ODCliEditConfigInstance {
|
|
|
494
494
|
else if (structure instanceof api.ODCheckerArrayStructure && Array.isArray(data)) return "Array".length
|
|
495
495
|
else if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
|
|
496
496
|
if (!structure.options.cliDisplayKeyInParentArray) return "Object".length
|
|
497
|
-
else return data[structure.options.cliDisplayKeyInParentArray]
|
|
497
|
+
else return data[structure.options.cliDisplayKeyInParentArray]?.toString().length ?? 0
|
|
498
498
|
|
|
499
499
|
}else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
|
|
500
500
|
const subStructure = structure.options.checker
|
|
@@ -522,16 +522,16 @@ export class ODCliEditConfigInstance {
|
|
|
522
522
|
}else return "<unknown-property>".length
|
|
523
523
|
}
|
|
524
524
|
|
|
525
|
-
private getArrayPreviewFromStructure(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:
|
|
525
|
+
private getArrayPreviewFromStructure(structure:api.ODCheckerStructure,data:api.ODValidJsonType,parent:Record<string,any>,parentIndex:string|number,nameLength:number): string {
|
|
526
526
|
if (structure instanceof api.ODCheckerBooleanStructure && typeof data == "boolean") return data.toString()
|
|
527
527
|
else if (structure instanceof api.ODCheckerNumberStructure && typeof data == "number") return data.toString()
|
|
528
528
|
else if (structure instanceof api.ODCheckerStringStructure && typeof data == "string") return data
|
|
529
529
|
else if (structure instanceof api.ODCheckerNullStructure && data === null) return "Null"
|
|
530
530
|
else if (structure instanceof api.ODCheckerArrayStructure && Array.isArray(data)) return "Array"
|
|
531
531
|
else if (structure instanceof api.ODCheckerObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
|
|
532
|
-
const additionalKeys = (structure.options.cliDisplayAdditionalKeysInParentArray ?? []).map((key) => key+": "+data[key]
|
|
532
|
+
const additionalKeys = (structure.options.cliDisplayAdditionalKeysInParentArray ?? []).map((key) => key+": "+data[key]?.toString()).join(", ")
|
|
533
533
|
if (!structure.options.cliDisplayKeyInParentArray) return "Object"
|
|
534
|
-
else return data[structure.options.cliDisplayKeyInParentArray]
|
|
534
|
+
else return data[structure.options.cliDisplayKeyInParentArray]?.toString().padEnd(nameLength+5," ")+ansis.gray(additionalKeys.length > 0 ? "("+additionalKeys+")" : "")
|
|
535
535
|
|
|
536
536
|
}else if (structure instanceof api.ODCheckerEnabledObjectStructure && typeof data == "object" && !Array.isArray(data) && data){
|
|
537
537
|
const subStructure = structure.options.checker
|
|
@@ -572,7 +572,7 @@ export class ODCliEditConfigInstance {
|
|
|
572
572
|
else await backFn()
|
|
573
573
|
}
|
|
574
574
|
|
|
575
|
-
private async renderAdditionConfigObjectStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],localData:
|
|
575
|
+
private async renderAdditionConfigObjectStructure(checker:api.ODChecker,backFn:(() => api.ODPromiseVoid),nextFn:((data:any) => api.ODPromiseVoid),structure:api.ODCheckerObjectStructure,parent:object|any[],parentIndex:string|number,path:(string|number)[],localPath:(string|number)[],localData:Record<string,any>={}){
|
|
576
576
|
const children = structure.options.children ?? []
|
|
577
577
|
const skipKeys = (structure.options.cliInitSkipKeys ?? [])
|
|
578
578
|
//add skipped properties
|
|
@@ -606,7 +606,7 @@ export class ODCliEditConfigInstance {
|
|
|
606
606
|
})
|
|
607
607
|
}
|
|
608
608
|
|
|
609
|
-
private async configureAdditionObjectProperties(checker:api.ODChecker,children:{key:string,checker:api.ODCheckerStructure}[],currentIndex:number,localData:
|
|
609
|
+
private async configureAdditionObjectProperties(checker:api.ODChecker,children:{key:string,checker:api.ODCheckerStructure}[],currentIndex:number,localData:Record<string,any>,path:(string|number)[],localPath:(string|number)[],backFn:(() => api.ODPromiseVoid),nextFn:(() => api.ODPromiseVoid)){
|
|
610
610
|
if (children.length < 1) return await nextFn()
|
|
611
611
|
|
|
612
612
|
const child = children[currentIndex]
|
|
@@ -632,22 +632,15 @@ export class ODCliEditConfigInstance {
|
|
|
632
632
|
else if (typeof enabledValue == "boolean") propertyStructure = new api.ODCheckerBooleanStructure("opendiscord:CLI-checker-enabled-object-structure",{})
|
|
633
633
|
else throw new Error("OD CLI => enabled object structure has an invalid type of enabledProperty. It must be a primitive boolean/number/string.")
|
|
634
634
|
|
|
635
|
-
const localData = {}
|
|
635
|
+
const localData: Record<string,any> = {}
|
|
636
636
|
await this.chooseAdditionConfigStructure(checker,backFn,async (data) => {
|
|
637
637
|
if (data === enabledValue) await this.renderAdditionConfigObjectStructure(checker,async () => {await this.renderAdditionConfigEnabledObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,subStructure,parent,parentIndex,path,localPath,localData)
|
|
638
638
|
else{
|
|
639
639
|
localData[enabledProperty] = data
|
|
640
640
|
//copy old object checker to new object checker => all options get de-referenced (this is needed for the new object skip keys are temporary)
|
|
641
|
-
const newStructure = new api.ODCheckerObjectStructure(subStructure.id,
|
|
641
|
+
const newStructure = new api.ODCheckerObjectStructure(subStructure.id,structuredClone(subStructure.options))
|
|
642
642
|
|
|
643
|
-
//
|
|
644
|
-
newStructure.options.children = [...subStructure.options.children]
|
|
645
|
-
newStructure.options.cliInitSkipKeys = subStructure.options.children.map((child) => child.key)
|
|
646
|
-
for (const key of Object.keys(subStructure.options)){
|
|
647
|
-
if (key != "children" && key != "cliInitSkipKeys") newStructure.options[key] = subStructure.options[key]
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
//adds all properties to object as "skipKeys", then continues to next function
|
|
643
|
+
//continues to next function
|
|
651
644
|
await this.renderAdditionConfigObjectStructure(checker,async () => {await this.renderAdditionConfigEnabledObjectStructure(checker,backFn,nextFn,structure,parent,parentIndex,path,localPath)},nextFn,newStructure,parent,parentIndex,path,localPath,localData)
|
|
652
645
|
await nextFn(localData)
|
|
653
646
|
}
|
|
@@ -672,14 +665,7 @@ export class ODCliEditConfigInstance {
|
|
|
672
665
|
|
|
673
666
|
//copy old object checker to new object checker => all options get de-referenced (this is needed for the new object switch properties which are temporary)
|
|
674
667
|
const oldStructure = objectTemplate.checker
|
|
675
|
-
const newStructure = new api.ODCheckerObjectStructure(oldStructure.id,
|
|
676
|
-
|
|
677
|
-
//copy all options over to the new checker
|
|
678
|
-
newStructure.options.children = [...oldStructure.options.children]
|
|
679
|
-
newStructure.options.cliInitSkipKeys = [...(oldStructure.options.cliInitSkipKeys ?? [])]
|
|
680
|
-
for (const key of Object.keys(oldStructure.options)){
|
|
681
|
-
if (key != "children" && key != "cliInitSkipKeys") newStructure.options[key] = oldStructure.options[key]
|
|
682
|
-
}
|
|
668
|
+
const newStructure = new api.ODCheckerObjectStructure(oldStructure.id,structuredClone(oldStructure.options))
|
|
683
669
|
|
|
684
670
|
//add the keys of the object switch properties to the 'cliInitSkipKeys' because they need to be skipped.
|
|
685
671
|
objectTemplate.properties.map((p) => p.key).forEach((p) => {
|
|
@@ -3,7 +3,7 @@ import ts from "typescript"
|
|
|
3
3
|
import { createHash, Hash } from "crypto"
|
|
4
4
|
import nodepath from "path"
|
|
5
5
|
import ansis from "ansis"
|
|
6
|
-
import type { ODProjectType } from "../api"
|
|
6
|
+
import type { ODPluginData, ODProjectType } from "../api"
|
|
7
7
|
|
|
8
8
|
/** ## What is this?
|
|
9
9
|
* This is a function which compares `./src/` with a hash stored in `./dist/hash.txt`.
|
|
@@ -117,7 +117,7 @@ export function frameworkStartup(startupFlags:string[],project:ODProjectType,sta
|
|
|
117
117
|
const pluginJsonPath = nodepath.join(pluginPath, "plugin.json")
|
|
118
118
|
if (fs.existsSync(pluginJsonPath)){
|
|
119
119
|
try{
|
|
120
|
-
const pluginData = JSON.parse(fs.readFileSync(pluginJsonPath).toString())
|
|
120
|
+
const pluginData: ODPluginData = JSON.parse(fs.readFileSync(pluginJsonPath).toString())
|
|
121
121
|
if (pluginData.npmDependencies && Array.isArray(pluginData.npmDependencies)){
|
|
122
122
|
pluginData.npmDependencies.forEach((dep) => {
|
|
123
123
|
if (typeof dep === "string" && dep.trim()){
|