UNPKG

bugcore

Version:

bugcore is a JavaScript library that provides a foundational architecture for object oriented JS

704 lines (587 loc) 20.7 kB
/* * Copyright (c) 2016 airbug Inc. http://airbug.com * * bugcore may be freely distributed under the MIT license. */ //------------------------------------------------------------------------------- // Annotations //------------------------------------------------------------------------------- //@Export('BugCore') //@Require('ArgUtil') //@Require('ArrayUtil') //@Require('Bug') //@Require('Class') //@Require('Collection') //@Require('Collections') //@Require('Config') //@Require('ConfigChain') //@Require('Constructor') //@Require('DataUtil') //@Require('DateUtil') //@Require('Deferred') //@Require('Event') //@Require('EventDispatcher') //@Require('EventPropagator') //@Require('EventReceiver') //@Require('Exception') //@Require('Flows') //@Require('Func') //@Require('FunctionUtil') //@Require('Handler') //@Require('HashStore') //@Require('HashTable') //@Require('HashUtil') //@Require('IArrayable') //@Require('IClone') //@Require('ICollection') //@Require('IEquals') //@Require('IHashCode') //@Require('IIterable') //@Require('IIterator') //@Require('IJsonable') //@Require('IList') //@Require('IMap') //@Require('IObjectable') //@Require('IProxy') //@Require('ISet') //@Require('IdGenerator') //@Require('Implementable') //@Require('Interface') //@Require('List') //@Require('Lock') //@Require('Map') //@Require('MathUtil') //@Require('Obj') //@Require('ObjectBuilder') //@Require('ObjectUtil') //@Require('Pair') //@Require('Promise') //@Require('Promises') //@Require('Properties') //@Require('PropertiesChain') //@Require('Proxy') //@Require('ProxyMethod') //@Require('ProxyObject') //@Require('ProxyProperty') //@Require('Queue') //@Require('RandomUtil') //@Require('RateLimiter') //@Require('Resolver') //@Require('Semaphore') //@Require('Set') //@Require('Stack') //@Require('Stream') //@Require('StringBuilder') //@Require('StringUtil') //@Require('Striped') //@Require('Suppliers') //@Require('Throwable') //@Require('Throwables') //@Require('Tracer') //@Require('TypeUtil') //@Require('ValidationMachine') //@Require('Validator') //@Require('ValidatorGroup') //@Require('ValidatorProcessor') //------------------------------------------------------------------------------- // Context //------------------------------------------------------------------------------- require('bugpack').context('*', function(bugpack) { //------------------------------------------------------------------------------- // BugPack //------------------------------------------------------------------------------- var ArgUtil = bugpack.require('ArgUtil'); var ArrayUtil = bugpack.require('ArrayUtil'); var Bug = bugpack.require('Bug'); var Class = bugpack.require('Class'); var Collection = bugpack.require('Collection'); var Collections = bugpack.require('Collections'); var Config = bugpack.require('Config'); var ConfigChain = bugpack.require('ConfigChain'); var Constructor = bugpack.require('Constructor'); var DataUtil = bugpack.require('DataUtil'); var DateUtil = bugpack.require('DateUtil'); var Deferred = bugpack.require('Deferred'); var Event = bugpack.require('Event'); var EventDispatcher = bugpack.require('EventDispatcher'); var EventPropagator = bugpack.require('EventPropagator'); var EventReceiver = bugpack.require('EventReceiver'); var Exception = bugpack.require('Exception'); var Flows = bugpack.require('Flows'); var Func = bugpack.require('Func'); var FunctionUtil = bugpack.require('FunctionUtil'); var Handler = bugpack.require('Handler'); var HashStore = bugpack.require('HashStore'); var HashTable = bugpack.require('HashTable'); var HashUtil = bugpack.require('HashUtil'); var IArrayable = bugpack.require('IArrayable'); var IClone = bugpack.require('IClone'); var ICollection = bugpack.require('ICollection'); var IEquals = bugpack.require('IEquals'); var IHashCode = bugpack.require('IHashCode'); var IIterable = bugpack.require('IIterable'); var IIterator = bugpack.require('IIterator'); var IJsonable = bugpack.require('IJsonable'); var IList = bugpack.require('IList'); var IMap = bugpack.require('IMap'); var IObjectable = bugpack.require('IObjectable'); var IProxy = bugpack.require('IProxy'); var ISet = bugpack.require('ISet'); var IdGenerator = bugpack.require('IdGenerator'); var Implementable = bugpack.require('Implementable'); var Interface = bugpack.require('Interface'); var List = bugpack.require('List'); var Lock = bugpack.require('Lock'); var Map = bugpack.require('Map'); var MathUtil = bugpack.require('MathUtil'); var Obj = bugpack.require('Obj'); var ObjectBuilder = bugpack.require('ObjectBuilder'); var ObjectUtil = bugpack.require('ObjectUtil'); var Pair = bugpack.require('Pair'); var Promise = bugpack.require('Promise'); var Promises = bugpack.require('Promises'); var Properties = bugpack.require('Properties'); var PropertiesChain = bugpack.require('PropertiesChain'); var Proxy = bugpack.require('Proxy'); var ProxyMethod = bugpack.require('ProxyMethod'); var ProxyObject = bugpack.require('ProxyObject'); var ProxyProperty = bugpack.require('ProxyProperty'); var Queue = bugpack.require('Queue'); var RandomUtil = bugpack.require('RandomUtil'); var RateLimiter = bugpack.require('RateLimiter'); var Resolver = bugpack.require('Resolver'); var Semaphore = bugpack.require('Semaphore'); var Set = bugpack.require('Set'); var Stack = bugpack.require('Stack'); var Stream = bugpack.require('Stream'); var StringBuilder = bugpack.require('StringBuilder'); var StringUtil = bugpack.require('StringUtil'); var Striped = bugpack.require('Striped'); var Suppliers = bugpack.require('Suppliers'); var Throwable = bugpack.require('Throwable'); var Throwables = bugpack.require('Throwables'); var Tracer = bugpack.require('Tracer'); var TypeUtil = bugpack.require('TypeUtil'); var ValidationMachine = bugpack.require('ValidationMachine'); var Validator = bugpack.require('Validator'); var ValidatorGroup = bugpack.require('ValidatorGroup'); var ValidatorProcessor = bugpack.require('ValidatorProcessor'); //------------------------------------------------------------------------------- // Declare Class //------------------------------------------------------------------------------- /** * @class * @extends {Obj} */ var BugCore = Class.extend(Obj, { _name: 'BugCore', //------------------------------------------------------------------------------- // Constructor //------------------------------------------------------------------------------- /** * @constructs */ _constructor: function() { this._super(); //------------------------------------------------------------------------------- // Public Properties //------------------------------------------------------------------------------- /** * @type {function(new:ArgUtil)} */ this.ArgUtil = ArgUtil; /** * @type {function(new:ArrayUtil)} */ this.ArrayUtil = ArrayUtil; /** * @type {function(new:Bug)} */ this.Bug = Bug; /** * @type {function(new:Class)} */ this.Class = Class; /** * @type {function(new:Collection)} */ this.Collection = Collection; /** * @type {function(new:Collections)} */ this.Collections = Collections; /** * @type {function(new:Config)} */ this.Config = Config; /** * @type {function(new:ConfigChain)} */ this.ConfigChain = ConfigChain; /** * @type {function(new:Constructor)} */ this.Constructor = Constructor; /** * @type {function(new:DataUtil)} */ this.DataUtil = DataUtil; /** * @type {function(new:DateUtil)} */ this.DateUtil = DateUtil; /** * @type {function(new:Deferred)} */ this.Deferred = Deferred; /** * @type {function(new:Event)} */ this.Event = Event; /** * @type {function(new:EventDispatcher)} */ this.EventDispatcher = EventDispatcher; /** * @type {function(new:EventPropagator)} */ this.EventPropagator = EventPropagator; /** * @type {function(new:EventReceiver)} */ this.EventReceiver = EventReceiver; /** * @type {function(new:Exception)} */ this.Exception = Exception; /** * @type {function(new:Flows)} */ this.Flows = Flows; /** * @type {function(new:Func)} */ this.Func = Func; /** * @type {function(new:FunctionUtil)} */ this.FunctionUtil = FunctionUtil; /** * @type {function(new:Handler)} */ this.Handler = Handler; /** * @type {function(new:HashStore)} */ this.HashStore = HashStore; /** * @type {function(new:HashTable)} */ this.HashTable = HashTable; /** * @type {function(new:HashUtil)} */ this.HashUtil = HashUtil; /** * @type {function(new:IArrayable)} */ this.IArrayable = IArrayable; /** * @type {function(new:IClone)} */ this.IClone = IClone; /** * @type {function(new:ICollection)} */ this.ICollection = ICollection; /** * @type {function(new:IdGenerator)} */ this.IdGenerator = IdGenerator; /** * @type {function(new:IEquals)} */ this.IEquals = IEquals; /** * @type {function(new:IHashCode)} */ this.IHashCode = IHashCode; /** * @type {function(new:IIterable)} */ this.IIterable = IIterable; /** * @type {function(new:IIterator)} */ this.IIterator = IIterator; /** * @type {function(new:IJsonable)} */ this.IJsonable = IJsonable; /** * @type {function(new:IList)} */ this.IList = IList; /** * @type {function(new:IMap)} */ this.IMap = IMap; /** * @type {function(new:Implementable)} */ this.Implementable = Implementable; /** * @type {function(new:Interface)} */ this.Interface = Interface; /** * @type {function(new:IObjectable)} */ this.IObjectable = IObjectable; /** * @type {function(new:IProxy)} */ this.IProxy = IProxy; /** * @type {function(new:ISet)} */ this.ISet = ISet; /** * @type {function(new:List)} */ this.List = List; /** * @type {function(new:Lock)} */ this.Lock = Lock; /** * @type {function(new:Map)} */ this.Map = Map; /** * @type {function(new:MathUtil)} */ this.MathUtil = MathUtil; /** * @type {function(new:Obj)} */ this.Obj = Obj; /** * @type {function(new:ObjectBuilder)} */ this.ObjectBuilder = ObjectBuilder; /** * @type {function(new:ObjectUtil)} */ this.ObjectUtil = ObjectUtil; /** * @type {function(new:Pair)} */ this.Pair = Pair; /** * @type {function(new:Promise)} */ this.Promise = Promise; /** * @type {function(new:Promises)} */ this.Promises = Promises; /** * @type {function(new:Properties)} */ this.Properties = Properties; /** * @type {function(new:PropertiesChain)} */ this.PropertiesChain = PropertiesChain; /** * @type {function(new:Proxy)} */ this.Proxy = Proxy; /** * @type {function(new:ProxyMethod)} */ this.ProxyMethod = ProxyMethod; /** * @type {function(new:ProxyObject)} */ this.ProxyObject = ProxyObject; /** * @type {function(new:ProxyProperty)} */ this.ProxyProperty = ProxyProperty; /** * @type {function(new:Queue)} */ this.Queue = Queue; /** * @type {function(new:RandomUtil)} */ this.RandomUtil = RandomUtil; /** * @type {function(new:RateLimiter)} */ this.RateLimiter = RateLimiter; /** * @type {function(new:Resolver)} */ this.Resolver = Resolver; /** * @type {function(new:Semaphore)} */ this.Semaphore = Semaphore; /** * @type {function(new:Set)} */ this.Set = Set; /** * @type {function(new:Stack)} */ this.Stack = Stack; /** * @type {function(new:Stream)} */ this.Stream = Stream; /** * @type {function(new:StringBuilder)} */ this.StringBuilder = StringBuilder; /** * @type {function(new:StringUtil)} */ this.StringUtil = StringUtil; /** * @type {function(new:Striped)} */ this.Striped = Striped; /** * @type {function(new:Suppliers)} */ this.Suppliers = Suppliers; /** * @type {function(new:Throwable)} */ this.Throwable = Throwable; /** * @type {function(new:Throwables)} */ this.Throwables = Throwables; /** * @type {function(new:Tracer)} */ this.Tracer = Tracer; /** * @type {function(new:TypeUtil)} */ this.TypeUtil = TypeUtil; /** * @type {function(new:ValidationMachine)} */ this.ValidationMachine = ValidationMachine; /** * @type {function(new:Validator)} */ this.Validator = Validator; /** * @type {function(new:ValidatorGroup)} */ this.ValidatorGroup = ValidatorGroup; /** * @type {function(new:ValidatorProcessor)} */ this.ValidatorProcessor = ValidatorProcessor; }, //------------------------------------------------------------------------------- // Public Methods //------------------------------------------------------------------------------- assign: function(into, froms) { return ObjectUtil.assign.apply(ObjectUtil, arguments); }, /** * @param {(ICollection.<C> | Array.<C>)=} items * @return {Collection.<C>} * @template C */ collection: function(items) { return new Collection(items); }, /** * @param {(ICollection.<C> | Array.<C>)=} items * @return {List.<C>} * @template C */ list: function(items) { return new List(items); }, /** * @param {Map.<K, V>=} map * @return {Map.<K, V>} * @template K, V */ map: function(map) { return new Map(map); }, /** * @param {(Collection.<*> | Array.<*>)} items * @return {Queue.<C>} * @template C */ queue: function(items) { return new Queue(items); }, /** * @param {(ICollection.<C> | Array.<C>)=} items * @return {Set.<C>} * @template C */ set: function(items) { return new Set(items); }, /** * @param {(ICollection.<C> | Array.<C>)=} items * @return {Stack.<C>} * @template C */ stack: function(items) { return new Stack(items); } }); //------------------------------------------------------------------------------- // Private Static Properties //------------------------------------------------------------------------------- /** * @static * @private * @type {BugCore} */ BugCore.instance = null; //------------------------------------------------------------------------------- // Static Methods //------------------------------------------------------------------------------- /** * @static * @return {BugCore} */ BugCore.getInstance = function() { if (BugCore.instance === null) { BugCore.instance = new BugCore(); } return BugCore.instance; }; //------------------------------------------------------------------------------- // Static Proxy //------------------------------------------------------------------------------- Proxy.proxy(BugCore, Proxy.method(BugCore.getInstance), [ 'assign', 'collection', 'list', 'map', 'queue', 'set', 'stack' ]); //------------------------------------------------------------------------------- // Exports //------------------------------------------------------------------------------- bugpack.export('BugCore', BugCore); });