@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.
Files changed (151) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/cjs/AbstractModule.js +253 -0
  4. package/dist/cjs/AbstractModule.js.map +1 -0
  5. package/dist/cjs/BaseEmitter.js +40 -0
  6. package/dist/cjs/BaseEmitter.js.map +1 -0
  7. package/dist/cjs/Error.js +21 -0
  8. package/dist/cjs/Error.js.map +1 -0
  9. package/dist/cjs/IdLogger.js +38 -0
  10. package/dist/cjs/IdLogger.js.map +1 -0
  11. package/dist/cjs/ModuleWrapper.js +226 -0
  12. package/dist/cjs/ModuleWrapper.js.map +1 -0
  13. package/dist/cjs/Query/QueryBoundWitnessBuilder.js +25 -0
  14. package/dist/cjs/Query/QueryBoundWitnessBuilder.js.map +1 -0
  15. package/dist/cjs/Query/QueryBoundWitnessValidator.js +38 -0
  16. package/dist/cjs/Query/QueryBoundWitnessValidator.js.map +1 -0
  17. package/dist/cjs/Query/QueryBoundWitnessWrapper.js +47 -0
  18. package/dist/cjs/Query/QueryBoundWitnessWrapper.js.map +1 -0
  19. package/dist/cjs/Query/index.js +7 -0
  20. package/dist/cjs/Query/index.js.map +1 -0
  21. package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js +65 -0
  22. package/dist/cjs/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
  23. package/dist/cjs/QueryValidator/QueryValidator.js +3 -0
  24. package/dist/cjs/QueryValidator/QueryValidator.js.map +1 -0
  25. package/dist/cjs/QueryValidator/SupportedQueryValidator.js +20 -0
  26. package/dist/cjs/QueryValidator/SupportedQueryValidator.js.map +1 -0
  27. package/dist/cjs/QueryValidator/index.js +7 -0
  28. package/dist/cjs/QueryValidator/index.js.map +1 -0
  29. package/dist/cjs/Resolver/CompositeModuleResolver.js +66 -0
  30. package/dist/cjs/Resolver/CompositeModuleResolver.js.map +1 -0
  31. package/dist/cjs/Resolver/ResolverEventEmitter.js +38 -0
  32. package/dist/cjs/Resolver/ResolverEventEmitter.js.map +1 -0
  33. package/dist/cjs/Resolver/SimpleModuleResolver.js +91 -0
  34. package/dist/cjs/Resolver/SimpleModuleResolver.js.map +1 -0
  35. package/dist/cjs/Resolver/index.js +12 -0
  36. package/dist/cjs/Resolver/index.js.map +1 -0
  37. package/dist/cjs/index.js +12 -0
  38. package/dist/cjs/index.js.map +1 -0
  39. package/dist/cjs/lib/duplicateModules.js +17 -0
  40. package/dist/cjs/lib/duplicateModules.js.map +1 -0
  41. package/dist/cjs/lib/index.js +6 -0
  42. package/dist/cjs/lib/index.js.map +1 -0
  43. package/dist/cjs/lib/serializable.js +38 -0
  44. package/dist/cjs/lib/serializable.js.map +1 -0
  45. package/dist/docs.json +70567 -0
  46. package/dist/esm/AbstractModule.js +241 -0
  47. package/dist/esm/AbstractModule.js.map +1 -0
  48. package/dist/esm/BaseEmitter.js +37 -0
  49. package/dist/esm/BaseEmitter.js.map +1 -0
  50. package/dist/esm/Error.js +19 -0
  51. package/dist/esm/Error.js.map +1 -0
  52. package/dist/esm/IdLogger.js +31 -0
  53. package/dist/esm/IdLogger.js.map +1 -0
  54. package/dist/esm/ModuleWrapper.js +209 -0
  55. package/dist/esm/ModuleWrapper.js.map +1 -0
  56. package/dist/esm/Query/QueryBoundWitnessBuilder.js +22 -0
  57. package/dist/esm/Query/QueryBoundWitnessBuilder.js.map +1 -0
  58. package/dist/esm/Query/QueryBoundWitnessValidator.js +35 -0
  59. package/dist/esm/Query/QueryBoundWitnessValidator.js.map +1 -0
  60. package/dist/esm/Query/QueryBoundWitnessWrapper.js +41 -0
  61. package/dist/esm/Query/QueryBoundWitnessWrapper.js.map +1 -0
  62. package/dist/esm/Query/index.js +4 -0
  63. package/dist/esm/Query/index.js.map +1 -0
  64. package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js +62 -0
  65. package/dist/esm/QueryValidator/ModuleConfigQueryValidator.js.map +1 -0
  66. package/dist/esm/QueryValidator/QueryValidator.js +2 -0
  67. package/dist/esm/QueryValidator/QueryValidator.js.map +1 -0
  68. package/dist/esm/QueryValidator/SupportedQueryValidator.js +16 -0
  69. package/dist/esm/QueryValidator/SupportedQueryValidator.js.map +1 -0
  70. package/dist/esm/QueryValidator/index.js +4 -0
  71. package/dist/esm/QueryValidator/index.js.map +1 -0
  72. package/dist/esm/Resolver/CompositeModuleResolver.js +60 -0
  73. package/dist/esm/Resolver/CompositeModuleResolver.js.map +1 -0
  74. package/dist/esm/Resolver/ResolverEventEmitter.js +33 -0
  75. package/dist/esm/Resolver/ResolverEventEmitter.js.map +1 -0
  76. package/dist/esm/Resolver/SimpleModuleResolver.js +84 -0
  77. package/dist/esm/Resolver/SimpleModuleResolver.js.map +1 -0
  78. package/dist/esm/Resolver/index.js +8 -0
  79. package/dist/esm/Resolver/index.js.map +1 -0
  80. package/dist/esm/index.js +9 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/lib/duplicateModules.js +13 -0
  83. package/dist/esm/lib/duplicateModules.js.map +1 -0
  84. package/dist/esm/lib/index.js +3 -0
  85. package/dist/esm/lib/index.js.map +1 -0
  86. package/dist/esm/lib/serializable.js +32 -0
  87. package/dist/esm/lib/serializable.js.map +1 -0
  88. package/dist/types/AbstractModule.d.ts +42 -0
  89. package/dist/types/AbstractModule.d.ts.map +1 -0
  90. package/dist/types/BaseEmitter.d.ts +16 -0
  91. package/dist/types/BaseEmitter.d.ts.map +1 -0
  92. package/dist/types/Error.d.ts +16 -0
  93. package/dist/types/Error.d.ts.map +1 -0
  94. package/dist/types/IdLogger.d.ts +14 -0
  95. package/dist/types/IdLogger.d.ts.map +1 -0
  96. package/dist/types/ModuleWrapper.d.ts +73 -0
  97. package/dist/types/ModuleWrapper.d.ts.map +1 -0
  98. package/dist/types/Query/QueryBoundWitnessBuilder.d.ts +12 -0
  99. package/dist/types/Query/QueryBoundWitnessBuilder.d.ts.map +1 -0
  100. package/dist/types/Query/QueryBoundWitnessValidator.d.ts +10 -0
  101. package/dist/types/Query/QueryBoundWitnessValidator.d.ts.map +1 -0
  102. package/dist/types/Query/QueryBoundWitnessWrapper.d.ts +16 -0
  103. package/dist/types/Query/QueryBoundWitnessWrapper.d.ts.map +1 -0
  104. package/dist/types/Query/index.d.ts +4 -0
  105. package/dist/types/Query/index.d.ts.map +1 -0
  106. package/dist/types/QueryValidator/ModuleConfigQueryValidator.d.ts +15 -0
  107. package/dist/types/QueryValidator/ModuleConfigQueryValidator.d.ts.map +1 -0
  108. package/dist/types/QueryValidator/QueryValidator.d.ts +7 -0
  109. package/dist/types/QueryValidator/QueryValidator.d.ts.map +1 -0
  110. package/dist/types/QueryValidator/SupportedQueryValidator.d.ts +18 -0
  111. package/dist/types/QueryValidator/SupportedQueryValidator.d.ts.map +1 -0
  112. package/dist/types/QueryValidator/index.d.ts +4 -0
  113. package/dist/types/QueryValidator/index.d.ts.map +1 -0
  114. package/dist/types/Resolver/CompositeModuleResolver.d.ts +16 -0
  115. package/dist/types/Resolver/CompositeModuleResolver.d.ts.map +1 -0
  116. package/dist/types/Resolver/ResolverEventEmitter.d.ts +10 -0
  117. package/dist/types/Resolver/ResolverEventEmitter.d.ts.map +1 -0
  118. package/dist/types/Resolver/SimpleModuleResolver.d.ts +19 -0
  119. package/dist/types/Resolver/SimpleModuleResolver.d.ts.map +1 -0
  120. package/dist/types/Resolver/index.d.ts +7 -0
  121. package/dist/types/Resolver/index.d.ts.map +1 -0
  122. package/dist/types/index.d.ts +9 -0
  123. package/dist/types/index.d.ts.map +1 -0
  124. package/dist/types/lib/duplicateModules.d.ts +32 -0
  125. package/dist/types/lib/duplicateModules.d.ts.map +1 -0
  126. package/dist/types/lib/index.d.ts +3 -0
  127. package/dist/types/lib/index.d.ts.map +1 -0
  128. package/dist/types/lib/serializable.d.ts +3 -0
  129. package/dist/types/lib/serializable.d.ts.map +1 -0
  130. package/package.json +73 -0
  131. package/src/AbstractModule.ts +307 -0
  132. package/src/BaseEmitter.ts +47 -0
  133. package/src/Error.ts +25 -0
  134. package/src/IdLogger.ts +37 -0
  135. package/src/ModuleWrapper.ts +330 -0
  136. package/src/Query/QueryBoundWitnessBuilder.ts +29 -0
  137. package/src/Query/QueryBoundWitnessValidator.ts +41 -0
  138. package/src/Query/QueryBoundWitnessWrapper.ts +55 -0
  139. package/src/Query/index.ts +3 -0
  140. package/src/QueryValidator/ModuleConfigQueryValidator.ts +67 -0
  141. package/src/QueryValidator/QueryValidator.ts +8 -0
  142. package/src/QueryValidator/SupportedQueryValidator.ts +22 -0
  143. package/src/QueryValidator/index.ts +3 -0
  144. package/src/Resolver/CompositeModuleResolver.ts +70 -0
  145. package/src/Resolver/ResolverEventEmitter.ts +46 -0
  146. package/src/Resolver/SimpleModuleResolver.ts +118 -0
  147. package/src/Resolver/index.ts +8 -0
  148. package/src/index.ts +8 -0
  149. package/src/lib/duplicateModules.ts +14 -0
  150. package/src/lib/index.ts +2 -0
  151. 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,8 @@
1
+ export * from './AbstractModule'
2
+ export * from './BaseEmitter'
3
+ export * from './Error'
4
+ export * from './lib'
5
+ export * from './ModuleWrapper'
6
+ export * from './Query'
7
+ export * from './QueryValidator'
8
+ export * from './Resolver'
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ export * from './duplicateModules'
2
+ export * from './serializable'
@@ -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
+ }