plugin.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. "use strict";
  2. exports.__esModule = true;
  3. var _getIterator2 = require("babel-runtime/core-js/get-iterator");
  4. var _getIterator3 = _interopRequireDefault(_getIterator2);
  5. var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
  6. var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
  7. var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");
  8. var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
  9. var _inherits2 = require("babel-runtime/helpers/inherits");
  10. var _inherits3 = _interopRequireDefault(_inherits2);
  11. var _optionManager = require("./file/options/option-manager");
  12. var _optionManager2 = _interopRequireDefault(_optionManager);
  13. var _babelMessages = require("babel-messages");
  14. var messages = _interopRequireWildcard(_babelMessages);
  15. var _store = require("../store");
  16. var _store2 = _interopRequireDefault(_store);
  17. var _babelTraverse = require("babel-traverse");
  18. var _babelTraverse2 = _interopRequireDefault(_babelTraverse);
  19. var _assign = require("lodash/assign");
  20. var _assign2 = _interopRequireDefault(_assign);
  21. var _clone = require("lodash/clone");
  22. var _clone2 = _interopRequireDefault(_clone);
  23. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
  24. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  25. var GLOBAL_VISITOR_PROPS = ["enter", "exit"];
  26. var Plugin = function (_Store) {
  27. (0, _inherits3.default)(Plugin, _Store);
  28. function Plugin(plugin, key) {
  29. (0, _classCallCheck3.default)(this, Plugin);
  30. var _this = (0, _possibleConstructorReturn3.default)(this, _Store.call(this));
  31. _this.initialized = false;
  32. _this.raw = (0, _assign2.default)({}, plugin);
  33. _this.key = _this.take("name") || key;
  34. _this.manipulateOptions = _this.take("manipulateOptions");
  35. _this.post = _this.take("post");
  36. _this.pre = _this.take("pre");
  37. _this.visitor = _this.normaliseVisitor((0, _clone2.default)(_this.take("visitor")) || {});
  38. return _this;
  39. }
  40. Plugin.prototype.take = function take(key) {
  41. var val = this.raw[key];
  42. delete this.raw[key];
  43. return val;
  44. };
  45. Plugin.prototype.chain = function chain(target, key) {
  46. if (!target[key]) return this[key];
  47. if (!this[key]) return target[key];
  48. var fns = [target[key], this[key]];
  49. return function () {
  50. var val = void 0;
  51. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  52. args[_key] = arguments[_key];
  53. }
  54. for (var _iterator = fns, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
  55. var _ref;
  56. if (_isArray) {
  57. if (_i >= _iterator.length) break;
  58. _ref = _iterator[_i++];
  59. } else {
  60. _i = _iterator.next();
  61. if (_i.done) break;
  62. _ref = _i.value;
  63. }
  64. var fn = _ref;
  65. if (fn) {
  66. var ret = fn.apply(this, args);
  67. if (ret != null) val = ret;
  68. }
  69. }
  70. return val;
  71. };
  72. };
  73. Plugin.prototype.maybeInherit = function maybeInherit(loc) {
  74. var inherits = this.take("inherits");
  75. if (!inherits) return;
  76. inherits = _optionManager2.default.normalisePlugin(inherits, loc, "inherits");
  77. this.manipulateOptions = this.chain(inherits, "manipulateOptions");
  78. this.post = this.chain(inherits, "post");
  79. this.pre = this.chain(inherits, "pre");
  80. this.visitor = _babelTraverse2.default.visitors.merge([inherits.visitor, this.visitor]);
  81. };
  82. Plugin.prototype.init = function init(loc, i) {
  83. if (this.initialized) return;
  84. this.initialized = true;
  85. this.maybeInherit(loc);
  86. for (var key in this.raw) {
  87. throw new Error(messages.get("pluginInvalidProperty", loc, i, key));
  88. }
  89. };
  90. Plugin.prototype.normaliseVisitor = function normaliseVisitor(visitor) {
  91. for (var _iterator2 = GLOBAL_VISITOR_PROPS, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
  92. var _ref2;
  93. if (_isArray2) {
  94. if (_i2 >= _iterator2.length) break;
  95. _ref2 = _iterator2[_i2++];
  96. } else {
  97. _i2 = _iterator2.next();
  98. if (_i2.done) break;
  99. _ref2 = _i2.value;
  100. }
  101. var key = _ref2;
  102. if (visitor[key]) {
  103. throw new Error("Plugins aren't allowed to specify catch-all enter/exit handlers. " + "Please target individual nodes.");
  104. }
  105. }
  106. _babelTraverse2.default.explode(visitor);
  107. return visitor;
  108. };
  109. return Plugin;
  110. }(_store2.default);
  111. exports.default = Plugin;
  112. module.exports = exports["default"];