Skip to content

Commit 192ce62

Browse files
committed
Allow tests to be ran with dummy Babel compilation
1 parent 4124d77 commit 192ce62

File tree

5 files changed

+72
-14
lines changed

5 files changed

+72
-14
lines changed

api.js

+14-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const arrify = require('arrify');
1616
const ms = require('ms');
1717
const babelConfigHelper = require('./lib/babel-config');
1818
const CachingPrecompiler = require('./lib/caching-precompiler');
19+
const NativeCachingPrecompiler = require('./lib/native-caching-precompiler');
1920
const RunStatus = require('./lib/run-status');
2021
const AvaError = require('./lib/ava-error');
2122
const AvaFiles = require('./lib/ava-files');
@@ -118,13 +119,21 @@ class Api extends EventEmitter {
118119
this.options.cacheDir = cacheDir;
119120

120121
const isPowerAssertEnabled = this.options.powerAssert !== false;
122+
const compileJavascriptFiles = this.options.compileJavascriptFiles !== false;
121123
return babelConfigHelper.build(this.options.projectDir, cacheDir, this.options.babelConfig, isPowerAssertEnabled)
122124
.then(result => {
123-
this.precompiler = new CachingPrecompiler({
124-
path: cacheDir,
125-
getBabelOptions: result.getOptions,
126-
babelCacheKeys: result.cacheKeys
127-
});
125+
if (compileJavascriptFiles) {
126+
this.precompiler = new CachingPrecompiler({
127+
path: cacheDir,
128+
getBabelOptions: result.getOptions,
129+
babelCacheKeys: result.cacheKeys
130+
});
131+
} else {
132+
this.precompiler = new NativeCachingPrecompiler({
133+
path: cacheDir,
134+
babelCacheKeys: result.cacheKeys
135+
});
136+
}
128137
});
129138
}
130139

@@ -262,7 +271,6 @@ class Api extends EventEmitter {
262271
const options = {
263272
runOnlyExclusive: this.options.match.length > 0
264273
};
265-
266274
resolve(test.run(options));
267275
}).catch(err => {
268276
err.file = file;

lib/cli.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ exports.run = () => {
150150
concurrency: conf.concurrency ? parseInt(conf.concurrency, 10) : 0,
151151
updateSnapshots: conf.updateSnapshots,
152152
snapshotDir: conf.snapshotDir ? path.resolve(projectDir, conf.snapshotDir) : null,
153-
color: conf.color
153+
color: conf.color,
154+
compileJavascriptFiles: conf.compileJavascriptFiles !== false
154155
});
155156

156157
let reporter;

lib/native-caching-precompiler.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
const fs = require('fs');
3+
const cachingTransform = require('caching-transform');
4+
const packageHash = require('package-hash');
5+
const stripBomBuf = require('strip-bom-buf');
6+
const autoBind = require('auto-bind');
7+
const md5Hex = require('md5-hex');
8+
9+
class NativeCachingPrecompiler {
10+
11+
constructor(options) {
12+
autoBind(this);
13+
this.babelCacheKeys = options.babelCacheKeys;
14+
this.cacheDirPath = options.path;
15+
this.fileHashes = {};
16+
this.transform = cachingTransform({
17+
cacheDir: this.cacheDirPath,
18+
ext: '.js',
19+
factory: () => code => code.toString(), // Native raw
20+
salt: packageHash.sync([require.resolve('../package.json')], this.babelCacheKeys),
21+
hash: (code, filePath, salt) => {
22+
const hash = md5Hex([code, filePath, salt]);
23+
this.fileHashes[filePath] = hash;
24+
return hash;
25+
}
26+
});
27+
}
28+
29+
precompileFile(filePath) {
30+
if (!this.fileHashes[filePath]) {
31+
const source = stripBomBuf(fs.readFileSync(filePath));
32+
this.transform(source, filePath);
33+
}
34+
35+
return this.fileHashes[filePath];
36+
}
37+
}
38+
39+
module.exports = NativeCachingPrecompiler;

lib/process-adapter.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,10 @@ exports.installSourceMapSupport = () => {
7878
exports.installPrecompilerHook = () => {
7979
installPrecompiler(filename => {
8080
const precompiled = opts.precompiled[filename];
81-
8281
if (precompiled) {
83-
sourceMapCache.set(filename, path.join(cacheDir, `${precompiled}.js.map`));
82+
if (opts.compileJavascriptFiles) {
83+
sourceMapCache.set(filename, path.join(cacheDir, `${precompiled}.js.map`));
84+
}
8485
return fs.readFileSync(path.join(cacheDir, `${precompiled}.js`), 'utf8');
8586
}
8687

profile.js

+14-5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const arrify = require('arrify');
1515
const resolveCwd = require('resolve-cwd');
1616
const babelConfigHelper = require('./lib/babel-config');
1717
const CachingPrecompiler = require('./lib/caching-precompiler');
18+
const NativeCachingPrecompiler = require('./lib/native-caching-precompiler');
1819
const globals = require('./lib/globals');
1920

2021
function resolveModules(modules) {
@@ -78,11 +79,19 @@ const cacheDir = findCacheDir({
7879

7980
babelConfigHelper.build(process.cwd(), cacheDir, conf.babel, true)
8081
.then(result => {
81-
const precompiler = new CachingPrecompiler({
82-
path: cacheDir,
83-
getBabelOptions: result.getOptions,
84-
babelCacheKeys: result.cacheKeys
85-
});
82+
let precompiler = null;
83+
if (conf.compileJavascriptFiles) {
84+
precompiler = new CachingPrecompiler({
85+
path: cacheDir,
86+
getBabelOptions: result.getOptions,
87+
babelCacheKeys: result.cacheKeys
88+
});
89+
} else {
90+
precompiler = new NativeCachingPrecompiler({
91+
path: cacheDir,
92+
babelCacheKeys: result.cacheKeys
93+
});
94+
}
8695

8796
const precompiled = {};
8897
precompiled[file] = precompiler.precompileFile(file);

0 commit comments

Comments
 (0)