@xyo-network/module-abstract 2.92.11 → 2.93.0-rc.2
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/browser/AbstractModule.d.cts +4 -12
- package/dist/browser/AbstractModule.d.cts.map +1 -1
- package/dist/browser/AbstractModule.d.mts +4 -12
- package/dist/browser/AbstractModule.d.mts.map +1 -1
- package/dist/browser/AbstractModule.d.ts +4 -12
- package/dist/browser/AbstractModule.d.ts.map +1 -1
- package/dist/browser/AbstractModuleInstance.d.cts +13 -3
- package/dist/browser/AbstractModuleInstance.d.cts.map +1 -1
- package/dist/browser/AbstractModuleInstance.d.mts +13 -3
- package/dist/browser/AbstractModuleInstance.d.mts.map +1 -1
- package/dist/browser/AbstractModuleInstance.d.ts +13 -3
- package/dist/browser/AbstractModuleInstance.d.ts.map +1 -1
- package/dist/browser/ResolveHelper.d.cts +19 -0
- package/dist/browser/ResolveHelper.d.cts.map +1 -0
- package/dist/browser/ResolveHelper.d.mts +19 -0
- package/dist/browser/ResolveHelper.d.mts.map +1 -0
- package/dist/browser/ResolveHelper.d.ts +19 -0
- package/dist/browser/ResolveHelper.d.ts.map +1 -0
- package/dist/browser/index.cjs +144 -70
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +1 -0
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -0
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +145 -71
- package/dist/browser/index.js.map +1 -1
- package/dist/node/AbstractModule.d.cts +4 -12
- package/dist/node/AbstractModule.d.cts.map +1 -1
- package/dist/node/AbstractModule.d.mts +4 -12
- package/dist/node/AbstractModule.d.mts.map +1 -1
- package/dist/node/AbstractModule.d.ts +4 -12
- package/dist/node/AbstractModule.d.ts.map +1 -1
- package/dist/node/AbstractModuleInstance.d.cts +13 -3
- package/dist/node/AbstractModuleInstance.d.cts.map +1 -1
- package/dist/node/AbstractModuleInstance.d.mts +13 -3
- package/dist/node/AbstractModuleInstance.d.mts.map +1 -1
- package/dist/node/AbstractModuleInstance.d.ts +13 -3
- package/dist/node/AbstractModuleInstance.d.ts.map +1 -1
- package/dist/node/ResolveHelper.d.cts +19 -0
- package/dist/node/ResolveHelper.d.cts.map +1 -0
- package/dist/node/ResolveHelper.d.mts +19 -0
- package/dist/node/ResolveHelper.d.mts.map +1 -0
- package/dist/node/ResolveHelper.d.ts +19 -0
- package/dist/node/ResolveHelper.d.ts.map +1 -0
- package/dist/node/index.cjs +152 -78
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -0
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -0
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +152 -79
- package/dist/node/index.js.map +1 -1
- package/package.json +28 -27
- package/src/AbstractModule.ts +25 -103
- package/src/AbstractModuleInstance.ts +69 -4
- package/src/ResolveHelper.ts +121 -0
- package/src/index.ts +1 -0
package/dist/node/index.js
CHANGED
|
@@ -21,7 +21,7 @@ import { BoundWitnessBuilder, QueryBoundWitnessBuilder } from "@xyo-network/boun
|
|
|
21
21
|
import { QueryBoundWitnessWrapper as QueryBoundWitnessWrapper3 } from "@xyo-network/boundwitness-wrapper";
|
|
22
22
|
import { ConfigSchema } from "@xyo-network/config-payload-plugin";
|
|
23
23
|
import { ModuleManifestPayloadSchema } from "@xyo-network/manifest-model";
|
|
24
|
-
import { AddressPreviousHashSchema, DeadModuleError,
|
|
24
|
+
import { AddressPreviousHashSchema, DeadModuleError, isModuleName, ModuleAddressQuerySchema, ModuleDescribeQuerySchema, ModuleDescriptionSchema, ModuleDiscoverQuerySchema, ModuleFactory, ModuleManifestQuerySchema, ModuleStateQuerySchema, ModuleSubscribeQuerySchema, serializableField } from "@xyo-network/module-model";
|
|
25
25
|
import { CompositeModuleResolver } from "@xyo-network/module-resolver";
|
|
26
26
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
27
27
|
import { QuerySchema } from "@xyo-network/query-payload-plugin";
|
|
@@ -273,6 +273,9 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
273
273
|
var _a;
|
|
274
274
|
return !!((_a = this.config.security) == null ? void 0 : _a.allowAnonymous);
|
|
275
275
|
}
|
|
276
|
+
get archiving() {
|
|
277
|
+
return this.config.archiving;
|
|
278
|
+
}
|
|
276
279
|
get config() {
|
|
277
280
|
return this.params.config;
|
|
278
281
|
}
|
|
@@ -472,48 +475,6 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
472
475
|
];
|
|
473
476
|
return validators.every((validator) => validator(query, payloads));
|
|
474
477
|
}
|
|
475
|
-
async resolve(idOrFilter = "*", { required = "log", ...options } = {}) {
|
|
476
|
-
const childOptions = {
|
|
477
|
-
...options,
|
|
478
|
-
required: false
|
|
479
|
-
};
|
|
480
|
-
const direction = (options == null ? void 0 : options.direction) ?? "all";
|
|
481
|
-
const up = direction === "up" || direction === "all";
|
|
482
|
-
const down = direction === "down" || direction === "all";
|
|
483
|
-
let result;
|
|
484
|
-
if (idOrFilter === "*") {
|
|
485
|
-
if (this.dead) {
|
|
486
|
-
return [];
|
|
487
|
-
}
|
|
488
|
-
return [
|
|
489
|
-
...down ? await this.downResolver.resolve("*", childOptions) : [],
|
|
490
|
-
...up ? await this.upResolver.resolve("*", childOptions) : []
|
|
491
|
-
].filter(duplicateModules);
|
|
492
|
-
} else {
|
|
493
|
-
switch (typeof idOrFilter) {
|
|
494
|
-
case "string": {
|
|
495
|
-
if (this.dead) {
|
|
496
|
-
return void 0;
|
|
497
|
-
}
|
|
498
|
-
result = (down ? await this.downResolver.resolve(idOrFilter, childOptions) : void 0) ?? (up ? await this.upResolver.resolve(idOrFilter, childOptions) : void 0);
|
|
499
|
-
break;
|
|
500
|
-
}
|
|
501
|
-
default: {
|
|
502
|
-
if (this.dead) {
|
|
503
|
-
return [];
|
|
504
|
-
}
|
|
505
|
-
const filter = idOrFilter;
|
|
506
|
-
result = [
|
|
507
|
-
...down ? await this.downResolver.resolve(filter, childOptions) : [],
|
|
508
|
-
...up ? await this.upResolver.resolve(filter, childOptions) : []
|
|
509
|
-
].filter(duplicateModules);
|
|
510
|
-
break;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
this.validateRequiredResolve(required, result, idOrFilter);
|
|
515
|
-
return result;
|
|
516
|
-
}
|
|
517
478
|
start(_timeout) {
|
|
518
479
|
this._startPromise = this._startPromise ?? this.startHandler();
|
|
519
480
|
const result = this._startPromise;
|
|
@@ -630,7 +591,7 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
630
591
|
await Promise.all(payloads.map((payload) => PayloadBuilder2.build(payload))),
|
|
631
592
|
await Promise.all((_a = errors ?? []) == null ? void 0 : _a.map((error) => PayloadBuilder2.build(error)))
|
|
632
593
|
];
|
|
633
|
-
if (this.
|
|
594
|
+
if (this.archiving) {
|
|
634
595
|
await this.storeToArchivists(result.flat());
|
|
635
596
|
}
|
|
636
597
|
return result;
|
|
@@ -654,7 +615,7 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
654
615
|
}
|
|
655
616
|
async discoverHandler(_maxDepth) {
|
|
656
617
|
var _a;
|
|
657
|
-
const config = this.config;
|
|
618
|
+
const config = await PayloadBuilder2.build(this.config);
|
|
658
619
|
const address = await new PayloadBuilder2({
|
|
659
620
|
schema: AddressSchema
|
|
660
621
|
}).fields({
|
|
@@ -668,10 +629,10 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
668
629
|
query
|
|
669
630
|
}).build();
|
|
670
631
|
}));
|
|
671
|
-
const configSchema = {
|
|
632
|
+
const configSchema = await PayloadBuilder2.build({
|
|
672
633
|
config: config.schema,
|
|
673
634
|
schema: ConfigSchema
|
|
674
|
-
};
|
|
635
|
+
});
|
|
675
636
|
return compact([
|
|
676
637
|
config,
|
|
677
638
|
configSchema,
|
|
@@ -706,8 +667,18 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
706
667
|
}
|
|
707
668
|
}
|
|
708
669
|
}
|
|
709
|
-
manifestHandler(
|
|
670
|
+
async manifestHandler(maxDepth = 1, _ignoreAddresses = []) {
|
|
710
671
|
const name = this.config.name ?? "Anonymous";
|
|
672
|
+
const children = await this.downResolver.resolve("*", {
|
|
673
|
+
direction: "down",
|
|
674
|
+
maxDepth
|
|
675
|
+
});
|
|
676
|
+
const childAddressToName = {};
|
|
677
|
+
for (const child of children) {
|
|
678
|
+
if (child.address !== this.address) {
|
|
679
|
+
childAddressToName[child.address] = child.config.name ?? null;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
711
682
|
return {
|
|
712
683
|
config: {
|
|
713
684
|
name,
|
|
@@ -715,7 +686,8 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
715
686
|
},
|
|
716
687
|
schema: ModuleManifestPayloadSchema,
|
|
717
688
|
status: {
|
|
718
|
-
address: this.address
|
|
689
|
+
address: this.address,
|
|
690
|
+
children: childAddressToName
|
|
719
691
|
}
|
|
720
692
|
};
|
|
721
693
|
}
|
|
@@ -801,14 +773,6 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
801
773
|
}
|
|
802
774
|
return resultPayloads;
|
|
803
775
|
}
|
|
804
|
-
async resolveArchivingArchivists() {
|
|
805
|
-
var _a;
|
|
806
|
-
const archivists = (_a = this.config.archiving) == null ? void 0 : _a.archivists;
|
|
807
|
-
if (!archivists)
|
|
808
|
-
return [];
|
|
809
|
-
const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
|
|
810
|
-
return compact(resolved.map((mod) => asArchivistInstance(mod)));
|
|
811
|
-
}
|
|
812
776
|
async startHandler() {
|
|
813
777
|
this.validateConfig();
|
|
814
778
|
await this.initializeQueryAccounts();
|
|
@@ -826,13 +790,6 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
826
790
|
this._started = void 0;
|
|
827
791
|
return true;
|
|
828
792
|
}
|
|
829
|
-
async storeToArchivists(payloads) {
|
|
830
|
-
const archivists = await this.resolveArchivingArchivists();
|
|
831
|
-
return (await Promise.all(archivists.map((archivist) => {
|
|
832
|
-
var _a;
|
|
833
|
-
return (_a = archivist.insert) == null ? void 0 : _a.call(archivist, payloads);
|
|
834
|
-
}))).map(([bw]) => bw);
|
|
835
|
-
}
|
|
836
793
|
subscribeHandler() {
|
|
837
794
|
return;
|
|
838
795
|
}
|
|
@@ -871,35 +828,111 @@ var _AbstractModule = class _AbstractModule extends BaseEmitter {
|
|
|
871
828
|
}
|
|
872
829
|
}, true);
|
|
873
830
|
}
|
|
874
|
-
|
|
831
|
+
};
|
|
832
|
+
__name(_AbstractModule, "AbstractModule");
|
|
833
|
+
__publicField(_AbstractModule, "allowRandomAccount", true);
|
|
834
|
+
__publicField(_AbstractModule, "configSchemas");
|
|
835
|
+
__publicField(_AbstractModule, "defaultLogger", new ConsoleLogger(LogLevel.warn));
|
|
836
|
+
__publicField(_AbstractModule, "enableLazyLoad", false);
|
|
837
|
+
__publicField(_AbstractModule, "privateConstructorKey", Date.now().toString());
|
|
838
|
+
var AbstractModule = _AbstractModule;
|
|
839
|
+
|
|
840
|
+
// src/AbstractModuleInstance.ts
|
|
841
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
842
|
+
import { compact as compact2 } from "@xylabs/lodash";
|
|
843
|
+
import { asArchivistInstance as asArchivistInstance2 } from "@xyo-network/archivist-model";
|
|
844
|
+
|
|
845
|
+
// src/ResolveHelper.ts
|
|
846
|
+
import { IdLogger as IdLogger2 } from "@xylabs/logger";
|
|
847
|
+
import { toJsonString } from "@xylabs/object";
|
|
848
|
+
import { duplicateModules } from "@xyo-network/module-model";
|
|
849
|
+
var _ResolveHelper = class _ResolveHelper {
|
|
850
|
+
static async resolve(config, idOrFilter = "*", { visibility, maxDepth = 5, required = "log", ...options } = {}) {
|
|
851
|
+
const { module, logger = this.defaultLogger, dead = false, upResolver, downResolver } = config;
|
|
852
|
+
const log = logger ? new IdLogger2(logger, () => `ResolveHelper [${module.id}][${idOrFilter}][${visibility}]`) : void 0;
|
|
853
|
+
const childOptions = {
|
|
854
|
+
...options,
|
|
855
|
+
direction: "down",
|
|
856
|
+
maxDepth: maxDepth - 1,
|
|
857
|
+
required: false,
|
|
858
|
+
visibility
|
|
859
|
+
};
|
|
860
|
+
const direction = (options == null ? void 0 : options.direction) ?? "all";
|
|
861
|
+
const up = direction === "up" || direction === "all";
|
|
862
|
+
const down = direction === "down" || direction === "all";
|
|
863
|
+
let result;
|
|
864
|
+
log == null ? void 0 : log.debug("start", idOrFilter, maxDepth);
|
|
865
|
+
if (idOrFilter === "*") {
|
|
866
|
+
if (dead) {
|
|
867
|
+
log == null ? void 0 : log.warn("failed [dead]", idOrFilter);
|
|
868
|
+
return [];
|
|
869
|
+
}
|
|
870
|
+
const modules = [
|
|
871
|
+
...down ? await downResolver.resolve("*", childOptions) : [],
|
|
872
|
+
...up ? await upResolver.resolve("*", childOptions) : []
|
|
873
|
+
].filter(duplicateModules).filter((module2) => module2.address !== config.address);
|
|
874
|
+
if (modules.length > 0) {
|
|
875
|
+
log == null ? void 0 : log.log("modules [count]", modules.length);
|
|
876
|
+
log == null ? void 0 : log.debug("modules", toJsonString(modules, 4));
|
|
877
|
+
}
|
|
878
|
+
if (maxDepth === 0) {
|
|
879
|
+
return modules;
|
|
880
|
+
}
|
|
881
|
+
const childModules = (await Promise.all(modules.map(async (module2) => await module2.resolve("*", childOptions)))).flat().filter(duplicateModules);
|
|
882
|
+
return [
|
|
883
|
+
module,
|
|
884
|
+
...modules,
|
|
885
|
+
...childModules
|
|
886
|
+
].filter(duplicateModules);
|
|
887
|
+
} else {
|
|
888
|
+
switch (typeof idOrFilter) {
|
|
889
|
+
case "string": {
|
|
890
|
+
if (dead) {
|
|
891
|
+
return void 0;
|
|
892
|
+
}
|
|
893
|
+
result = (down ? await downResolver.resolve(idOrFilter, childOptions) : void 0) ?? (up ? await upResolver.resolve(idOrFilter, childOptions) : void 0);
|
|
894
|
+
break;
|
|
895
|
+
}
|
|
896
|
+
default: {
|
|
897
|
+
if (dead) {
|
|
898
|
+
return [];
|
|
899
|
+
}
|
|
900
|
+
const filter = idOrFilter;
|
|
901
|
+
result = [
|
|
902
|
+
...down ? await downResolver.resolve(filter, childOptions) : [],
|
|
903
|
+
...up ? await upResolver.resolve(filter, childOptions) : []
|
|
904
|
+
].filter(duplicateModules);
|
|
905
|
+
break;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
this.validateRequiredResolve(required, result, idOrFilter, logger);
|
|
910
|
+
return result;
|
|
911
|
+
}
|
|
912
|
+
static validateRequiredResolve(required, result, idOrFilter, logger = this.defaultLogger) {
|
|
913
|
+
const log = logger ? new IdLogger2(logger, () => `validateRequiredResolve [${idOrFilter}][${result}]`) : void 0;
|
|
875
914
|
if (required && (result === void 0 || Array.isArray(result) && result.length > 0)) {
|
|
876
915
|
switch (required) {
|
|
877
916
|
case "warn": {
|
|
878
|
-
|
|
917
|
+
log == null ? void 0 : log.warn("resolve failed", idOrFilter);
|
|
879
918
|
break;
|
|
880
919
|
}
|
|
881
920
|
case "log": {
|
|
882
|
-
|
|
921
|
+
log == null ? void 0 : log.log("resolve failed", idOrFilter);
|
|
883
922
|
break;
|
|
884
923
|
}
|
|
885
924
|
default: {
|
|
886
|
-
|
|
887
|
-
break;
|
|
925
|
+
throw new Error(`resolve failed [${idOrFilter}]`);
|
|
888
926
|
}
|
|
889
927
|
}
|
|
890
928
|
}
|
|
891
929
|
}
|
|
892
930
|
};
|
|
893
|
-
__name(
|
|
894
|
-
__publicField(
|
|
895
|
-
|
|
896
|
-
__publicField(_AbstractModule, "defaultLogger", new ConsoleLogger(LogLevel.log));
|
|
897
|
-
__publicField(_AbstractModule, "enableLazyLoad", false);
|
|
898
|
-
__publicField(_AbstractModule, "privateConstructorKey", Date.now().toString());
|
|
899
|
-
var AbstractModule = _AbstractModule;
|
|
931
|
+
__name(_ResolveHelper, "ResolveHelper");
|
|
932
|
+
__publicField(_ResolveHelper, "defaultLogger");
|
|
933
|
+
var ResolveHelper = _ResolveHelper;
|
|
900
934
|
|
|
901
935
|
// src/AbstractModuleInstance.ts
|
|
902
|
-
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
903
936
|
var _AbstractModuleInstance = class _AbstractModuleInstance extends AbstractModule {
|
|
904
937
|
constructor(privateConstructorKey, params, account) {
|
|
905
938
|
assertEx3(AbstractModule.privateConstructorKey === privateConstructorKey, () => "Use create function instead of constructor");
|
|
@@ -916,10 +949,10 @@ var _AbstractModuleInstance = class _AbstractModuleInstance extends AbstractModu
|
|
|
916
949
|
return await this.describeHandler();
|
|
917
950
|
});
|
|
918
951
|
}
|
|
919
|
-
discover() {
|
|
952
|
+
discover(maxDepth = 5) {
|
|
920
953
|
this._checkDead();
|
|
921
954
|
return this.busy(async () => {
|
|
922
|
-
return await this.discoverHandler();
|
|
955
|
+
return await this.discoverHandler(maxDepth);
|
|
923
956
|
});
|
|
924
957
|
}
|
|
925
958
|
manifest(maxDepth, ignoreAddresses) {
|
|
@@ -934,6 +967,30 @@ var _AbstractModuleInstance = class _AbstractModuleInstance extends AbstractModu
|
|
|
934
967
|
return await this.moduleAddressHandler();
|
|
935
968
|
});
|
|
936
969
|
}
|
|
970
|
+
async resolve(idOrFilter = "*", options = {}) {
|
|
971
|
+
const config = {
|
|
972
|
+
address: this.address,
|
|
973
|
+
dead: this.dead,
|
|
974
|
+
downResolver: this.downResolver,
|
|
975
|
+
logger: this.logger,
|
|
976
|
+
module: this,
|
|
977
|
+
upResolver: this.upResolver
|
|
978
|
+
};
|
|
979
|
+
if (idOrFilter === "*") {
|
|
980
|
+
return await ResolveHelper.resolve(config, idOrFilter, options);
|
|
981
|
+
}
|
|
982
|
+
switch (typeof idOrFilter) {
|
|
983
|
+
case "string": {
|
|
984
|
+
return await ResolveHelper.resolve(config, idOrFilter, options);
|
|
985
|
+
}
|
|
986
|
+
case "object": {
|
|
987
|
+
return await ResolveHelper.resolve(config, idOrFilter, options);
|
|
988
|
+
}
|
|
989
|
+
default: {
|
|
990
|
+
return await ResolveHelper.resolve(config, idOrFilter, options);
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
}
|
|
937
994
|
state() {
|
|
938
995
|
this._checkDead();
|
|
939
996
|
return this.busy(async () => {
|
|
@@ -944,6 +1001,21 @@ var _AbstractModuleInstance = class _AbstractModuleInstance extends AbstractModu
|
|
|
944
1001
|
this._checkDead();
|
|
945
1002
|
return this.subscribeHandler();
|
|
946
1003
|
}
|
|
1004
|
+
async resolveArchivingArchivists() {
|
|
1005
|
+
var _a;
|
|
1006
|
+
const archivists = (_a = this.config.archiving) == null ? void 0 : _a.archivists;
|
|
1007
|
+
if (!archivists)
|
|
1008
|
+
return [];
|
|
1009
|
+
const resolved = await Promise.all(archivists.map((archivist) => this.resolve(archivist)));
|
|
1010
|
+
return compact2(resolved.map((mod) => asArchivistInstance2(mod)));
|
|
1011
|
+
}
|
|
1012
|
+
async storeToArchivists(payloads) {
|
|
1013
|
+
const archivists = await this.resolveArchivingArchivists();
|
|
1014
|
+
return (await Promise.all(archivists.map((archivist) => {
|
|
1015
|
+
var _a;
|
|
1016
|
+
return (_a = archivist.insert) == null ? void 0 : _a.call(archivist, payloads);
|
|
1017
|
+
}))).map(([bw]) => bw);
|
|
1018
|
+
}
|
|
947
1019
|
};
|
|
948
1020
|
__name(_AbstractModuleInstance, "AbstractModuleInstance");
|
|
949
1021
|
var AbstractModuleInstance = _AbstractModuleInstance;
|
|
@@ -953,6 +1025,7 @@ export {
|
|
|
953
1025
|
BaseEmitter,
|
|
954
1026
|
ModuleConfigQueryValidator,
|
|
955
1027
|
ModuleErrorBuilder,
|
|
1028
|
+
ResolveHelper,
|
|
956
1029
|
SupportedQueryValidator,
|
|
957
1030
|
isQuerySupportedByModule
|
|
958
1031
|
};
|