@xyo-network/node 2.51.4 → 2.51.5

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.
@@ -4,6 +4,7 @@ import { fulfilled, rejected } from '@xylabs/promise';
4
4
  import { duplicateModules } from '@xyo-network/module';
5
5
  import { AbstractNode } from './AbstractNode';
6
6
  import { NodeConfigSchema } from './Config';
7
+ import { NodeWrapper } from './NodeWrapper';
7
8
  export class MemoryNode extends AbstractNode {
8
9
  static configSchema = NodeConfigSchema;
9
10
  registeredModuleMap = {};
@@ -25,8 +26,27 @@ export class MemoryNode extends AbstractNode {
25
26
  }
26
27
  const args = { module, name: module.config.name };
27
28
  this.moduleAttachedEventListeners?.map((listener) => listener(args));
29
+ const wrappedAsNode = NodeWrapper.tryWrap(module);
30
+ if (wrappedAsNode && external) {
31
+ const attachEmitter = wrappedAsNode.module;
32
+ const detachEmitter = wrappedAsNode.module;
33
+ attachEmitter.on('moduleAttached', (args) => this.moduleAttachedEventListeners?.map((listener) => listener(args)));
34
+ detachEmitter.on('moduleDetached', (args) => this.moduleDetachedEventListeners?.map((listener) => listener(args)));
35
+ const notifyOfExistingModules = async (node) => {
36
+ //send attach events for all existing attached modules
37
+ const childModules = await node.resolve();
38
+ await Promise.all(childModules.map((child) => {
39
+ this.moduleAttachedEventListeners?.map((listener) => listener({ module: child }));
40
+ const wrappedAsNode = NodeWrapper.tryWrap(child);
41
+ if (wrappedAsNode) {
42
+ return notifyOfExistingModules(wrappedAsNode);
43
+ }
44
+ }));
45
+ };
46
+ await notifyOfExistingModules(wrappedAsNode);
47
+ }
28
48
  }
29
- detach(address) {
49
+ async detach(address) {
30
50
  const module = assertEx(this.registeredModuleMap[address], 'No module found at that address');
31
51
  this.privateResolver.removeResolver(module.downResolver);
32
52
  //remove inside access
@@ -37,6 +57,22 @@ export class MemoryNode extends AbstractNode {
37
57
  this.downResolver.removeResolver(module.downResolver);
38
58
  const args = { module, name: module.config.name };
39
59
  this.moduleDetachedEventListeners?.map((listener) => listener(args));
60
+ //notify of all sub node children detach
61
+ const wrappedAsNode = NodeWrapper.tryWrap(module);
62
+ if (wrappedAsNode) {
63
+ const notifyOfExistingModules = async (node) => {
64
+ //send attach events for all existing attached modules
65
+ const childModules = await node.resolve();
66
+ await Promise.all(childModules.map((child) => {
67
+ this.moduleDetachedEventListeners?.map((listener) => listener({ module: child }));
68
+ const wrappedAsNode = NodeWrapper.tryWrap(child);
69
+ if (wrappedAsNode) {
70
+ return notifyOfExistingModules(wrappedAsNode);
71
+ }
72
+ }));
73
+ };
74
+ await notifyOfExistingModules(wrappedAsNode);
75
+ }
40
76
  }
41
77
  register(module) {
42
78
  assertEx(!this.registeredModuleMap[module.address], `Module already registered at that address[${module.address}]`);
@@ -53,8 +89,8 @@ export class MemoryNode extends AbstractNode {
53
89
  return value;
54
90
  });
55
91
  }
56
- unregister(module) {
57
- this.detach(module.address);
92
+ async unregister(module) {
93
+ await this.detach(module.address);
58
94
  delete this.registeredModuleMap[module.address];
59
95
  return this;
60
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryNode.js","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryNode.js","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ export declare class MemoryNode<TParams extends MemoryNodeParams = MemoryNodePar
7
7
  private registeredModuleMap;
8
8
  static create(params?: Partial<MemoryNodeParams>): Promise<MemoryNode>;
9
9
  attach(address: string, external?: boolean): Promise<void>;
10
- detach(address: string): void;
10
+ detach(address: string): Promise<void>;
11
11
  register(module: Module): this;
12
12
  registered(): string[];
13
13
  registeredModules(): Module<import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & {
@@ -21,7 +21,7 @@ export declare class MemoryNode<TParams extends MemoryNodeParams = MemoryNodePar
21
21
  } & {
22
22
  schema: string;
23
23
  }>[];
24
- unregister(module: Module): this;
24
+ unregister(module: Module): Promise<this>;
25
25
  protected resolve<TModule extends Module = Module>(filter?: ModuleFilter): Promise<TModule[]>;
26
26
  }
27
27
  //# sourceMappingURL=MemoryNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryNode.d.ts","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAoB,MAAM,UAAU,CAAA;AAEvD,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAEnG,qBAAa,UAAU,CAAC,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IACxG,OAAgB,YAAY,4BAAmB;IAE/C,OAAO,CAAC,mBAAmB,CAA6B;WAElC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;IAsBhD,MAAM,CAAC,OAAO,EAAE,MAAM;IAkBtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAMvB,UAAU;IAMV,iBAAiB;;;;;;;;;;;IAMjB,UAAU,CAAC,MAAM,EAAE,MAAM;cAMT,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAmB7G"}
1
+ {"version":3,"file":"MemoryNode.d.ts","sourceRoot":"","sources":["../../src/MemoryNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE5E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAoB,MAAM,UAAU,CAAA;AAKvD,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAEnG,qBAAa,UAAU,CAAC,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IACxG,OAAgB,YAAY,4BAAmB;IAE/C,OAAO,CAAC,mBAAmB,CAA6B;WAElC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAItE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;IA+C1C,MAAM,CAAC,OAAO,EAAE,MAAM;IAqC5B,QAAQ,CAAC,MAAM,EAAE,MAAM;IAMvB,UAAU;IAMV,iBAAiB;;;;;;;;;;;IAMX,UAAU,CAAC,MAAM,EAAE,MAAM;cAMf,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAmB7G"}
package/package.json CHANGED
@@ -13,16 +13,16 @@
13
13
  "@xylabs/assert": "^2.7.4",
14
14
  "@xylabs/exists": "^2.7.4",
15
15
  "@xylabs/promise": "^2.7.4",
16
- "@xyo-network/account": "^2.51.4",
17
- "@xyo-network/account-model": "^2.51.4",
18
- "@xyo-network/address-payload-plugin": "^2.51.4",
19
- "@xyo-network/archivist-wrapper": "^2.51.4",
20
- "@xyo-network/module": "^2.51.4",
21
- "@xyo-network/module-model": "^2.51.4",
22
- "@xyo-network/payload-builder": "^2.51.4",
23
- "@xyo-network/payload-model": "^2.51.4",
24
- "@xyo-network/payload-wrapper": "^2.51.4",
25
- "@xyo-network/promise": "^2.51.4"
16
+ "@xyo-network/account": "^2.51.5",
17
+ "@xyo-network/account-model": "^2.51.5",
18
+ "@xyo-network/address-payload-plugin": "^2.51.5",
19
+ "@xyo-network/archivist-wrapper": "^2.51.5",
20
+ "@xyo-network/module": "^2.51.5",
21
+ "@xyo-network/module-model": "^2.51.5",
22
+ "@xyo-network/payload-builder": "^2.51.5",
23
+ "@xyo-network/payload-model": "^2.51.5",
24
+ "@xyo-network/payload-wrapper": "^2.51.5",
25
+ "@xyo-network/promise": "^2.51.5"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@xylabs/ts-scripts-yarn3": "^2.16.1",
@@ -62,5 +62,5 @@
62
62
  },
63
63
  "sideEffects": false,
64
64
  "types": "dist/types/index.d.ts",
65
- "version": "2.51.4"
65
+ "version": "2.51.5"
66
66
  }
package/src/MemoryNode.ts CHANGED
@@ -5,6 +5,9 @@ import { duplicateModules, Module, ModuleFilter } from '@xyo-network/module'
5
5
 
6
6
  import { AbstractNode, AbstractNodeParams } from './AbstractNode'
7
7
  import { NodeConfig, NodeConfigSchema } from './Config'
8
+ import { ModuleAttachedEventArgs, ModuleAttachedEventEmitter, ModuleDetachedEventArgs, ModuleDetachedEventEmitter } from './Events'
9
+ import { NodeModule } from './Node'
10
+ import { NodeWrapper } from './NodeWrapper'
8
11
 
9
12
  export type MemoryNodeParams<TConfig extends NodeConfig = NodeConfig> = AbstractNodeParams<TConfig>
10
13
 
@@ -37,9 +40,34 @@ export class MemoryNode<TParams extends MemoryNodeParams = MemoryNodeParams> ext
37
40
 
38
41
  const args = { module, name: module.config.name }
39
42
  this.moduleAttachedEventListeners?.map((listener) => listener(args))
43
+
44
+ const wrappedAsNode = NodeWrapper.tryWrap(module as NodeModule)
45
+ if (wrappedAsNode && external) {
46
+ const attachEmitter = wrappedAsNode.module as ModuleAttachedEventEmitter
47
+ const detachEmitter = wrappedAsNode.module as ModuleDetachedEventEmitter
48
+
49
+ attachEmitter.on('moduleAttached', (args: ModuleAttachedEventArgs) => this.moduleAttachedEventListeners?.map((listener) => listener(args)))
50
+ detachEmitter.on('moduleDetached', (args: ModuleDetachedEventArgs) => this.moduleDetachedEventListeners?.map((listener) => listener(args)))
51
+
52
+ const notifyOfExistingModules = async (node: NodeWrapper) => {
53
+ //send attach events for all existing attached modules
54
+ const childModules = await node.resolve()
55
+ await Promise.all(
56
+ childModules.map((child) => {
57
+ this.moduleAttachedEventListeners?.map((listener) => listener({ module: child }))
58
+ const wrappedAsNode = NodeWrapper.tryWrap(child as NodeModule)
59
+ if (wrappedAsNode) {
60
+ return notifyOfExistingModules(wrappedAsNode)
61
+ }
62
+ }),
63
+ )
64
+ }
65
+
66
+ await notifyOfExistingModules(wrappedAsNode)
67
+ }
40
68
  }
41
69
 
42
- override detach(address: string) {
70
+ override async detach(address: string) {
43
71
  const module = assertEx(this.registeredModuleMap[address], 'No module found at that address')
44
72
 
45
73
  this.privateResolver.removeResolver(module.downResolver)
@@ -55,6 +83,25 @@ export class MemoryNode<TParams extends MemoryNodeParams = MemoryNodeParams> ext
55
83
 
56
84
  const args = { module, name: module.config.name }
57
85
  this.moduleDetachedEventListeners?.map((listener) => listener(args))
86
+
87
+ //notify of all sub node children detach
88
+ const wrappedAsNode = NodeWrapper.tryWrap(module as NodeModule)
89
+ if (wrappedAsNode) {
90
+ const notifyOfExistingModules = async (node: NodeWrapper) => {
91
+ //send attach events for all existing attached modules
92
+ const childModules = await node.resolve()
93
+ await Promise.all(
94
+ childModules.map((child) => {
95
+ this.moduleDetachedEventListeners?.map((listener) => listener({ module: child }))
96
+ const wrappedAsNode = NodeWrapper.tryWrap(child as NodeModule)
97
+ if (wrappedAsNode) {
98
+ return notifyOfExistingModules(wrappedAsNode)
99
+ }
100
+ }),
101
+ )
102
+ }
103
+ await notifyOfExistingModules(wrappedAsNode)
104
+ }
58
105
  }
59
106
 
60
107
  override register(module: Module) {
@@ -75,8 +122,8 @@ export class MemoryNode<TParams extends MemoryNodeParams = MemoryNodeParams> ext
75
122
  })
76
123
  }
77
124
 
78
- override unregister(module: Module) {
79
- this.detach(module.address)
125
+ override async unregister(module: Module) {
126
+ await this.detach(module.address)
80
127
  delete this.registeredModuleMap[module.address]
81
128
  return this
82
129
  }