coz-engine
Version:
Abstract engine for coz
170 lines (150 loc) • 12.6 kB
JavaScript
/**
* Abstract engine. All engine should inherit this class.
* @memberof module:coz-engine/lib
* @inner
* @constructor Engine
* @param {object} [options] - Optional settings.
*/
;
/** @lends Engine */
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
function Engine() {
var s = this;
s.init.apply(s, arguments);
}
Engine.prototype = {
// ------------------------
// Public methods
// ------------------------
/**
* Initialize a engine.
* @abstract
* @param {object} options - Optional settings.
* @param {string} [options.basedir] - Base directory path.
*/
init: function init(options) {
var s = this;
options = options || {};
s.basedir = options.basedir || s.basedir;
},
/**
* Base directory path.
*/
basedir: process.cwd(),
/**
* Clone this engine.
* @returns {*} - Clone of engine.
*/
clone: function clone() {
var s = this;
var Constructor = s._constructor;
var clone = new Constructor(s);
clone.set(s);
return clone;
},
/**
* Get a property.
* @param {string} key - Key for property.
* @returns {*} - Property value.
*/
get: function get(key) {
var s = this;
return s[key];
},
/**
* Set a property to this property.
* You set multiple properties by passing a single, object-type argument.
* @param {string|object} key - Key for property.
* @param {?*} [val] - Value to set.
* @returns {Engine} - Returns self for chaining.
* @example
* engine.set('foo', 'bar')
* engine.set({foo: 'bar'})
*/
set: function set(key, val) {
var s = this;
var args = arguments;
var multiple = (0, _typeof2.default)(args[0]) === 'object';
if (multiple) {
s._setProperties(args[0]);
} else {
s._setProperty(key, val);
}
return s;
},
/**
* Precompile a template string.
* Precompiled template is a string with represents compiled template function.
* @abstract
* @param {string} source - Template source string.
* @param {module:coz-engine/lib~precompileCallback} callback - callback when done.
*/
precompile: function precompile(source, callback) {
throw new Error('[engine.precompile]Not implemented!');
},
/**
* Compile a template string.
* Compiled template is a function.
* @abstract
* @param {string} source - Template source string.
* @param {module:coz-engine/lib~compileCallback} callback - Callback when done.
*/
compile: function compile(source, callback) {
throw new Error('[engine.compile]Not implemented!');
},
// ------------------------
// Private properties
// ------------------------
/**
* Constructor class.
* @function
* @private
*/
_constructor: Engine,
/**
* Set a property.
* @param {string} key - Key for property.
* @param {*} val - Value to set.
* @returns {Engine} - Returns self for chaining.
* @private
*/
_setProperty: function _setProperty(key, val) {
var s = this;
s[key] = val;
return s;
},
/**
* Set multiple properties.
* @param {object} values - Properties to set.
* @returns {Engine} - Returns self for chaining.
* @private
*/
_setProperties: function _setProperties(values) {
var s = this;
var keys = Object.keys(values || {});
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i];
s._setProperty(key, values[key]);
}
return s;
}
};
module.exports = Engine;
/**
* Callback for engine precompile function.
* @memberof module:coz-engine/lib
* @inner
* @callback precompileCallback
* @param {?Error} err - precompile error.
* @param {string} tmplFunctionString - Precompiled template function.
*/
/**
* Callback for engine compile function.
* @memberof module:coz-engine/lib
* @inner
* @callback compileCallback
* @param {?Error} err - Compile err
* @param {function} tmpl - Compiled template function.
*/
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVuZ2luZS5qcyJdLCJuYW1lcyI6WyJFbmdpbmUiLCJzIiwiaW5pdCIsImFwcGx5IiwiYXJndW1lbnRzIiwicHJvdG90eXBlIiwib3B0aW9ucyIsImJhc2VkaXIiLCJwcm9jZXNzIiwiY3dkIiwiY2xvbmUiLCJDb25zdHJ1Y3RvciIsIl9jb25zdHJ1Y3RvciIsInNldCIsImdldCIsImtleSIsInZhbCIsImFyZ3MiLCJtdWx0aXBsZSIsIl9zZXRQcm9wZXJ0aWVzIiwiX3NldFByb3BlcnR5IiwicHJlY29tcGlsZSIsInNvdXJjZSIsImNhbGxiYWNrIiwiRXJyb3IiLCJjb21waWxlIiwidmFsdWVzIiwia2V5cyIsIk9iamVjdCIsImkiLCJsZW4iLCJsZW5ndGgiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztBQVFBO0FBRUE7Ozs7OztBQUNBLFNBQVNBLE1BQVQsR0FBbUI7QUFDakIsTUFBTUMsQ0FBQyxHQUFHLElBQVY7QUFDQUEsRUFBQUEsQ0FBQyxDQUFDQyxJQUFGLENBQU9DLEtBQVAsQ0FBYUYsQ0FBYixFQUFnQkcsU0FBaEI7QUFDRDs7QUFFREosTUFBTSxDQUFDSyxTQUFQLEdBQW1CO0FBRWpCO0FBQ0E7QUFDQTs7QUFDQTs7Ozs7O0FBTUFILEVBQUFBLElBWGlCLGdCQVdYSSxPQVhXLEVBV0Y7QUFDYixRQUFNTCxDQUFDLEdBQUcsSUFBVjtBQUNBSyxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxFQUFyQjtBQUNBTCxJQUFBQSxDQUFDLENBQUNNLE9BQUYsR0FBWUQsT0FBTyxDQUFDQyxPQUFSLElBQW1CTixDQUFDLENBQUNNLE9BQWpDO0FBQ0QsR0FmZ0I7O0FBZ0JqQjs7O0FBR0FBLEVBQUFBLE9BQU8sRUFBRUMsT0FBTyxDQUFDQyxHQUFSLEVBbkJROztBQW9CakI7Ozs7QUFJQUMsRUFBQUEsS0F4QmlCLG1CQXdCUjtBQUNQLFFBQU1ULENBQUMsR0FBRyxJQUFWO0FBQ0EsUUFBSVUsV0FBVyxHQUFHVixDQUFDLENBQUNXLFlBQXBCO0FBQ0EsUUFBSUYsS0FBSyxHQUFHLElBQUlDLFdBQUosQ0FBZ0JWLENBQWhCLENBQVo7QUFDQVMsSUFBQUEsS0FBSyxDQUFDRyxHQUFOLENBQVVaLENBQVY7QUFDQSxXQUFPUyxLQUFQO0FBQ0QsR0E5QmdCOztBQStCakI7Ozs7O0FBS0FJLEVBQUFBLEdBcENpQixlQW9DWkMsR0FwQ1ksRUFvQ1A7QUFDUixRQUFNZCxDQUFDLEdBQUcsSUFBVjtBQUNBLFdBQU9BLENBQUMsQ0FBRWMsR0FBRixDQUFSO0FBQ0QsR0F2Q2dCOztBQXdDakI7Ozs7Ozs7Ozs7QUFVQUYsRUFBQUEsR0FsRGlCLGVBa0RaRSxHQWxEWSxFQWtEUEMsR0FsRE8sRUFrREY7QUFDYixRQUFNZixDQUFDLEdBQUcsSUFBVjtBQUNBLFFBQUlnQixJQUFJLEdBQUdiLFNBQVg7QUFDQSxRQUFJYyxRQUFRLEdBQUcsc0JBQU9ELElBQUksQ0FBRSxDQUFGLENBQVgsTUFBcUIsUUFBcEM7O0FBQ0EsUUFBSUMsUUFBSixFQUFjO0FBQ1pqQixNQUFBQSxDQUFDLENBQUNrQixjQUFGLENBQWlCRixJQUFJLENBQUUsQ0FBRixDQUFyQjtBQUNELEtBRkQsTUFFTztBQUNMaEIsTUFBQUEsQ0FBQyxDQUFDbUIsWUFBRixDQUFlTCxHQUFmLEVBQW9CQyxHQUFwQjtBQUNEOztBQUNELFdBQU9mLENBQVA7QUFDRCxHQTVEZ0I7O0FBNkRqQjs7Ozs7OztBQU9Bb0IsRUFBQUEsVUFwRWlCLHNCQW9FTEMsTUFwRUssRUFvRUdDLFFBcEVILEVBb0VhO0FBQzVCLFVBQU0sSUFBSUMsS0FBSixDQUFVLHFDQUFWLENBQU47QUFDRCxHQXRFZ0I7O0FBdUVqQjs7Ozs7OztBQU9BQyxFQUFBQSxPQTlFaUIsbUJBOEVSSCxNQTlFUSxFQThFQUMsUUE5RUEsRUE4RVU7QUFDekIsVUFBTSxJQUFJQyxLQUFKLENBQVUsa0NBQVYsQ0FBTjtBQUNELEdBaEZnQjtBQWlGakI7QUFDQTtBQUNBOztBQUVBOzs7OztBQUtBWixFQUFBQSxZQUFZLEVBQUVaLE1BMUZHOztBQTJGakI7Ozs7Ozs7QUFPQW9CLEVBQUFBLFlBbEdpQix3QkFrR0hMLEdBbEdHLEVBa0dFQyxHQWxHRixFQWtHTztBQUN0QixRQUFNZixDQUFDLEdBQUcsSUFBVjtBQUNBQSxJQUFBQSxDQUFDLENBQUVjLEdBQUYsQ0FBRCxHQUFXQyxHQUFYO0FBQ0EsV0FBT2YsQ0FBUDtBQUNELEdBdEdnQjs7QUF1R2pCOzs7Ozs7QUFNQWtCLEVBQUFBLGNBN0dpQiwwQkE2R0RPLE1BN0dDLEVBNkdPO0FBQ3RCLFFBQU16QixDQUFDLEdBQUcsSUFBVjtBQUNBLFFBQUkwQixJQUFJLEdBQUdDLE1BQU0sQ0FBQ0QsSUFBUCxDQUFZRCxNQUFNLElBQUksRUFBdEIsQ0FBWDs7QUFDQSxTQUFLLElBQUlHLENBQUMsR0FBRyxDQUFSLEVBQVdDLEdBQUcsR0FBR0gsSUFBSSxDQUFDSSxNQUEzQixFQUFtQ0YsQ0FBQyxHQUFHQyxHQUF2QyxFQUE0Q0QsQ0FBQyxFQUE3QyxFQUFpRDtBQUMvQyxVQUFJZCxHQUFHLEdBQUdZLElBQUksQ0FBRUUsQ0FBRixDQUFkOztBQUNBNUIsTUFBQUEsQ0FBQyxDQUFDbUIsWUFBRixDQUFlTCxHQUFmLEVBQW9CVyxNQUFNLENBQUVYLEdBQUYsQ0FBMUI7QUFDRDs7QUFDRCxXQUFPZCxDQUFQO0FBQ0Q7QUFySGdCLENBQW5CO0FBd0hBK0IsTUFBTSxDQUFDQyxPQUFQLEdBQWlCakMsTUFBakI7QUFFQTs7Ozs7Ozs7O0FBU0EiLCJzb3VyY2VSb290IjoiLi4vLi4vbGliIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBYnN0cmFjdCBlbmdpbmUuIEFsbCBlbmdpbmUgc2hvdWxkIGluaGVyaXQgdGhpcyBjbGFzcy5cbiAqIEBtZW1iZXJvZiBtb2R1bGU6Y296LWVuZ2luZS9saWJcbiAqIEBpbm5lclxuICogQGNvbnN0cnVjdG9yIEVuZ2luZVxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbmFsIHNldHRpbmdzLlxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKiogQGxlbmRzIEVuZ2luZSAqL1xuZnVuY3Rpb24gRW5naW5lICgpIHtcbiAgY29uc3QgcyA9IHRoaXNcbiAgcy5pbml0LmFwcGx5KHMsIGFyZ3VtZW50cylcbn1cblxuRW5naW5lLnByb3RvdHlwZSA9IHtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gUHVibGljIG1ldGhvZHNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgZW5naW5lLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJhc2VkaXJdIC0gQmFzZSBkaXJlY3RvcnkgcGF0aC5cbiAgICovXG4gIGluaXQgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgcy5iYXNlZGlyID0gb3B0aW9ucy5iYXNlZGlyIHx8IHMuYmFzZWRpclxuICB9LFxuICAvKipcbiAgICogQmFzZSBkaXJlY3RvcnkgcGF0aC5cbiAgICovXG4gIGJhc2VkaXI6IHByb2Nlc3MuY3dkKCksXG4gIC8qKlxuICAgKiBDbG9uZSB0aGlzIGVuZ2luZS5cbiAgICogQHJldHVybnMgeyp9IC0gQ2xvbmUgb2YgZW5naW5lLlxuICAgKi9cbiAgY2xvbmUgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgdmFyIENvbnN0cnVjdG9yID0gcy5fY29uc3RydWN0b3JcbiAgICB2YXIgY2xvbmUgPSBuZXcgQ29uc3RydWN0b3IocylcbiAgICBjbG9uZS5zZXQocylcbiAgICByZXR1cm4gY2xvbmVcbiAgfSxcbiAgLyoqXG4gICAqIEdldCBhIHByb3BlcnR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gS2V5IGZvciBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgeyp9IC0gUHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBnZXQgKGtleSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcmV0dXJuIHNbIGtleSBdXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgYSBwcm9wZXJ0eSB0byB0aGlzIHByb3BlcnR5LlxuICAgKiBZb3Ugc2V0IG11bHRpcGxlIHByb3BlcnRpZXMgYnkgcGFzc2luZyBhIHNpbmdsZSwgb2JqZWN0LXR5cGUgYXJndW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0ga2V5IC0gS2V5IGZvciBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIHs/Kn0gW3ZhbF0gLSBWYWx1ZSB0byBzZXQuXG4gICAqIEByZXR1cm5zIHtFbmdpbmV9IC0gUmV0dXJucyBzZWxmIGZvciBjaGFpbmluZy5cbiAgICogQGV4YW1wbGVcbiAgICogIGVuZ2luZS5zZXQoJ2ZvbycsICdiYXInKVxuICAgKiAgZW5naW5lLnNldCh7Zm9vOiAnYmFyJ30pXG4gICAqL1xuICBzZXQgKGtleSwgdmFsKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50c1xuICAgIHZhciBtdWx0aXBsZSA9IHR5cGVvZiBhcmdzWyAwIF0gPT09ICdvYmplY3QnXG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBzLl9zZXRQcm9wZXJ0aWVzKGFyZ3NbIDAgXSlcbiAgICB9IGVsc2Uge1xuICAgICAgcy5fc2V0UHJvcGVydHkoa2V5LCB2YWwpXG4gICAgfVxuICAgIHJldHVybiBzXG4gIH0sXG4gIC8qKlxuICAgKiBQcmVjb21waWxlIGEgdGVtcGxhdGUgc3RyaW5nLlxuICAgKiBQcmVjb21waWxlZCB0ZW1wbGF0ZSBpcyBhIHN0cmluZyB3aXRoIHJlcHJlc2VudHMgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gVGVtcGxhdGUgc291cmNlIHN0cmluZy5cbiAgICogQHBhcmFtIHttb2R1bGU6Y296LWVuZ2luZS9saWJ+cHJlY29tcGlsZUNhbGxiYWNrfSBjYWxsYmFjayAtIGNhbGxiYWNrIHdoZW4gZG9uZS5cbiAgICovXG4gIHByZWNvbXBpbGUgKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tlbmdpbmUucHJlY29tcGlsZV1Ob3QgaW1wbGVtZW50ZWQhJylcbiAgfSxcbiAgLyoqXG4gICAqIENvbXBpbGUgYSB0ZW1wbGF0ZSBzdHJpbmcuXG4gICAqIENvbXBpbGVkIHRlbXBsYXRlIGlzIGEgZnVuY3Rpb24uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gVGVtcGxhdGUgc291cmNlIHN0cmluZy5cbiAgICogQHBhcmFtIHttb2R1bGU6Y296LWVuZ2luZS9saWJ+Y29tcGlsZUNhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIHdoZW4gZG9uZS5cbiAgICovXG4gIGNvbXBpbGUgKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tlbmdpbmUuY29tcGlsZV1Ob3QgaW1wbGVtZW50ZWQhJylcbiAgfSxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFByaXZhdGUgcHJvcGVydGllc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogQ29uc3RydWN0b3IgY2xhc3MuXG4gICAqIEBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbnN0cnVjdG9yOiBFbmdpbmUsXG4gIC8qKlxuICAgKiBTZXQgYSBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEtleSBmb3IgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7Kn0gdmFsIC0gVmFsdWUgdG8gc2V0LlxuICAgKiBAcmV0dXJucyB7RW5naW5lfSAtIFJldHVybnMgc2VsZiBmb3IgY2hhaW5pbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0UHJvcGVydHkgKGtleSwgdmFsKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBzWyBrZXkgXSA9IHZhbFxuICAgIHJldHVybiBzXG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgbXVsdGlwbGUgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyAtIFByb3BlcnRpZXMgdG8gc2V0LlxuICAgKiBAcmV0dXJucyB7RW5naW5lfSAtIFJldHVybnMgc2VsZiBmb3IgY2hhaW5pbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0UHJvcGVydGllcyAodmFsdWVzKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSlcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbIGkgXVxuICAgICAgcy5fc2V0UHJvcGVydHkoa2V5LCB2YWx1ZXNbIGtleSBdKVxuICAgIH1cbiAgICByZXR1cm4gc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW5naW5lXG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGVuZ2luZSBwcmVjb21waWxlIGZ1bmN0aW9uLlxuICogQG1lbWJlcm9mIG1vZHVsZTpjb3otZW5naW5lL2xpYlxuICogQGlubmVyXG4gKiBAY2FsbGJhY2sgcHJlY29tcGlsZUNhbGxiYWNrXG4gKiBAcGFyYW0gez9FcnJvcn0gZXJyIC0gcHJlY29tcGlsZSBlcnJvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0bXBsRnVuY3Rpb25TdHJpbmcgLSBQcmVjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbi5cbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciBlbmdpbmUgY29tcGlsZSBmdW5jdGlvbi5cbiAqIEBtZW1iZXJvZiBtb2R1bGU6Y296LWVuZ2luZS9saWJcbiAqIEBpbm5lclxuICogQGNhbGxiYWNrIGNvbXBpbGVDYWxsYmFja1xuICogQHBhcmFtIHs/RXJyb3J9IGVyciAtIENvbXBpbGUgZXJyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0bXBsIC0gQ29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24uXG4gKi9cbiJdfQ==