This commit is contained in:
chrosey
2017-09-13 07:52:34 +02:00
parent a1f16c37f4
commit 2340b0226b
24621 changed files with 2912161 additions and 149 deletions
+31
View File
@@ -0,0 +1,31 @@
.code {
width: 500px;
height: 500px;
display: block;
}
.config {
width: 500px;
height: 400px;
display: block;
}
.go {
display: block;
float: right;
font-size: 18px;
}
.result {
width: 500px;
height: 1000px;
display: block;
}
.edit {
float: left;
}
.results {
float: left;
}
+35
View File
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title></title>
<link rel="stylesheet" type="text/css" media="screen" href="index.css" />
</head>
<body>
<header>
<span>Change the config and/or the original code in order to affect the "redeyed" result</span>
</header>
<section class="edit">
<section>
<h3>Redeyed Config </h3>
<textarea class="config"></textarea>
<button class="go">Go</button>
</section>
<section>
<h3>Original Code</h3>
<textarea class="code"></textarea>
</section>
</section>
<section class="results">
<h3>Result</h3>
<textarea class="result" readonly="readonly"></textarea>
</section>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script type="text/javascript" src="https://unpkg.com/esprima"></script>
<script type="text/javascript" src="../../redeyed.js"></script>
<script type="text/javascript" src="./sample-config.js"></script>
<script type="text/javascript" src="./index.js"></script>
</body>
</html>
+33
View File
@@ -0,0 +1,33 @@
var $code = $('.code')
, $config = $('.config')
, $result = $('.result')
;
function go () {
var config;
try {
config = JSON.parse($config.val());
} catch (e) {
$result.val('In "Redeyed Config": ' + e.toString());
return;
}
try {
var code = $code.val()
, result = redeyed(code, config);
$result.val(result.code);
} catch (e) {
$result.val('In "Original Code": ' + e.toString());
}
}
$code.val(window.redeyed.toString());
$config.val(JSON.stringify(window.sampleConfig, false, 2));
$('.go').click(go);
go();
+131
View File
@@ -0,0 +1,131 @@
window.sampleConfig = {
'Boolean': {
'true' : undefined
, 'false' : undefined
, _default : '?:?'
}
, 'Identifier': {
_default: '-> : <-'
}
, 'Null': {
_default: '**:**'
}
, 'Numeric': {
_default: 'n:N'
}
, 'String': {
_default: 'string -> :'
}
, 'Keyword': {
'break' : undefined
, 'case' : undefined
, 'catch' : undefined
, 'continue' : undefined
, 'debugger' : undefined
, 'default' : undefined
, 'delete' : undefined
, 'do' : undefined
, 'else' : undefined
, 'finally' : undefined
, 'for' : undefined
, 'function' : undefined
, 'if' : undefined
, 'in' : undefined
, 'instanceof' : undefined
, 'new' : undefined
, 'return' : undefined
, 'switch' : undefined
, 'this' : undefined
, 'throw' : undefined
, 'try' : undefined
, 'typeof' : undefined
, 'var' : undefined
, 'void' : undefined
, 'while' : undefined
, 'with' : undefined
, _default : ': <- keyword'
}
, 'Punctuator': {
';': undefined
, '.': undefined
, ',': undefined
, '{': undefined
, '}': undefined
, '(': undefined
, ')': undefined
, '[': undefined
, ']': undefined
, '<': undefined
, '>': undefined
, '+': undefined
, '-': undefined
, '*': undefined
, '%': undefined
, '&': undefined
, '|': undefined
, '^': undefined
, '!': undefined
, '~': undefined
, '?': undefined
, ':': undefined
, '=': undefined
, '<=': undefined
, '>=': undefined
, '==': undefined
, '!=': undefined
, '++': undefined
, '--': undefined
, '<<': undefined
, '>>': undefined
, '&&': undefined
, '||': undefined
, '+=': undefined
, '-=': undefined
, '*=': undefined
, '%=': undefined
, '&=': undefined
, '|=': undefined
, '^=': undefined
, '/=': undefined
, '===': undefined
, '!==': undefined
, '>>>': undefined
, '<<=': undefined
, '>>=': undefined
, '>>>=': undefined
, _default: undefined
}
// line comment
, Line: {
_default: undefined
}
/* block comment */
, Block: {
_default: undefined
}
, _default: undefined
};
+61
View File
@@ -0,0 +1,61 @@
var path = require('path')
, fs = require('fs')
, redeyed = require('..')
, vm = require('vm')
;
var samplePath = path.join(__dirname, 'sources', 'log.js')
, origCode = fs.readFileSync(samplePath, 'utf-8')
, kinds = ['silly', 'info', 'warn', 'error' ]
;
function replaceConsole(s, info) {
var code = info.code
, idx = info.tokenIndex
, tokens = info.tokens
, next = tokens[idx + 1].value
, kind = tokens[idx + 2].value
, openParen = tokens[idx + 3].value
, firstArgTkn = tokens[idx + 4]
, argIdx = idx + 3
, open
, tkn
;
if (kind === 'log') kind = 'silly';
// not a console.xxx(...) statement? -> just return original
if (next !== '.' || !~kinds.indexOf(kind) || openParen !== '(') return s;
// skip past arguments to console.xxx all args from ( to )
open = 1;
while (open) {
tkn = tokens[++argIdx];
// count open parens vs. closed ones to handle things like console.log(new Error('..'));
if (tkn.value === '(') open++;
if (tkn.value === ')') open--;
}
// tkn now is the last closing paren
var argsIncludingClosingParen = code.slice(firstArgTkn.range[0], tkn.range[1])
, result = 'log.' + kind + '("main-logger", ' + argsIncludingClosingParen;
// tell redeyed to skip the entire console.xxx(..) statement since we are replacing it all
return { replacement: result, skipPastToken: tkn };
}
function transformAndRun () {
var config = {
Identifier: { console: replaceConsole }
}
, code = redeyed(origCode, config).code
, context = vm.createContext({ require: require });
console.log('Original code:\n', origCode);
console.log('\nlog calls replaced:\n', code);
console.log('\nLets run it:');
vm.runInContext(code, context, 'transformed-log.vm');
}
transformAndRun();
+8
View File
@@ -0,0 +1,8 @@
// First two lines will be needed when we replaced all console.xxx statements with log.xxx
var log = require('npmlog');
log.level = 'silly';
console.info('info ', 1);
console.log('log ', 2);
console.warn('warn ', 3);
console.error('error ', new Error('oh my!'));