* Fix workflow * Trigger * [auto] Update compiled version * [auto] Commit modules * Push Windows changes * Fix * [auto] Update compiled version * Try removing cwd * [auto] Update compiled version * Try with path module * [auto] Update compiled version * Fix path * [auto] Update compiled version * Use raw path * [auto] Update compiled version * Other path * [auto] Update compiled version * Avoid @action/exec * [auto] Update compiled version * test * [auto] Update compiled version * test * [auto] Update compiled version * test * [auto] Update compiled version * test * [auto] Update compiled version * Try with shelljs * [auto] Update compiled version * Fix my stupidity * Copy scripts to local dir * [auto] Update compiled version * Still use path * [auto] Update compiled version * Delete entrypoint.sh * [auto] Update compiled version * Make file executable * [auto] Update compiled version * Try using bash * [auto] Update compiled version
53 lines
1.0 KiB
JavaScript
53 lines
1.0 KiB
JavaScript
"use strict";
|
|
|
|
const EVAL_SCOPE_MARKER = Symbol("evalInScope");
|
|
module.exports = {
|
|
EVAL_SCOPE_MARKER,
|
|
getEvalScopes,
|
|
markEvalScopes,
|
|
isMarked,
|
|
hasEval
|
|
};
|
|
|
|
function getEvalScopes(path) {
|
|
const evalScopes = new Set();
|
|
|
|
function add(scope) {
|
|
let evalScope = scope;
|
|
|
|
do {
|
|
evalScopes.add(evalScope);
|
|
} while (evalScope = evalScope.parent);
|
|
}
|
|
|
|
path.traverse({
|
|
CallExpression(evalPath) {
|
|
const callee = evalPath.get("callee");
|
|
|
|
if (callee.isIdentifier() && callee.node.name === "eval" && !callee.scope.getBinding("eval")) {
|
|
add(callee.scope);
|
|
}
|
|
}
|
|
|
|
});
|
|
return evalScopes;
|
|
}
|
|
|
|
function markEvalScopes(path, key = EVAL_SCOPE_MARKER) {
|
|
const evalScopes = getEvalScopes(path);
|
|
[...evalScopes].forEach(scope => {
|
|
scope[key] = true;
|
|
});
|
|
}
|
|
|
|
function isMarked(scope, key = EVAL_SCOPE_MARKER) {
|
|
return Object.prototype.hasOwnProperty.call(scope, key);
|
|
}
|
|
|
|
function hasEval(scope, key = EVAL_SCOPE_MARKER) {
|
|
if (!isMarked(scope, key)) {
|
|
markEvalScopes(scope, key);
|
|
}
|
|
|
|
return scope[key];
|
|
} |