@xyo-network/node 2.43.5 → 2.43.7
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/cjs/AbstractNode.d.ts.map +1 -1
- package/dist/cjs/AbstractNode.js +1 -1
- package/dist/cjs/AbstractNode.js.map +1 -1
- package/dist/cjs/MemoryNode.d.ts +18 -3
- package/dist/cjs/MemoryNode.d.ts.map +1 -1
- package/dist/cjs/MemoryNode.js +50 -16
- package/dist/cjs/MemoryNode.js.map +1 -1
- package/dist/docs.json +8584 -4921
- package/dist/esm/AbstractNode.d.ts.map +1 -1
- package/dist/esm/AbstractNode.js +1 -1
- package/dist/esm/AbstractNode.js.map +1 -1
- package/dist/esm/MemoryNode.d.ts +18 -3
- package/dist/esm/MemoryNode.d.ts.map +1 -1
- package/dist/esm/MemoryNode.js +47 -16
- package/dist/esm/MemoryNode.js.map +1 -1
- package/package.json +11 -10
- package/src/AbstractNode.ts +2 -1
- package/src/MemoryNode.spec.ts +54 -1
- package/src/MemoryNode.ts +68 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAE9C,OAAO,EACL,cAAc,EACd,MAAM,EACN,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EAIb,oBAAoB,EACrB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAoB,MAAM,UAAU,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAKnC,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IACzI,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;CAC7C;
|
|
1
|
+
{"version":3,"file":"AbstractNode.d.ts","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/AbstractNode.js
CHANGED
|
@@ -60,7 +60,7 @@ export class AbstractNode extends AbstractModule {
|
|
|
60
60
|
async query(query, payloads) {
|
|
61
61
|
const wrapper = QueryBoundWitnessWrapper.parseQuery(query, payloads);
|
|
62
62
|
const typedQuery = wrapper.query.payload;
|
|
63
|
-
assertEx(this.queryable(
|
|
63
|
+
assertEx(await this.queryable(query, payloads));
|
|
64
64
|
const queryAccount = new Account();
|
|
65
65
|
const resultPayloads = [];
|
|
66
66
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractNode.js","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACnE,OAAO,EACL,cAAc,EASd,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,GAEhB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAIhE,OAAO,EAAc,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEvD,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,wBAAwB,EAAgB,4BAA4B,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"AbstractNode.js","sourceRoot":"","sources":["../../src/AbstractNode.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/MemoryNode.d.ts
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
import { Module, ModuleFilter } from '@xyo-network/module';
|
|
1
|
+
import { Module, ModuleFilter, ModuleResolver } from '@xyo-network/module';
|
|
2
2
|
import { AbstractNode, AbstractNodeParams } from './AbstractNode';
|
|
3
3
|
import { NodeConfig } from './Config';
|
|
4
|
-
export
|
|
4
|
+
export interface MemoryNodeParams<TConfig extends NodeConfig = NodeConfig, TModule extends Module = Module> extends AbstractNodeParams<TConfig, TModule> {
|
|
5
|
+
autoAttachExternallyResolved?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export type ListenerFunction<T> = (args: T) => void;
|
|
8
|
+
export interface ModuleEventEmitter<TEvent extends string, TEventArgs> {
|
|
9
|
+
on(event: TEvent, listener: ListenerFunction<TEventArgs>): this;
|
|
10
|
+
}
|
|
11
|
+
export interface ModuleResolverChangedEventArgs {
|
|
12
|
+
resolver?: ModuleResolver;
|
|
13
|
+
}
|
|
14
|
+
export type ResolverChangedEventEmitter = ModuleEventEmitter<'moduleResolverChanged', ModuleResolverChangedEventArgs>;
|
|
15
|
+
export declare class MemoryNode<TConfig extends NodeConfig = NodeConfig, TModule extends Module = Module> extends AbstractNode<TConfig, TModule> implements ResolverChangedEventEmitter {
|
|
5
16
|
static configSchema: "network.xyo.node.config";
|
|
6
17
|
private registeredModuleMap;
|
|
7
|
-
|
|
18
|
+
private readonly resolverChangedEventListeners;
|
|
19
|
+
get resolver(): ModuleResolver | undefined;
|
|
20
|
+
set resolver(resolver: ModuleResolver | undefined);
|
|
21
|
+
static create(params?: Partial<MemoryNodeParams>): Promise<MemoryNode>;
|
|
8
22
|
attach(address: string, name?: string): void;
|
|
9
23
|
detach(address: string): void;
|
|
24
|
+
on(event: 'moduleResolverChanged', listener: (args: ModuleResolverChangedEventArgs) => void): this;
|
|
10
25
|
register(module: TModule): void;
|
|
11
26
|
registered(): string[];
|
|
12
27
|
registeredModules(): TModule[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryNode.d.ts","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryNode.d.ts","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+C,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEvH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAoB,MAAM,UAAU,CAAA;AAEvD,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,CACxG,SAAQ,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC5C,4BAA4B,CAAC,EAAE,OAAO,CAAA;CACvC;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnD,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM,EAAE,UAAU;IACnE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;CAChE;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,MAAM,2BAA2B,GAAG,kBAAkB,CAAC,uBAAuB,EAAE,8BAA8B,CAAC,CAAA;AAErH,qBAAa,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,CAC9F,SAAQ,YAAY,CAAC,OAAO,EAAE,OAAO,CACrC,YAAW,2BAA2B;IAEtC,MAAM,CAAC,YAAY,4BAAmB;IACtC,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAyD;IAEvG,IAAa,QAAQ,IAIW,cAAc,GAAG,SAAS,CAFzD;IAED,IAAa,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,EAIzD;WAEqB,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAwB5E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAKrC,MAAM,CAAC,OAAO,EAAE,MAAM;IAI/B,EAAE,CAAC,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,8BAA8B,KAAK,IAAI,GAAG,IAAI;IAKzF,QAAQ,CAAC,MAAM,EAAE,OAAO;IAIxB,UAAU;IAMV,iBAAiB;IAMX,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOlD,UAAU,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY3D,UAAU,CAAC,MAAM,EAAE,OAAO;CAGpC"}
|
package/dist/esm/MemoryNode.js
CHANGED
|
@@ -1,23 +1,45 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert';
|
|
2
|
+
import { exists } from '@xylabs/exists';
|
|
3
|
+
import { fulfilled } from '@xylabs/promise';
|
|
4
|
+
import { duplicateModules, mixinResolverEventEmitter } from '@xyo-network/module';
|
|
2
5
|
import { AbstractNode } from './AbstractNode';
|
|
3
6
|
import { NodeConfigSchema } from './Config';
|
|
4
|
-
/**
|
|
5
|
-
* Used to filter duplicates during module resolution since we search
|
|
6
|
-
* internal and external resolvers for modules
|
|
7
|
-
* @param value Current Module
|
|
8
|
-
* @param index Current Module's index
|
|
9
|
-
* @param array Module Array
|
|
10
|
-
* @returns True if the Module's address is the first occurrence of
|
|
11
|
-
* that address in the array, false otherwise
|
|
12
|
-
*/
|
|
13
|
-
const duplicateModules = (value, index, array) => {
|
|
14
|
-
return array.findIndex((v) => v.address === value.address) === index;
|
|
15
|
-
};
|
|
16
7
|
export class MemoryNode extends AbstractNode {
|
|
17
8
|
static configSchema = NodeConfigSchema;
|
|
18
9
|
registeredModuleMap = new Map();
|
|
10
|
+
resolverChangedEventListeners = [];
|
|
11
|
+
get resolver() {
|
|
12
|
+
return this._resolver;
|
|
13
|
+
}
|
|
14
|
+
set resolver(resolver) {
|
|
15
|
+
this._resolver = resolver;
|
|
16
|
+
const args = { resolver };
|
|
17
|
+
this.resolverChangedEventListeners?.map((listener) => listener(args));
|
|
18
|
+
}
|
|
19
19
|
static async create(params) {
|
|
20
|
-
|
|
20
|
+
const instance = (await super.create(params));
|
|
21
|
+
if (params?.resolver && params?.autoAttachExternallyResolved) {
|
|
22
|
+
const resolver = mixinResolverEventEmitter(params?.resolver);
|
|
23
|
+
resolver.on('moduleResolved', (args) => {
|
|
24
|
+
const { module, filter } = args;
|
|
25
|
+
try {
|
|
26
|
+
instance.register(module);
|
|
27
|
+
if (filter?.name?.length) {
|
|
28
|
+
filter.name.map((name) => {
|
|
29
|
+
instance.attach(module.address, name);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
instance.attach(module.address);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
params.logger?.error(`Error attaching externally resolved module: 0x${module.address}`);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
instance.resolver = resolver;
|
|
41
|
+
}
|
|
42
|
+
return instance;
|
|
21
43
|
}
|
|
22
44
|
attach(address, name) {
|
|
23
45
|
const module = assertEx(this.registeredModuleMap.get(address), 'No module found at that address');
|
|
@@ -26,6 +48,10 @@ export class MemoryNode extends AbstractNode {
|
|
|
26
48
|
detach(address) {
|
|
27
49
|
this.internalResolver.remove(address);
|
|
28
50
|
}
|
|
51
|
+
on(event, listener) {
|
|
52
|
+
this.resolverChangedEventListeners?.push(listener);
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
29
55
|
register(module) {
|
|
30
56
|
this.registeredModuleMap.set(module.address, module);
|
|
31
57
|
}
|
|
@@ -43,13 +69,18 @@ export class MemoryNode extends AbstractNode {
|
|
|
43
69
|
const internal = this.internalResolver.resolve(filter);
|
|
44
70
|
const external = this.resolver?.resolve(filter) || [];
|
|
45
71
|
const resolved = await Promise.all([internal, external]);
|
|
46
|
-
return resolved.flat().filter(duplicateModules);
|
|
72
|
+
return resolved.flat().filter(exists).filter(duplicateModules);
|
|
47
73
|
}
|
|
48
74
|
async tryResolve(filter) {
|
|
49
75
|
const internal = this.internalResolver.tryResolve(filter);
|
|
50
76
|
const external = this.resolver?.tryResolve(filter) || [];
|
|
51
|
-
const resolved = await Promise.
|
|
52
|
-
return resolved
|
|
77
|
+
const resolved = await Promise.allSettled([internal, external]);
|
|
78
|
+
return resolved
|
|
79
|
+
.filter(fulfilled)
|
|
80
|
+
.map((r) => r.value)
|
|
81
|
+
.flat()
|
|
82
|
+
.filter(exists)
|
|
83
|
+
.filter(duplicateModules);
|
|
53
84
|
}
|
|
54
85
|
unregister(module) {
|
|
55
86
|
this.registeredModuleMap.delete(module.address);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryNode.js","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"MemoryNode.js","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -12,15 +12,16 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@xylabs/assert": "^2.6.15",
|
|
14
14
|
"@xylabs/exists": "^2.6.15",
|
|
15
|
-
"@
|
|
16
|
-
"@xyo-network/
|
|
17
|
-
"@xyo-network/
|
|
18
|
-
"@xyo-network/
|
|
19
|
-
"@xyo-network/module
|
|
20
|
-
"@xyo-network/
|
|
21
|
-
"@xyo-network/payload-
|
|
22
|
-
"@xyo-network/payload-
|
|
23
|
-
"@xyo-network/
|
|
15
|
+
"@xylabs/promise": "^2.6.15",
|
|
16
|
+
"@xyo-network/account": "^2.43.7",
|
|
17
|
+
"@xyo-network/address-payload-plugin": "^2.43.7",
|
|
18
|
+
"@xyo-network/archivist-wrapper": "^2.43.7",
|
|
19
|
+
"@xyo-network/module": "^2.43.7",
|
|
20
|
+
"@xyo-network/module-model": "^2.43.7",
|
|
21
|
+
"@xyo-network/payload-builder": "^2.43.7",
|
|
22
|
+
"@xyo-network/payload-model": "^2.43.7",
|
|
23
|
+
"@xyo-network/payload-wrapper": "^2.43.7",
|
|
24
|
+
"@xyo-network/promise": "^2.43.7"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
|
26
27
|
"@xylabs/ts-scripts-yarn3": "^2.12.0"
|
|
@@ -58,5 +59,5 @@
|
|
|
58
59
|
},
|
|
59
60
|
"sideEffects": false,
|
|
60
61
|
"types": "dist/esm/index.d.ts",
|
|
61
|
-
"version": "2.43.
|
|
62
|
+
"version": "2.43.7"
|
|
62
63
|
}
|
package/src/AbstractNode.ts
CHANGED
|
@@ -30,6 +30,7 @@ import { XyoNodeAttachedQuerySchema, XyoNodeAttachQuerySchema, XyoNodeDetachQuer
|
|
|
30
30
|
export interface AbstractNodeParams<TConfig extends NodeConfig = NodeConfig, TModule extends Module = Module> extends ModuleParams<TConfig> {
|
|
31
31
|
internalResolver?: ModuleRepository<TModule>
|
|
32
32
|
}
|
|
33
|
+
|
|
33
34
|
export abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig, TModule extends Module = Module>
|
|
34
35
|
extends AbstractModule<TConfig>
|
|
35
36
|
implements NodeModule
|
|
@@ -96,7 +97,7 @@ export abstract class AbstractNode<TConfig extends NodeConfig = NodeConfig, TMod
|
|
|
96
97
|
override async query<T extends XyoQueryBoundWitness = XyoQueryBoundWitness>(query: T, payloads?: XyoPayload[]): Promise<ModuleQueryResult> {
|
|
97
98
|
const wrapper = QueryBoundWitnessWrapper.parseQuery<XyoNodeQuery>(query, payloads)
|
|
98
99
|
const typedQuery = wrapper.query.payload
|
|
99
|
-
assertEx(this.queryable(
|
|
100
|
+
assertEx(await this.queryable(query, payloads))
|
|
100
101
|
|
|
101
102
|
const queryAccount = new Account()
|
|
102
103
|
const resultPayloads: XyoPayload[] = []
|
package/src/MemoryNode.spec.ts
CHANGED
|
@@ -14,7 +14,7 @@ import { AbstractModule, Module, ModuleDescription, SimpleModuleResolver } from
|
|
|
14
14
|
import { Account, PayloadWrapper, XyoPayload, XyoPayloadBuilder, XyoPayloadSchema } from '@xyo-network/protocol'
|
|
15
15
|
|
|
16
16
|
import { NodeConfigSchema } from './Config'
|
|
17
|
-
import { MemoryNode } from './MemoryNode'
|
|
17
|
+
import { MemoryNode, MemoryNodeParams } from './MemoryNode'
|
|
18
18
|
|
|
19
19
|
describe('MemoryNode', () => {
|
|
20
20
|
const testAccount1 = new Account({ phrase: 'testPhrase1' })
|
|
@@ -76,6 +76,44 @@ describe('MemoryNode', () => {
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
})
|
|
79
|
+
describe('with autoAttachExternallyResolved true', () => {
|
|
80
|
+
it('attaches external modules to internal resolver', async () => {
|
|
81
|
+
// Arrange
|
|
82
|
+
// Create a MemoryNode with no modules in the internal
|
|
83
|
+
// resolver and one module in the external resolver
|
|
84
|
+
const resolver = new SimpleModuleResolver()
|
|
85
|
+
const internalResolver = new SimpleModuleResolver()
|
|
86
|
+
const params: MemoryNodeParams = {
|
|
87
|
+
autoAttachExternallyResolved: true,
|
|
88
|
+
config: { schema: NodeConfigSchema },
|
|
89
|
+
internalResolver,
|
|
90
|
+
resolver,
|
|
91
|
+
}
|
|
92
|
+
const module = await MemoryArchivist.create()
|
|
93
|
+
const filter = { address: [module.address] }
|
|
94
|
+
resolver.add(module)
|
|
95
|
+
// No modules exist in internal resolver
|
|
96
|
+
expect(await internalResolver.tryResolve(filter)).toBeArrayOfSize(0)
|
|
97
|
+
// Module exists in external resolver
|
|
98
|
+
expect(await resolver.tryResolve(filter)).toBeArrayOfSize(1)
|
|
99
|
+
const node = await MemoryNode.create(params)
|
|
100
|
+
// No modules are attached
|
|
101
|
+
expect(await node.attached()).toBeArrayOfSize(0)
|
|
102
|
+
|
|
103
|
+
// Act
|
|
104
|
+
// Query for unattached module (by address) that exists in
|
|
105
|
+
// external resolver
|
|
106
|
+
expect(await node.tryResolve(filter)).toBeArrayOfSize(1)
|
|
107
|
+
|
|
108
|
+
// Assert
|
|
109
|
+
// Module is now attached
|
|
110
|
+
expect(await node.attached()).toBeArrayOfSize(1)
|
|
111
|
+
// Module exists in internal resolver
|
|
112
|
+
expect(await internalResolver.tryResolve(filter)).toBeArrayOfSize(1)
|
|
113
|
+
// Module still exists in external resolver
|
|
114
|
+
expect(await resolver.tryResolve(filter)).toBeArrayOfSize(1)
|
|
115
|
+
})
|
|
116
|
+
})
|
|
79
117
|
})
|
|
80
118
|
describe('register', () => {
|
|
81
119
|
it('registers module', async () => {
|
|
@@ -330,6 +368,21 @@ describe('MemoryNode', () => {
|
|
|
330
368
|
})
|
|
331
369
|
})
|
|
332
370
|
})
|
|
371
|
+
describe('on', () => {
|
|
372
|
+
describe('moduleResolverChanged', () => {
|
|
373
|
+
it('emits event', (done) => {
|
|
374
|
+
const resolver = new SimpleModuleResolver()
|
|
375
|
+
node.on('moduleResolverChanged', (args) => {
|
|
376
|
+
expect(args).toBeObject()
|
|
377
|
+
expect(args.resolver).toBe(resolver)
|
|
378
|
+
done()
|
|
379
|
+
})
|
|
380
|
+
expect(node.resolver).toBeUndefined()
|
|
381
|
+
node.resolver = resolver
|
|
382
|
+
expect(node.resolver).toBe(resolver)
|
|
383
|
+
})
|
|
384
|
+
})
|
|
385
|
+
})
|
|
333
386
|
})
|
|
334
387
|
|
|
335
388
|
const prettyPrintDescription = (description: ModuleDescription) => {
|
package/src/MemoryNode.ts
CHANGED
|
@@ -1,28 +1,68 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import {
|
|
2
|
+
import { exists } from '@xylabs/exists'
|
|
3
|
+
import { fulfilled } from '@xylabs/promise'
|
|
4
|
+
import { duplicateModules, mixinResolverEventEmitter, Module, ModuleFilter, ModuleResolver } from '@xyo-network/module'
|
|
3
5
|
|
|
4
6
|
import { AbstractNode, AbstractNodeParams } from './AbstractNode'
|
|
5
7
|
import { NodeConfig, NodeConfigSchema } from './Config'
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* @param value Current Module
|
|
11
|
-
* @param index Current Module's index
|
|
12
|
-
* @param array Module Array
|
|
13
|
-
* @returns True if the Module's address is the first occurrence of
|
|
14
|
-
* that address in the array, false otherwise
|
|
15
|
-
*/
|
|
16
|
-
const duplicateModules = (value: Module, index: number, array: Module[]): value is Module => {
|
|
17
|
-
return array.findIndex((v) => v.address === value.address) === index
|
|
9
|
+
export interface MemoryNodeParams<TConfig extends NodeConfig = NodeConfig, TModule extends Module = Module>
|
|
10
|
+
extends AbstractNodeParams<TConfig, TModule> {
|
|
11
|
+
autoAttachExternallyResolved?: boolean
|
|
18
12
|
}
|
|
19
13
|
|
|
20
|
-
export
|
|
14
|
+
export type ListenerFunction<T> = (args: T) => void
|
|
15
|
+
|
|
16
|
+
export interface ModuleEventEmitter<TEvent extends string, TEventArgs> {
|
|
17
|
+
on(event: TEvent, listener: ListenerFunction<TEventArgs>): this
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ModuleResolverChangedEventArgs {
|
|
21
|
+
resolver?: ModuleResolver
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type ResolverChangedEventEmitter = ModuleEventEmitter<'moduleResolverChanged', ModuleResolverChangedEventArgs>
|
|
25
|
+
|
|
26
|
+
export class MemoryNode<TConfig extends NodeConfig = NodeConfig, TModule extends Module = Module>
|
|
27
|
+
extends AbstractNode<TConfig, TModule>
|
|
28
|
+
implements ResolverChangedEventEmitter
|
|
29
|
+
{
|
|
21
30
|
static configSchema = NodeConfigSchema
|
|
22
31
|
private registeredModuleMap = new Map<string, TModule>()
|
|
32
|
+
private readonly resolverChangedEventListeners: ListenerFunction<ModuleResolverChangedEventArgs>[] = []
|
|
23
33
|
|
|
24
|
-
|
|
25
|
-
return
|
|
34
|
+
override get resolver() {
|
|
35
|
+
return this._resolver
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override set resolver(resolver: ModuleResolver | undefined) {
|
|
39
|
+
this._resolver = resolver
|
|
40
|
+
const args = { resolver }
|
|
41
|
+
this.resolverChangedEventListeners?.map((listener) => listener(args))
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
static override async create(params?: Partial<MemoryNodeParams>): Promise<MemoryNode> {
|
|
45
|
+
const instance = (await super.create(params)) as MemoryNode
|
|
46
|
+
if (params?.resolver && params?.autoAttachExternallyResolved) {
|
|
47
|
+
const resolver = mixinResolverEventEmitter(params?.resolver)
|
|
48
|
+
resolver.on('moduleResolved', (args) => {
|
|
49
|
+
const { module, filter } = args
|
|
50
|
+
try {
|
|
51
|
+
instance.register(module)
|
|
52
|
+
if (filter?.name?.length) {
|
|
53
|
+
filter.name.map((name) => {
|
|
54
|
+
instance.attach(module.address, name)
|
|
55
|
+
})
|
|
56
|
+
} else {
|
|
57
|
+
instance.attach(module.address)
|
|
58
|
+
}
|
|
59
|
+
} catch (err) {
|
|
60
|
+
params.logger?.error(`Error attaching externally resolved module: 0x${module.address}`)
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
instance.resolver = resolver
|
|
64
|
+
}
|
|
65
|
+
return instance
|
|
26
66
|
}
|
|
27
67
|
|
|
28
68
|
override attach(address: string, name?: string) {
|
|
@@ -34,6 +74,11 @@ export class MemoryNode<TConfig extends NodeConfig = NodeConfig, TModule extends
|
|
|
34
74
|
this.internalResolver.remove(address)
|
|
35
75
|
}
|
|
36
76
|
|
|
77
|
+
on(event: 'moduleResolverChanged', listener: (args: ModuleResolverChangedEventArgs) => void): this {
|
|
78
|
+
this.resolverChangedEventListeners?.push(listener)
|
|
79
|
+
return this
|
|
80
|
+
}
|
|
81
|
+
|
|
37
82
|
override register(module: TModule) {
|
|
38
83
|
this.registeredModuleMap.set(module.address, module)
|
|
39
84
|
}
|
|
@@ -54,14 +99,19 @@ export class MemoryNode<TConfig extends NodeConfig = NodeConfig, TModule extends
|
|
|
54
99
|
const internal = this.internalResolver.resolve(filter)
|
|
55
100
|
const external = (this.resolver as ModuleResolver<TModule> | undefined)?.resolve(filter) || []
|
|
56
101
|
const resolved = await Promise.all([internal, external])
|
|
57
|
-
return resolved.flat().filter(duplicateModules)
|
|
102
|
+
return resolved.flat().filter(exists).filter(duplicateModules)
|
|
58
103
|
}
|
|
59
104
|
|
|
60
105
|
override async tryResolve(filter?: ModuleFilter): Promise<TModule[]> {
|
|
61
106
|
const internal = this.internalResolver.tryResolve(filter)
|
|
62
107
|
const external = (this.resolver as ModuleResolver<TModule> | undefined)?.tryResolve(filter) || []
|
|
63
|
-
const resolved = await Promise.
|
|
64
|
-
return resolved
|
|
108
|
+
const resolved = await Promise.allSettled([internal, external])
|
|
109
|
+
return resolved
|
|
110
|
+
.filter(fulfilled)
|
|
111
|
+
.map((r) => r.value)
|
|
112
|
+
.flat()
|
|
113
|
+
.filter(exists)
|
|
114
|
+
.filter(duplicateModules)
|
|
65
115
|
}
|
|
66
116
|
|
|
67
117
|
override unregister(module: TModule) {
|