-
Notifications
You must be signed in to change notification settings - Fork 21
/
index.js
99 lines (83 loc) · 2.09 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
var fs = require( 'fs' ),
path = require( 'path' ),
esperanto = require( '../lib/esperanto' ),
samples,
iterations = 1000;
samples = fs.readdirSync( path.join( __dirname, 'samples' ) ).map( function ( file ) {
return {
name: file,
code: fs.readFileSync( path.join( __dirname, 'samples', file ) ).toString()
};
});
tests = [
{
name: 'esperanto',
fn: function ( code, filename, type ) {
code = esperanto[ type === 'amd' ? 'toAmd' : 'toCjs' ]( code, { strict: true });
return code;
}
},
{
name: 'traceur',
skip: process.argv[2] !== 'traceur',
before: function () {
traceur = require( 'traceur' );
},
fn: function ( code, filename, type ) {
return traceur.compile( code, {
filename: filename,
modules: type,
sourceMaps: false
}).js;
},
after: function () {
delete require.cache[ require.resolve( 'traceur' ) ];
},
alias: { cjs: 'commonjs' }
},
{
name: 'transpile',
skip: process.argv[2] === 'traceur',
before: function () {
transpile = require( 'transpile' );
},
fn: function ( code, filename, type ) {
return transpile.to({
name: filename,
source: code,
metadata: { format: 'es6' }
}, type )
},
after: function () {
delete require.cache[ require.resolve( 'transpile' ) ];
}
}
];
tests.forEach( function ( test ) {
var out, type = 'cjs';
if ( test.skip ) {
return;
}
if ( test.alias ) {
type = test.alias[ type ] || type;
}
console.log( '\nRunning %s test...', test.name );
test.before && test.before();
// First, save the result to disk
out = path.join( __dirname, 'output', test.name );
try { fs.mkdirSync( out ); } catch ( err ) {}
samples.forEach( function ( sample ) {
var result = test.fn( sample.code, sample.name, type );
fs.writeFileSync( path.join( out, sample.name ), result );
});
// Then run the tests
var start = Date.now();
samples.forEach( function ( sample ) {
var i = iterations;
while ( i-- ) {
test.fn( sample.code, sample.name, type );
}
});
console.log( '...finished %s iterations in %sms\n', iterations, Date.now() - start );
test.after && test.after();
})