karma-zonejs
Version:
A Karma plugin - adapter for zonejs
58 lines (53 loc) • 1.8 kB
JavaScript
var path = require('path');
var fs = require('fs');
var createPattern = function(path) {
return {pattern: path, included: true, served: true, watched: false};
};
var initZoneJS = function(files) {
var zoneJsDir = path.dirname(path.resolve(path.join(__dirname, '../../zone.js/dist/zone.js')));
var zonejs = null;
var jasmine = [];
var other = [];
fs.readdirSync(zoneJsDir).forEach(function(file) {
// only include .js files
if (!file.endsWith('.js')) return;
// ignore the minified version
if (file.endsWith('.min.js')) return;
// ignore the node version
if (file.indexOf('node') != -1) return;
if (file == 'zone.js') {
// zone.js must be first so treat it differently
zonejs = path.join(zoneJsDir, file);
} else if (file.indexOf('jasmine') != -1) {
// jasmine must be loaded after jasmine so treat it differently
jasmine.push(path.join(zoneJsDir, file));
} else {
// collect everything else to be loaded
other.push(path.join(zoneJsDir, file));
}
});
other.forEach(function(file) {
// insert the other files
files.unshift(createPattern(file));
});
// Load zone.js as first
files.unshift(createPattern(zonejs));
var lastJasmine = -1;
// locate if we have jasmine in the list
for (var i = 0; i < files.length; i++) {
var file = files[i].pattern;
if (file.indexOf('node_modules') != -1 && file.indexOf('jasmine') != -1) {
lastJasmine = i;
}
}
if (lastJasmine > -1) {
// we have jasmine, load the jasmine related files after jasmine.
jasmine.forEach(function(file) {
files.splice(lastJasmine + 1, 0, createPattern(file));
});
}
};
initZoneJS.$inject = ['config.files'];
module.exports = {
'framework:zonejs': ['factory', initZoneJS]
};