-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
feature-flag-yuidoc-filter.js
executable file
·55 lines (49 loc) · 1.53 KB
/
feature-flag-yuidoc-filter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const FEATURES = require('../broccoli/features');
function isClassToBeIncluded(item, featuresToFilter) {
if (item.category) {
for (let j = 0; j < featuresToFilter.length; j++) {
for (let k = 0; k < item.category.length; k++) {
if (featuresToFilter[j] === item.category[k]) {
return false;
}
}
}
}
return true;
}
function gatherFeatures() {
let featuresObj = Object.assign({}, FEATURES);
let featuresToFilter = [];
for (let feature in featuresObj) {
if (featuresObj[feature] === null || featuresObj[feature] === false) {
featuresToFilter.push(feature);
}
}
return featuresToFilter;
}
function gatherClassesToDocument(data, featuresToFilter) {
let classesToDocument = {};
for (let c in data.classes) {
if (isClassToBeIncluded(data.classes[c], featuresToFilter)) {
classesToDocument[c] = data.classes[c];
}
}
return classesToDocument;
}
function updateClassReferencesInNamespaces(data) {
for (let namespace in data.modules) {
let namespaceClasses = {};
let originalClasses = data.modules[namespace].classes;
for (let className in originalClasses) {
if (Object.prototype.hasOwnProperty.call(data.classes, className)) {
namespaceClasses[className] = originalClasses[className];
}
}
data.modules[namespace].classes = namespaceClasses;
}
}
module.exports = function (data) {
let featuresToFilter = gatherFeatures();
data.classes = gatherClassesToDocument(data, featuresToFilter);
updateClassReferencesInNamespaces(data);
};