import stampit from 'stampit'; import EventEmitter from './eventemitter'; import Promise from 'bluebird'; import validate from 'validate.js'; /** Validators used in the library. **/ validate.Promise = Promise; validate.validators.object = function(value) { if(value) { if(!validate.isObject(value)) { return "is not an object"; } } return null; } validate.validators.array = function(value) { if(value) { if(!validate.isArray(value)) { return "is not an array"; } } return null; } validate.validators.boolean = function(value) { if(value) { if(typeof value !== 'boolean') { return "is not a boolean"; } } return null; } validate.validators.string = function(value) { if(value) { if(!validate.isString(value)) { return "is not a string"; } } return null; } export {validate}; /** * Simple wrapper around `EventEmitter` * @constructor * @type {EventEmittable} * @example {@lang javascript} * var EmittableModel = stampit().compose(EventEmittable); */ export const EventEmittable = stampit.convertConstructor(EventEmitter); /** * Used as a manager for {@link Syncano} base object. **Not** meant to be used directly. * @constructor * @type {ConfigMixin} * @property {Syncano} _config private attribute which holds {@link Syncano} object * @example {@lang javascript} * var MyStamp = stampit().compose(ConfigMixin); */ export const ConfigMixin = stampit({ methods: { /** * Gets default properties. * @memberOf ConfigMixin * @instance * @returns {Object} * @example {@lang javascript} * var MyStamp = stampit().compose(ConfigMixin); * var config = MyStamp().getDefaultProperties(); */ getDefaultProperties() { return this._config.defaults; }, /** * Sets config. * @memberOf ConfigMixin * @instance * @param {Syncano} config instance of {@link Syncano} object * @returns {ConfigMixin} * @example {@lang javascript} * var MyStamp = stampit().compose(ConfigMixin); * var newObject = MyStamp().setConfig({}); */ setConfig(config) { this._config = config; return this; }, /** * Gets config. * @memberOf ConfigMixin * @instance * @returns {Syncano} * @example {@lang javascript} * var MyStamp = stampit().compose(ConfigMixin); * var config = MyStamp().getConfig(); */ getConfig() { return this._config; } }, static: { getDefaultProperties() { return this.fixed.refs._config.defaults; }, /** * Sets config and returns new {@link https://github.com/stampit-org/stampit|stampit} definition. * @memberOf ConfigMixin * @static * @param {Syncano} config instance of {@link Syncano} object * @returns {stampit} * @example {@lang javascript} * var MyStamp = stampit().compose(ConfigMixin).setConfig({}); */ setConfig(config) { return this.refs({_config: config}); }, /** * Gets config from {@link https://github.com/stampit-org/stampit|stampit} definition. * @memberOf ConfigMixin * @static * @returns {Syncano} * @example {@lang javascript} * var config = stampit().compose(ConfigMixin).getConfig(); */ getConfig() { return this.fixed.refs._config; } } }); /** * Used as a manager for {@link Meta} object. **Not** meant to be used directly. * @constructor * @type {MetaMixin} * @property {Object} _meta private attribute which holds {@link Meta} object * @example {@lang javascript} * var MyStamp = stampit().compose(MetaMixin); */ export const MetaMixin = stampit({ methods: { /** * Sets meta. * @memberOf MetaMixin * @instance * @param {Meta} meta instance of {@link Meta} object * @returns {MetaMixin} * @example {@lang javascript} * var MyStamp = stampit().compose(MetaMixin); * var newObject = MyStamp().setMeta({}); */ setMeta(meta) { this._meta = meta; return this; }, /** * Gets meta. * @memberOf MetaMixin * @instance * @returns {Meta} * @example {@lang javascript} * var MyStamp = stampit().compose(MetaMixin); * var meta = MyStamp().getMeta(); */ getMeta() { return this._meta; } }, static: { /** * Sets meta and returns new {@link https://github.com/stampit-org/stampit|stampit} definition. * @memberOf MetaMixin * @static * @param {Meta} meta instance of {@link Meta} object * @returns {stampit} * @example {@lang javascript} * var MyStamp = stampit().compose(MetaMixin).setMeta({}); */ setMeta(meta) { return this.refs({_meta: meta}); }, /** * Gets meta from {@link https://github.com/stampit-org/stampit|stampit} definition. * @memberOf MetaMixin * @static * @returns {Meta} * @example {@lang javascript} * var meta = stampit().compose(MetaMixin).getMeta(); */ getMeta() { return this.fixed.refs._meta; } } }); /** * Used as a manager for {@link http://validatejs.org/#constraints|Constraints} object (validation). **Not** meant to be used directly. * @constructor * @type {ConstraintsMixin} * @property {Object} _constraints private attribute which holds constraints object * @example {@lang javascript} * var MyStamp = stampit().compose(ConstraintsMixin); */ export const ConstraintsMixin = stampit({ methods: { /** * Sets constraints used for validation. * @memberOf ConstraintsMixin * @instance * @param {Object} constraints plain JavaScript object * @returns {ConstraintsMixin} * @example {@lang javascript} * var MyStamp = stampit().compose(ConstraintsMixin); * var newObject = MyStamp().setConstraints({}); */ setConstraints(constraints) { this._constraints = constraints; return this; }, /** * Gets constraints from object instance. * @memberOf ConstraintsMixin * @instance * @returns {Object} * @example {@lang javascript} * var MyStamp = stampit().compose(ConstraintsMixinn); * var constraints = MyStamp().getConstraints(); */ getConstraints() { return this._constraints; } }, static: { /** * Sets constraints in {@link https://github.com/stampit-org/stampit|stampit} definition used for validation. * @memberOf ConstraintsMixin * @static * @param {Object} constraints plain JavaScript object * @returns {stampit} * @example {@lang javascript} * var MyStamp = stampit().compose(ConstraintsMixin).setConstraints({}); */ setConstraints(constraints) { return this.refs({_constraints: constraints}); }, /** * Gets constraints from {@link https://github.com/stampit-org/stampit|stampit} definition. * @memberOf ConstraintsMixin * @static * @returns {Object} * @example {@lang javascript} * var constraints = stampit().compose(ConstraintsMixin).getConstraints(); */ getConstraints() { return this.fixed.refs._constraints; } } }); /** * Adds logging functionality. * @constructor * @type {Logger} * @example {@lang javascript} * var MyStamp = stampit().compose(Logger); */ export const Logger = stampit({ methods: { /** * Wrapper around *console.log*. * @memberOf Logger * @instance */ log(...args) { const env = process.env.BABEL_ENV || process.env.NODE_ENV; if (env === 'development') { /* eslint-disable no-console */ console.log(...args); /* eslint-enable no-console */ } } } });