formatterLoader.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. "use strict";
  2. var fs = require("fs");
  3. var path = require("path");
  4. var underscore_string_1 = require("underscore.string");
  5. var moduleDirectory = path.dirname(module.filename);
  6. var CORE_FORMATTERS_DIRECTORY = path.resolve(moduleDirectory, ".", "formatters");
  7. function findFormatter(name, formattersDirectory) {
  8. if (typeof name === "function") {
  9. return name;
  10. }
  11. var camelizedName = underscore_string_1.camelize(name + "Formatter");
  12. var Formatter = loadFormatter(CORE_FORMATTERS_DIRECTORY, camelizedName);
  13. if (Formatter != null) {
  14. return Formatter;
  15. }
  16. if (formattersDirectory) {
  17. Formatter = loadFormatter(formattersDirectory, camelizedName);
  18. if (Formatter) {
  19. return Formatter;
  20. }
  21. }
  22. return loadFormatterModule(name);
  23. }
  24. exports.findFormatter = findFormatter;
  25. function loadFormatter() {
  26. var paths = [];
  27. for (var _i = 0; _i < arguments.length; _i++) {
  28. paths[_i - 0] = arguments[_i];
  29. }
  30. var formatterPath = paths.reduce(function (p, c) { return path.join(p, c); }, "");
  31. var fullPath = path.resolve(moduleDirectory, formatterPath);
  32. if (fs.existsSync(fullPath + ".js")) {
  33. var formatterModule = require(fullPath);
  34. return formatterModule.Formatter;
  35. }
  36. return undefined;
  37. }
  38. function loadFormatterModule(name) {
  39. var src;
  40. try {
  41. src = require.resolve(name);
  42. }
  43. catch (e) {
  44. return undefined;
  45. }
  46. return require(src).Formatter;
  47. }