index.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // Generated by CoffeeScript 1.12.1
  2. (function() {
  3. 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;
  4. path = require('path');
  5. fs = require('fs');
  6. glob = require('glob');
  7. indx = require('indx');
  8. resolve = require('resolve');
  9. semver = require('semver');
  10. exports.supports = supports = function(name) {
  11. name = adapter_to_name(name);
  12. return !!glob.sync("" + (path.join(__dirname, 'adapters', name))).length;
  13. };
  14. exports.load = function(name, custom_path, engine_name) {
  15. var adapter_name, engine_path, version;
  16. name = adapter_to_name(name);
  17. engine_path = resolve_engine_path(name, custom_path);
  18. version = get_version(engine_path);
  19. adapter_name = match_version_to_adapter(name, version);
  20. if (!adapter_name) {
  21. throw new Error(name + " version " + version + " is not currently supported");
  22. }
  23. return new (require(adapter_name))(engine_name, engine_path);
  24. };
  25. exports.all = function() {
  26. return indx(path.join(__dirname, 'adapters'));
  27. };
  28. exports.abstract_mapper = abstract_mapper = function(name, direction) {
  29. var name_maps, res;
  30. 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']];
  31. res = null;
  32. name_maps.forEach(function(n) {
  33. if (direction === 'left' && n[0] === name) {
  34. res = n[1];
  35. }
  36. if (direction === 'right' && n[1] === name) {
  37. return res = n[0];
  38. }
  39. });
  40. return res || name;
  41. };
  42. exports.adapter_to_name = adapter_to_name = function(name) {
  43. return abstract_mapper(name, 'right');
  44. };
  45. exports.name_to_adapter = name_to_adapter = function(name) {
  46. return abstract_mapper(name, 'left');
  47. };
  48. resolve_engine_path = function(name, custom_path) {
  49. var filepath;
  50. filepath = custom_path != null ? resolve.sync(name_to_adapter(name), {
  51. basedir: custom_path
  52. }) : require.resolve(name_to_adapter(name));
  53. while (true) {
  54. if (filepath === '/') {
  55. throw new Error("cannot resolve root of node module " + name);
  56. }
  57. filepath = path.dirname(filepath);
  58. if (fs.existsSync(path.join(filepath, 'package.json'))) {
  59. return filepath;
  60. }
  61. }
  62. };
  63. get_version = function(engine_path) {
  64. var err;
  65. try {
  66. return require(engine_path + '/package.json').version;
  67. } catch (error) {
  68. err = error;
  69. }
  70. };
  71. match_version_to_adapter = function(name, version) {
  72. var adapter, adapters, i, len;
  73. adapters = fs.readdirSync(path.join(__dirname, 'adapters', name));
  74. for (i = 0, len = adapters.length; i < len; i++) {
  75. adapter = adapters[i];
  76. adapter = adapter.replace(/\.(?:js|coffee)$/, '');
  77. if (semver.satisfies(version, adapter)) {
  78. return path.join(__dirname, 'adapters', name, adapter);
  79. }
  80. }
  81. };
  82. }).call(this);