babelute
Version:
Internal Domain Specific (Multi)Modeling javascript framework
87 lines (69 loc) • 2.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addToInitializer = exports.createInitializer = exports.Initializer = undefined;
var _babelute = require('../babelute');
var _babelute2 = _interopRequireDefault(_babelute);
var _extends = require('../utils/extends');
var _extends2 = _interopRequireDefault(_extends);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } // removed in production
/*
* @Author: Gilles Coomans
* @Date: 2017-03-10 13:25:25
* @Last Modified by: Gilles Coomans
* @Last Modified time: 2017-05-10 11:03:28
*/
/**
* Initializer Class
* @protected
*/
var Initializer = function Initializer() {
_classCallCheck(this, Initializer);
};
/**
* extends Initializer
* @param {Class} BaseInitializer the Initializer to extends
* @return {Class} the extended Initalizer class
*/
Initializer.extends = _extends2.default;
/**
* create a Initializer (based on a Babelute subclass) and instanciate it
* @param {Babelute} BabeluteClass a Babelute subclass from where create initializer
* @param {?Initializer} BaseInitializer a parent initializer to be extended (optional)
* @return {Initializer} the Initializer instance
* @protected
*/
function createInitializer(BabeluteClass) {
var BaseInitializer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var Init = BabeluteClass.Initializer = BaseInitializer ? Initializer.extends(BaseInitializer) : Initializer;
BabeluteClass.initializer = new Init();
BabeluteClass.initializer._empty = function () {
return new BabeluteClass();
};
BabeluteClass.initializer.Class = BabeluteClass;
Object.keys(BabeluteClass).forEach(function (i) {
return addToInitializer(Init, i);
});
return BabeluteClass.initializer;
}
/**
* add method to initializer
* @protected
* @param {Initializer} Initializer Initializer class where add methods in proto
* @param {string} methodName the name of method to add
*/
function addToInitializer(Initializer, methodName) {
Initializer.prototype[methodName] = function () {
var _ref;
return (_ref = new this.Class())[methodName].apply(_ref, arguments);
};
}
// add base Babelute's api
['_use', '_each', '_if', '_append', '_lexicon'].forEach(function (methodName) {
addToInitializer(Initializer, methodName);
});
exports.Initializer = Initializer;
exports.createInitializer = createInitializer;
exports.addToInitializer = addToInitializer;