@xyo-network/module-abstract 2.51.10
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/LICENSE +165 -0
- package/README.md +13 -0
- package/dist/cjs/AbstractModule.js +253 -0
- package/dist/cjs/AbstractModule.js.map +1 -0
- package/dist/cjs/BaseEmitter.js +40 -0
- package/dist/cjs/BaseEmitter.js.map +1 -0
- package/dist/cjs/Error.js +21 -0
- package/dist/cjs/Error.js.map +1 -0
- package/dist/cjs/IdLogger.js +38 -0
- package/dist/cjs/IdLogger.js.map +1 -0
- package/dist/cjs/ModuleWrapper.js +226 -0
- package/dist/cjs/ModuleWrapper.js.map +1 -0
- package/dist/cjs/Query/QueryBoundWitnessBuilder.js +25 -0
- package/dist/cjs/Query/QueryBoundWitnessBuilder.js.map +1 -0
- package/dist/cjs/Query/QueryBoundWitnessValidator.js +38 -0
- package/dist/cjs/Query/QueryBoundWitnessValidator.js.map +1 -0
- package/dist/cjs/Query/QueryBoundWitnessWrapper.js +47 -0
- package/dist/cjs/Query/QueryBoundWitnessWrapper.js.map +1 -0
- package/dist/cjs/Query/index.js +7 -0
- package/dist/cjs/Query/index.js.map +1 -0
- package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js +65 -0
- package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
- package/dist/cjs/QueryValidator/QueryValidator.js +3 -0
- package/dist/cjs/QueryValidator/QueryValidator.js.map +1 -0
- package/dist/cjs/QueryValidator/SupportedQueryValidator.js +20 -0
- package/dist/cjs/QueryValidator/SupportedQueryValidator.js.map +1 -0
- package/dist/cjs/QueryValidator/index.js +7 -0
- package/dist/cjs/QueryValidator/index.js.map +1 -0
- package/dist/cjs/Resolver/CompositeModuleResolver.js +66 -0
- package/dist/cjs/Resolver/CompositeModuleResolver.js.map +1 -0
- package/dist/cjs/Resolver/ResolverEventEmitter.js +38 -0
- package/dist/cjs/Resolver/ResolverEventEmitter.js.map +1 -0
- package/dist/cjs/Resolver/SimpleModuleResolver.js +91 -0
- package/dist/cjs/Resolver/SimpleModuleResolver.js.map +1 -0
- package/dist/cjs/Resolver/index.js +12 -0
- package/dist/cjs/Resolver/index.js.map +1 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/duplicateModules.js +17 -0
- package/dist/cjs/lib/duplicateModules.js.map +1 -0
- package/dist/cjs/lib/index.js +6 -0
- package/dist/cjs/lib/index.js.map +1 -0
- package/dist/cjs/lib/serializable.js +38 -0
- package/dist/cjs/lib/serializable.js.map +1 -0
- package/dist/docs.json +70567 -0
- package/dist/esm/AbstractModule.js +241 -0
- package/dist/esm/AbstractModule.js.map +1 -0
- package/dist/esm/BaseEmitter.js +37 -0
- package/dist/esm/BaseEmitter.js.map +1 -0
- package/dist/esm/Error.js +19 -0
- package/dist/esm/Error.js.map +1 -0
- package/dist/esm/IdLogger.js +31 -0
- package/dist/esm/IdLogger.js.map +1 -0
- package/dist/esm/ModuleWrapper.js +209 -0
- package/dist/esm/ModuleWrapper.js.map +1 -0
- package/dist/esm/Query/QueryBoundWitnessBuilder.js +22 -0
- package/dist/esm/Query/QueryBoundWitnessBuilder.js.map +1 -0
- package/dist/esm/Query/QueryBoundWitnessValidator.js +35 -0
- package/dist/esm/Query/QueryBoundWitnessValidator.js.map +1 -0
- package/dist/esm/Query/QueryBoundWitnessWrapper.js +41 -0
- package/dist/esm/Query/QueryBoundWitnessWrapper.js.map +1 -0
- package/dist/esm/Query/index.js +4 -0
- package/dist/esm/Query/index.js.map +1 -0
- package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js +62 -0
- package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
- package/dist/esm/QueryValidator/QueryValidator.js +2 -0
- package/dist/esm/QueryValidator/QueryValidator.js.map +1 -0
- package/dist/esm/QueryValidator/SupportedQueryValidator.js +16 -0
- package/dist/esm/QueryValidator/SupportedQueryValidator.js.map +1 -0
- package/dist/esm/QueryValidator/index.js +4 -0
- package/dist/esm/QueryValidator/index.js.map +1 -0
- package/dist/esm/Resolver/CompositeModuleResolver.js +60 -0
- package/dist/esm/Resolver/CompositeModuleResolver.js.map +1 -0
- package/dist/esm/Resolver/ResolverEventEmitter.js +33 -0
- package/dist/esm/Resolver/ResolverEventEmitter.js.map +1 -0
- package/dist/esm/Resolver/SimpleModuleResolver.js +84 -0
- package/dist/esm/Resolver/SimpleModuleResolver.js.map +1 -0
- package/dist/esm/Resolver/index.js +8 -0
- package/dist/esm/Resolver/index.js.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/duplicateModules.js +13 -0
- package/dist/esm/lib/duplicateModules.js.map +1 -0
- package/dist/esm/lib/index.js +3 -0
- package/dist/esm/lib/index.js.map +1 -0
- package/dist/esm/lib/serializable.js +32 -0
- package/dist/esm/lib/serializable.js.map +1 -0
- package/dist/types/AbstractModule.d.ts +42 -0
- package/dist/types/AbstractModule.d.ts.map +1 -0
- package/dist/types/BaseEmitter.d.ts +16 -0
- package/dist/types/BaseEmitter.d.ts.map +1 -0
- package/dist/types/Error.d.ts +16 -0
- package/dist/types/Error.d.ts.map +1 -0
- package/dist/types/IdLogger.d.ts +14 -0
- package/dist/types/IdLogger.d.ts.map +1 -0
- package/dist/types/ModuleWrapper.d.ts +73 -0
- package/dist/types/ModuleWrapper.d.ts.map +1 -0
- package/dist/types/Query/QueryBoundWitnessBuilder.d.ts +12 -0
- package/dist/types/Query/QueryBoundWitnessBuilder.d.ts.map +1 -0
- package/dist/types/Query/QueryBoundWitnessValidator.d.ts +10 -0
- package/dist/types/Query/QueryBoundWitnessValidator.d.ts.map +1 -0
- package/dist/types/Query/QueryBoundWitnessWrapper.d.ts +16 -0
- package/dist/types/Query/QueryBoundWitnessWrapper.d.ts.map +1 -0
- package/dist/types/Query/index.d.ts +4 -0
- package/dist/types/Query/index.d.ts.map +1 -0
- package/dist/types/QueryValidator/ModuleConfigQueryValidator.d.ts +15 -0
- package/dist/types/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -0
- package/dist/types/QueryValidator/QueryValidator.d.ts +7 -0
- package/dist/types/QueryValidator/QueryValidator.d.ts.map +1 -0
- package/dist/types/QueryValidator/SupportedQueryValidator.d.ts +18 -0
- package/dist/types/QueryValidator/SupportedQueryValidator.d.ts.map +1 -0
- package/dist/types/QueryValidator/index.d.ts +4 -0
- package/dist/types/QueryValidator/index.d.ts.map +1 -0
- package/dist/types/Resolver/CompositeModuleResolver.d.ts +16 -0
- package/dist/types/Resolver/CompositeModuleResolver.d.ts.map +1 -0
- package/dist/types/Resolver/ResolverEventEmitter.d.ts +10 -0
- package/dist/types/Resolver/ResolverEventEmitter.d.ts.map +1 -0
- package/dist/types/Resolver/SimpleModuleResolver.d.ts +19 -0
- package/dist/types/Resolver/SimpleModuleResolver.d.ts.map +1 -0
- package/dist/types/Resolver/index.d.ts +7 -0
- package/dist/types/Resolver/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/duplicateModules.d.ts +32 -0
- package/dist/types/lib/duplicateModules.d.ts.map +1 -0
- package/dist/types/lib/index.d.ts +3 -0
- package/dist/types/lib/index.d.ts.map +1 -0
- package/dist/types/lib/serializable.d.ts +3 -0
- package/dist/types/lib/serializable.d.ts.map +1 -0
- package/package.json +73 -0
- package/src/AbstractModule.ts +307 -0
- package/src/BaseEmitter.ts +47 -0
- package/src/Error.ts +25 -0
- package/src/IdLogger.ts +37 -0
- package/src/ModuleWrapper.ts +330 -0
- package/src/Query/QueryBoundWitnessBuilder.ts +29 -0
- package/src/Query/QueryBoundWitnessValidator.ts +41 -0
- package/src/Query/QueryBoundWitnessWrapper.ts +55 -0
- package/src/Query/index.ts +3 -0
- package/src/QueryValidator/ModuleConfigQueryValidator.ts +67 -0
- package/src/QueryValidator/QueryValidator.ts +8 -0
- package/src/QueryValidator/SupportedQueryValidator.ts +22 -0
- package/src/QueryValidator/index.ts +3 -0
- package/src/Resolver/CompositeModuleResolver.ts +70 -0
- package/src/Resolver/ResolverEventEmitter.ts +46 -0
- package/src/Resolver/SimpleModuleResolver.ts +118 -0
- package/src/Resolver/index.ts +8 -0
- package/src/index.ts +8 -0
- package/src/lib/duplicateModules.ts +14 -0
- package/src/lib/index.ts +2 -0
- package/src/lib/serializable.ts +41 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AddressModuleFilter,
|
|
3
|
+
Module,
|
|
4
|
+
ModuleFilter,
|
|
5
|
+
ModuleRepository,
|
|
6
|
+
ModuleResolver,
|
|
7
|
+
NameModuleFilter,
|
|
8
|
+
QueryModuleFilter,
|
|
9
|
+
} from '@xyo-network/module-model'
|
|
10
|
+
import { Promisable } from '@xyo-network/promise'
|
|
11
|
+
import compact from 'lodash/compact'
|
|
12
|
+
import flatten from 'lodash/flatten'
|
|
13
|
+
|
|
14
|
+
//This class is now package private (not exported from index.ts)
|
|
15
|
+
export class SimpleModuleResolver implements ModuleRepository {
|
|
16
|
+
private addressToName: Record<string, string> = {}
|
|
17
|
+
private modules: Record<string, Module> = {}
|
|
18
|
+
|
|
19
|
+
get isModuleResolver() {
|
|
20
|
+
return true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
add(module: Module): this
|
|
24
|
+
add(module: Module[]): this
|
|
25
|
+
add(module: Module | Module[]): this {
|
|
26
|
+
if (Array.isArray(module)) {
|
|
27
|
+
module.forEach((module) => this.addSingleModule(module))
|
|
28
|
+
} else {
|
|
29
|
+
this.addSingleModule(module)
|
|
30
|
+
}
|
|
31
|
+
return this
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
addResolver(_resolver: ModuleResolver): this {
|
|
35
|
+
throw 'Adding resolvers not supported'
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
remove(address: string | string[]): this {
|
|
39
|
+
if (Array.isArray(address)) {
|
|
40
|
+
address.forEach((address) => this.removeSingleModule(address))
|
|
41
|
+
} else {
|
|
42
|
+
this.removeSingleModule(address)
|
|
43
|
+
}
|
|
44
|
+
return this
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
removeResolver(_resolver: ModuleResolver): this {
|
|
48
|
+
throw 'Removing resolvers not supported'
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
resolve<T extends Module = Module>(filter?: ModuleFilter): Promisable<T[]> {
|
|
52
|
+
const filteredByName: T[] = this.resolveByName<T>(Object.values(this.modules) as T[], (filter as NameModuleFilter)?.name)
|
|
53
|
+
|
|
54
|
+
const filteredByAddress: T[] = (filter as AddressModuleFilter)?.address
|
|
55
|
+
? this.resolveByAddress<T>(filteredByName, (filter as AddressModuleFilter)?.address)
|
|
56
|
+
: filteredByName
|
|
57
|
+
|
|
58
|
+
const filteredByQuery: T[] = (filter as QueryModuleFilter)?.query
|
|
59
|
+
? this.resolveByQuery<T>(filteredByAddress, (filter as QueryModuleFilter)?.query)
|
|
60
|
+
: filteredByAddress
|
|
61
|
+
|
|
62
|
+
return filteredByQuery
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private addSingleModule(module?: Module) {
|
|
66
|
+
if (module) {
|
|
67
|
+
this.modules[module.address] = module
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private removeSingleModule(address: string) {
|
|
72
|
+
if (address) {
|
|
73
|
+
if (this.modules[address]) {
|
|
74
|
+
delete this.modules[address]
|
|
75
|
+
const name = this.addressToName[address]
|
|
76
|
+
if (name) {
|
|
77
|
+
delete this.addressToName[address]
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private resolveByAddress<T extends Module = Module>(modules: T[], address?: string[]): T[] {
|
|
84
|
+
return address
|
|
85
|
+
? compact(
|
|
86
|
+
flatten(
|
|
87
|
+
address?.map((address) => {
|
|
88
|
+
return modules.filter((module) => module.address === address)
|
|
89
|
+
}),
|
|
90
|
+
),
|
|
91
|
+
)
|
|
92
|
+
: modules
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private resolveByName<T extends Module = Module>(modules: T[], name?: string[]): T[] {
|
|
96
|
+
if (name) {
|
|
97
|
+
return compact(name.map((name) => modules.filter((module) => module.config.name === name)).flat())
|
|
98
|
+
}
|
|
99
|
+
return modules
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private resolveByQuery<T extends Module = Module>(modules: T[], query?: string[][]): T[] {
|
|
103
|
+
return query
|
|
104
|
+
? compact(
|
|
105
|
+
modules.filter((module) =>
|
|
106
|
+
query?.reduce((supported, queryList) => {
|
|
107
|
+
return (
|
|
108
|
+
queryList.reduce((supported, query) => {
|
|
109
|
+
const queryable = module.queries.includes(query)
|
|
110
|
+
return supported && queryable
|
|
111
|
+
}, true) || supported
|
|
112
|
+
)
|
|
113
|
+
}, false),
|
|
114
|
+
),
|
|
115
|
+
)
|
|
116
|
+
: modules
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CompositeModuleResolver } from './CompositeModuleResolver'
|
|
2
|
+
export * from './ResolverEventEmitter'
|
|
3
|
+
|
|
4
|
+
/** @deprecated use ModuleResolver */
|
|
5
|
+
class SimpleModuleResolver extends CompositeModuleResolver {}
|
|
6
|
+
|
|
7
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
8
|
+
export { CompositeModuleResolver, SimpleModuleResolver }
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Module } from '@xyo-network/module-model'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Used to filter duplicates from an array of modules
|
|
5
|
+
* @example: modulesArray.filter(duplicateModules)
|
|
6
|
+
* @param value Current Module
|
|
7
|
+
* @param index Current Module's index
|
|
8
|
+
* @param array Module Array
|
|
9
|
+
* @returns True if the Module's address is the first occurrence of
|
|
10
|
+
* that address in the array, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
export const duplicateModules = (value: Module, index: number, array: Module[]): value is Module => {
|
|
13
|
+
return array.findIndex((v) => v.address === value.address) === index
|
|
14
|
+
}
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Inspired by https://stackoverflow.com/a/49079549/2803259
|
|
2
|
+
|
|
3
|
+
import every from 'lodash/every'
|
|
4
|
+
import isArray from 'lodash/isArray'
|
|
5
|
+
import isBoolean from 'lodash/isBoolean'
|
|
6
|
+
import isNull from 'lodash/isNull'
|
|
7
|
+
import isNumber from 'lodash/isNumber'
|
|
8
|
+
import isPlainObject from 'lodash/isPlainObject'
|
|
9
|
+
import isString from 'lodash/isString'
|
|
10
|
+
import isUndefined from 'lodash/isUndefined'
|
|
11
|
+
import overSome from 'lodash/overSome'
|
|
12
|
+
|
|
13
|
+
const JSONPrimitiveChecks = [isUndefined, isNull, isBoolean, isNumber, isString]
|
|
14
|
+
const JSONComplexChecks = [isPlainObject, isArray]
|
|
15
|
+
|
|
16
|
+
export const serializable = (field: unknown, depth?: number): boolean | null => {
|
|
17
|
+
let depthExceeded = false
|
|
18
|
+
const decrementDepth = () => (depth ? depth-- : undefined)
|
|
19
|
+
|
|
20
|
+
const recursiveSerializable = (field: unknown) => {
|
|
21
|
+
if (depth !== undefined && depth < 1) {
|
|
22
|
+
depthExceeded = true
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// decrement during every recursion
|
|
27
|
+
decrementDepth()
|
|
28
|
+
|
|
29
|
+
const nestedSerializable = (field: unknown): boolean => overSome(JSONComplexChecks)(field) && every(field as object, recursiveSerializable)
|
|
30
|
+
|
|
31
|
+
return overSome([...JSONPrimitiveChecks, nestedSerializable])(field)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const valid = recursiveSerializable(field)
|
|
35
|
+
|
|
36
|
+
return depthExceeded ? null : valid
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const serializableField = (field: unknown) => {
|
|
40
|
+
return overSome([...JSONPrimitiveChecks, ...JSONComplexChecks])(field)
|
|
41
|
+
}
|