Skip to content

Instantly share code, notes, and snippets.

@jackarmley
Last active August 15, 2020 13:05
Show Gist options
  • Save jackarmley/2d02b0f5e3de6cf09d1fa473fc59c1a5 to your computer and use it in GitHub Desktop.
Save jackarmley/2d02b0f5e3de6cf09d1fa473fc59c1a5 to your computer and use it in GitHub Desktop.
Recursive classname function: JS Bin// source https://jsbin.com/yivacan
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
"use strict";
var string = "hello";
var bool = true;
var array = ["what", "who"];
var obj = {
small: {
top: "six",
left: "theee",
what: {
left: "two",
bottom: "ten"
}
},
large: {
top: "ten"
},
top: "twelve"
};
var obj2 = {
left: "one",
top: "three"
};
var arrobj = {
left: ["one", "two"],
top: ["three", "four"],
};
var arr = ["one", "two"];
function eachRecursive(obj, prefix, nonen) {
var arr = [];
var objIsArray = Array.isArray(obj);
Object.getOwnPropertyNames(obj).forEach(function (val) {
if (typeof obj[val] == "object" && obj[val] !== null) {
arr.push(eachRecursive(obj[val], prefix, val));
}
else {
var classArr = [
prefix
].concat((nonen ? [nonen] : []), (objIsArray ? [] : [val]), [
obj[val]
]);
// Don't push if the array contains the array index
typeof obj[val] !== 'number' && arr.push(classArr.join('-'));
}
});
return arr.join(' ');
}
;
var makeClass = function (obj, prefix) {
var objType = typeof obj;
var classStr;
if (objType == "string") {
return prefix + "-" + obj;
}
else if (objType == "boolean") {
return "" + prefix;
}
else {
return eachRecursive(obj, prefix);
}
};
console.log(makeClass(bool, 'prefix'));
console.log(makeClass(string, 'prefix'));
console.log(makeClass(obj, 'prefix'));
console.log(makeClass(obj2, 'prefix'));
console.log(makeClass(arrobj, 'prefix'));
console.log(makeClass(arr, 'prefix'));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNiaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqc2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixJQUFNLEdBQUcsR0FBRztJQUNYLEtBQUssRUFBRTtRQUNOLEdBQUcsRUFBRSxLQUFLO1FBQ1IsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxLQUFLO1NBQ2Q7S0FDSDtJQUNELEtBQUssRUFBRTtRQUNMLEdBQUcsRUFBRSxLQUFLO0tBQ1g7SUFDRCxHQUFHLEVBQUUsUUFBUTtDQUNiLENBQUM7QUFFRixJQUFNLElBQUksR0FBRztJQUNYLElBQUksRUFBRSxLQUFLO0lBQ1gsR0FBRyxFQUFFLE9BQU87Q0FDYixDQUFBO0FBRUQsSUFBTSxNQUFNLEdBQUc7SUFDYixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7Q0FDdkIsQ0FBQTtBQUVELElBQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRzNCLHVCQUF1QixHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUs7SUFDckMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUxQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUNyQyxVQUFVLEdBQUc7UUFDWCxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckQsR0FBRyxDQUFDLElBQUksQ0FBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBRSxDQUFDO1FBQ25ELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksUUFBUSxHQUFHO2dCQUNiLE1BQU07cUJBQ0gsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFDdEIsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLEdBQUcsQ0FBQyxHQUFHLENBQUM7Y0FDVCxDQUFDO1lBRUYsbURBQW1EO1lBQ25ELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQyxDQUNGLENBQUM7SUFHRixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVyQixDQUFDO0FBQUEsQ0FBQztBQUVGLElBQU0sU0FBUyxHQUFHLFVBQUMsR0FBRyxFQUFFLE1BQU07SUFDNUIsSUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7SUFDM0IsSUFBSSxRQUFRLENBQUM7SUFFYixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUksTUFBTSxTQUFJLEdBQUssQ0FBQztJQUM1QixDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFHLE1BQVEsQ0FBQztJQUNyQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBSUQsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBzdHJpbmcgPSBcImhlbGxvXCI7XG5jb25zdCBib29sID0gdHJ1ZTtcbmNvbnN0IGFycmF5ID0gW1wid2hhdFwiLCBcIndob1wiXTtcbmNvbnN0IG9iaiA9IHtcbiBzbWFsbDoge1xuIFx0dG9wOiBcInNpeFwiLFxuICAgIGxlZnQ6IFwidGhlZWVcIixcbiAgICB3aGF0OiB7XG4gICAgICBsZWZ0OiBcInR3b1wiLFxuICAgICAgYm90dG9tOiBcInRlblwiXG4gICAgfVxuIH0sXG4gbGFyZ2U6IHtcbiAgIHRvcDogXCJ0ZW5cIlxuIH0sXG4gdG9wOiBcInR3ZWx2ZVwiXG59O1xuXG5jb25zdCBvYmoyID0ge1xuICBsZWZ0OiBcIm9uZVwiLFxuICB0b3A6IFwidGhyZWVcIlxufVxuXG5jb25zdCBhcnJvYmogPSB7XG4gIGxlZnQ6IFtcIm9uZVwiLCBcInR3b1wiXSxcbiAgdG9wOiBbXCJ0aHJlZVwiLCBcImZvdXJcIl0sXG59XG5cbmNvbnN0IGFyciA9IFtcIm9uZVwiLCBcInR3b1wiXTtcblxuXG5mdW5jdGlvbiBlYWNoUmVjdXJzaXZlKG9iaiwgcHJlZml4LCBub25lbikge1xuICAgIGxldCBhcnIgPSBbXTsgIFxuICAgIGNvbnN0IG9iaklzQXJyYXkgPSBBcnJheS5pc0FycmF5KG9iaik7XG4gIFxuT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKFxuICBmdW5jdGlvbiAodmFsKSB7XG4gICAgaWYgKHR5cGVvZiBvYmpbdmFsXSA9PSBcIm9iamVjdFwiICYmIG9ialt2YWxdICE9PSBudWxsKSB7XG4gICAgICBhcnIucHVzaCggZWFjaFJlY3Vyc2l2ZShvYmpbdmFsXSwgcHJlZml4LCB2YWwpICk7IFxuICAgIH0gZWxzZSB7ICAgICAgXG4gICAgICBsZXQgY2xhc3NBcnIgPSBbXG4gICAgICAgIHByZWZpeCwgXG4gICAgICAgIC4uLihub25lbiA/IFtub25lbl0gOiBbXSksXG4gICAgICAgIC4uLihvYmpJc0FycmF5ID8gW10gOiBbdmFsXSksXG4gICAgICAgIG9ialt2YWxdXG4gICAgICBdO1xuICAgICAgICAgICAgXG4gICAgICAvLyBEb24ndCBwdXNoIGlmIHRoZSBhcnJheSBjb250YWlucyB0aGUgYXJyYXkgaW5kZXhcbiAgICAgIHR5cGVvZiBvYmpbdmFsXSAhPT0gJ251bWJlcicgJiYgYXJyLnB1c2goY2xhc3NBcnIuam9pbignLScpKTsgICAgICBcbiAgICB9XG4gIH1cbik7XG4gIFxuXG5yZXR1cm4gYXJyLmpvaW4oJyAnKTtcblxufTtcblxuY29uc3QgbWFrZUNsYXNzID0gKG9iaiwgcHJlZml4KSA9PiB7XG4gIGNvbnN0IG9ialR5cGUgPSB0eXBlb2Ygb2JqO1xuICBsZXQgY2xhc3NTdHI7XG4gIFxuICBpZiAob2JqVHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGAke3ByZWZpeH0tJHtvYmp9YDtcbiAgfSBlbHNlIGlmIChvYmpUeXBlID09IFwiYm9vbGVhblwiKSB7XG4gICAgcmV0dXJuIGAke3ByZWZpeH1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlYWNoUmVjdXJzaXZlKG9iaiwgcHJlZml4KTtcbiAgfVxufVxuICBcbiAgXG4gXG5jb25zb2xlLmxvZyggbWFrZUNsYXNzKGJvb2wsICdwcmVmaXgnKSApOyBcbmNvbnNvbGUubG9nKCBtYWtlQ2xhc3Moc3RyaW5nLCAncHJlZml4JykgKTtcbmNvbnNvbGUubG9nKCBtYWtlQ2xhc3Mob2JqLCAncHJlZml4JykgKTtcbmNvbnNvbGUubG9nKCBtYWtlQ2xhc3Mob2JqMiwgJ3ByZWZpeCcpICk7XG5jb25zb2xlLmxvZyggbWFrZUNsYXNzKGFycm9iaiwgJ3ByZWZpeCcpICk7XG5jb25zb2xlLmxvZyggbWFrZUNsYXNzKGFyciwgJ3ByZWZpeCcpICk7Il19
</script>
<script id="jsbin-source-javascript" type="text/javascript">const string = "hello";
const bool = true;
const array = ["what", "who"];
const obj = {
small: {
top: "six",
left: "theee",
what: {
left: "two",
bottom: "ten"
}
},
large: {
top: "ten"
},
top: "twelve"
};
const obj2 = {
left: "one",
top: "three"
}
const arrobj = {
left: ["one", "two"],
top: ["three", "four"],
}
const arr = ["one", "two"];
function eachRecursive(obj, prefix, nonen) {
let arr = [];
const objIsArray = Array.isArray(obj);
Object.getOwnPropertyNames(obj).forEach(
function (val) {
if (typeof obj[val] == "object" && obj[val] !== null) {
arr.push( eachRecursive(obj[val], prefix, val) );
} else {
let classArr = [
prefix,
...(nonen ? [nonen] : []),
...(objIsArray ? [] : [val]),
obj[val]
];
// Don't push if the array contains the array index
typeof obj[val] !== 'number' && arr.push(classArr.join('-'));
}
}
);
return arr.join(' ');
};
const makeClass = (obj, prefix) => {
const objType = typeof obj;
let classStr;
if (objType == "string") {
return `${prefix}-${obj}`;
} else if (objType == "boolean") {
return `${prefix}`;
} else {
return eachRecursive(obj, prefix);
}
}
console.log( makeClass(bool, 'prefix') );
console.log( makeClass(string, 'prefix') );
console.log( makeClass(obj, 'prefix') );
console.log( makeClass(obj2, 'prefix') );
console.log( makeClass(arrobj, 'prefix') );
console.log( makeClass(arr, 'prefix') );
</script></body>
</html>
"use strict";
var string = "hello";
var bool = true;
var array = ["what", "who"];
var obj = {
small: {
top: "six",
left: "theee",
what: {
left: "two",
bottom: "ten"
}
},
large: {
top: "ten"
},
top: "twelve"
};
var obj2 = {
left: "one",
top: "three"
};
var arrobj = {
left: ["one", "two"],
top: ["three", "four"],
};
var arr = ["one", "two"];
function eachRecursive(obj, prefix, nonen) {
var arr = [];
var objIsArray = Array.isArray(obj);
Object.getOwnPropertyNames(obj).forEach(function (val) {
if (typeof obj[val] == "object" && obj[val] !== null) {
arr.push(eachRecursive(obj[val], prefix, val));
}
else {
var classArr = [
prefix
].concat((nonen ? [nonen] : []), (objIsArray ? [] : [val]), [
obj[val]
]);
// Don't push if the array contains the array index
typeof obj[val] !== 'number' && arr.push(classArr.join('-'));
}
});
return arr.join(' ');
}
;
var makeClass = function (obj, prefix) {
var objType = typeof obj;
var classStr;
if (objType == "string") {
return prefix + "-" + obj;
}
else if (objType == "boolean") {
return "" + prefix;
}
else {
return eachRecursive(obj, prefix);
}
};
console.log(makeClass(bool, 'prefix'));
console.log(makeClass(string, 'prefix'));
console.log(makeClass(obj, 'prefix'));
console.log(makeClass(obj2, 'prefix'));
console.log(makeClass(arrobj, 'prefix'));
console.log(makeClass(arr, 'prefix'));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNiaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqc2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixJQUFNLEdBQUcsR0FBRztJQUNYLEtBQUssRUFBRTtRQUNOLEdBQUcsRUFBRSxLQUFLO1FBQ1IsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxLQUFLO1NBQ2Q7S0FDSDtJQUNELEtBQUssRUFBRTtRQUNMLEdBQUcsRUFBRSxLQUFLO0tBQ1g7SUFDRCxHQUFHLEVBQUUsUUFBUTtDQUNiLENBQUM7QUFFRixJQUFNLElBQUksR0FBRztJQUNYLElBQUksRUFBRSxLQUFLO0lBQ1gsR0FBRyxFQUFFLE9BQU87Q0FDYixDQUFBO0FBRUQsSUFBTSxNQUFNLEdBQUc7SUFDYixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQ3BCLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7Q0FDdkIsQ0FBQTtBQUVELElBQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRzNCLHVCQUF1QixHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUs7SUFDckMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUxQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUNyQyxVQUFVLEdBQUc7UUFDWCxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckQsR0FBRyxDQUFDLElBQUksQ0FBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBRSxDQUFDO1FBQ25ELENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksUUFBUSxHQUFHO2dCQUNiLE1BQU07cUJBQ0gsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFDdEIsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLEdBQUcsQ0FBQyxHQUFHLENBQUM7Y0FDVCxDQUFDO1lBRUYsbURBQW1EO1lBQ25ELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQyxDQUNGLENBQUM7SUFHRixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVyQixDQUFDO0FBQUEsQ0FBQztBQUVGLElBQU0sU0FBUyxHQUFHLFVBQUMsR0FBRyxFQUFFLE1BQU07SUFDNUIsSUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUM7SUFDM0IsSUFBSSxRQUFRLENBQUM7SUFFYixFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUksTUFBTSxTQUFJLEdBQUssQ0FBQztJQUM1QixDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFHLE1BQVEsQ0FBQztJQUNyQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBSUQsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUM7QUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBzdHJpbmcgPSBcImhlbGxvXCI7XG5jb25zdCBib29sID0gdHJ1ZTtcbmNvbnN0IGFycmF5ID0gW1wid2hhdFwiLCBcIndob1wiXTtcbmNvbnN0IG9iaiA9IHtcbiBzbWFsbDoge1xuIFx0dG9wOiBcInNpeFwiLFxuICAgIGxlZnQ6IFwidGhlZWVcIixcbiAgICB3aGF0OiB7XG4gICAgICBsZWZ0OiBcInR3b1wiLFxuICAgICAgYm90dG9tOiBcInRlblwiXG4gICAgfVxuIH0sXG4gbGFyZ2U6IHtcbiAgIHRvcDogXCJ0ZW5cIlxuIH0sXG4gdG9wOiBcInR3ZWx2ZVwiXG59O1xuXG5jb25zdCBvYmoyID0ge1xuICBsZWZ0OiBcIm9uZVwiLFxuICB0b3A6IFwidGhyZWVcIlxufVxuXG5jb25zdCBhcnJvYmogPSB7XG4gIGxlZnQ6IFtcIm9uZVwiLCBcInR3b1wiXSxcbiAgdG9wOiBbXCJ0aHJlZVwiLCBcImZvdXJcIl0sXG59XG5cbmNvbnN0IGFyciA9IFtcIm9uZVwiLCBcInR3b1wiXTtcblxuXG5mdW5jdGlvbiBlYWNoUmVjdXJzaXZlKG9iaiwgcHJlZml4LCBub25lbikge1xuICAgIGxldCBhcnIgPSBbXTsgIFxuICAgIGNvbnN0IG9iaklzQXJyYXkgPSBBcnJheS5pc0FycmF5KG9iaik7XG4gIFxuT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKFxuICBmdW5jdGlvbiAodmFsKSB7XG4gICAgaWYgKHR5cGVvZiBvYmpbdmFsXSA9PSBcIm9iamVjdFwiICYmIG9ialt2YWxdICE9PSBudWxsKSB7XG4gICAgICBhcnIucHVzaCggZWFjaFJlY3Vyc2l2ZShvYmpbdmFsXSwgcHJlZml4LCB2YWwpICk7IFxuICAgIH0gZWxzZSB7ICAgICAgXG4gICAgICBsZXQgY2xhc3NBcnIgPSBbXG4gICAgICAgIHByZWZpeCwgXG4gICAgICAgIC4uLihub25lbiA/IFtub25lbl0gOiBbXSksXG4gICAgICAgIC4uLihvYmpJc0FycmF5ID8gW10gOiBbdmFsXSksXG4gICAgICAgIG9ialt2YWxdXG4gICAgICBdO1xuICAgICAgICAgICAgXG4gICAgICAvLyBEb24ndCBwdXNoIGlmIHRoZSBhcnJheSBjb250YWlucyB0aGUgYXJyYXkgaW5kZXhcbiAgICAgIHR5cGVvZiBvYmpbdmFsXSAhPT0gJ251bWJlcicgJiYgYXJyLnB1c2goY2xhc3NBcnIuam9pbignLScpKTsgICAgICBcbiAgICB9XG4gIH1cbik7XG4gIFxuXG5yZXR1cm4gYXJyLmpvaW4oJyAnKTtcblxufTtcblxuY29uc3QgbWFrZUNsYXNzID0gKG9iaiwgcHJlZml4KSA9PiB7XG4gIGNvbnN0IG9ialR5cGUgPSB0eXBlb2Ygb2JqO1xuICBsZXQgY2xhc3NTdHI7XG4gIFxuICBpZiAob2JqVHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGAke3ByZWZpeH0tJHtvYmp9YDtcbiAgfSBlbHNlIGlmIChvYmpUeXBlID09IFwiYm9vbGVhblwiKSB7XG4gICAgcmV0dXJuIGAke3ByZWZpeH1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlYWNoUmVjdXJzaXZlKG9iaiwgcHJlZml4KTtcbiAgfVxufVxuICBcbiAgXG4gXG5jb25zb2xlLmxvZyggbWFrZUNsYXNzKGJvb2wsICdwcmVmaXgnKSApOyBcbmNvbnNvbGUubG9nKCBtYWtlQ2xhc3Moc3RyaW5nLCAncHJlZml4JykgKTtcbmNvbnNvbGUubG9nKCBtYWtlQ2xhc3Mob2JqLCAncHJlZml4JykgKTtcbmNvbnNvbGUubG9nKCBtYWtlQ2xhc3Mob2JqMiwgJ3ByZWZpeCcpICk7XG5jb25zb2xlLmxvZyggbWFrZUNsYXNzKGFycm9iaiwgJ3ByZWZpeCcpICk7XG5jb25zb2xlLmxvZyggbWFrZUNsYXNzKGFyciwgJ3ByZWZpeCcpICk7Il19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment