UNPKG

abstract

Version:

Abstraction of JavaScript Objects.

648 lines 50.8 kB
/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['abstract.js']) {
  _$jscoverage['abstract.js'] = [];
  _$jscoverage['abstract.js'][8] = 0;
  _$jscoverage['abstract.js'][11] = 0;
  _$jscoverage['abstract.js'][12] = 0;
  _$jscoverage['abstract.js'][16] = 0;
  _$jscoverage['abstract.js'][17] = 0;
  _$jscoverage['abstract.js'][21] = 0;
  _$jscoverage['abstract.js'][32] = 0;
  _$jscoverage['abstract.js'][43] = 0;
  _$jscoverage['abstract.js'][44] = 0;
  _$jscoverage['abstract.js'][61] = 0;
  _$jscoverage['abstract.js'][62] = 0;
  _$jscoverage['abstract.js'][75] = 0;
  _$jscoverage['abstract.js'][77] = 0;
  _$jscoverage['abstract.js'][78] = 0;
  _$jscoverage['abstract.js'][81] = 0;
  _$jscoverage['abstract.js'][96] = 0;
  _$jscoverage['abstract.js'][97] = 0;
  _$jscoverage['abstract.js'][113] = 0;
  _$jscoverage['abstract.js'][114] = 0;
  _$jscoverage['abstract.js'][117] = 0;
  _$jscoverage['abstract.js'][119] = 0;
  _$jscoverage['abstract.js'][122] = 0;
  _$jscoverage['abstract.js'][145] = 0;
  _$jscoverage['abstract.js'][146] = 0;
  _$jscoverage['abstract.js'][149] = 0;
  _$jscoverage['abstract.js'][154] = 0;
  _$jscoverage['abstract.js'][155] = 0;
  _$jscoverage['abstract.js'][159] = 0;
  _$jscoverage['abstract.js'][211] = 0;
  _$jscoverage['abstract.js'][214] = 0;
  _$jscoverage['abstract.js'][215] = 0;
  _$jscoverage['abstract.js'][222] = 0;
  _$jscoverage['abstract.js'][225] = 0;
  _$jscoverage['abstract.js'][227] = 0;
  _$jscoverage['abstract.js'][228] = 0;
  _$jscoverage['abstract.js'][232] = 0;
  _$jscoverage['abstract.js'][234] = 0;
  _$jscoverage['abstract.js'][242] = 0;
  _$jscoverage['abstract.js'][249] = 0;
  _$jscoverage['abstract.js'][257] = 0;
  _$jscoverage['abstract.js'][274] = 0;
  _$jscoverage['abstract.js'][275] = 0;
  _$jscoverage['abstract.js'][277] = 0;
  _$jscoverage['abstract.js'][278] = 0;
  _$jscoverage['abstract.js'][288] = 0;
  _$jscoverage['abstract.js'][306] = 0;
  _$jscoverage['abstract.js'][309] = 0;
  _$jscoverage['abstract.js'][312] = 0;
  _$jscoverage['abstract.js'][315] = 0;
  _$jscoverage['abstract.js'][317] = 0;
  _$jscoverage['abstract.js'][326] = 0;
  _$jscoverage['abstract.js'][337] = 0;
  _$jscoverage['abstract.js'][338] = 0;
  _$jscoverage['abstract.js'][341] = 0;
  _$jscoverage['abstract.js'][359] = 0;
  _$jscoverage['abstract.js'][360] = 0;
  _$jscoverage['abstract.js'][361] = 0;
  _$jscoverage['abstract.js'][364] = 0;
  _$jscoverage['abstract.js'][372] = 0;
  _$jscoverage['abstract.js'][374] = 0;
  _$jscoverage['abstract.js'][375] = 0;
  _$jscoverage['abstract.js'][383] = 0;
  _$jscoverage['abstract.js'][384] = 0;
  _$jscoverage['abstract.js'][402] = 0;
  _$jscoverage['abstract.js'][403] = 0;
  _$jscoverage['abstract.js'][404] = 0;
  _$jscoverage['abstract.js'][407] = 0;
  _$jscoverage['abstract.js'][408] = 0;
  _$jscoverage['abstract.js'][411] = 0;
  _$jscoverage['abstract.js'][412] = 0;
  _$jscoverage['abstract.js'][415] = 0;
  _$jscoverage['abstract.js'][433] = 0;
  _$jscoverage['abstract.js'][436] = 0;
  _$jscoverage['abstract.js'][437] = 0;
  _$jscoverage['abstract.js'][438] = 0;
  _$jscoverage['abstract.js'][439] = 0;
  _$jscoverage['abstract.js'][441] = 0;
  _$jscoverage['abstract.js'][446] = 0;
  _$jscoverage['abstract.js'][447] = 0;
  _$jscoverage['abstract.js'][451] = 0;
  _$jscoverage['abstract.js'][453] = 0;
  _$jscoverage['abstract.js'][464] = 0;
  _$jscoverage['abstract.js'][466] = 0;
  _$jscoverage['abstract.js'][468] = 0;
  _$jscoverage['abstract.js'][479] = 0;
  _$jscoverage['abstract.js'][482] = 0;
  _$jscoverage['abstract.js'][483] = 0;
  _$jscoverage['abstract.js'][486] = 0;
  _$jscoverage['abstract.js'][489] = 0;
  _$jscoverage['abstract.js'][490] = 0;
  _$jscoverage['abstract.js'][493] = 0;
  _$jscoverage['abstract.js'][494] = 0;
  _$jscoverage['abstract.js'][499] = 0;
  _$jscoverage['abstract.js'][500] = 0;
  _$jscoverage['abstract.js'][504] = 0;
  _$jscoverage['abstract.js'][507] = 0;
  _$jscoverage['abstract.js'][510] = 0;
  _$jscoverage['abstract.js'][513] = 0;
  _$jscoverage['abstract.js'][518] = 0;
  _$jscoverage['abstract.js'][523] = 0;
  _$jscoverage['abstract.js'][524] = 0;
  _$jscoverage['abstract.js'][525] = 0;
  _$jscoverage['abstract.js'][526] = 0;
  _$jscoverage['abstract.js'][536] = 0;
  _$jscoverage['abstract.js'][549] = 0;
  _$jscoverage['abstract.js'][550] = 0;
  _$jscoverage['abstract.js'][564] = 0;
  _$jscoverage['abstract.js'][566] = 0;
  _$jscoverage['abstract.js'][575] = 0;
  _$jscoverage['abstract.js'][577] = 0;
  _$jscoverage['abstract.js'][579] = 0;
  _$jscoverage['abstract.js'][580] = 0;
  _$jscoverage['abstract.js'][583] = 0;
  _$jscoverage['abstract.js'][584] = 0;
  _$jscoverage['abstract.js'][590] = 0;
  _$jscoverage['abstract.js'][603] = 0;
  _$jscoverage['abstract.js'][604] = 0;
  _$jscoverage['abstract.js'][606] = 0;
  _$jscoverage['abstract.js'][610] = 0;
  _$jscoverage['abstract.js'][611] = 0;
  _$jscoverage['abstract.js'][613] = 0;
  _$jscoverage['abstract.js'][615] = 0;
  _$jscoverage['abstract.js'][616] = 0;
  _$jscoverage['abstract.js'][619] = 0;
  _$jscoverage['abstract.js'][626] = 0;
  _$jscoverage['abstract.js'][640] = 0;
  _$jscoverage['abstract.js'][641] = 0;
  _$jscoverage['abstract.js'][642] = 0;
  _$jscoverage['abstract.js'][643] = 0;
  _$jscoverage['abstract.js'][644] = 0;
  _$jscoverage['abstract.js'][645] = 0;
  _$jscoverage['abstract.js'][647] = 0;
  _$jscoverage['abstract.js'][662] = 0;
  _$jscoverage['abstract.js'][663] = 0;
  _$jscoverage['abstract.js'][664] = 0;
  _$jscoverage['abstract.js'][665] = 0;
  _$jscoverage['abstract.js'][667] = 0;
  _$jscoverage['abstract.js'][695] = 0;
  _$jscoverage['abstract.js'][706] = 0;
  _$jscoverage['abstract.js'][707] = 0;
  _$jscoverage['abstract.js'][724] = 0;
  _$jscoverage['abstract.js'][725] = 0;
  _$jscoverage['abstract.js'][755] = 0;
  _$jscoverage['abstract.js'][756] = 0;
  _$jscoverage['abstract.js'][759] = 0;
  _$jscoverage['abstract.js'][762] = 0;
  _$jscoverage['abstract.js'][765] = 0;
  _$jscoverage['abstract.js'][768] = 0;
  _$jscoverage['abstract.js'][769] = 0;
  _$jscoverage['abstract.js'][774] = 0;
  _$jscoverage['abstract.js'][777] = 0;
  _$jscoverage['abstract.js'][794] = 0;
  _$jscoverage['abstract.js'][822] = 0;
  _$jscoverage['abstract.js'][824] = 0;
  _$jscoverage['abstract.js'][827] = 0;
  _$jscoverage['abstract.js'][830] = 0;
  _$jscoverage['abstract.js'][831] = 0;
  _$jscoverage['abstract.js'][834] = 0;
  _$jscoverage['abstract.js'][836] = 0;
  _$jscoverage['abstract.js'][840] = 0;
  _$jscoverage['abstract.js'][841] = 0;
  _$jscoverage['abstract.js'][844] = 0;
  _$jscoverage['abstract.js'][847] = 0;
  _$jscoverage['abstract.js'][850] = 0;
  _$jscoverage['abstract.js'][853] = 0;
  _$jscoverage['abstract.js'][855] = 0;
  _$jscoverage['abstract.js'][857] = 0;
  _$jscoverage['abstract.js'][871] = 0;
  _$jscoverage['abstract.js'][872] = 0;
  _$jscoverage['abstract.js'][873] = 0;
  _$jscoverage['abstract.js'][875] = 0;
  _$jscoverage['abstract.js'][876] = 0;
}
_$jscoverage['abstract.js'][8]++;
function Abstract() {
  _$jscoverage['abstract.js'][11]++;
  if ("function" === typeof arguments[0]) {
    _$jscoverage['abstract.js'][12]++;
    return Abstract.createModel(arguments[0]);
  }
  _$jscoverage['abstract.js'][16]++;
  if ("object" === typeof arguments[0]) {
    _$jscoverage['abstract.js'][17]++;
    return Abstract.create(arguments[0], arguments[1]);
  }
  _$jscoverage['abstract.js'][21]++;
  return this;
}
_$jscoverage['abstract.js'][32]++;
Object.defineProperties(module.exports = Abstract, {get: {get: (function () {
  _$jscoverage['abstract.js'][43]++;
  return (function get() {
  _$jscoverage['abstract.js'][44]++;
  return require("object-settings").prototype? require("object-settings").prototype.get.apply(Abstract, arguments): Abstract.utility.noop();
});
}), configurable: true, enumerable: false}, set: {get: (function () {
  _$jscoverage['abstract.js'][61]++;
  return (function set() {
  _$jscoverage['abstract.js'][62]++;
  return require("object-settings").prototype? require("object-settings").prototype.set.apply(Abstract, arguments): Abstract.utility.noop();
});
}), configurable: true, enumerable: false}, mixin: {value: (function (obj) {
  _$jscoverage['abstract.js'][75]++;
  var target = obj || this;
  _$jscoverage['abstract.js'][77]++;
  Object.keys(Abstract).forEach((function (key) {
  _$jscoverage['abstract.js'][78]++;
  target[key] = target[key] || Abstract[key];
}));
  _$jscoverage['abstract.js'][81]++;
  return target;
}), configurable: true, enumerable: false}, apply: {get: (function () {
  _$jscoverage['abstract.js'][96]++;
  return (function apply(target, arguments) {
  _$jscoverage['abstract.js'][97]++;
  return Abstract.prototype.mixin(target, target);
});
}), configurable: true, enumerable: false}, create: {value: (function create(proto, properties) {
  _$jscoverage['abstract.js'][113]++;
  if ("function" === typeof proto) {
    _$jscoverage['abstract.js'][114]++;
    return Abstract.createModel(proto, properties);
  }
  _$jscoverage['abstract.js'][117]++;
  var Instance = Object.create(proto);
  _$jscoverage['abstract.js'][119]++;
  Abstract.defineProperties(Instance, properties);
  _$jscoverage['abstract.js'][122]++;
  return Instance;
}), configurable: true, writable: false, enumerable: true}, createModel: {value: (function createModel(Model) {
  _$jscoverage['abstract.js'][145]++;
  if ("function" !== typeof Model) {
    _$jscoverage['abstract.js'][146]++;
    return new Error("Abstract.createModel() requires a callable method as the first argument.");
  }
  _$jscoverage['abstract.js'][149]++;
  if (Model.is_constructed) {
  }
  _$jscoverage['abstract.js'][154]++;
  if ("function" === typeof Model.create && model.create.name === "createInstance") {
    _$jscoverage['abstract.js'][155]++;
    return Model.create;
  }
  _$jscoverage['abstract.js'][159]++;
  Abstract.defineProperties(Model, {use: {value: Abstract.prototype.use.bind(Model), configurable: true, enumerable: false, writable: true}, require: {value: Abstract.prototype.require.bind(Model), configurable: true, writable: true, enumerable: false}, get: {value: Abstract.prototype.get.bind(Model), configurable: true, enumerable: false, writable: true}, set: {value: Abstract.prototype.set.bind(Model), configurable: true, enumerable: false, writable: true}, properties: {value: Abstract.prototype.properties.bind(Model), configurable: true, enumerable: false, writable: true}, defineConstructor: {value: Abstract.defineConstructor.bind(Model, Model), configurable: true, enumerable: false, writable: true}, defineProperties: {value: Abstract.defineProperties.bind(Model), configurable: true, enumerable: false, writable: true}, defineProperty: {value: Abstract.defineProperty.bind(Model), configurable: true, enumerable: false, writable: true}});
  _$jscoverage['abstract.js'][211]++;
  Model.prototype = Object.create(Abstract.prototype);
  _$jscoverage['abstract.js'][214]++;
  Object.defineProperty(Model, "create", {value: (function createInstance() {
  _$jscoverage['abstract.js'][215]++;
  return Abstract.createInstance.apply(Model, arguments);
}), enumerable: true, configurable: true, writable: true});
  _$jscoverage['abstract.js'][222]++;
  Model.call(Model, Model, Model.prototype);
  _$jscoverage['abstract.js'][225]++;
  var _custom_name = undefined;
  _$jscoverage['abstract.js'][227]++;
  if (Model._instantiator && Object.keys(Model._instantiator).length) {
    _$jscoverage['abstract.js'][228]++;
    Model._instantiator.forEach((function (fn) {
  _$jscoverage['abstract.js'][228]++;
  _custom_name = fn.name || _custom_name;
}));
  }
  _$jscoverage['abstract.js'][232]++;
  if (_custom_name && "string" === typeof _custom_name) {
    _$jscoverage['abstract.js'][234]++;
    Object.defineProperty(Model, _custom_name, {value: Model.create, enumerable: true, configurable: true, writable: true});
    _$jscoverage['abstract.js'][242]++;
    Object.defineProperty(Model, "create", {enumerable: false});
  }
  _$jscoverage['abstract.js'][249]++;
  Object.defineProperty(Model, "is_constructed", {value: Model.name, enumerable: false, configurable: true, writable: true});
  _$jscoverage['abstract.js'][257]++;
  return Model;
}), configurable: true, enumerable: true, writable: true}, copyProperties: {value: (function referenceProperties(target, source) {
  _$jscoverage['abstract.js'][274]++;
  Object.getOwnPropertyNames(source).forEach((function (key) {
  _$jscoverage['abstract.js'][275]++;
  var descriptor = Object.getOwnPropertyDescriptor(source, key);
  _$jscoverage['abstract.js'][277]++;
  if (descriptor.enumerable) {
    _$jscoverage['abstract.js'][278]++;
    Object.defineProperty(target, key, {enumerable: true, value: source[key], writable: descriptor.writable, configurable: descriptor.configurable});
  }
}));
  _$jscoverage['abstract.js'][288]++;
  return target;
}), configurable: true, enumerable: false, writable: true}, createInstance: {value: (function createInstance() {
  _$jscoverage['abstract.js'][306]++;
  var args = arguments;
  _$jscoverage['abstract.js'][309]++;
  var Instance = Object.create(this.prototype);
  _$jscoverage['abstract.js'][312]++;
  for (var key in this.__proto__) {
    _$jscoverage['abstract.js'][315]++;
    var is_enumerable = this.propertyIsEnumerable(key);
    _$jscoverage['abstract.js'][317]++;
    Object.defineProperty(Instance, key, {value: this.__proto__[key], enumerable: is_enumerable, writable: true, configurable: true});
}
  _$jscoverage['abstract.js'][326]++;
  Instance.set({id: Abstract.utility.hash(null, {random: true}), model: this.name || "Model", schema: {id: ["#", Instance.get("id") || this.name || "Model"].join(""), type: "object", properties: {}}});
  _$jscoverage['abstract.js'][337]++;
  if (this._instantiator && Object.keys(this._instantiator).length) {
    _$jscoverage['abstract.js'][338]++;
    this._instantiator.forEach((function (fn) {
  _$jscoverage['abstract.js'][338]++;
  fn.apply(Instance, args);
}));
  }
  _$jscoverage['abstract.js'][341]++;
  return Instance;
}), configurable: true, enumerable: false, writable: true}, defineConstructor: {value: (function defineConstructor(target, fn) {
  _$jscoverage['abstract.js'][359]++;
  if (target._instantiator && Object.keys(target._instantiator).length) {
    _$jscoverage['abstract.js'][360]++;
    target._instantiator.push("function" === typeof fn? fn: Abstract.utility.noop);
    _$jscoverage['abstract.js'][361]++;
    return target;
  }
  _$jscoverage['abstract.js'][364]++;
  Object.defineProperty(target, "_instantiator", {value: ["function" === typeof fn? fn: Abstract.utility.noop], configurable: true, enumerable: false, writable: true});
  _$jscoverage['abstract.js'][372]++;
  if (fn.name !== "create") {
    _$jscoverage['abstract.js'][374]++;
    Object.defineProperty(target, fn.name, {get: (function () {
  _$jscoverage['abstract.js'][375]++;
  return target.create;
}), enumerable: true, configurable: true});
  }
  _$jscoverage['abstract.js'][383]++;
  return (function createInstance() {
  _$jscoverage['abstract.js'][384]++;
  return Abstract.createInstance.apply(target, arguments);
  _$jscoverage['abstract.js'][384]++;
  ;
});
}), configurable: true, enumerable: false, writable: true}, defineProperties: {value: (function defineProperties(target, props) {
  _$jscoverage['abstract.js'][402]++;
  if (! props && "object" === typeof props && this.hasOwnProperty("defineConstructor")) {
    _$jscoverage['abstract.js'][403]++;
    props = target;
    _$jscoverage['abstract.js'][404]++;
    target = this;
  }
  _$jscoverage['abstract.js'][407]++;
  if (! props || "object" !== typeof props) {
    _$jscoverage['abstract.js'][408]++;
    return target || {};
  }
  _$jscoverage['abstract.js'][411]++;
  Object.keys(props).forEach((function (key) {
  _$jscoverage['abstract.js'][412]++;
  Abstract.defineProperty(target, key, props[key]);
}));
  _$jscoverage['abstract.js'][415]++;
  return target;
}), configurable: true, enumerable: true, writable: true}, defineProperty: {value: (function defineProperty(obj, key, prop) {
  _$jscoverage['abstract.js'][433]++;
  if (! prop) {
    _$jscoverage['abstract.js'][436]++;
    if ("string" === typeof obj && "object" === typeof key && this.hasOwnProperty("defineConstructor")) {
      _$jscoverage['abstract.js'][437]++;
      obj = this;
      _$jscoverage['abstract.js'][438]++;
      key = obj;
      _$jscoverage['abstract.js'][439]++;
      prop = key;
    }
    else {
      _$jscoverage['abstract.js'][441]++;
      prop = {};
    }
  }
  _$jscoverage['abstract.js'][446]++;
  if (! obj) {
    _$jscoverage['abstract.js'][447]++;
    obj = {};
  }
  _$jscoverage['abstract.js'][451]++;
  if (prop instanceof Abstract && prop.get && prop.set && prop._meta) {
    _$jscoverage['abstract.js'][453]++;
    prop = {value: prop, configurable: true, writable: true, type: typeof prop, enumerable: true};
  }
  _$jscoverage['abstract.js'][464]++;
  if ("object" !== typeof prop || (! prop.get && ! prop.set && ! prop.value)) {
    _$jscoverage['abstract.js'][466]++;
    if (prop.value) {
      _$jscoverage['abstract.js'][466]++;
      prop = prop.value;
    }
    _$jscoverage['abstract.js'][468]++;
    prop = {value: prop, configurable: true, writable: true, type: typeof prop, enumerable: true};
  }
  _$jscoverage['abstract.js'][479]++;
  Abstract.utility.extend(prop, this.meta? this.meta.get("defaults"): {});
  _$jscoverage['abstract.js'][482]++;
  try {
    _$jscoverage['abstract.js'][483]++;
    Object.defineProperty(obj, key, prop);
  }
  catch (error) {
    _$jscoverage['abstract.js'][486]++;
    switch (error.type) {
    case "redefine_disallowed":
      _$jscoverage['abstract.js'][489]++;
      console.error("Cannot redefine [%s] property %s", key, obj.name? "for [" + obj.name + "] model": "");
      _$jscoverage['abstract.js'][490]++;
      break;
    default:
      _$jscoverage['abstract.js'][493]++;
      console.error(error.message);
      _$jscoverage['abstract.js'][494]++;
      break;
    }
  }
  _$jscoverage['abstract.js'][499]++;
  if (obj._meta && obj._meta.schema) {
    _$jscoverage['abstract.js'][500]++;
    obj._meta.schema[key] = prop;
  }
  _$jscoverage['abstract.js'][504]++;
  if (key === "constructor") {
  }
  _$jscoverage['abstract.js'][507]++;
  if (key === "prototype") {
  }
  _$jscoverage['abstract.js'][510]++;
  if (key === "__proto__") {
  }
  _$jscoverage['abstract.js'][513]++;
  if (prop.hasOwnProperty("watch")) {
  }
  _$jscoverage['abstract.js'][518]++;
  if (prop.hasOwnProperty("wrap")) {
  }
  _$jscoverage['abstract.js'][523]++;
  if (prop.hasOwnProperty("properties")) {
    _$jscoverage['abstract.js'][524]++;
    Abstract.utility.each(prop.properties, (function (fn, key, array) {
  _$jscoverage['abstract.js'][525]++;
  if ("function" === typeof prop.value) {
    _$jscoverage['abstract.js'][526]++;
    Object.defineProperty(prop.value, key, {value: fn, configurable: true, enumerable: true});
  }
}));
  }
  _$jscoverage['abstract.js'][536]++;
  return obj;
}), configurable: true, enumerable: true}, addPrototype: {get: (function () {
  _$jscoverage['abstract.js'][549]++;
  return (function (context, proto) {
  _$jscoverage['abstract.js'][550]++;
  return Abstract.prototype.use.call(context, proto);
});
}), configurable: false, enumerable: false}, getPropertyDescriptors: {value: (function getPropertyDescriptors(target, options) {
  _$jscoverage['abstract.js'][564]++;
  var _extend = require("util")._extend;
  _$jscoverage['abstract.js'][566]++;
  options = _extend({include_inherited: false, default_descriptor: {writable: true, enumerable: true, configurable: true}}, options);
  _$jscoverage['abstract.js'][575]++;
  var response = {};
  _$jscoverage['abstract.js'][577]++;
  for (var key in target) {
    _$jscoverage['abstract.js'][579]++;
    if (Object.getOwnPropertyDescriptor(target, key)) {
      _$jscoverage['abstract.js'][580]++;
      response[key] = Object.getOwnPropertyDescriptor(target, key);
    }
    else {
      _$jscoverage['abstract.js'][583]++;
      if (options.include_inherited) {
        _$jscoverage['abstract.js'][584]++;
        response[key] = _extend(options.default_descriptor, {value: target[key]});
      }
    }
}
  _$jscoverage['abstract.js'][590]++;
  return response;
}), configurable: false, enumerable: false}, extendPrototype: {value: (function extendPrototype() {
  _$jscoverage['abstract.js'][603]++;
  var result = {};
  _$jscoverage['abstract.js'][604]++;
  var list = arguments;
  _$jscoverage['abstract.js'][606]++;
  Object.keys(arguments).forEach((function (index) {
  _$jscoverage['abstract.js'][610]++;
  if (index == 0) {
    _$jscoverage['abstract.js'][611]++;
    result.__proto__ = list[index];
  }
  else {
    _$jscoverage['abstract.js'][613]++;
    var depth = result;
    _$jscoverage['abstract.js'][615]++;
    for (i = 1; i <= index; i++) {
      _$jscoverage['abstract.js'][616]++;
      depth = depth.__proto__;
}
    _$jscoverage['abstract.js'][619]++;
    depth.__proto__ = list[index];
  }
}));
  _$jscoverage['abstract.js'][626]++;
  return Abstract.getPrototypeOf(result);
}), configurable: false, enumerable: false, writable: true}, getPrototypeOf: {value: (function getPrototypeOf(obj) {
  _$jscoverage['abstract.js'][640]++;
  if (Object.getPrototypeOf) {
    _$jscoverage['abstract.js'][641]++;
    return Object.getPrototypeOf(obj) || undefined;
  }
  else {
    _$jscoverage['abstract.js'][642]++;
    if (obj.__proto__) {
      _$jscoverage['abstract.js'][643]++;
      return obj.__proto__ || undefined;
    }
    else {
      _$jscoverage['abstract.js'][644]++;
      if (obj.constructor.prototype) {
        _$jscoverage['abstract.js'][645]++;
        return constructor.prototype || undefined;
      }
      else {
        _$jscoverage['abstract.js'][647]++;
        return undefined;
      }
    }
  }
}), configurable: true, enumerable: false, writable: true}, setPrototypeOf: {value: (function setPrototypeOf(obj, proto) {
  _$jscoverage['abstract.js'][662]++;
  if (Object.setPrototypeOf) {
    _$jscoverage['abstract.js'][663]++;
    Object.setPrototypeOf(obj, proto);
  }
  else {
    _$jscoverage['abstract.js'][664]++;
    if (obj.__proto__) {
      _$jscoverage['abstract.js'][665]++;
      obj.__proto__ = obj;
    }
  }
  _$jscoverage['abstract.js'][667]++;
  return obj;
}), configurable: true, enumerable: false, writable: true}, utility: {value: require("./utility"), configurable: true, enumerable: false, writable: true}, version: {value: require("../package").version, enumerable: false, writable: false, configurable: false}});
_$jscoverage['abstract.js'][695]++;
Object.defineProperties(Abstract.prototype, {get: {get: (function () {
  _$jscoverage['abstract.js'][706]++;
  return (function get() {
  _$jscoverage['abstract.js'][707]++;
  return require("object-settings").prototype? require("object-settings").prototype.get.apply(this, arguments): Abstract.utility.noop();
});
}), configurable: true, enumerable: true}, set: {get: (function () {
  _$jscoverage['abstract.js'][724]++;
  return (function set() {
  _$jscoverage['abstract.js'][725]++;
  return require("object-settings").prototype? require("object-settings").prototype.set.apply(this, arguments): Abstract.utility.noop();
});
}), configurable: true, enumerable: true}, use: {value: (function use(source) {
  _$jscoverage['abstract.js'][755]++;
  if ("function" === typeof source && source.name && this.get("required." + source.name)) {
    _$jscoverage['abstract.js'][756]++;
    return this;
  }
  _$jscoverage['abstract.js'][759]++;
  try {
    _$jscoverage['abstract.js'][762]++;
    source.__proto__ = this.__proto__;
    _$jscoverage['abstract.js'][765]++;
    this.__proto__ = source;
    _$jscoverage['abstract.js'][768]++;
    if ("function" === typeof source && source.name) {
      _$jscoverage['abstract.js'][769]++;
      this.set("required." + source.name, true);
    }
  }
  catch (error) {
    _$jscoverage['abstract.js'][774]++;
    if (error.message === "Cyclic __proto__ value") {
    }
  }
  _$jscoverage['abstract.js'][777]++;
  return this;
}), configurable: true, enumerable: true, writable: true}, mixin: {get: (function () {
  _$jscoverage['abstract.js'][794]++;
  return require("./utility").mixin.bind(this, this);
}), configurable: true, enumerable: false}, require: {value: (function use(name) {
  _$jscoverage['abstract.js'][822]++;
  if ("string" === typeof name) {
    _$jscoverage['abstract.js'][824]++;
    try {
      _$jscoverage['abstract.js'][827]++;
      require.resolve(name);
      _$jscoverage['abstract.js'][830]++;
      if (this.get("required." + name)) {
        _$jscoverage['abstract.js'][831]++;
        return this;
      }
      _$jscoverage['abstract.js'][834]++;
      var source = require(name);
    }
    catch (error) {
      _$jscoverage['abstract.js'][836]++;
      var source = null;
    }
  }
  _$jscoverage['abstract.js'][840]++;
  if (! source) {
    _$jscoverage['abstract.js'][841]++;
    return this;
  }
  _$jscoverage['abstract.js'][844]++;
  try {
    _$jscoverage['abstract.js'][847]++;
    source.__proto__ = this.__proto__;
    _$jscoverage['abstract.js'][850]++;
    this.__proto__ = source;
    _$jscoverage['abstract.js'][853]++;
    this.set("required." + name, true);
  }
  catch (error) {
    _$jscoverage['abstract.js'][855]++;
    console.error(error.message);
  }
  _$jscoverage['abstract.js'][857]++;
  return this;
}), configurable: true, enumerable: true, writable: true}, properties: {get: (function () {
  _$jscoverage['abstract.js'][871]++;
  return (function properties(properties) {
  _$jscoverage['abstract.js'][872]++;
  if (arguments.length === 1) {
    _$jscoverage['abstract.js'][873]++;
    return Abstract.defineProperties(this, arguments[0]);
  }
  else {
    _$jscoverage['abstract.js'][875]++;
    arguments[0] = arguments[0] || {};
    _$jscoverage['abstract.js'][876]++;
    return Abstract.defineProperties(arguments[0], arguments[1]);
  }
});
}), configurable: true, enumerable: false}});
_$jscoverage['abstract.js'].source = ["/**"," * Create custom objects and methods by aggregating and abstracting esources."," *"," * @version 0.0.1"," * @module abstract"," * @constractor"," */","function Abstract() {","","  // Create Model Builder context","  if( 'function' === typeof arguments[0] ) {","    return Abstract.createModel( arguments[0] );","  }","","  // Create Plain object","  if( 'object' === typeof arguments[0] ) {","    return Abstract.create( arguments[0], arguments[1] );","  }","","  // Return for context","  return this;","","}","","/**"," * Constructor Properties"," *"," * The following properties are available within the constructor factory or by"," * referencing the constructor."," *"," */","Object.defineProperties( module.exports = Abstract, {","  get: {","    /**","     * Get a key from current context's _meta","     *","     * @todo Migrate to use object-settings once Abstract core is ready.","     * @temp","     * @param key","     * @returns {string}","     */","    get: function() {","      return function get() {","        return require( 'object-settings' ).prototype ? require( 'object-settings' ).prototype.get.apply( Abstract, arguments ) : Abstract.utility.noop();","      }","    },","    configurable: true,","    enumerable: false","  },","  set: {","    /**","     * Set a key and value to current's context's _meta","     *","     * @todo Migrate to use object-settings once Abstract core is ready.","     * @temp","     * @param key","     * @param value","     * @returns {string}","     */","    get: function() {","      return function set() {","        return require( 'object-settings' ).prototype ? require( 'object-settings' ).prototype.set.apply( Abstract, arguments ) : Abstract.utility.noop();","      }","    },","    configurable: true,","    enumerable: false","  },","  mixin: {","    /**","     *","     * @returns {Function}","     */","    value: function( obj ) {","","      var target = obj || this;","","      Object.keys( Abstract ).forEach( function( key ) {","        target[ key ] = target[ key ] || Abstract[ key ];","      });","","      return target;","","    },","    configurable: true,","    enumerable: false","  },","  apply: {","    /**","     * Instantiate within a custom context.","     *","     * @params target {Object} Target object to use as the context.","     * @params arguments {Object} Arguments to instantiate with.","     * @returns {Function}","     */","    get: function() {","      return function apply( target, arguments ) {","        return Abstract.prototype.mixin( target, target );","      }","    },","    configurable: true,","    enumerable: false","  },","  create: {","    /**","     * Creates a new object with the specified prototype object and properties.","     * Copy the functions from the superclass prototype to the subclass prototype.","     *","     * @param proto {Object|null} Superclass to use as prototype for new object.","     */","    value: function create( proto, properties ) {","","      // If first argument is a method, assume we are making a model","      if( 'function' === typeof proto ) {","        return Abstract.createModel( proto, properties );","      }","","      var Instance = Object.create( proto );","","      Abstract.defineProperties( Instance, properties );","","      // Return for context","      return Instance;","","    },","    configurable: true,","    writable: false,","    enumerable: true","  },","  createModel: {","    /**","     * Create Model Environment","     *","     * This method expects a function to be passed to be used as the Model Builder.","     * Within the context of the Model Builder new methods become available.","     *","     * Removed for now:","     * Abstract.copyProperties( Model.create, Model );","     * Abstract.addPrototype( Model.create, Model );","     *","     */","    value: function createModel( Model ) {","      // console.log( 'createModel' );","","      // Call Constructor, pass in some arguments maybe","      if( 'function' !== typeof Model ) {","        return new Error( 'Abstract.createModel() requires a callable method as the first argument.' );","      }","","      if( Model.is_constructed ) {","        //return Model.create();","      }","","      // If Instantiator already bound","      if( 'function' === typeof Model.create &amp;&amp; model.create.name === 'createInstance' ) {","        return Model.create;","      }","","      // Create dynamically-created Model Constructor context","      Abstract.defineProperties( Model, {","        use: {","          value: Abstract.prototype.use.bind( Model ),","          configurable: true,","          enumerable: false,","          writable: true","        },","        require: {","          value: Abstract.prototype.require.bind( Model ),","          configurable: true,","          writable: true,","          enumerable: false","        },","        get: {","          value: Abstract.prototype.get.bind( Model ),","          configurable: true,","          enumerable: false,","          writable: true","        },","        set: {","          value: Abstract.prototype.set.bind( Model ),","          configurable: true,","          enumerable: false,","          writable: true","        },","        properties: {","          value: Abstract.prototype.properties.bind( Model ),","          configurable: true,","          enumerable: false,","          writable: true","        },","        defineConstructor: {","          value: Abstract.defineConstructor.bind( Model, Model ),","          configurable: true,","          enumerable: false,","          writable: true","        },","        defineProperties: {","          value: Abstract.defineProperties.bind( Model ),","          configurable: true,","          enumerable: false,","          writable: true","        },","        defineProperty: {","          value: Abstract.defineProperty.bind( Model ),","          configurable: true,","          enumerable: false,","          writable: true","        }","      });","","      // Create Instance Prototype from Abstract Prototype","      Model.prototype = Object.create( Abstract.prototype );","","      // Instantiation Method","      Object.defineProperty( Model, 'create', {","        value: function createInstance() { return Abstract.createInstance.apply( Model, arguments ); },","        enumerable: true,","        configurable: true,","        writable: true","      })","","      // Run Builder in Model context","      Model.call( Model, Model, Model.prototype );","","      // Set custom name for creating method if available","      var _custom_name = undefined;","","      if( Model._instantiator &amp;&amp; Object.keys( Model._instantiator ).length ) {","        Model._instantiator.forEach( function( fn ) { _custom_name = fn.name || _custom_name; });","      }","","      // Context wrapper for instantiation","      if( _custom_name &amp;&amp; 'string' === typeof _custom_name ) {","","        Object.defineProperty( Model, _custom_name, {","          value: Model.create,","          enumerable: true,","          configurable: true,","          writable: true","        });","","        // Hide \"create()\" since we have a cool custom name","        Object.defineProperty( Model, 'create', {","          enumerable: false","        })","","      }","","      // Mark model as constructred","      Object.defineProperty( Model, 'is_constructed', {","        value: Model.name,","        enumerable: false,","        configurable: true,","        writable: true","      });","","      // Return constructor function","      return Model;","","    },","    configurable: true,","    enumerable: true,","    writable: true","  },","  copyProperties: {","    /**","     * Iterate through target's properties and reference them into the source object","     *","     * @param target {Object}","     * @param source {Object}","     * @returns {Object} Target object.","     */","    value: function referenceProperties( target, source ) {","","      Object.getOwnPropertyNames( source ).forEach( function( key ) {","        var descriptor = Object.getOwnPropertyDescriptor( source, key );","","        if( descriptor.enumerable ) {","          Object.defineProperty( target, key, {","            enumerable: true,","            value: source[ key ],","            writable: descriptor.writable,","            configurable: descriptor.configurable","          });","        }","","      });","","      return target;","","    },","    configurable: true,","    enumerable: false,","    writable: true","  },","  createInstance: {","    /**","     * Create Instance","     *","     * It's rather imperative that this method be run in context.","     *","     * @returns {*}","     */","    value: function createInstance() {","      // console.log( 'createInstance' );","","      var args = arguments;","","      // Create the instance","      var Instance = Object.create( this.prototype );","","      // Not very elegant... @todo Revise prototype chain logic if this causes issues.","      for( var key in this.__proto__ ) {","","        // Only check own properties of model for inheritence; all \"use()'d\" properties will be non-enumerable","        var is_enumerable = this.propertyIsEnumerable( key );","","        Object.defineProperty( Instance, key, {","          value: this.__proto__[key],","          enumerable: is_enumerable,","          writable: true,","          configurable: true","        });","      }","","      // Set instance ID and Schema scaffolding","      Instance.set({","        id: Abstract.utility.hash( null, { random: true }),","        model: this.name || 'Model',","        schema: {","          id: [ '#', Instance.get( 'id' ) || this.name || 'Model' ].join( '' ),","          type: 'object',","          properties: {}","        }","      });","","      // Call createInstance","      if( this._instantiator &amp;&amp; Object.keys( this._instantiator ).length ) {","        this._instantiator.forEach( function( fn ) { fn.apply( Instance, args ); });","      }","","      return Instance;","","    },","    configurable: true,","    enumerable: false,","    writable: true","  },","  defineConstructor: {","    /**","     * Bind createInstance to Context","     *","     * @method defineConstructor","     * @param target","     * @param fn","     */","    value: function defineConstructor( target, fn ) {","      // console.log( 'defineConstructor' );","","      if( target._instantiator &amp;&amp; Object.keys( target._instantiator ).length ) {","        target._instantiator.push( 'function' === typeof fn ? fn : Abstract.utility.noop );","        return target;","      }","","      Object.defineProperty( target, '_instantiator', {","        value: [ 'function' === typeof fn ? fn : Abstract.utility.noop ],","        configurable: true,","        enumerable: false,","        writable: true","      });","","      // Set instantiator using custom name","      if( fn.name !== 'create' ) {","","        Object.defineProperty( target, fn.name, {","          get: function() { return target.create; },","          enumerable: true,","          configurable: true","        });","","      }","","      // Context wrapper for instantiation","      return function createInstance() {","        return Abstract.createInstance.apply( target, arguments );;","      }","","    },","    configurable: true,","    enumerable: false,","    writable: true","  },","  defineProperties: {","    /**","     * Configure multiple object properties.","     *","     * @param obj","     * @param props","     * @returns {*}","     */","    value: function defineProperties( target, props ) {","","      if( !props &amp;&amp; 'object' === typeof props &amp;&amp; this.hasOwnProperty( 'defineConstructor' ) ) {","        props = target;","        target = this;","      }","","      if( !props || 'object' !== typeof props ) {","        return target || {};","      }","","      Object.keys( props ).forEach( function( key ) {","        Abstract.defineProperty( target, key, props[ key ] );","      });","","      return target;","    },","    configurable: true,","    enumerable: true,","    writable: true","  },","  defineProperty: {","    /**","     * Configure single object property.","     *","     * @param obj","     * @param key","     * @param prop","     * @returns {*}","     */","    value: function defineProperty( obj, key, prop ) {","","      // @issue https://github.com/UsabilityDynamics/abstract/issues/2","      if( !prop ) {","","        // If \"obj\" was omitted we assue we are binding to context","        if( 'string' === typeof obj &amp;&amp; 'object' === typeof key &amp;&amp; this.hasOwnProperty( 'defineConstructor' ) ) {","          obj = this;","          key = obj;","          prop = key;","        } else {","          prop = {};","        }","","      }","","      if( !obj ) {","        obj = {};","      }","","      // Handle Abstract instances because they have a get and set method inherited form Object Settings","      if( prop instanceof Abstract &amp;&amp; prop.get &amp;&amp; prop.set &amp;&amp; prop._meta ) {","","        prop = {","          value: prop,","          configurable: true,","          writable: true,","          type: typeof prop,","          enumerable: true","        }","","      }","","      // General Descriptors for basic data","      if( 'object' !== typeof prop || ( !prop.get &amp;&amp; !prop.set &amp;&amp; !prop.value ) ) {","","        if( prop.value ) { prop = prop.value; }","","        prop = {","          value: prop,","          configurable: true,","          writable: true,","          type: typeof prop,","          enumerable: true","        }","","      }","","      // Apply Defaults","      Abstract.utility.extend( prop, this.meta ? this.meta.get( 'defaults' ) : {} );","","      // Store in Schema and add to Object actual","      try {","        Object.defineProperty( obj, key, prop );","      } catch( error ) {","","        switch( error.type ) {","","          case 'redefine_disallowed':","            console.error( 'Cannot redefine [%s] property %s', key, obj.name ? 'for [' + obj.name + '] model' : '' );","          break;","","          default:","            console.error( error.message );","          break;","        }","","      }","","      if( obj._meta &amp;&amp; obj._meta.schema ) {","        obj._meta.schema[ key ] = prop;","      }","","      // Handle constructor property","      if( key === 'constructor' ) {}","","      // Handle prototypal properties","      if( key === 'prototype' ) {}","","      // Handle __proto__ property","      if( key === '__proto__' ) {}","","      // Monitor a Property.","      if( prop.hasOwnProperty( 'watch' ) ) {","        // Abstract.utility.watch( prop, this.watcher ); // @todo Not sure which function to pipeline to.","      }","","      // Wrap the property into a getter and setter","      if( prop.hasOwnProperty( 'wrap' ) ) {","        // @todo","      }","","        // Add Properties to (presumably) constructor.","      if( prop.hasOwnProperty( 'properties' ) ) {","        Abstract.utility.each( prop.properties, function( fn, key, array ) {","          if( 'function' === typeof prop.value ) {","            Object.defineProperty( prop.value, key, {","              value: fn,","              configurable: true,","              enumerable: true","            });","            //Abstract.use( fn, obj );","          }","        });","      }","","      return obj;","","    },","    configurable: true,","    enumerable: true","  },","  addPrototype: {","    /**","     * Allow Prototype useage method to be ran in custom context for static calls","     *","     * @returns {Function}","     */","    get: function() {","      return function( context, proto ) {","        return Abstract.prototype.use.call( context, proto );","      }","    },","    configurable: false,","    enumerable: false","  },","  getPropertyDescriptors: {","    /**","     * Allow Prototype useage method to be ran in custom context for static calls","     *","     * @returns {Function}","     */","    value: function getPropertyDescriptors( target, options ) {","","      var _extend = require( 'util' )._extend;","","      options = _extend({","        include_inherited: false,","        default_descriptor: {","          writable: true,","          enumerable: true,","          configurable: true","        }","      }, options );","","      var response = {}","","      for( var key in target ) {","","        if( Object.getOwnPropertyDescriptor( target, key ) ) {","          response[ key ] = Object.getOwnPropertyDescriptor( target, key );","        } else {","","          if( options.include_inherited ) {","            response[ key ] = _extend( options.default_descriptor, { value: target[key] });","          }","","        }","      }","","      return response;","","    },","    configurable: false,","    enumerable: false","  },","  extendPrototype: {","    /**","     * Allow Prototype useage method to be ran in custom context for static calls","     *","     * @returns {Function}","     */","    value: function extendPrototype() {","      var result = {};","      var list = arguments;","","      Object.keys( arguments ).forEach( function( index ) {","        //Abstract.utility.extend( result, list[index] );","        //Abstract.utility.extend( result, Object.create( list[index] ) );","","        if( index == 0 ) {","          result.__proto__ = list[index];","        } else {","          var depth = result;","","          for( i=1; i&lt;=index; i++ ) {","            depth = depth.__proto__;","          }","","          depth.__proto__ = list[index];","","        }","","      });","","      // Get immediate prototype","      return Abstract.getPrototypeOf( result );","","    },","    configurable: false,","    enumerable: false,","    writable: true","  },","  getPrototypeOf: {","    /**","     * Cross Browser Compatible prototype getter.","     *","     * @param obj","     */","    value: function getPrototypeOf( obj ) {","      if( Object.getPrototypeOf ) {","        return Object.getPrototypeOf( obj ) || undefined;","      } else if( obj.__proto__ ) {","        return obj.__proto__ || undefined;","      } else if( obj.constructor.prototype ) {","        return constructor.prototype || undefined;","      } else {","        return undefined;","      }","    },","    configurable: true,","    enumerable: false,","    writable: true","  },","  setPrototypeOf: {","    /**","     * Basic Wrapper - will be more fault-tolerant in future.","     *","     * @param obj","     * @param proto","     */","    value: function setPrototypeOf( obj, proto ) {","      if( Object.setPrototypeOf ) {","        Object.setPrototypeOf( obj, proto );","      } else if( obj.__proto__ ) {","        obj.__proto__ = obj;","      }","      return obj;","    },","    configurable: true,","    enumerable: false,","    writable: true","  },","  utility: {","    value: require( './utility' ),","    configurable: true,","    enumerable: false,","    writable: true","  },","  version: {","    value: require( '../package' ).version,","    enumerable: false,","    writable: false,","    configurable: false","  }","});","","/**"," * Instance Properties"," *"," * The follow properties are available to each instance created from a constructor."," * Some of the Abstract Static methods reference the prototypal methods."," * Prototyal methods all work with the existing context."," *"," */","Object.defineProperties( Abstract.prototype, {","  get: {","    /**","     * Get a key from current context's _meta","     *","     * @todo Migrate to use object-settings once Abstract core is ready.","     * @temp","     * @param key","     * @returns {string}","     */","    get: function() {","      return function get() {","        return require( 'object-settings' ).prototype ? require( 'object-settings' ).prototype.get.apply( this, arguments ) : Abstract.utility.noop();","      }","    },","    configurable: true,","    enumerable: true","  },","  set: {","    /**","     * Set a key and value to current's context's _meta","     *","     * @todo Migrate to use object-settings once Abstract core is ready.","     * @temp","     * @param key","     * @param value","     * @returns {string}","     */","    get: function() {","      return function set( ) {","        return require( 'object-settings' ).prototype ? require( 'object-settings' ).prototype.set.apply( this, arguments ) : Abstract.utility.noop();","      }","    },","    configurable: true,","    enumerable: true","  },","  use: {","    /**","     * Inserts an object/prototype into a target object.","     *","     * @todo Try using in some instances.","     * require( 'util' ).inherits( this, source );","     *","     * @param target","     * @param proto","     * @returns {*}","     */","    value: function use( source ) {","","      // @todo Implement to mock util.inherts()","      /*","      Object.defineProperty( 'super_', {","        value: source,","        enumerable: false,","        configurable: false,","        writable: true","      });","      */","","      // Check if already required to prevent Cyclic __proto__ error.","      if( 'function' === typeof source &amp;&amp; source.name &amp;&amp; this.get( 'required.' + source.name ) ) {","        return this;","      }","","      try {","","        // Move current immediate prototype object into new protototype object","        source.__proto__ = this.__proto__;","","        // Insert new prototype into chain.","        this.__proto__ = source;","","        // Note required","        if( 'function' === typeof source &amp;&amp; source.name ) {","          this.set( 'required.' + source.name, true );","        }","","      } catch( error ) {","        //console.error( error.message );","        if( error.message === 'Cyclic __proto__ value' ) {}","      }","","      return this;","","    },","    configurable: true,","    enumerable: true,","    writable: true","  },","  mixin: {","    /**","     * Mixin current prototype into target object","     *","     * Honors property descriptor settings, if available.","     *","     * @param target","     * @param source","     */","    get: function() {","      return require( './utility' ).mixin.bind( this, this );","    },","    configurable: true,","    enumerable: false","  },","  require: {","    /**","     * Requires and inserts an object/prototype into this context object.","     *","     * @example","     *","     *    require( 'abstract' ).createModel( function MyAbstraction( model ) {","     *","     *      this.require( 'util' );","     *      this.require( 'async' );","     *","     *      this.auto({}); // -&gt; [Function]","     *","     *    });","     *","     * @todo Try using in some instances.","     *    require( 'util' ).inherits( this, source );","     *","     * @param name {String} Module name or file path to require.","     * @returns {*}","     */","    value: function use( name ) {","","      if( 'string' === typeof name ) {","","        try {","","          // Resolve module","          require.resolve( name );","","          // Check if already required to prevent Cyclic __proto__ error.","          if( this.get( 'required.' + name ) ) {","            return this;","          }","","          var source = require( name );","","        } catch( error ) { var source = null }","","      }","","      if( !source ) {","        return this;","      }","","      try {","","        // Move current immediate prototype object into new protototype object","        source.__proto__ = this.__proto__;","","        // Insert new prototype into chain.","        this.__proto__ = source;","","        // Add meta note about required source","        this.set( 'required.' + name, true );","","      } catch( error ) { console.error( error.message ); }","","      return this;","","    },","    configurable: true,","    enumerable: true,","    writable: true","  },","  properties: {","    /**","     * Get / Set Properties","     *","     * @returns {Function}","     */","    get: function() {","      return function properties( properties ) {","        if( arguments.length === 1 ) {","          return Abstract.defineProperties( this, arguments[0] );","        } else {","          arguments[0] = arguments[0] || {};","          return Abstract.defineProperties( arguments[0], arguments[1] );","        }","      }","    },","    configurable: true,","    enumerable: false","  }","});","","",""];