abstract
Version:
Abstraction of JavaScript Objects.
648 lines • 50.8 kB
JavaScript
/* 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 && 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 && Object.keys( Model._instantiator ).length ) {"," Model._instantiator.forEach( function( fn ) { _custom_name = fn.name || _custom_name; });"," }",""," // Context wrapper for instantiation"," if( _custom_name && '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 && 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 && 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 && 'object' === typeof props && 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 && 'object' === typeof key && 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 && prop.get && prop.set && 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 && !prop.set && !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 && 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<=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 && source.name && 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 && 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({}); // -> [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"," }","});","","",""];