@amodx/ncs 0.0.1 → 0.0.21

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 (181) hide show
  1. package/Components/Component.types.d.ts +78 -0
  2. package/Components/ComponentArray.d.ts +30 -0
  3. package/Components/ComponentArray.js +82 -0
  4. package/Components/ComponentCursor.d.ts +27 -0
  5. package/Components/ComponentCursor.js +72 -0
  6. package/Contexts/Context.types.d.ts +76 -0
  7. package/Contexts/ContextArray.d.ts +14 -0
  8. package/Contexts/ContextArray.js +47 -0
  9. package/Contexts/ContextCursor.d.ts +24 -0
  10. package/Contexts/ContextCursor.js +47 -0
  11. package/Data/SerializedData.types.d.ts +44 -0
  12. package/Data/deserializeComponent.d.ts +3 -0
  13. package/Data/deserializeComponent.js +3 -0
  14. package/Data/deserializeNode.d.ts +3 -0
  15. package/Data/deserializeNode.js +34 -0
  16. package/Data/serializeComponent.d.ts +7 -0
  17. package/Data/serializeComponent.js +36 -0
  18. package/Data/serializeNode.d.ts +13 -0
  19. package/Data/serializeNode.js +83 -0
  20. package/Functional.d.ts +12 -0
  21. package/Functional.js +31 -0
  22. package/Graphs/Graph.d.ts +19 -21
  23. package/Graphs/Graph.js +85 -74
  24. package/NCS.d.ts +79 -48
  25. package/NCS.js +115 -32
  26. package/Nodes/Node.types.d.ts +39 -0
  27. package/Nodes/Node.types.js +16 -0
  28. package/Nodes/NodeArray.d.ts +25 -0
  29. package/Nodes/NodeArray.js +96 -0
  30. package/Nodes/NodeComponents.d.ts +19 -0
  31. package/Nodes/NodeComponents.js +183 -0
  32. package/Nodes/NodeContext.d.ts +14 -0
  33. package/Nodes/NodeContext.js +107 -0
  34. package/Nodes/NodeCursor.d.ts +65 -0
  35. package/Nodes/NodeCursor.js +348 -0
  36. package/Nodes/NodeEvents.d.ts +13 -14
  37. package/Nodes/NodeEvents.js +58 -28
  38. package/Nodes/NodeId.d.ts +4 -13
  39. package/Nodes/NodeId.js +16 -48
  40. package/Nodes/NodeObservers.d.ts +35 -20
  41. package/Nodes/NodeObservers.js +162 -37
  42. package/Nodes/NodeTags.d.ts +17 -0
  43. package/Nodes/NodeTags.js +102 -0
  44. package/Pools/NCSPools.d.ts +27 -4
  45. package/Pools/NCSPools.js +14 -2
  46. package/Queries/Query.types.d.ts +8 -0
  47. package/Queries/QueryInstance.d.ts +6 -4
  48. package/Queries/QueryInstance.js +89 -44
  49. package/Queries/QueryPrototype.d.ts +1 -1
  50. package/Register/NCSRegister.d.ts +17 -9
  51. package/Register/NCSRegister.js +25 -2
  52. package/Register/registerComponent.d.ts +31 -25
  53. package/Register/registerComponent.js +88 -36
  54. package/Register/registerContext.d.ts +10 -13
  55. package/Register/registerContext.js +16 -16
  56. package/Register/registerSystem.d.ts +1 -1
  57. package/Register/registerSystem.js +1 -1
  58. package/Register/registerTag.d.ts +15 -17
  59. package/Register/registerTag.js +20 -23
  60. package/Schema/Functions/createBaseSchemaCursor.d.ts +18 -0
  61. package/Schema/Functions/createBaseSchemaCursor.js +34 -0
  62. package/Schema/Functions/createSchemaBinaryObjectCursorClass.d.ts +22 -0
  63. package/Schema/Functions/createSchemaBinaryObjectCursorClass.js +134 -0
  64. package/Schema/Functions/createSchemaIndex.d.ts +3 -0
  65. package/Schema/Functions/createSchemaIndex.js +18 -0
  66. package/Schema/Functions/createSchemaObjectCursorClass.d.ts +18 -0
  67. package/Schema/Functions/createSchemaObjectCursorClass.js +66 -0
  68. package/Schema/Functions/createSchemaTypedArrayCursorClass.d.ts +17 -0
  69. package/Schema/Functions/createSchemaTypedArrayCursorClass.js +66 -0
  70. package/Schema/Property/Property.d.ts +11 -0
  71. package/Schema/Property/Property.js +16 -0
  72. package/Schema/Property/Property.types.d.ts +26 -0
  73. package/Schema/Property/Property.types.js +20 -0
  74. package/Schema/Schema.d.ts +28 -0
  75. package/Schema/Schema.js +223 -0
  76. package/Schema/Schema.types.d.ts +59 -0
  77. package/Schema/Schema.types.js +8 -0
  78. package/Schema/SchemaArray.d.ts +23 -0
  79. package/Schema/SchemaArray.js +87 -0
  80. package/Schema/SchemaArrayCursor.d.ts +19 -0
  81. package/Schema/SchemaArrayCursor.js +56 -0
  82. package/Schema/SchemaView.d.ts +24 -0
  83. package/Schema/SchemaView.js +141 -0
  84. package/Systems/{SystemData.d.ts → System.types.d.ts} +0 -4
  85. package/Systems/SystemInstance.d.ts +6 -4
  86. package/Systems/SystemInstance.js +14 -8
  87. package/Systems/SystemPrototype.d.ts +1 -1
  88. package/Systems/SystemPrototype.js +0 -1
  89. package/Tags/Tag.d.ts +1 -1
  90. package/Tags/Tag.js +1 -1
  91. package/Tags/{TagData.d.ts → Tag.types.d.ts} +0 -17
  92. package/Tags/TagArray.d.ts +18 -0
  93. package/Tags/TagArray.js +37 -0
  94. package/Tags/TagCursor.d.ts +20 -0
  95. package/Tags/TagCursor.js +45 -0
  96. package/Util/IdPalette.d.ts +13 -0
  97. package/Util/IdPalette.js +38 -0
  98. package/{Pools → Util}/ItemPool.d.ts +2 -3
  99. package/{Pools → Util}/ItemPool.js +2 -4
  100. package/Util/Observable.d.ts +28 -0
  101. package/Util/Observable.js +58 -0
  102. package/Util/Util.types.d.ts +4 -0
  103. package/index.d.ts +16 -6
  104. package/index.js +24 -6
  105. package/package.json +1 -1
  106. package/Components/ComponentData.d.ts +0 -112
  107. package/Components/ComponentInstance.d.ts +0 -36
  108. package/Components/ComponentInstance.js +0 -125
  109. package/Components/ComponentInstanceMap.d.ts +0 -7
  110. package/Components/ComponentInstanceMap.js +0 -15
  111. package/Components/ComponentObservers.d.ts +0 -8
  112. package/Components/ComponentObservers.js +0 -13
  113. package/Components/ComponentPipelines.d.ts +0 -16
  114. package/Components/ComponentPipelines.js +0 -33
  115. package/Components/ComponentPrototype.d.ts +0 -17
  116. package/Components/ComponentPrototype.js +0 -73
  117. package/Contexts/ContextData.d.ts +0 -59
  118. package/Contexts/ContextInstance.d.ts +0 -14
  119. package/Contexts/ContextInstance.js +0 -26
  120. package/Contexts/ContextInstanceAnchor.d.ts +0 -15
  121. package/Contexts/ContextInstanceAnchor.js +0 -33
  122. package/Contexts/ContextPrototype.d.ts +0 -9
  123. package/Contexts/ContextPrototype.js +0 -19
  124. package/Graphs/GraphEvents.d.ts +0 -9
  125. package/Graphs/GraphEvents.js +0 -35
  126. package/Graphs/GraphObservers.d.ts +0 -9
  127. package/Graphs/GraphObservers.js +0 -6
  128. package/Graphs/GraphUpdate.d.ts +0 -13
  129. package/Graphs/GraphUpdate.js +0 -38
  130. package/Maps/ItemGraphMap.d.ts +0 -11
  131. package/Maps/ItemGraphMap.js +0 -30
  132. package/Maps/ItemNodeMap.d.ts +0 -17
  133. package/Maps/ItemNodeMap.js +0 -41
  134. package/Nodes/Components/NodeComponentObservers.d.ts +0 -15
  135. package/Nodes/Components/NodeComponentObservers.js +0 -33
  136. package/Nodes/Components/NodeComponents.d.ts +0 -22
  137. package/Nodes/Components/NodeComponents.js +0 -107
  138. package/Nodes/Context/NodeContext.d.ts +0 -13
  139. package/Nodes/Context/NodeContext.js +0 -45
  140. package/Nodes/NodeData.d.ts +0 -40
  141. package/Nodes/NodeInstance.d.ts +0 -50
  142. package/Nodes/NodeInstance.js +0 -202
  143. package/Nodes/NodePipelines.d.ts +0 -16
  144. package/Nodes/NodePipelines.js +0 -33
  145. package/Nodes/Tags/NodeTagObservers.d.ts +0 -15
  146. package/Nodes/Tags/NodeTagObservers.js +0 -33
  147. package/Nodes/Tags/NodeTags.d.ts +0 -21
  148. package/Nodes/Tags/NodeTags.js +0 -95
  149. package/Queries/QueryData.d.ts +0 -8
  150. package/Register/ItemRegister.d.ts +0 -7
  151. package/Register/ItemRegister.js +0 -24
  152. package/Register/registerTrait.d.ts +0 -15
  153. package/Register/registerTrait.js +0 -39
  154. package/Tags/TagInstance.d.ts +0 -13
  155. package/Tags/TagInstance.js +0 -17
  156. package/Tags/TagInstanceMap.d.ts +0 -7
  157. package/Tags/TagInstanceMap.js +0 -15
  158. package/Tags/TagPrototype.d.ts +0 -16
  159. package/Tags/TagPrototype.js +0 -34
  160. package/Traits/TraitContaienrObservers.d.ts +0 -15
  161. package/Traits/TraitContaienrObservers.js +0 -33
  162. package/Traits/TraitContainer.d.ts +0 -22
  163. package/Traits/TraitContainer.js +0 -114
  164. package/Traits/TraitData.d.ts +0 -106
  165. package/Traits/TraitInstance.d.ts +0 -35
  166. package/Traits/TraitInstance.js +0 -115
  167. package/Traits/TraitInstanceMap.d.ts +0 -7
  168. package/Traits/TraitInstanceMap.js +0 -15
  169. package/Traits/TraitObservers.d.ts +0 -8
  170. package/Traits/TraitObservers.js +0 -13
  171. package/Traits/TraitPipelines.d.ts +0 -16
  172. package/Traits/TraitPipelines.js +0 -33
  173. package/Traits/TraitPrototype.d.ts +0 -16
  174. package/Traits/TraitPrototype.js +0 -74
  175. /package/Components/{ComponentData.js → Component.types.js} +0 -0
  176. /package/Contexts/{ContextData.js → Context.types.js} +0 -0
  177. /package/{Nodes/NodeData.js → Data/SerializedData.types.js} +0 -0
  178. /package/Queries/{QueryData.js → Query.types.js} +0 -0
  179. /package/Systems/{SystemData.js → System.types.js} +0 -0
  180. /package/Tags/{TagData.js → Tag.types.js} +0 -0
  181. /package/{Traits/TraitData.js → Util/Util.types.js} +0 -0
@@ -0,0 +1,348 @@
1
+ import { NodeId } from "./NodeId";
2
+ import { NodeEvents } from "./NodeEvents";
3
+ import { NodeObservers } from "./NodeObservers";
4
+ import { NodeContext } from "./NodeContext";
5
+ import { NodeComponents } from "./NodeComponents";
6
+ import { NodeTags } from "./NodeTags";
7
+ import { ComponentCursor } from "../Components/ComponentCursor";
8
+ import { TagCursor } from "../Tags/TagCursor";
9
+ import { NCSPools } from "../Pools/NCSPools";
10
+ export class NodeCursor {
11
+ static Get() {
12
+ const cursor = NCSPools.nodeCursor.get();
13
+ if (!cursor)
14
+ return new NodeCursor();
15
+ return cursor;
16
+ }
17
+ static Retrun(cursor) {
18
+ cursor.clear(cursor.hasEvents, cursor.hasContexts, cursor.hasObservers, cursor.hasComponents, cursor.hasTags);
19
+ NCSPools.nodeCursor.addItem(cursor);
20
+ }
21
+ clear(events, context, observers, compoents, tags) {
22
+ if (events && this._events) {
23
+ NodeEvents.Retrun(this._events);
24
+ this._events = null;
25
+ }
26
+ if (context && this._components) {
27
+ NodeComponents.Retrun(this._components);
28
+ this._components = null;
29
+ }
30
+ if (observers && this._observers) {
31
+ NodeObservers.Retrun(this._observers);
32
+ this._observers = null;
33
+ }
34
+ if (compoents && this._components) {
35
+ NodeComponents.Retrun(this._components);
36
+ this._components = null;
37
+ }
38
+ if (tags && this._tags) {
39
+ NodeTags.Retrun(this._tags);
40
+ this._tags = null;
41
+ }
42
+ }
43
+ get index() {
44
+ return this._index;
45
+ }
46
+ get parentIndex() {
47
+ return this.arrays._parents[this._index];
48
+ }
49
+ get id() {
50
+ return this.graph._nodes._indexMap[this.index] || null;
51
+ }
52
+ get name() {
53
+ return this.arrays._names[this._index];
54
+ }
55
+ _events = null;
56
+ get events() {
57
+ if (!this._events) {
58
+ this._events = NodeEvents.Get();
59
+ }
60
+ this._events.node = this;
61
+ return this._events;
62
+ }
63
+ get hasEvents() {
64
+ return this._events !== null;
65
+ }
66
+ _context = null;
67
+ get context() {
68
+ if (!this._context) {
69
+ this._context = NodeContext.Get();
70
+ }
71
+ this._context.node = this;
72
+ return this._context;
73
+ }
74
+ get hasContexts() {
75
+ return this._context !== null;
76
+ }
77
+ _observers = null;
78
+ get observers() {
79
+ if (!this._observers) {
80
+ this._observers = NodeObservers.Get();
81
+ }
82
+ this._observers.node = this;
83
+ return this._observers;
84
+ }
85
+ get hasObservers() {
86
+ return this.arrays._hasObservers[this._index];
87
+ }
88
+ _components = null;
89
+ get components() {
90
+ if (!this._components) {
91
+ this._components = NodeComponents.Get();
92
+ }
93
+ this._components.node = this;
94
+ return this._components;
95
+ }
96
+ get hasComponents() {
97
+ return this._components !== null;
98
+ }
99
+ _tags = null;
100
+ get tags() {
101
+ if (!this._tags) {
102
+ this._tags = NodeTags.Get();
103
+ }
104
+ this._tags.node = this;
105
+ return this._tags;
106
+ }
107
+ get hasTags() {
108
+ return this._tags !== null;
109
+ }
110
+ get childrenArray() {
111
+ return this.arrays._children[this._index] || null;
112
+ }
113
+ get parent() {
114
+ return this.arrays._parents[this._index];
115
+ }
116
+ set parent(value) {
117
+ this.arrays._parents[this._index] = value;
118
+ }
119
+ graph;
120
+ get arrays() {
121
+ return this.graph._nodes;
122
+ }
123
+ get enabled() {
124
+ return this.arrays._enabled[this._index];
125
+ }
126
+ set enabled(enabled) {
127
+ this.arrays._enabled[this._index] = enabled;
128
+ if (this.hasObservers) {
129
+ this.observers.isEnabledSet && this.observers.enabled.notify(enabled);
130
+ }
131
+ }
132
+ get isDisposed() {
133
+ return this.arrays._disposed[this._index];
134
+ }
135
+ _index = 0;
136
+ constructor() { }
137
+ setNode(graph, index) {
138
+ this._index = index;
139
+ this.graph = graph;
140
+ if (this.arrays._components[index] !== undefined) {
141
+ this._components = NodeComponents.Get();
142
+ this._components.node = this;
143
+ }
144
+ else {
145
+ if (this._components)
146
+ NodeComponents.Retrun(this._components);
147
+ this._components = null;
148
+ }
149
+ if (this.arrays._tags[index] !== undefined) {
150
+ this._tags = NodeTags.Get();
151
+ this._tags.node = this;
152
+ }
153
+ else {
154
+ if (this._tags)
155
+ NodeTags.Retrun(this._tags);
156
+ this._tags = null;
157
+ }
158
+ if (this.arrays._context[index] !== undefined) {
159
+ this._context = NodeContext.Get();
160
+ this._context.node = this;
161
+ }
162
+ else {
163
+ if (this._context)
164
+ NodeContext.Retrun(this._context);
165
+ this._context = null;
166
+ }
167
+ return this;
168
+ }
169
+ toRef(cursor = new NodeCursor()) {
170
+ return cursor.setNode(this.graph, this.index);
171
+ }
172
+ /** Traverse the node's direct children */
173
+ *children(cursor = nodeCursor) {
174
+ const array = this.childrenArray;
175
+ if (!array)
176
+ return false;
177
+ for (let i = 0; i < array.length; i++) {
178
+ cursor.setNode(this.graph, array[i]);
179
+ yield cursor;
180
+ }
181
+ return true;
182
+ }
183
+ /** Traverse all the node's descendants */
184
+ *traverseChildren(cursor = nodeCursor) {
185
+ if (!this.childrenArray)
186
+ return false;
187
+ const children = [this.childrenArray];
188
+ while (children.length) {
189
+ const childrenArray = children.shift();
190
+ if (!childrenArray)
191
+ continue;
192
+ for (let i = 0; i < childrenArray.length; i++) {
193
+ cursor.setNode(this.graph, childrenArray[i]);
194
+ yield cursor;
195
+ if (this.arrays._children[childrenArray[i]] !== undefined) {
196
+ children.push(this.arrays._children[childrenArray[i]]);
197
+ }
198
+ }
199
+ }
200
+ return true;
201
+ }
202
+ /** Traverse all the node's parents */
203
+ *traverseParents(cursor = nodeCursor) {
204
+ let parent = this.parent;
205
+ if (parent === undefined || parent < 0)
206
+ return false;
207
+ while (true) {
208
+ cursor.setNode(this.graph, parent);
209
+ yield cursor;
210
+ parent = this.arrays._parents[cursor._index];
211
+ if (parent === undefined || parent < 0)
212
+ return true;
213
+ }
214
+ }
215
+ /** Traverse all the node's components */
216
+ *traverseComponents(cursor = componentCursor) {
217
+ const components = this.components.components;
218
+ if (!components)
219
+ return false;
220
+ for (let i = 0; i < components.length; i += 2) {
221
+ yield cursor.setInstance(this, components[i], components[i + 1]);
222
+ }
223
+ return true;
224
+ }
225
+ /** Traverse all the node's tags */
226
+ *traverseTags(cursor = tagCursor) {
227
+ const tags = this.tags.tags;
228
+ if (!this.tags)
229
+ return false;
230
+ for (let i = 0; i < tags.length; i += 2) {
231
+ yield cursor.setTag(this, tags[i], tags[i + 1]);
232
+ }
233
+ return true;
234
+ }
235
+ dispose() {
236
+ if (this.isDisposed)
237
+ return;
238
+ this.hasObservers &&
239
+ this.observers.isDisposedSet &&
240
+ this.observers.disposed.notify(this);
241
+ if (this.parent !== undefined) {
242
+ nodeCursor.setNode(this.graph, this.parent);
243
+ nodeCursor.removeChild(this.index);
244
+ }
245
+ if (this.arrays._components[this._index]?.length) {
246
+ this.components.dispose();
247
+ }
248
+ if (this.arrays._tags[this._index]?.length) {
249
+ this.tags.dispose();
250
+ }
251
+ if (this.childrenArray) {
252
+ for (let i = 0; i < this.childrenArray.length; i++) {
253
+ nodeCursor.setNode(this.graph, this.childrenArray[i]);
254
+ nodeCursor.dispose();
255
+ }
256
+ }
257
+ this.graph.removeNode(this.index);
258
+ this.clear(this.hasEvents, this.hasContexts, this.hasObservers, this.hasComponents, this.hasTags);
259
+ }
260
+ hasChild(node) {
261
+ if (!this.childrenArray)
262
+ return false;
263
+ for (let i = 0; i < this.childrenArray.length; i++) {
264
+ if (this.childrenArray[i] == node.index)
265
+ return true;
266
+ }
267
+ return false;
268
+ }
269
+ parentTo(nodeToParentTo) {
270
+ if (nodeToParentTo.hasChild(this))
271
+ return;
272
+ if (this.parent !== undefined) {
273
+ nodeCursor.setNode(this.graph, this.parent);
274
+ nodeCursor.removeChild(this.index);
275
+ }
276
+ nodeToParentTo.addChild(this);
277
+ this.parent = nodeToParentTo.index;
278
+ this.hasObservers &&
279
+ this.observers.isParentedSet &&
280
+ nodeToParentTo.observers.parented.notify(nodeCursor);
281
+ }
282
+ getChild(index, cursor = NodeCursor.Get()) {
283
+ const childrenArray = this.childrenArray;
284
+ if (!childrenArray || childrenArray[index] === undefined)
285
+ return null;
286
+ return cursor.setNode(this.graph, childrenArray[index]);
287
+ }
288
+ addChild(node) {
289
+ if (this.hasChild(node))
290
+ return;
291
+ if (!this.childrenArray) {
292
+ this.arrays._children[this._index] = NCSPools.numberArray.get() || [];
293
+ }
294
+ node.parent = this.index;
295
+ this.childrenArray.push(node.index);
296
+ if (this.hasObservers) {
297
+ this.observers.isChildAddedSet &&
298
+ this.observers.childAdded.notify(node);
299
+ this.observers.isChildrenUpdatedSet &&
300
+ this.observers.childrenUpdated.notify(node);
301
+ }
302
+ if (node.hasObservers) {
303
+ node.observers.isParentedSet && node.observers.parented.notify(node);
304
+ }
305
+ }
306
+ removeChild(index) {
307
+ if (!this.childrenArray)
308
+ return;
309
+ for (let i = 0; i < this.childrenArray.length; i++) {
310
+ if (this.childrenArray[i] == index) {
311
+ const child = this.childrenArray.splice(i, 1)[0];
312
+ nodeCursor.setNode(this.graph, child);
313
+ if (this.hasObservers) {
314
+ this.hasObservers &&
315
+ this.observers.isChildRemovedSet &&
316
+ this.observers.childRemoved.notify(nodeCursor);
317
+ this.hasObservers &&
318
+ this.observers.isChildrenUpdatedSet &&
319
+ this.observers.childrenUpdated.notify(nodeCursor);
320
+ }
321
+ if (nodeCursor.hasObservers) {
322
+ nodeCursor.observers.isRemovedFromParentSet &&
323
+ nodeCursor.observers.removedFromParent.notify(nodeCursor);
324
+ }
325
+ return child;
326
+ }
327
+ }
328
+ return null;
329
+ }
330
+ addUniqueId() {
331
+ let id = this.graph._nodes._indexMap[this.index];
332
+ if (!id)
333
+ id = NodeId.Create();
334
+ this.graph._nodes.addNodeId(this.index, id);
335
+ return id;
336
+ }
337
+ returnCursor() {
338
+ return NodeCursor.Retrun(this);
339
+ }
340
+ cloneCursor(cursor) {
341
+ const newCursor = cursor || NodeCursor.Get();
342
+ newCursor.setNode(this.graph, this._index);
343
+ return newCursor;
344
+ }
345
+ }
346
+ const componentCursor = ComponentCursor.Get();
347
+ const tagCursor = TagCursor.Get();
348
+ const nodeCursor = NodeCursor.Get();
@@ -1,25 +1,24 @@
1
- import { Observable } from "@amodx/core/Observers";
2
- import { NodeInstance } from "./NodeInstance";
1
+ import { Observable, ObservableFunction } from "../Util/Observable";
2
+ import { NodeCursor } from "./NodeCursor";
3
3
  export declare class NodeEventCursor {
4
4
  id: string;
5
- node: NodeInstance;
5
+ node: NodeCursor;
6
6
  data: any;
7
7
  }
8
- declare class NodeEventsObservers {
9
- eventTypeAdded: Observable<string>;
10
- eventDispatched: Observable<NodeEventCursor>;
11
- }
12
8
  export declare class NodeEvents {
13
- node: NodeInstance;
14
- observers: NodeEventsObservers;
9
+ static Get(): NodeEvents;
10
+ static Retrun(cursor: NodeEvents): boolean;
11
+ get events(): Observable<any>[][];
12
+ get index(): number;
13
+ node: NodeCursor;
15
14
  private cursor;
16
- private events;
17
- constructor(node: NodeInstance);
15
+ private constructor();
18
16
  hasListener(id: string): boolean;
19
17
  clearListeners(id: string): false | undefined;
20
- addListener<Data>(id: string, run: (data: Data) => void): void;
21
- removeListener(id: string, run: Function): boolean;
18
+ addListener<Data>(id: string, run: (data: Data) => void, options?: {
19
+ once?: boolean;
20
+ }): void;
21
+ removeListener(id: string, run: ObservableFunction<any>): boolean;
22
22
  dispatch<Data>(id: string, data: Data): boolean;
23
23
  dispatchDeep<Data>(id: string, data: Data): void;
24
24
  }
25
- export {};
@@ -1,57 +1,87 @@
1
- import { Observable } from "@amodx/core/Observers";
1
+ import { NCSPools } from "../Pools/NCSPools";
2
+ import { Observable } from "../Util/Observable";
2
3
  export class NodeEventCursor {
3
4
  id;
4
5
  node;
5
6
  data;
6
7
  }
7
- class NodeEventsObservers {
8
- eventTypeAdded = new Observable();
9
- eventDispatched = new Observable();
10
- }
11
8
  export class NodeEvents {
9
+ static Get() {
10
+ const cursor = NCSPools.nodeEvents.get();
11
+ if (!cursor)
12
+ return new NodeEvents();
13
+ return cursor;
14
+ }
15
+ static Retrun(cursor) {
16
+ return NCSPools.nodeEvents.addItem(cursor);
17
+ }
18
+ get events() {
19
+ return this.node.arrays._events;
20
+ }
21
+ get index() {
22
+ return this.node.index;
23
+ }
12
24
  node;
13
- observers = new NodeEventsObservers();
14
25
  cursor = new NodeEventCursor();
15
- events = new Map();
16
- constructor(node) {
17
- this.node = node;
18
- }
26
+ constructor() { }
19
27
  hasListener(id) {
20
- return this.events.has(id);
28
+ const numberId = this.node.arrays._eventPalette.getNumberId(id);
29
+ if (numberId === undefined)
30
+ return false;
31
+ return this.node.arrays._events[numberId][this.index] !== undefined;
21
32
  }
22
33
  clearListeners(id) {
23
- let observer = this.events.get(id);
34
+ const numberId = this.node.arrays._eventPalette.getNumberId(id);
35
+ if (numberId === undefined)
36
+ return false;
37
+ let observer = this.node.arrays._events[numberId]?.[this.index];
24
38
  if (!observer)
25
39
  return false;
26
40
  observer.clear();
41
+ NCSPools.observers.addItem(observer);
42
+ this.node.arrays._events[numberId][this.index] = undefined;
27
43
  }
28
- addListener(id, run) {
29
- let observer = this.events.get(id);
44
+ addListener(id, run, options) {
45
+ const numberId = this.node.arrays._eventPalette.isRegistered(id)
46
+ ? this.node.arrays._eventPalette.getNumberId(id)
47
+ : this.node.arrays._eventPalette.register(id);
48
+ let observers = this.node.arrays._events[numberId];
49
+ if (!observers) {
50
+ observers = [];
51
+ this.node.arrays._events[numberId] = observers;
52
+ }
53
+ let observer = observers[this.index];
30
54
  if (!observer) {
31
- observer = new Observable();
32
- this.events.set(id, observer);
33
- this.observers.eventTypeAdded.notify(id);
55
+ observer = NCSPools.observers.get() || new Observable();
56
+ observers[this.index] = observer;
57
+ }
58
+ if (options?.once) {
59
+ observer.subscribeOnce(run);
60
+ }
61
+ else {
62
+ observer.subscribe(run);
34
63
  }
35
- observer.subscribe(run);
36
64
  }
37
65
  removeListener(id, run) {
38
- let observer = this.events.get(id);
39
- if (!observer)
66
+ const numberId = this.node.arrays._eventPalette.getNumberId(id);
67
+ if (numberId === undefined)
40
68
  return false;
41
- observer.unsubscribe(run);
69
+ let observers = this.node.arrays._events[numberId];
70
+ if (!observers || !observers[this.index])
71
+ return false;
72
+ observers[this.index].unsubscribe(run);
42
73
  return true;
43
74
  }
44
75
  dispatch(id, data) {
45
- let observer = this.events.get(id);
46
- if (!observer)
76
+ const numberId = this.node.arrays._eventPalette.getNumberId(id);
77
+ if (numberId === undefined)
47
78
  return false;
48
- observer.notify(data);
79
+ let observers = this.node.arrays._events[numberId];
80
+ if (!observers || !observers[this.index])
81
+ return false;
82
+ observers[this.index].notify(data);
49
83
  this.cursor.id = id;
50
84
  this.cursor.data = data;
51
- this.observers.eventDispatched.notify(this.cursor);
52
- if (this.node.graph.events.hasListener(id)) {
53
- this.node.graph.events.dispatch(id, this.cursor);
54
- }
55
85
  return true;
56
86
  }
57
87
  dispatchDeep(id, data) {
package/Nodes/NodeId.d.ts CHANGED
@@ -1,15 +1,6 @@
1
1
  export declare class NodeId {
2
- high: bigint;
3
- low: bigint;
4
- private _idString;
5
- get idString(): string;
6
- set idString(id: string);
7
- private constructor();
8
- static Compare(id: NodeId, id2: NodeId): boolean;
9
- static Create(id?: string): NodeId;
10
- static FromString(id: string): {
11
- high: bigint;
12
- low: bigint;
13
- };
14
- static ToHexString(id: NodeId): string;
2
+ static Create(): bigint;
3
+ static CreateString(): string;
4
+ static FromString(id: string): bigint;
5
+ static ToHexString(id: BigInt): string;
15
6
  }
package/Nodes/NodeId.js CHANGED
@@ -1,56 +1,24 @@
1
+ const buffer = new ArrayBuffer(16);
2
+ const randomArray = new Uint8Array(buffer);
3
+ const view = new DataView(buffer);
1
4
  export class NodeId {
2
- high;
3
- low;
4
- _idString = "";
5
- get idString() {
6
- if (!this._idString)
7
- this._idString = NodeId.ToHexString(this);
8
- return this._idString;
5
+ static Create() {
6
+ crypto.getRandomValues(randomArray);
7
+ const high = BigInt(view.getUint32(0)) << 96n;
8
+ const midHigh = BigInt(view.getUint32(4)) << 64n;
9
+ const midLow = BigInt(view.getUint32(8)) << 32n;
10
+ const low = BigInt(view.getUint32(12));
11
+ const bigIntId = high | midHigh | midLow | low;
12
+ return bigIntId;
9
13
  }
10
- set idString(id) {
11
- this._idString = id;
12
- }
13
- constructor(low, high) {
14
- this.low = low;
15
- this.high = high;
16
- }
17
- static Compare(id, id2) {
18
- return id.low == id2.low && id.high == id2.high;
19
- }
20
- static Create(id) {
21
- if (id) {
22
- const { high, low } = NodeId.FromString(id);
23
- return new NodeId(low, high);
24
- }
25
- else {
26
- const array = new Uint8Array(16);
27
- crypto.getRandomValues(array);
28
- const high = (BigInt(array[0]) << 56n) |
29
- (BigInt(array[1]) << 48n) |
30
- (BigInt(array[2]) << 40n) |
31
- (BigInt(array[3]) << 32n) |
32
- (BigInt(array[4]) << 24n) |
33
- (BigInt(array[5]) << 16n) |
34
- (BigInt(array[6]) << 8n) |
35
- BigInt(array[7]);
36
- const low = (BigInt(array[8]) << 56n) |
37
- (BigInt(array[9]) << 48n) |
38
- (BigInt(array[10]) << 40n) |
39
- (BigInt(array[11]) << 32n) |
40
- (BigInt(array[12]) << 24n) |
41
- (BigInt(array[13]) << 16n) |
42
- (BigInt(array[14]) << 8n) |
43
- BigInt(array[15]);
44
- return new NodeId(low, high);
45
- }
14
+ static CreateString() {
15
+ return this.ToHexString(this.Create());
46
16
  }
47
17
  static FromString(id) {
48
- const high = BigInt("0x" + id.slice(0, 16));
49
- const low = BigInt("0x" + id.slice(16, 32));
50
- return { high, low };
18
+ const bigIntId = BigInt("0x" + id);
19
+ return bigIntId;
51
20
  }
52
21
  static ToHexString(id) {
53
- return (id.high.toString(16).padStart(16, "0") +
54
- id.low.toString(16).padStart(16, "0"));
22
+ return id.toString(16).padStart(32, "0");
55
23
  }
56
24
  }
@@ -1,24 +1,39 @@
1
- import { Observable } from "@amodx/core/Observers";
2
- import { NodeInstance } from "./NodeInstance";
1
+ import { Observable } from "../Util/Observable";
2
+ import { NodeCursor } from "./NodeCursor";
3
+ import { ComponentCursor } from "../Components/ComponentCursor";
4
+ import { TagCursor } from "../Tags/TagCursor";
3
5
  export interface NodeObservers {
4
6
  }
5
7
  export declare class NodeObservers {
6
- private _disposed?;
7
- private _parented?;
8
- private _removedFromParent?;
9
- private _childAdded?;
10
- private _childRemoved?;
11
- private _childrenUpdated?;
12
- get disposed(): Observable<void>;
13
- get parented(): Observable<void>;
14
- get removedFromParent(): Observable<void>;
15
- get childAdded(): Observable<NodeInstance>;
16
- get childRemoved(): Observable<NodeInstance>;
17
- get childrenUpdated(): Observable<void>;
18
- isDisposedSet(): boolean;
19
- isParentedSet(): boolean;
20
- isRemovedFromParentSet(): boolean;
21
- isChildAddedSet(): boolean;
22
- isChildRemovedSet(): boolean;
23
- isChildrenUpdatedSet(): boolean;
8
+ node: NodeCursor;
9
+ static Get(): NodeObservers;
10
+ static Retrun(cursor: NodeObservers): boolean;
11
+ private constructor();
12
+ get observers(): Observable<any>[][];
13
+ get disposed(): Observable<any>;
14
+ get enabled(): Observable<any>;
15
+ get parented(): Observable<any>;
16
+ get removedFromParent(): Observable<any>;
17
+ get childAdded(): Observable<NodeCursor>;
18
+ get childRemoved(): Observable<NodeCursor>;
19
+ get childrenUpdated(): Observable<any>;
20
+ get isDisposedSet(): boolean;
21
+ get isEnabledSet(): boolean;
22
+ get isParentedSet(): boolean;
23
+ get isRemovedFromParentSet(): boolean;
24
+ get isChildAddedSet(): boolean;
25
+ get isChildRemovedSet(): boolean;
26
+ get isChildrenUpdatedSet(): boolean;
27
+ get componentAdded(): Observable<ComponentCursor>;
28
+ get componentRemoved(): Observable<ComponentCursor>;
29
+ get componentsUpdated(): Observable<any>;
30
+ get isComponentAddedSet(): boolean;
31
+ get isComponentRemovedSet(): boolean;
32
+ get isComponentsUpdatedSet(): boolean;
33
+ get tagsAdded(): Observable<TagCursor>;
34
+ get tagsRemoved(): Observable<TagCursor>;
35
+ get tagsUpdated(): Observable<any>;
36
+ get isTagsAddedSet(): boolean;
37
+ get isTagsRemovedSet(): boolean;
38
+ get isTagsUpdatedSet(): boolean;
24
39
  }