@woosh/meep-engine 2.98.3 → 2.99.0

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/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.98.3",
8
+ "version": "2.99.0",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"NodeGraph.d.ts","sourceRoot":"","sources":["../../../../../src/core/model/node-graph/NodeGraph.js"],"names":[],"mappings":"AASA;IAEI;;;OAGG;IACH,cAAmB;IAEnB;;;OAGG;IACH,oBAAyB;IAEzB;;;;OAIG;IACH,mBAA0B;IAE1B;;;;OAIG;IACH,yBAAgC;IAEhC;;OAEG;IACH;QACI;;;WAGG;;QAGH;;;WAGG;;QAGH;;;WAGG;;QAGH;;;WAGG;;MAEL;IAEF;;OAEG;IACH,cAMC;IAED;;;OAGG;IACH,YAFW,SAAS,QAYnB;IAED;;;OAGG;IACH,SAFa,SAAS,CAQrB;IAED;;;;;;OAMG;IACH,aAHW,SAAS,GACP;QAAC,WAAW,EAAC,UAAU,EAAE,CAAC;QAAC,KAAK,EAAC,YAAY,EAAE,CAAA;KAAC,CAY5D;IAED;;;;;;;;OAQG;IACH,sCAJW,YAAY,EAAE,GAEZ;QAAC,WAAW,EAAC,UAAU,EAAE,CAAC;QAAC,KAAK,EAAC,YAAY,EAAE,CAAA;KAAC,CAwE5D;IAED;;;;OAIG;IACH,8BAHoB,YAAY,+BAK/B;IAED;;;;OAIG;IACH,oCAHoB,UAAU,+BAK7B;IAED;;;OAGG;IACH,YAFY,YAAY,EAAE,CAIzB;IAED;;;OAGG;IACH,kBAFY,UAAU,EAAE,CAIvB;IAED;;;;OAIG;IACH,cAHW,YAAY,GACV,OAAO,CAenB;IAED;;;;OAIG;IACH,qDAFa,YAAY,EAAE,CAqB1B;IAED;;;;OAIG;IACH,0DAFa,YAAY,EAAE,CAqB1B;IAED;;;;OAIG;IACH,YAHW,MAAM,GACJ,YAAY,GAAC,SAAS,CAkBlC;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,YAAY,CAUxB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,UAAU,GAAC,SAAS,CAgBhC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,WACN,MAAM,GACJ,4BAA0B,SAAS,CAY/C;IAED;;;;OAIG;IACH,mCAFa,MAAM,CAclB;IAED;;;OAGG;IACH,cAFW,YAAY,QAgBtB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,OAAO,CA4BnB;IAED;;;;;;;;OAQG;IACH,uCANW,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACJ,MAAM,CAqClB;IAED;;;;;;;OAOG;IACH,6BANW,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACJ,MAAM,CAsDlB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,OAAO,CAuBnB;IAED;;;;;OAKG;IACH,iCAJW,MAAM,UACN,MAAM,EAAE,GACN,MAAM,CAyBlB;IAGL;;;OAGG;IACH,sBAFU,OAAO,CAEc;CAN9B;6BA5mB0B,wBAAwB;2BAD1B,iBAAiB"}
1
+ {"version":3,"file":"NodeGraph.d.ts","sourceRoot":"","sources":["../../../../../src/core/model/node-graph/NodeGraph.js"],"names":[],"mappings":"AASA;IAEI;;;OAGG;IACH,cAAmB;IAEnB;;;OAGG;IACH,oBAAyB;IAEzB;;;;OAIG;IACH,mBAA0B;IAE1B;;;;OAIG;IACH,yBAAgC;IAEhC;;OAEG;IACH;QACI;;;WAGG;;QAGH;;;WAGG;;QAGH;;;WAGG;;QAGH;;;WAGG;;MAEL;IAEF;;OAEG;IACH,cAMC;IAED;;;OAGG;IACH,YAFW,SAAS,QAYnB;IAED;;;OAGG;IACH,SAFa,SAAS,CAQrB;IAED;;;;;;OAMG;IACH,aAHW,SAAS,GACP;QAAC,WAAW,EAAC,UAAU,EAAE,CAAC;QAAC,KAAK,EAAC,YAAY,EAAE,CAAA;KAAC,CAY5D;IAED;;;;;;;;OAQG;IACH,sCAJW,YAAY,EAAE,GAEZ;QAAC,WAAW,EAAC,UAAU,EAAE,CAAC;QAAC,KAAK,EAAC,YAAY,EAAE,CAAA;KAAC,CAwE5D;IAED;;;;OAIG;IACH,8BAHoB,YAAY,+BAK/B;IAED;;;;OAIG;IACH,oCAHoB,UAAU,+BAK7B;IAED;;;OAGG;IACH,YAFY,YAAY,EAAE,CAIzB;IAED;;;OAGG;IACH,kBAFY,UAAU,EAAE,CAIvB;IAED;;;;OAIG;IACH,cAHW,YAAY,GACV,OAAO,CAenB;IAED;;;;OAIG;IACH,qDAFa,YAAY,EAAE,CAqB1B;IAED;;;;OAIG;IACH,0DAFa,YAAY,EAAE,CAqB1B;IAED;;;;OAIG;IACH,YAHW,MAAM,GACJ,YAAY,GAAC,SAAS,CAkBlC;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,YAAY,CAUxB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,UAAU,GAAC,SAAS,CAgBhC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,WACN,MAAM,GACJ,4BAA0B,SAAS,CAY/C;IAED;;;;OAIG;IACH,mCAFa,MAAM,CAclB;IAED;;;OAGG;IACH,cAFW,YAAY,QAgBtB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,OAAO,CA4BnB;IAED;;;;;;;;OAQG;IACH,uCANW,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACJ,MAAM,CAqClB;IAED;;;;;;;OAOG;IACH,6BANW,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACJ,MAAM,CAoDlB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,OAAO,CAuBnB;IAED;;;;;OAKG;IACH,iCAJW,MAAM,UACN,MAAM,EAAE,GACN,MAAM,CAyBlB;IAGL;;;OAGG;IACH,sBAFU,OAAO,CAEc;CAN9B;6BA1mB4B,wBAAwB;2BAD1B,iBAAiB"}
@@ -1,11 +1,11 @@
1
- import {assert} from "../../assert.js";
2
- import {array_push_if_unique} from "../../collection/array/array_push_if_unique.js";
3
- import {array_remove_first} from "../../collection/array/array_remove_first.js";
1
+ import { assert } from "../../assert.js";
2
+ import { array_push_if_unique } from "../../collection/array/array_push_if_unique.js";
3
+ import { array_remove_first } from "../../collection/array/array_remove_first.js";
4
4
  import List from "../../collection/list/List.js";
5
5
  import IdPool from "../../IdPool.js";
6
- import {Connection} from "./Connection.js";
7
- import {NodeInstance} from "./node/NodeInstance.js";
8
- import {PortDirection} from "./node/PortDirection.js";
6
+ import { Connection } from "./Connection.js";
7
+ import { NodeInstance } from "./node/NodeInstance.js";
8
+ import { PortDirection } from "./node/PortDirection.js";
9
9
 
10
10
  export class NodeGraph {
11
11
 
@@ -131,7 +131,7 @@ export class NodeGraph {
131
131
  * @param {Connection[]} [connections]
132
132
  * @returns {{connections:Connection[], nodes:NodeInstance[]}} local created instances
133
133
  */
134
- mergeFragment({nodes, connections = []}) {
134
+ mergeFragment({ nodes, connections = [] }) {
135
135
 
136
136
  const previous_node_count = this.nodes.length;
137
137
  const previous_connection_count = this.connections.length;
@@ -518,8 +518,6 @@ export class NodeGraph {
518
518
  assert.isNonNegativeInteger(targetNode, 'targetNode');
519
519
  assert.isNonNegativeInteger(targetPort, 'targetPort');
520
520
 
521
- //TODO validate if connection already exists
522
-
523
521
  const sourceNodeInstance = this.getNode(sourceNode);
524
522
 
525
523
  if (sourceNodeInstance === undefined) {
@@ -536,13 +534,13 @@ export class NodeGraph {
536
534
  const sourceEndpoint = sourceNodeInstance.getEndpoint(sourcePort);
537
535
 
538
536
  if (sourceEndpoint === undefined) {
539
- throw new Error(`Source port '${sourcePort}' not found`);
537
+ throw new Error(`Source port '${sourcePort}' not found on ${sourceNodeInstance}`);
540
538
  }
541
539
 
542
540
  const targetEndpoint = targetNodeInstance.getEndpoint(targetPort);
543
541
 
544
542
  if (targetEndpoint === undefined) {
545
- throw new Error(`Target port '${targetPort}' not found`);
543
+ throw new Error(`Target port '${targetPort}' not found on ${targetNodeInstance}`);
546
544
  }
547
545
 
548
546
  //create connection
@@ -1 +1 @@
1
- {"version":3,"file":"NodeDescription.d.ts","sourceRoot":"","sources":["../../../../../../src/core/model/node-graph/node/NodeDescription.js"],"names":[],"mappings":"AAyCA;IACI;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV;;;;;;OAMG;IACH,IAFU,MAAM,CAEO;IAEvB;;;OAGG;IACH,iBAFU,IAAI,EAAE,CAEL;IAEX;;;OAGG;IACH,YAFU,wBAAwB,EAAE,CAEpB;IAEhB;;OAEG;IACH;QACI;;;WAGG;4BADO,OAAO,IAAI,CAAC;QAGtB;;;WAGG;8BADO,OAAO,IAAI,CAAC;MAGxB;IAEF;;;;OAIG;IACH,4CAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;;;;OAMG;IACH,sBALW,MAAM,QACN,qBAAqB,iBACrB,MAAM,GAAC,OAAO,GAAC,MAAM,GACnB,MAAM,CA0ClB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,wBAAwB,CAiBpC;IAGD;;;;;;OAMG;IACH,oDAHW,aAAa,GACX,MAAM,CA2BlB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,OAAO,CAuBnB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,IAAI,GAAC,IAAI,CAgBrB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACL,IAAI,EAAE,CAwBjB;IAED;;;;OAIG;IACH,+BAHW,aAAa,GACZ,IAAI,EAAE,CAuBjB;IAED;;;;;OAKG;IACH,iCAJW,MAAM,aACN,aAAa,GACZ,IAAI,GAAC,SAAS,CAmBzB;IAED;;;OAGG;IACH,YAFa,IAAI,EAAE,CAIlB;IAED;;;;OAIG;IACH,cAHW,eAAe,GACb,OAAO,CAOnB;IAED,mBAEC;IAED;;;;MAMC;IAED;;;;;;OAMG;IACH;;;;qCAIC;IAKL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAR1C;;;;qBAjYoB,WAAW;yCADS,yCAAyC;mBAH/D,kCAAkC;sCAEf,sCAAsC;8BAG9C,oBAAoB"}
1
+ {"version":3,"file":"NodeDescription.d.ts","sourceRoot":"","sources":["../../../../../../src/core/model/node-graph/node/NodeDescription.js"],"names":[],"mappings":"AAwCA;IACI;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV;;;;;;OAMG;IACH,IAFU,MAAM,CAEO;IAEvB;;;OAGG;IACH,iBAFU,IAAI,EAAE,CAEL;IAEX;;;OAGG;IACH,YAFU,wBAAwB,EAAE,CAEpB;IAEhB;;OAEG;IACH;QACI;;;WAGG;4BADO,OAAO,IAAI,CAAC;QAGtB;;;WAGG;8BADO,OAAO,IAAI,CAAC;MAGxB;IAEF;;;;OAIG;IACH,4CAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;;;;OAMG;IACH,sBALW,MAAM,QACN,qBAAqB,iBACrB,MAAM,GAAC,OAAO,GAAC,MAAM,GACnB,MAAM,CA0ClB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,wBAAwB,CAiBpC;IAGD;;;;;;OAMG;IACH,oDAHW,aAAa,GACX,MAAM,CA2BlB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,OAAO,CAuBnB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,IAAI,GAAC,IAAI,CAgBrB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACL,IAAI,EAAE,CAwBjB;IAED;;;;OAIG;IACH,+BAHW,aAAa,GACZ,IAAI,EAAE,CAuBjB;IAED;;;;;OAKG;IACH,iCAJW,MAAM,aACN,aAAa,GACZ,IAAI,GAAC,SAAS,CAmBzB;IAED;;;OAGG;IACH,YAFa,IAAI,EAAE,CAIlB;IAED;;;;OAIG;IACH,cAHW,eAAe,GACb,OAAO,CAOnB;IAED,mBAEC;IAED;;;;MAMC;IAED;;;;;;OAMG;IACH;;;;qCAIC;IAKL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAR1C;;;;qBA/XoB,WAAW;yCADS,yCAAyC;mBAH/D,kCAAkC;sCAEf,sCAAsC;8BAG9C,oBAAoB"}
@@ -1,4 +1,5 @@
1
1
  import { assert } from "../../../assert.js";
2
+ import { BitSet } from "../../../binary/BitSet.js";
2
3
  import { isArrayEqual } from "../../../collection/array/isArrayEqual.js";
3
4
  import Signal from "../../../events/signal/Signal.js";
4
5
  import { invokeObjectToJSON } from "../../object/invokeObjectToJSON.js";
@@ -9,28 +10,26 @@ import { PortDirection } from "./PortDirection.js";
9
10
 
10
11
 
11
12
  /**
12
- * @template T
13
13
  * @private
14
- * @param {T[]} things
14
+ * @param {{id:number}[]} things
15
15
  * @returns {number}
16
16
  */
17
17
  function pickNewSetId(things) {
18
18
 
19
+ const used = new BitSet();
19
20
 
20
21
  const n = things.length;
21
22
 
22
- let r = n;
23
-
24
23
  for (let i = 0; i < n; i++) {
25
24
 
26
- if (things[i] === undefined) {
27
- r = i;
28
- break;
25
+ const thing = things[i];
26
+ if (thing !== undefined) {
27
+ used.set(thing.id, true);
29
28
  }
30
29
 
31
30
  }
32
31
 
33
- return r;
32
+ return used.nextClearBit(0);
34
33
  }
35
34
 
36
35
  /**
@@ -57,9 +57,25 @@ test("delete port", () => {
57
57
  expect(node.getPorts()).toEqual([]);
58
58
  });
59
59
 
60
+ test("id uniqueness is preserved when ports are added and deleted out of order", () => {
61
+
62
+ const node = new NodeDescription();
63
+
64
+ const a = node.createPort(DUMMY_TYPE, "a", PortDirection.In);
65
+ const b = node.createPort(DUMMY_TYPE, "b", PortDirection.In);
66
+ const c = node.createPort(DUMMY_TYPE, "c", PortDirection.In);
67
+
68
+ node.deletePort(b);
69
+
70
+ const d = node.createPort(DUMMY_TYPE, "d", PortDirection.In);
71
+
72
+ expect(d).toEqual(b);
73
+
74
+ });
75
+
60
76
  test("toString", () => {
61
77
  const node = new NodeDescription();
62
78
 
63
79
  expect(typeof node.toString()).toBe("string");
64
80
  expect(node.toString().length).toBeGreaterThan(0);
65
- });
81
+ });