| Server IP : 146.190.157.162 / Your IP : 216.73.217.6 Web Server : Apache System : Linux ubuntu-s-2vcpu-4gb-amd-sfo3-01-KIT-DIGITAL 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 7 15:10:09 UTC 2024 x86_64 User : businessweek ( 639) PHP Version : 8.2.10-2ubuntu2.2 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_signal,pcntl_signal_dispatch,pcntl_getpriority,pcntl_setpriority,dl,putenv,parse_ini_file,show_source MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /usr/share/node_modules/babel-plugin-transform-charcodes/lib/ |
Upload File : |
import * as charcodes from "charcodes";
import { parse } from "@babel/parser";
import traverse from '@babel/traverse';
export default function (babel) {
var t = babel.types;
function parseFunctionSource(str) {
var root = parse(str, {
sourceType: 'script'
});
return root.program.body[0];
}
function createInlineFunction(func, id) {
traverse(func, {
noScope: true,
Identifier: function Identifier(path) {
var name = path.node.name;
if (typeof charcodes[name] !== "undefined" && typeof charcodes[name] !== "function") {
path.replaceWith(t.NumericLiteral(charcodes[name]));
}
}
});
return t.variableDeclaration('var', [t.variableDeclarator(id, t.toExpression(func))]);
}
return {
visitor: {
ImportDeclaration: function ImportDeclaration(path, state) {
if (path.node.source.value === "charcodes") {
state.importedLocalName = path.node.specifiers[0].local.name;
path.remove();
}
},
MemberExpression: function MemberExpression(path, state) {
if (typeof state.importedLocalName !== "undefined" && path.node.object.name == state.importedLocalName) {
var rightName = path.node.property.name;
var charCodeValue = charcodes[rightName];
if (typeof charCodeValue === "undefined") {
throw new Error("unknown key " + rightName);
} else if (typeof charCodeValue !== "function") {
path.replaceWith(t.NumericLiteral(charCodeValue));
} else {
var fn = parseFunctionSource(charCodeValue.toString());
var id = path.scope.generateUidIdentifier(rightName);
state._toHoist.push(createInlineFunction(fn, id));
path.replaceWith(id);
}
}
},
Program: {
enter: function enter(path, state) {
state._toHoist = [];
},
exit: function exit(path, state) {
state._toHoist.forEach(function (x) {
path.node.body.unshift(x);
});
}
}
}
};
}