UNPKG

art-standard-lib

Version:

The Standard Library for JavaScript that aught to be.

209 lines (173 loc) 6.38 kB
// Generated by CoffeeScript 1.12.7 (function() { var MinimalBaseObject, capitalize, isFunction, isPlainObject, isString, ref; capitalize = require('./Core').capitalize; ref = require('./TypesExtended'), isFunction = ref.isFunction, isString = ref.isString, isPlainObject = ref.isPlainObject; module.exports = MinimalBaseObject = (function() { var addGetter, addGetters, addProperties, addSetter, addSetters, defProperties, defProperty, propGetterName, propInternalName, propListStringToArray, propSetterName; function MinimalBaseObject() {} MinimalBaseObject.propInternalName = propInternalName = function(prop) { return "_" + prop; }; /* IN: arguments is a list of strings or objects strings: are just the names of the properties objects: map from prop names to getter/setter functions */ MinimalBaseObject.getter = function() { return defProperties(this.prototype, arguments, true, false); }; MinimalBaseObject.setter = function() { return defProperties(this.prototype, arguments, false, true); }; MinimalBaseObject.addGetter = function(prop, getter) { return this._addGetter(this.prototype, prop, getter); }; MinimalBaseObject.addSetter = function(prop, setter) { return this._addSetter(this.prototype, prop, setter); }; MinimalBaseObject.addClassGetter = function(prop, getter) { return this._addGetter(this, prop, getter); }; MinimalBaseObject.addClassSetter = function(prop, setter) { return this._addSetter(this, prop, setter); }; /* IN: arguments is a list of strings or objects strings: are just the names of the properties objects: map from prop names to initializers */ MinimalBaseObject.property = function() { return defProperties(this.prototype, arguments, true, true); }; MinimalBaseObject.classGetter = function() { return defProperties(this, arguments, true, false); }; MinimalBaseObject.classSetter = function() { return defProperties(this, arguments, false, true); }; MinimalBaseObject.classProperty = function() { return defProperties(this, arguments, true, true); }; MinimalBaseObject.getPropGetterName = propGetterName = function(prop) { return "get" + capitalize(prop); }; MinimalBaseObject.getPropSetterName = propSetterName = function(prop) { return "set" + capitalize(prop); }; MinimalBaseObject._propGetterName = function(v) { console.warn("DEPRICATED - use getPropGetterName"); return propGetterName(v); }; MinimalBaseObject._propSetterName = function(v) { console.warn("DEPRICATED - use getPropSetterName"); return propSetterName(v); }; MinimalBaseObject._addGetter = addGetter = function(obj, prop, getter) { obj[propGetterName(prop)] = getter; if (!isFunction(getter)) { getter = (function() { return getter; }); } Object.defineProperty(obj, prop, { get: getter, configurable: true }); return prop; }; MinimalBaseObject._addSetter = addSetter = function(obj, prop, setter) { obj[propSetterName(prop)] = setter; Object.defineProperty(obj, prop, { set: setter, configurable: true }); return prop; }; MinimalBaseObject._addGetters = addGetters = function(obj, map) { var getter, prop; for (prop in map) { getter = map[prop]; addGetter(obj, prop, getter); } return map; }; MinimalBaseObject._addSetters = addSetters = function(obj, map) { var prop, setter; for (prop in map) { setter = map[prop]; addSetter(obj, prop, setter); } return map; }; MinimalBaseObject._addProperties = addProperties = function(obj, map) { var initializer, prop; for (prop in map) { initializer = map[prop]; defProperty(obj, prop, true, true, initializer); } return map; }; MinimalBaseObject._defProperty = defProperty = function(obj, prop, defineGetter, defineSetter, initializer) { var propName; propName = propInternalName(prop); if (defineGetter) { addGetter(obj, prop, obj[propGetterName(prop)] = isFunction(initializer) ? function() { if (this[propName] != null) { return this[propName]; } else { return this[propName] = initializer(); } } : initializer != null ? function() { if (this[propName] != null) { return this[propName]; } else { return this[propName] = initializer; } } : function() { return this[propName]; }); } if (defineSetter) { return addSetter(obj, prop, function(v) { return this[propName] = v; }); } }; MinimalBaseObject._defProperties = defProperties = function(obj, props, defineGetter, defineSetter) { var i, len, prop, propFromString, propMap, results; results = []; for (i = 0, len = props.length; i < len; i++) { prop = props[i]; if (isPlainObject(propMap = prop)) { if (defineGetter && defineSetter) { results.push(addProperties(obj, propMap)); } else if (defineGetter) { results.push(addGetters(obj, propMap)); } else { results.push(addSetters(obj, propMap)); } } else if (isString(prop)) { results.push((function() { var j, len1, ref1, results1; ref1 = propListStringToArray(prop); results1 = []; for (j = 0, len1 = ref1.length; j < len1; j++) { propFromString = ref1[j]; results1.push(defProperty(obj, propFromString, defineGetter, defineSetter, null)); } return results1; })()); } else { throw new Error("invalid value. Expected string or plain-object:", prop); } } return results; }; MinimalBaseObject._propListStringToArray = propListStringToArray = function(propList) { return propList.match(/[_a-z][_a-z0-9]*/gi); }; return MinimalBaseObject; })(); }).call(this); //# sourceMappingURL=MinimalBaseObject.js.map