| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // Generated by CoffeeScript 1.12.1
- (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);
|