def find_func_name(script):
FUNC_NAME = R"([a-zA-Z0-9$]+)"
- FUNC_PARAMS = R"(\([a-zA-Z]+\.s\))"
+ FUNC_PARAMS = R"(\([a-zA-Z,\.]+\.s\))"
TERMINATOR = R"[,;\)]"
PATTERN = FUNC_NAME + FUNC_PARAMS + TERMINATOR
stdout=subprocess.PIPE
)
js_decode_script = ("""
- var vm = require('vm');
+ const vm = require('vm');
- var sandbox = {
+ const sandbox = {
location: {
hash: '',
href: '',
};
sandbox.window = sandbox;
- var code_string = %(code)s + ';';
- var exec_string = 'transformed_signature = %(func_name)s(signature);';
+ const code_string = %(code)s + ';';
+ const exec_string = 'transformed_signature = %(func_name)s("", "MARKER", signature);';
vm.runInNewContext(code_string + exec_string, sandbox);
- console.log(sandbox.transformed_signature);
+ function findSignature(obj) {
+ if (typeof obj !== 'object') {
+ return;
+ }
+ for (const [key, value] of Object.entries(obj)) {
+ if (key === 'MARKER') {
+ return value;
+ }
+ const result = findSignature(value);
+ if (result) {
+ return result;
+ }
+ }
+ }
+ console.log(findSignature(sandbox.transformed_signature));
""" % params)
p.stdin.write(js_decode_script.encode("utf-8"))