2020-05-26 18:17:24 +02:00

99 lines
3.1 KiB
JavaScript

// Generated by CoffeeScript 1.12.7
(function() {
var abstract_mapper, adapter_to_name, fs, get_version, glob, indx, match_version_to_adapter, name_to_adapter, path, resolve, resolve_engine_path, semver, supports;
path = require('path');
fs = require('fs');
glob = require('glob');
indx = require('indx');
resolve = require('resolve');
semver = require('semver');
exports.supports = supports = function(name) {
name = adapter_to_name(name);
return !!glob.sync("" + (path.join(__dirname, 'adapters', name))).length;
};
exports.load = function(name, custom_path, engine_name) {
var adapter_name, engine_path, version;
name = adapter_to_name(name);
engine_path = resolve_engine_path(name, custom_path);
version = get_version(engine_path);
adapter_name = match_version_to_adapter(name, version);
if (!adapter_name) {
throw new Error(name + " version " + version + " is not currently supported");
}
return new (require(adapter_name))(engine_name, engine_path);
};
exports.all = function() {
return indx(path.join(__dirname, 'adapters'));
};
exports.abstract_mapper = abstract_mapper = function(name, direction) {
var name_maps, res;
name_maps = [['markdown', 'marked'], ['minify-js', 'uglify-js'], ['minify-css', 'clean-css'], ['minify-html', 'html-minifier'], ['mustache', 'hogan.js'], ['scss', 'node-sass'], ['haml', 'hamljs'], ['escape-html', 'he'], ['jsx', 'react-tools'], ['cjsx', 'coffee-react-transform'], ['babel', 'babel-core'], ['typescript', 'typescript-compiler']];
res = null;
name_maps.forEach(function(n) {
if (direction === 'left' && n[0] === name) {
res = n[1];
}
if (direction === 'right' && n[1] === name) {
return res = n[0];
}
});
return res || name;
};
exports.adapter_to_name = adapter_to_name = function(name) {
return abstract_mapper(name, 'right');
};
exports.name_to_adapter = name_to_adapter = function(name) {
return abstract_mapper(name, 'left');
};
resolve_engine_path = function(name, custom_path) {
var filepath;
filepath = custom_path != null ? resolve.sync(name_to_adapter(name), {
basedir: custom_path
}) : require.resolve(name_to_adapter(name));
while (true) {
if (filepath === '/') {
throw new Error("cannot resolve root of node module " + name);
}
filepath = path.dirname(filepath);
if (fs.existsSync(path.join(filepath, 'package.json'))) {
return filepath;
}
}
};
get_version = function(engine_path) {
var err;
try {
return require(engine_path + '/package.json').version;
} catch (error) {
err = error;
}
};
match_version_to_adapter = function(name, version) {
var adapter, adapters, i, len;
adapters = fs.readdirSync(path.join(__dirname, 'adapters', name));
for (i = 0, len = adapters.length; i < len; i++) {
adapter = adapters[i];
adapter = adapter.replace(/\.(?:js|coffee)$/, '');
if (semver.satisfies(version, adapter)) {
return path.join(__dirname, 'adapters', name, adapter);
}
}
};
}).call(this);