Skip to content

Instantly share code, notes, and snippets.

@pikdum

pikdum/redact.js Secret

Last active May 14, 2023 03:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pikdum/46ddcc20b73072f1aa873844b2595b3f to your computer and use it in GitHub Desktop.
Save pikdum/46ddcc20b73072f1aa873844b2595b3f to your computer and use it in GitHub Desktop.
feature flag redaction poc
import * as recast from "recast";
// consequent to omit code
const redactedConsequent = recast.parse`\
if (false) {
// REDACTED
}
`.program.body[0].consequent;
// a source code file
const code = `\
if (FOO) {
console.log("FOO");
} else {
console.log("NOT FOO");
}
if (BAR) {
console.log("BAR");
} else {
console.log("NOT BAR");
}
if (BAZ) {
console.log("BAZ");
} else {
console.log("NOT BAZ");
}
if (UNKNOWN) {
console.log("UNKNOWN");
}`;
// which flags are on or off
const FEATURE_FLAGS = {
FOO: false,
BAR: true,
BAZ: false,
};
// get ast
const ast = recast.parse(code);
// loop through ast body, redact consequents where the flag is disabled
ast.program.body = ast.program.body.map((node) => {
// redact consequents where the flag is disabled
if (node.type === "IfStatement") {
if (FEATURE_FLAGS[node.test.name] === false) {
node.consequent = redactedConsequent;
}
}
return node;
});
console.log(FEATURE_FLAGS);
console.log(recast.print(ast).code);
/* Output:
{ FOO: false, BAR: true, BAZ: false }
if (FOO) {
// REDACTED
} else {
console.log("NOT FOO");
}
if (BAR) {
console.log("BAR");
} else {
console.log("NOT BAR");
}
if (BAZ) {
// REDACTED
} else {
console.log("NOT BAZ");
}
if (UNKNOWN) {
console.log("UNKNOWN");
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment