binary-decision-diagram 1.4.0 → 2.0.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.
Files changed (80) hide show
  1. package/.github/workflows/main.yml +2 -2
  2. package/dist/es/abstract-node.js +45 -51
  3. package/dist/es/abstract-node.js.map +1 -1
  4. package/dist/es/branches.js +20 -22
  5. package/dist/es/branches.js.map +1 -1
  6. package/dist/es/create-bdd-from-truth-table.js +19 -57
  7. package/dist/es/create-bdd-from-truth-table.js.map +1 -1
  8. package/dist/es/ensure-correct-bdd.js +26 -27
  9. package/dist/es/ensure-correct-bdd.js.map +1 -1
  10. package/dist/es/fill-truth-table.js +3 -3
  11. package/dist/es/fill-truth-table.js.map +1 -1
  12. package/dist/es/find-similar-node.js +3 -3
  13. package/dist/es/find-similar-node.js.map +1 -1
  14. package/dist/es/internal-node.js +15 -35
  15. package/dist/es/internal-node.js.map +1 -1
  16. package/dist/es/leaf-node.js +14 -34
  17. package/dist/es/leaf-node.js.map +1 -1
  18. package/dist/es/minimal-string/bdd-to-minimal-string.js +15 -15
  19. package/dist/es/minimal-string/bdd-to-minimal-string.js.map +1 -1
  20. package/dist/es/minimal-string/bdd-to-simple-bdd.js +2 -2
  21. package/dist/es/minimal-string/bdd-to-simple-bdd.js.map +1 -1
  22. package/dist/es/minimal-string/minimal-string-to-simple-bdd.js +27 -27
  23. package/dist/es/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
  24. package/dist/es/minimal-string/resolve-with-simple-bdd.js +4 -4
  25. package/dist/es/minimal-string/resolve-with-simple-bdd.js.map +1 -1
  26. package/dist/es/minimal-string/string-format.js +7 -7
  27. package/dist/es/minimal-string/string-format.js.map +1 -1
  28. package/dist/es/optimize-brute-force.d.ts +4 -4
  29. package/dist/es/optimize-brute-force.js +88 -186
  30. package/dist/es/optimize-brute-force.js.map +1 -1
  31. package/dist/es/parents.js +19 -47
  32. package/dist/es/parents.js.map +1 -1
  33. package/dist/es/root-node.js +79 -133
  34. package/dist/es/root-node.js.map +1 -1
  35. package/dist/es/types.d.ts +9 -9
  36. package/dist/es/util.js +21 -39
  37. package/dist/es/util.js.map +1 -1
  38. package/dist/lib/abstract-node.js +48 -57
  39. package/dist/lib/abstract-node.js.map +1 -1
  40. package/dist/lib/branches.js +21 -27
  41. package/dist/lib/branches.js.map +1 -1
  42. package/dist/lib/create-bdd-from-truth-table.js +24 -66
  43. package/dist/lib/create-bdd-from-truth-table.js.map +1 -1
  44. package/dist/lib/ensure-correct-bdd.js +27 -33
  45. package/dist/lib/ensure-correct-bdd.js.map +1 -1
  46. package/dist/lib/fill-truth-table.js +6 -10
  47. package/dist/lib/fill-truth-table.js.map +1 -1
  48. package/dist/lib/find-similar-node.js +4 -8
  49. package/dist/lib/find-similar-node.js.map +1 -1
  50. package/dist/lib/index.js +13 -25
  51. package/dist/lib/index.js.map +1 -1
  52. package/dist/lib/internal-node.js +18 -41
  53. package/dist/lib/internal-node.js.map +1 -1
  54. package/dist/lib/leaf-node.js +17 -40
  55. package/dist/lib/leaf-node.js.map +1 -1
  56. package/dist/lib/minimal-string/bdd-to-minimal-string.js +21 -26
  57. package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +1 -1
  58. package/dist/lib/minimal-string/bdd-to-simple-bdd.js +4 -9
  59. package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +1 -1
  60. package/dist/lib/minimal-string/index.js +5 -17
  61. package/dist/lib/minimal-string/index.js.map +1 -1
  62. package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +30 -34
  63. package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
  64. package/dist/lib/minimal-string/resolve-with-simple-bdd.js +6 -10
  65. package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +1 -1
  66. package/dist/lib/minimal-string/string-format.js +12 -19
  67. package/dist/lib/minimal-string/string-format.js.map +1 -1
  68. package/dist/lib/optimize-brute-force.d.ts +4 -4
  69. package/dist/lib/optimize-brute-force.js +93 -199
  70. package/dist/lib/optimize-brute-force.js.map +1 -1
  71. package/dist/lib/parents.js +19 -50
  72. package/dist/lib/parents.js.map +1 -1
  73. package/dist/lib/root-node.js +84 -141
  74. package/dist/lib/root-node.js.map +1 -1
  75. package/dist/lib/types.d.ts +9 -9
  76. package/dist/lib/types.js +1 -2
  77. package/dist/lib/util.js +36 -72
  78. package/dist/lib/util.js.map +1 -1
  79. package/package.json +8 -8
  80. package/tsconfig.json +2 -2
@@ -1,72 +1,9 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (_) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- var __values = (this && this.__values) || function(o) {
38
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
39
- if (m) return m.call(o);
40
- if (o && typeof o.length === "number") return {
41
- next: function () {
42
- if (o && i >= o.length) o = void 0;
43
- return { value: o && o[i++], done: !o };
44
- }
45
- };
46
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
47
- };
48
- var __read = (this && this.__read) || function (o, n) {
49
- var m = typeof Symbol === "function" && o[Symbol.iterator];
50
- if (!m) return o;
51
- var i = m.call(o), r, ar = [], e;
52
- try {
53
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
54
- }
55
- catch (error) { e = { error: error }; }
56
- finally {
57
- try {
58
- if (r && !r.done && (m = i["return"])) m.call(i);
59
- }
60
- finally { if (e) throw e.error; }
61
- }
62
- return ar;
63
- };
64
1
  import { createBddFromTruthTable } from './create-bdd-from-truth-table';
65
2
  import { firstKeyOfMap, shuffleArray, lastOfArray } from './util';
66
3
  /**
67
4
  * returns the bdd with less nodes
68
5
  */
69
- export var defaultCompareResults = function (a, b) {
6
+ export const defaultCompareResults = function (a, b) {
70
7
  if (a.countNodes() <= b.countNodes()) {
71
8
  return a;
72
9
  }
@@ -79,148 +16,113 @@ export var defaultCompareResults = function (a, b) {
79
16
  * by randomly sorting the array
80
17
  * and checking the resulting bdd
81
18
  */
82
- export function optimizeBruteForce(_a) {
83
- var truthTable = _a.truthTable, _b = _a.iterations, iterations = _b === void 0 ? Infinity : _b, _c = _a.onBetterBdd, onBetterBdd = _c === void 0 ? function () { return null; } : _c, _d = _a.compareResults, compareResults = _d === void 0 ? defaultCompareResults : _d, _e = _a.afterBddCreation, afterBddCreation = _e === void 0 ? function () { return null; } : _e, _f = _a.log, log = _f === void 0 ? false : _f;
84
- return __awaiter(this, void 0, void 0, function () {
85
- var initialBdd, currentBestResult, t, _loop_1;
86
- return __generator(this, function (_g) {
87
- switch (_g.label) {
88
- case 0:
89
- initialBdd = createBddFromTruthTable(truthTable);
90
- afterBddCreation(initialBdd);
91
- initialBdd.minimize();
92
- currentBestResult = {
93
- truthTable: truthTable,
94
- bdd: initialBdd
95
- };
96
- if (log) {
97
- initialBdd.log();
98
- console.log('initial nodes amount: ' + initialBdd.countNodes());
99
- }
100
- t = 0;
101
- _loop_1 = function () {
102
- var shuffledOrdering, nextBdd, newNodesByLevel, lastLevel, newSortedLevels, lastLevelSet, betterBdd;
103
- return __generator(this, function (_h) {
104
- switch (_h.label) {
105
- case 0:
106
- t++;
107
- if (log) {
108
- console.log('-'.repeat(50));
109
- console.log('optimizeBruteForce() itterate once');
110
- }
111
- shuffledOrdering = shuffleBooleanOrdering(truthTable);
112
- nextBdd = createBddFromTruthTable(shuffledOrdering.newTable);
113
- newNodesByLevel = new Map();
114
- lastLevel = lastOfArray(nextBdd.getLevels());
115
- newSortedLevels = [];
116
- nextBdd.getLevels()
117
- .filter(function (level) { return level !== lastLevel; })
118
- .forEach(function (level) {
119
- var newLevel = shuffledOrdering.mappingBeforeToAfter[level];
120
- newSortedLevels.push(newLevel);
121
- var levelSet = new Set();
122
- newNodesByLevel.set(newLevel, levelSet);
123
- nextBdd.getNodesOfLevel(level).forEach(function (node) {
124
- node.level = newLevel;
125
- levelSet.add(node);
126
- });
127
- });
128
- lastLevelSet = new Set();
129
- nextBdd.getNodesOfLevel(lastLevel).forEach(function (node) { return lastLevelSet.add(node); });
130
- newNodesByLevel.set(lastLevel, lastLevelSet);
131
- newSortedLevels.push(lastLevel);
132
- nextBdd.nodesByLevel = newNodesByLevel;
133
- nextBdd.levels = newSortedLevels;
134
- afterBddCreation(nextBdd);
135
- nextBdd.minimize();
136
- if (log) {
137
- console.log('got new bdd with nodes amount of ' + nextBdd.countNodes());
138
- // nextBdd.log();
139
- console.dir(shuffledOrdering.mappingBeforeToAfter);
140
- }
141
- return [4 /*yield*/, compareResults(currentBestResult.bdd, nextBdd)];
142
- case 1:
143
- betterBdd = _h.sent();
144
- if (betterBdd.type !== 'RootNode') {
145
- throw new Error('compareResults did not return a bdd');
146
- }
147
- if (betterBdd === nextBdd) {
148
- if (log) {
149
- console.log('#'.repeat(50));
150
- console.log('found better bdd ' + nextBdd.countNodes());
151
- }
152
- currentBestResult = {
153
- bdd: nextBdd,
154
- truthTable: shuffledOrdering.newTable
155
- };
156
- onBetterBdd(currentBestResult);
157
- }
158
- return [2 /*return*/];
159
- }
160
- });
161
- };
162
- _g.label = 1;
163
- case 1:
164
- if (!(t < iterations)) return [3 /*break*/, 3];
165
- return [5 /*yield**/, _loop_1()];
166
- case 2:
167
- _g.sent();
168
- return [3 /*break*/, 1];
169
- case 3: return [2 /*return*/, currentBestResult];
170
- }
19
+ export async function optimizeBruteForce({ truthTable, iterations = Infinity, onBetterBdd = () => null, compareResults = defaultCompareResults, afterBddCreation = () => null, log = false }) {
20
+ const initialBdd = createBddFromTruthTable(truthTable);
21
+ afterBddCreation(initialBdd);
22
+ initialBdd.minimize();
23
+ let currentBestResult = {
24
+ truthTable,
25
+ bdd: initialBdd
26
+ };
27
+ if (log) {
28
+ initialBdd.log();
29
+ console.log('initial nodes amount: ' + initialBdd.countNodes());
30
+ }
31
+ let t = 0;
32
+ while (t < iterations) {
33
+ t++;
34
+ if (log) {
35
+ console.log('-'.repeat(50));
36
+ console.log('optimizeBruteForce() itterate once');
37
+ }
38
+ const shuffledOrdering = shuffleBooleanOrdering(truthTable);
39
+ const nextBdd = createBddFromTruthTable(shuffledOrdering.newTable);
40
+ // change the levels of each node
41
+ const newNodesByLevel = new Map();
42
+ const lastLevel = lastOfArray(nextBdd.getLevels());
43
+ const newSortedLevels = [];
44
+ nextBdd.getLevels()
45
+ .filter(level => level !== lastLevel)
46
+ .forEach(level => {
47
+ const newLevel = shuffledOrdering.mappingBeforeToAfter[level];
48
+ newSortedLevels.push(newLevel);
49
+ const levelSet = new Set();
50
+ newNodesByLevel.set(newLevel, levelSet);
51
+ nextBdd.getNodesOfLevel(level).forEach(node => {
52
+ node.level = newLevel;
53
+ levelSet.add(node);
54
+ });
171
55
  });
172
- });
56
+ const lastLevelSet = new Set();
57
+ nextBdd.getNodesOfLevel(lastLevel).forEach(node => lastLevelSet.add(node));
58
+ newNodesByLevel.set(lastLevel, lastLevelSet);
59
+ newSortedLevels.push(lastLevel);
60
+ nextBdd.nodesByLevel = newNodesByLevel;
61
+ nextBdd.levels = newSortedLevels;
62
+ afterBddCreation(nextBdd);
63
+ nextBdd.minimize();
64
+ if (log) {
65
+ console.log('got new bdd with nodes amount of ' + nextBdd.countNodes());
66
+ // nextBdd.log();
67
+ console.dir(shuffledOrdering.mappingBeforeToAfter);
68
+ }
69
+ const betterBdd = await compareResults(currentBestResult.bdd, nextBdd);
70
+ if (betterBdd.type !== 'RootNode') {
71
+ throw new Error('compareResults did not return a bdd');
72
+ }
73
+ if (betterBdd === nextBdd) {
74
+ if (log) {
75
+ console.log('#'.repeat(50));
76
+ console.log('found better bdd ' + nextBdd.countNodes());
77
+ }
78
+ currentBestResult = {
79
+ bdd: nextBdd,
80
+ truthTable: shuffledOrdering.newTable
81
+ };
82
+ onBetterBdd(currentBestResult);
83
+ }
84
+ }
85
+ return currentBestResult;
173
86
  }
174
87
  export function shuffleBooleanOrdering(truthTable) {
175
- var e_1, _a;
176
- var firstKey = firstKeyOfMap(truthTable);
177
- var arrayWithIndexes = getArrayWithIndexes(firstKey.length);
178
- var shuffled = shuffleArray(arrayWithIndexes);
179
- var mapping = {};
180
- var mappingBeforeToAfter = {};
181
- shuffled.forEach(function (indexBefore, indexAfter) {
88
+ const firstKey = firstKeyOfMap(truthTable);
89
+ const arrayWithIndexes = getArrayWithIndexes(firstKey.length);
90
+ const shuffled = shuffleArray(arrayWithIndexes);
91
+ const mapping = {};
92
+ const mappingBeforeToAfter = {};
93
+ shuffled.forEach((indexBefore, indexAfter) => {
182
94
  mapping[indexAfter] = indexBefore;
183
95
  mappingBeforeToAfter[indexBefore] = indexAfter;
184
96
  });
185
- var newTable = new Map();
186
- try {
187
- for (var _b = __values(truthTable.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
188
- var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
189
- var newKey = changeKeyOrder(key, mapping);
190
- newTable.set(newKey, value);
191
- }
192
- }
193
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
194
- finally {
195
- try {
196
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
197
- }
198
- finally { if (e_1) throw e_1.error; }
97
+ const newTable = new Map();
98
+ for (const [key, value] of truthTable.entries()) {
99
+ const newKey = changeKeyOrder(key, mapping);
100
+ newTable.set(newKey, value);
199
101
  }
200
102
  return {
201
- newTable: newTable,
202
- mapping: mapping,
203
- mappingBeforeToAfter: mappingBeforeToAfter
103
+ newTable,
104
+ mapping,
105
+ mappingBeforeToAfter
204
106
  };
205
107
  }
206
108
  export function changeKeyOrder(oldKey, mappingBeforeToAfter) {
207
- var chars = oldKey
109
+ const chars = oldKey
208
110
  .split('')
209
- .map(function (char, indexBefore) {
111
+ .map((char, indexBefore) => {
210
112
  return {
211
- char: char,
212
- indexBefore: indexBefore,
113
+ char,
114
+ indexBefore,
213
115
  indexAfter: mappingBeforeToAfter[indexBefore]
214
116
  };
215
117
  })
216
- .sort(function (a, b) { return a.indexAfter - b.indexAfter; })
217
- .map(function (charObj) { return charObj.char; })
118
+ .sort((a, b) => a.indexAfter - b.indexAfter)
119
+ .map(charObj => charObj.char)
218
120
  .join('');
219
121
  return chars;
220
122
  }
221
123
  export function getArrayWithIndexes(size) {
222
- var ret = [];
223
- var last = 0;
124
+ const ret = [];
125
+ let last = 0;
224
126
  while (last < size) {
225
127
  ret.push(last);
226
128
  last++;
@@ -1 +1 @@
1
- {"version":3,"file":"optimize-brute-force.js","sourceRoot":"","sources":["../../src/optimize-brute-force.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"optimize-brute-force.js","sourceRoot":"","sources":["../../src/optimize-brute-force.ts"],"names":[],"mappings":"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"}
@@ -1,66 +1,38 @@
1
- var __values = (this && this.__values) || function(o) {
2
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
3
- if (m) return m.call(o);
4
- if (o && typeof o.length === "number") return {
5
- next: function () {
6
- if (o && i >= o.length) o = void 0;
7
- return { value: o && o[i++], done: !o };
8
- }
9
- };
10
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
11
- };
12
1
  /**
13
2
  * represents the parents of a single node
14
3
  */
15
- var Parents = /** @class */ (function () {
16
- function Parents(node) {
4
+ export class Parents {
5
+ constructor(node) {
17
6
  this.node = node;
18
7
  this.parents = new Set();
19
8
  }
20
- Parents.prototype.remove = function (node) {
9
+ remove(node) {
21
10
  this.parents.delete(node);
22
11
  if (this.parents.size === 0) {
23
12
  this.node.remove();
24
13
  }
25
- };
26
- Parents.prototype.getAll = function () {
14
+ }
15
+ getAll() {
27
16
  return Array.from(this.parents);
28
- };
29
- Parents.prototype.add = function (node) {
17
+ }
18
+ add(node) {
30
19
  if (this.node.level === node.level) {
31
20
  throw new Error('a node cannot be parent of a node with the same level');
32
21
  }
33
22
  this.parents.add(node);
34
- };
35
- Parents.prototype.has = function (node) {
23
+ }
24
+ has(node) {
36
25
  return this.parents.has(node);
37
- };
38
- Parents.prototype.toString = function () {
39
- var e_1, _a;
40
- var ret = [];
41
- try {
42
- for (var _b = __values(this.parents), _c = _b.next(); !_c.done; _c = _b.next()) {
43
- var parent_1 = _c.value;
44
- ret.push(parent_1.id);
45
- }
46
- }
47
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
48
- finally {
49
- try {
50
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
51
- }
52
- finally { if (e_1) throw e_1.error; }
26
+ }
27
+ toString() {
28
+ const ret = [];
29
+ for (const parent of this.parents) {
30
+ ret.push(parent.id);
53
31
  }
54
32
  return ret.join(', ');
55
- };
56
- Object.defineProperty(Parents.prototype, "size", {
57
- get: function () {
58
- return this.parents.size;
59
- },
60
- enumerable: false,
61
- configurable: true
62
- });
63
- return Parents;
64
- }());
65
- export { Parents };
33
+ }
34
+ get size() {
35
+ return this.parents.size;
36
+ }
37
+ }
66
38
  //# sourceMappingURL=parents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":";;;;;;;;;;;AAKA;;GAEG;AACH;IAII,iBACW,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAHpB,YAAO,GAAqB,IAAI,GAAG,EAAE,CAAC;IAI1C,CAAC;IAEE,wBAAM,GAAb,UAAc,IAAiB;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACtB;IACL,CAAC;IAEM,wBAAM,GAAb;QACI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,qBAAG,GAAV,UAAW,IAAiB;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,qBAAG,GAAV,UAAW,IAAiB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,0BAAQ,GAAR;;QACI,IAAM,GAAG,GAAa,EAAE,CAAC;;YACzB,KAAqB,IAAA,KAAA,SAAA,IAAI,CAAC,OAAO,CAAA,gBAAA,4BAAE;gBAA9B,IAAM,QAAM,WAAA;gBACb,GAAG,CAAC,IAAI,CAAC,QAAM,CAAC,EAAE,CAAC,CAAC;aACvB;;;;;;;;;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,sBAAI,yBAAI;aAAR;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC;;;OAAA;IACL,cAAC;AAAD,CAAC,AA1CD,IA0CC"}
1
+ {"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,OAAO,OAAO;IAIhB,YACW,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAHpB,YAAO,GAAqB,IAAI,GAAG,EAAE,CAAC;IAI1C,CAAC;IAEE,MAAM,CAAC,IAAiB;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;SACtB;IACL,CAAC;IAEM,MAAM;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,GAAG,CAAC,IAAiB;QACxB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAC5E;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAEM,GAAG,CAAC,IAAiB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACJ,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YAC/B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACvB;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;CACJ"}