binary-decision-diagram 1.4.0 → 2.0.1
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/.github/workflows/main.yml +2 -2
- package/dist/es/abstract-node.js +45 -51
- package/dist/es/abstract-node.js.map +1 -1
- package/dist/es/branches.js +20 -22
- package/dist/es/branches.js.map +1 -1
- package/dist/es/create-bdd-from-truth-table.js +19 -57
- package/dist/es/create-bdd-from-truth-table.js.map +1 -1
- package/dist/es/ensure-correct-bdd.js +26 -27
- package/dist/es/ensure-correct-bdd.js.map +1 -1
- package/dist/es/fill-truth-table.js +3 -3
- package/dist/es/fill-truth-table.js.map +1 -1
- package/dist/es/find-similar-node.js +3 -3
- package/dist/es/find-similar-node.js.map +1 -1
- package/dist/es/internal-node.js +15 -35
- package/dist/es/internal-node.js.map +1 -1
- package/dist/es/leaf-node.js +14 -34
- package/dist/es/leaf-node.js.map +1 -1
- package/dist/es/minimal-string/bdd-to-minimal-string.js +15 -15
- package/dist/es/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/es/minimal-string/bdd-to-simple-bdd.js +2 -2
- package/dist/es/minimal-string/bdd-to-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/minimal-string-to-simple-bdd.js +27 -27
- package/dist/es/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/resolve-with-simple-bdd.js +4 -4
- package/dist/es/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/string-format.js +7 -7
- package/dist/es/minimal-string/string-format.js.map +1 -1
- package/dist/es/optimize-brute-force.d.ts +4 -4
- package/dist/es/optimize-brute-force.js +88 -186
- package/dist/es/optimize-brute-force.js.map +1 -1
- package/dist/es/parents.js +19 -47
- package/dist/es/parents.js.map +1 -1
- package/dist/es/root-node.js +79 -133
- package/dist/es/root-node.js.map +1 -1
- package/dist/es/types.d.ts +9 -9
- package/dist/es/util.js +21 -39
- package/dist/es/util.js.map +1 -1
- package/dist/lib/abstract-node.js +47 -52
- package/dist/lib/abstract-node.js.map +1 -1
- package/dist/lib/branches.js +20 -21
- package/dist/lib/branches.js.map +1 -1
- package/dist/lib/create-bdd-from-truth-table.js +23 -61
- package/dist/lib/create-bdd-from-truth-table.js.map +1 -1
- package/dist/lib/ensure-correct-bdd.js +26 -27
- package/dist/lib/ensure-correct-bdd.js.map +1 -1
- package/dist/lib/fill-truth-table.js +4 -4
- package/dist/lib/fill-truth-table.js.map +1 -1
- package/dist/lib/find-similar-node.js +3 -3
- package/dist/lib/find-similar-node.js.map +1 -1
- package/dist/lib/index.js +5 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/internal-node.js +18 -37
- package/dist/lib/internal-node.js.map +1 -1
- package/dist/lib/leaf-node.js +17 -36
- package/dist/lib/leaf-node.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-minimal-string.js +17 -17
- package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js +2 -2
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/index.js +5 -1
- package/dist/lib/minimal-string/index.js.map +1 -1
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +29 -29
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js +5 -5
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/string-format.js +5 -5
- package/dist/lib/minimal-string/string-format.js.map +1 -1
- package/dist/lib/optimize-brute-force.d.ts +4 -4
- package/dist/lib/optimize-brute-force.js +90 -188
- package/dist/lib/optimize-brute-force.js.map +1 -1
- package/dist/lib/parents.js +19 -46
- package/dist/lib/parents.js.map +1 -1
- package/dist/lib/root-node.js +83 -136
- package/dist/lib/root-node.js.map +1 -1
- package/dist/lib/types.d.ts +9 -9
- package/dist/lib/util.js +21 -39
- package/dist/lib/util.js.map +1 -1
- package/package.json +9 -9
- 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
|
|
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(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
|
202
|
-
mapping
|
|
203
|
-
mappingBeforeToAfter
|
|
103
|
+
newTable,
|
|
104
|
+
mapping,
|
|
105
|
+
mappingBeforeToAfter
|
|
204
106
|
};
|
|
205
107
|
}
|
|
206
108
|
export function changeKeyOrder(oldKey, mappingBeforeToAfter) {
|
|
207
|
-
|
|
109
|
+
const chars = oldKey
|
|
208
110
|
.split('')
|
|
209
|
-
.map(
|
|
111
|
+
.map((char, indexBefore) => {
|
|
210
112
|
return {
|
|
211
|
-
char
|
|
212
|
-
indexBefore
|
|
113
|
+
char,
|
|
114
|
+
indexBefore,
|
|
213
115
|
indexAfter: mappingBeforeToAfter[indexBefore]
|
|
214
116
|
};
|
|
215
117
|
})
|
|
216
|
-
.sort(
|
|
217
|
-
.map(
|
|
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
|
-
|
|
223
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"optimize-brute-force.js","sourceRoot":"","sources":["../../src/optimize-brute-force.ts"],"names":[],"mappings":"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"}
|
package/dist/es/parents.js
CHANGED
|
@@ -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
|
-
|
|
16
|
-
|
|
4
|
+
export class Parents {
|
|
5
|
+
constructor(node) {
|
|
17
6
|
this.node = node;
|
|
18
7
|
this.parents = new Set();
|
|
19
8
|
}
|
|
20
|
-
|
|
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
|
-
|
|
14
|
+
}
|
|
15
|
+
getAll() {
|
|
27
16
|
return Array.from(this.parents);
|
|
28
|
-
}
|
|
29
|
-
|
|
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
|
-
|
|
23
|
+
}
|
|
24
|
+
has(node) {
|
|
36
25
|
return this.parents.has(node);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
package/dist/es/parents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parents.js","sourceRoot":"","sources":["../../src/parents.ts"],"names":[],"mappings":"
|
|
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"}
|