UNPKG

coz-engine

Version:
170 lines (150 loc) 12.6 kB
/** * Abstract engine. All engine should inherit this class. * @memberof module:coz-engine/lib * @inner * @constructor Engine * @param {object} [options] - Optional settings. */ 'use strict'; /** @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==