1 | import { modifierPhases } from "../enums.js";
|
2 |
|
3 | function order(modifiers) {
|
4 | var map = new Map();
|
5 | var visited = new Set();
|
6 | var result = [];
|
7 | modifiers.forEach(function (modifier) {
|
8 | map.set(modifier.name, modifier);
|
9 | });
|
10 |
|
11 | function sort(modifier) {
|
12 | visited.add(modifier.name);
|
13 | var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
|
14 | requires.forEach(function (dep) {
|
15 | if (!visited.has(dep)) {
|
16 | var depModifier = map.get(dep);
|
17 |
|
18 | if (depModifier) {
|
19 | sort(depModifier);
|
20 | }
|
21 | }
|
22 | });
|
23 | result.push(modifier);
|
24 | }
|
25 |
|
26 | modifiers.forEach(function (modifier) {
|
27 | if (!visited.has(modifier.name)) {
|
28 |
|
29 | sort(modifier);
|
30 | }
|
31 | });
|
32 | return result;
|
33 | }
|
34 |
|
35 | export default function orderModifiers(modifiers) {
|
36 |
|
37 | var orderedModifiers = order(modifiers);
|
38 |
|
39 | return modifierPhases.reduce(function (acc, phase) {
|
40 | return acc.concat(orderedModifiers.filter(function (modifier) {
|
41 | return modifier.phase === phase;
|
42 | }));
|
43 | }, []);
|
44 | } |
\ | No newline at end of file |