{"version":3,"sources":["jsdelivr-header.js","webpack:///webpack/universalModuleDefinition","/npm/transactional@1.0.0-0/webpack:/webpack/bootstrap 8b6cfedab0cff07a083b","webpack:///src/index.ts","webpack:///src/class.ts","webpack:///src/tools.ts","webpack:///src/record/index.ts","webpack:///src/record/transaction.ts","webpack:///src/toolkit/index.ts","webpack:///src/toolkit/tools.ts","webpack:///src/toolkit/mixins.ts","webpack:///src/toolkit/events.ts","webpack:///src/transactions.ts","webpack:///src/validation.ts","webpack:///src/references.ts","webpack:///src/record/define.ts","webpack:///src/record/attribute.ts","webpack:///src/record/nestedTypes.ts"],"names":[],"mappings":"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","file":"/npm/transactional@1.0.0-0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/transactional@1.0.0-0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Nested\"] = factory();\n\telse\n\t\troot[\"Nested\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/",null,"import { Class, mixins, define,  mixinRules, extendable } from './class.ts'\r\nimport { Record } from './record/index.ts'\r\n//import { Model } from './model.ts'\r\n//import { Collection } from './collection'\r\nimport * as tools from './tools.ts'\r\n\r\nexport {\r\n    Class, define, mixins, mixinRules, extendable,\r\n    Record,\r\n    //Model,\r\n    //Collection,\r\n    tools\r\n}; \n\n\n/** WEBPACK FOOTER **\n ** ./src/index.ts\n **/","/**\r\n * Mixins and @define metaprogramming class extensions\r\n * \r\n * Vlad Balin & Volicon, (c) 2016\r\n */\r\nimport { log, assign, omit, getPropertyDescriptor } from './tools.ts'\r\n\r\ntype MergeRule = 'merge' | 'pipe' | 'sequence' | 'reverse' | 'every' | 'some'\r\n\r\ninterface IMixinRules {\r\n    [ propertyName : string ] : MergeRule | IMixinRules\r\n}\r\n\r\nexport interface ClassDefinition {\r\n    properties? : PropertyDescriptorMap\r\n    mixins? : Array< Object >\r\n    mixinRules? : IMixinRules\r\n    [ name : string ] : any\r\n}\r\n\r\ndeclare function __extends( a, b )\r\n\r\nexport interface Factory {\r\n    create( ...args : any[] ) : {}\r\n}\r\n\r\nexport interface Extendable extends Factory {\r\n    define(spec? : ClassDefinition, statics? : {} ) : Extendable\r\n    extend(spec? : ClassDefinition, statics? : {} ) : Extendable\r\n    mixins( ...mixins : {}[] ) : Extendable\r\n    mixinRules( mixinRules : IMixinRules ) : Extendable\r\n}\r\n\r\n// Base class, holding metaprogramming class extensions\r\n// Supports mixins, and Class.define metaprogramming method.\r\nexport class Class {\r\n\r\n    // Generic class factory. May be overridden for abstract classes. Not inherited.\r\n    static create( a : any, b? : any, c? : any ) : Class {\r\n        return new (<any>this)( a, b, c );\r\n    }\r\n\r\n    protected static _mixinRules : IMixinRules = { properties : 'merge' };\r\n\r\n    /**\r\n     * Attach mixins to class prototype.\r\n     */\r\n    static mixins( ...mixins : {}[] ) : Extendable {\r\n        const proto      = this.prototype,\r\n              mergeRules : IMixinRules = this._mixinRules || {};\r\n\r\n        for( var i = mixins.length - 1; i >= 0; i-- ) {\r\n            const mixin = mixins[ i ];\r\n            if( mixin instanceof Array ) {\r\n                Class.mixins.apply( this, mixin );\r\n            }\r\n            else {\r\n                mergeProps( proto, mixin, mergeRules );\r\n            }\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    // Members merging policy is controlled by MyClass.mixinRules property.\r\n    // mixinRules are properly inherited and merged.\r\n    static mixinRules( mixinRules : IMixinRules ) : Extendable {\r\n        const Base = Object.getPrototypeOf( this.prototype ).constructor;\r\n\r\n        if( Base._mixinRules ) {\r\n            mergeProps( mixinRules, Base._mixinRules );\r\n        }\r\n\r\n        this._mixinRules = mixinRules;\r\n        return this;\r\n    }\r\n\r\n    // Autobinding helper to be used from constructors\r\n    bindAll( ...names : string [] )\r\n    bindAll() {\r\n        for( var i = 0; i < arguments.length; i++ ) {\r\n            const name = arguments[ i ];\r\n\r\n            this[ name ] = this[ name ].bind( this );\r\n        }\r\n    }\r\n\r\n    // Attach Class methods to existing constructors\r\n    static attach( ...args : any[] ) : void {\r\n        for (let Ctor of args) {\r\n            Ctor.create            = this.create;\r\n            Ctor.define            = this.define;\r\n            Ctor.mixins            = this.mixins;\r\n            Ctor.mixinRules        = this.mixinRules;\r\n            Ctor._mixinRules       = this._mixinRules;\r\n            Ctor.prototype.bindAll = this.prototype.bindAll;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Main metaprogramming method. May be overriden in subclasses to customize the behavior.   \r\n     * - Merge definition to the prototype.\r\n     * - Add native properties with descriptors from spec.properties to the prototype.\r\n     * - Prevents inheritance of 'create' factory method.\r\n     * - Assign mixinRules static property, and merge it with parent.\r\n     * - Adds mixins.\r\n     */\r\n    static define( definition : ClassDefinition = {}, staticProps? : {} ) : Extendable {\r\n        // That actually might happen when we're using @define decorator... \r\n        if( !this.define ){\r\n            log.error( \"[Class.define] Class must have class extensions to use @define decorator. Use '@extendable' before @define, or extend the base class with class extensions.\", definition );\r\n            return this;\r\n        }\r\n\r\n        // Obtain references to prototype and base class.\r\n        const proto = this.prototype,\r\n              BaseClass : Extendable = Object.getPrototypeOf( proto ).constructor;\r\n\r\n        // Make sure we don't inherit class factories.\r\n        if( BaseClass.create === this.create ) {\r\n            this.create = Class.create;\r\n        }\r\n\r\n        // Extract prototype properties from the definition.\r\n        const protoProps = omit( definition, 'properties', 'mixins', 'mixinRules' ),\r\n            { properties = <PropertyDescriptorMap> {}, mixins, mixinRules } = definition;\r\n\r\n        // Update prototype and statics.\r\n        assign( proto, protoProps );\r\n        assign( this, staticProps );\r\n\r\n        // Define native properties.\r\n        properties && Object.defineProperties( proto, properties );\r\n\r\n        // Apply mixins and mixin rules.\r\n        mixinRules && this.mixinRules( mixinRules );\r\n        mixins && this.mixins( mixins );\r\n\r\n        return this;\r\n    }\r\n\r\n    // Backbone-compatible extend method to be used in ES5 and for backward compatibility\r\n    static extend(spec? : ClassDefinition, statics? : {} ) : Extendable {\r\n        let Subclass : Extendable;\r\n\r\n        // If constructor function is given...\r\n        if( spec.constructor ){\r\n            // ...we need to manually call internal TypeScript __extend function. Hack! Hack!\r\n            Subclass = <any>spec.constructor; \r\n            __extends( Subclass, this );\r\n        }\r\n        // Otherwise, create the subclall in usual way.\r\n        else{\r\n            Subclass = class Subclass extends this {};\r\n        }\r\n\r\n        // And apply definitions\r\n        return Subclass.define( spec, statics );\r\n    }\r\n}\r\n\r\n// @mixinRules({ ... }) decorator\r\nexport function mixinRules( rules : IMixinRules ) {\r\n    return createDecorator( 'mixinRules', rules );\r\n}\r\n\r\n// @mixins( A, B, C ) decorator\r\nexport function mixins( ...list : {}[] ) {\r\n    return createDecorator( 'mixins', list );\r\n}\r\n\r\n// @extendable decorator\r\nexport function extendable( Type : Function ) : Function{\r\n    Class.attach( Type );\r\n    return Type;\r\n}\r\n\r\nfunction defineDecorator( spec : {} | Extendable ) {\r\n    return typeof spec === 'function' ?\r\n                   (<Extendable>spec).define() :\r\n                   createDecorator( 'define', spec );\r\n}\r\n\r\nexport { defineDecorator as define };\r\n\r\n// create ES7 decorator function for the static class members\r\nfunction createDecorator( name : string, spec : {} ) : ( Ctor : Extendable ) => Extendable {\r\n    return function( Ctor : Extendable ) : Extendable {\r\n        if( Ctor[ name ] ) {\r\n            Ctor[ name ]( spec );\r\n        }\r\n        else {\r\n            Class[ name ].call( Ctor, spec );\r\n        }\r\n\r\n        return Ctor;\r\n    }\r\n}\r\n\r\n/***********************\r\n * Mixins helpers\r\n */\r\nfunction mergeObjects( a : {}, b : {}, rules? : IMixinRules ) : {} {\r\n    const x = assign( {}, a );\r\n    return mergeProps( x , b, rules );\r\n}\r\n\r\ninterface IMergeFunctions {\r\n    [ name : string ] : ( a : Function, b : Function ) => Function\r\n}\r\n\r\nconst mergeFunctions : IMergeFunctions = {\r\n    pipe< A, B, C >( a: ( x : B ) => C, b : ( x : A ) => B ) : ( x : A ) => C {\r\n        return function( x : A ) : C {\r\n            return a.call( this, b.call( this, x ) );\r\n        }\r\n    },\r\n\r\n    sequence( a : Function, b : Function ){\r\n        return function() : void {\r\n            a.apply( this, arguments );\r\n            b.apply( this, arguments );\r\n        }\r\n    },\r\n\r\n    reverse( a : Function, b : Function ){\r\n        return function() : void {\r\n            b.apply( this, arguments );\r\n            a.apply( this, arguments );\r\n        }\r\n    },\r\n\r\n    every( a : Function, b : Function ){\r\n        return function() {\r\n            return a.apply( this, arguments ) && b.apply( this, arguments );\r\n        }\r\n    },\r\n\r\n    some( a : Function, b : Function ){\r\n        return function() {\r\n            return a.apply( this, arguments ) || b.apply( this, arguments );\r\n        }\r\n    }\r\n};\r\n\r\nfunction mergeProps< T extends {} >( target : T, source : {}, rules : IMixinRules = {}) : T {\r\n    for( let name of Object.getOwnPropertyNames( source ) ) {\r\n        const sourceProp = Object.getOwnPropertyDescriptor( source, name ),\r\n              destProp   = getPropertyDescriptor( target, name ); // Shouldn't be own\r\n\r\n        if( destProp ) {\r\n            const rule  = rules[ name ],\r\n                  value = destProp.value;\r\n\r\n            if( rule && value ) {\r\n                target[ name ] = typeof rule === 'object' ?\r\n                    mergeObjects( value, sourceProp.value, rule ) :(\r\n                        rule === 'merge' ?\r\n                            mergeObjects( value, sourceProp.value ) :\r\n                            mergeFunctions[ rule ]( value, sourceProp.value )\r\n                    );\r\n            }\r\n        }\r\n        else {\r\n            Object.defineProperty( target, name, sourceProp );\r\n        }\r\n    }\r\n\r\n    return target;\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/class.ts\n **/","/**\r\n * Simple overridable logging stubs\r\n *\r\n */\r\n\r\nexport let log = {\r\n    level : 2,\r\n\r\n    error( ...args : any[] ) : void {\r\n        console.error.apply( this, args );\r\n    },\r\n\r\n    warn( ...args : any[] ) : void {\r\n        if( this.level > 0 ) console.warn.apply( this, args );\r\n    },\r\n\r\n    info(){\r\n        if( this.level > 1 ) console.info.apply( this, arguments );\r\n    },\r\n\r\n    debug(){\r\n        if( this.level > 2 ) console.log.apply( this, arguments );\r\n    }\r\n};\r\n\r\n// Check if value is valid JSON.\r\nexport function isValidJSON( value : any ) : boolean {\r\n    if( value === null ){\r\n        return true;\r\n    }\r\n\r\n    switch( typeof value ){\r\n    case 'number' :\r\n    case 'string' :\r\n    case 'boolean' :\r\n        return true;\r\n\r\n    case 'object':\r\n        var proto = Object.getPrototypeOf( value );\r\n\r\n        if( proto === Object.prototype || proto === Array.prototype ){\r\n            return every( value, isValidJSON );\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Object manipulation helpers...\r\n */\r\n\r\ntype Iteratee = ( value : any, key? : string | number ) => any;\r\n\r\nfunction someArray( arr : any[], fun : Iteratee ) : any {\r\n    let result;\r\n\r\n    for( let i = 0; i < arr.length; i++ ){\r\n        if( result = fun( arr[ i ], i ) ){\r\n            return result;\r\n        }\r\n    }\r\n}\r\n\r\nfunction someObject( obj : {}, fun : Iteratee ) : any {\r\n    let result;\r\n\r\n    for( let key in obj ){\r\n        if( obj.hasOwnProperty( key ) ){\r\n            if( result = fun( obj[ key ], key ) ){\r\n                return result;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport function some( obj, fun : Iteratee ) : any {\r\n    if( Object.getPrototypeOf( obj ) === ArrayProto ){\r\n        return someArray( obj, fun );\r\n    }\r\n    else{\r\n        return someObject( obj, fun );\r\n    }\r\n}\r\n\r\nexport function every( obj : { }, predicate : Iteratee ) : boolean {\r\n    return !some( obj, x => !predicate( x ) );\r\n}\r\n\r\nexport function getPropertyDescriptor( obj : {}, prop : string ) : PropertyDescriptor {\r\n    let desc : PropertyDescriptor;\r\n\r\n    for( let proto = obj; !desc && proto; proto = Object.getPrototypeOf( proto ) ) {\r\n        desc = Object.getOwnPropertyDescriptor( obj, prop );\r\n    }\r\n\r\n    return desc;\r\n}\r\n\r\nexport function omit( source : {}, ...rest : string[] ) : {}\r\nexport function omit( source ) : {} {\r\n    const dest = {}, discard = {};\r\n\r\n    for( let i = 1; i < arguments.length; i ++ ){\r\n        discard[ arguments[ i ] ] = true;\r\n    }\r\n\r\n    for( var name in source ) {\r\n        if( !discard[ name ] && source.hasOwnProperty( name ) ) {\r\n            dest[ name ] = source[ name ];\r\n        }\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\nexport function transform< A, B >( dest : { [ key : string ] : A }, source : { [ key : string ] : B }, fun : ( value : B, key : string ) => A | void ) : { [ key : string ] : A } {\r\n    for( var name in source ) {\r\n        if( source.hasOwnProperty( name ) ) {\r\n            var value = fun( source[ name ], name );\r\n            value === void 0 || ( dest[ name ] = < A >value );\r\n        }\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\nexport function fastAssign( dest : {}, source : {} ) : void {\r\n    for( var name in source ) {\r\n        dest[ name ] = source[ name ];\r\n    }\r\n}\r\n\r\nexport function fastDefaults( dest : {}, source : {} ) : void {\r\n    for( var name in source ) {\r\n        dest[ name ] === void 0 || ( dest[ name ] = source[ name ] );\r\n    }\r\n}\r\n\r\nfunction forAllArgs( fun ) {\r\n    return function< T >( dest : T, ...sources ) : T {\r\n        for( var i = 0; i < sources.length; i++ ) {\r\n            const source = sources[ i ];\r\n            source && fun( dest, source );\r\n        }\r\n\r\n        return dest;\r\n    }\r\n}\r\n\r\nexport const assign = forAllArgs( ( dest, source ) => {\r\n    for( var name in source ) {\r\n        if( source.hasOwnProperty( name ) ) {\r\n            dest[ name ] = source[ name ];\r\n        }\r\n    }\r\n} );\r\n\r\nexport const defaults = forAllArgs( ( dest, source ) => {\r\n    for( var name in source ) {\r\n        if( source.hasOwnProperty( name ) ) {\r\n            dest[ name ] === void 0 || ( dest[ name ] = source[ name ] );\r\n        }\r\n    }\r\n} );\r\n\r\n/**\r\n * notEqual( a, b ) function, for deep JSON comparison\r\n * Optimized for primitive types\r\n */\r\n\r\nconst ArrayProto = Array.prototype,\r\n      DateProto = Date.prototype,\r\n      ObjectProto = Object.prototype;\r\n\r\nexport function notEqual( a : any, b : any) : boolean {\r\n    if( a === b ) return false;\r\n\r\n    if( a && b && typeof a == 'object' && typeof b == 'object' ) {\r\n        const protoA = Object.getPrototypeOf( a );\r\n\r\n        if( protoA !== Object.getPrototypeOf( b ) ) return true;\r\n\r\n        switch( protoA ){\r\n            case DateProto   : return +a !== +b;\r\n            case ArrayProto  : return arraysNotEqual( a, b );\r\n            case ObjectProto :\r\n            case null:\r\n                return objectsNotEqual( a, b );\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nfunction objectsNotEqual( a, b ) {\r\n    const keysA = Object.keys( a );\r\n\r\n    if( keysA.length !== Object.keys( b ).length ) return true;\r\n\r\n    for( let i = 0; i < keysA.length; i++ ) {\r\n        const key = keysA[ i ];\r\n\r\n        if( !b.hasOwnProperty( key ) || notEqual( a[ key ], b[ key ] ) ) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nfunction arraysNotEqual( a, b ) {\r\n    if( a.length !== b.length ) return true;\r\n\r\n    for( let i = 0; i < a.length; i++ ) {\r\n        if( notEqual( a[ i ], b[ i ] ) ) return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n\r\nvar numericKeys    = [ 1, 4, 5, 6, 7, 10, 11 ],\r\n    msDatePattern  = /\\/Date\\(([0-9]+)\\)\\//,\r\n    isoDatePattern = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/;\r\n\r\nexport function parseDate( date ) {\r\n    var msDate, timestamp, struct, minutesOffset = 0;\r\n\r\n    if( msDate = msDatePattern.exec( date ) ) {\r\n        timestamp = Number( msDate[ 1 ] );\r\n    }\r\n    else if( ( struct = isoDatePattern.exec( date )) ) {\r\n        // avoid NaN timestamps caused by undefined values being passed to Date.UTC\r\n        for( var i = 0, k; ( k = numericKeys[ i ] ); ++i ) {\r\n            struct[ k ] = +struct[ k ] || 0;\r\n        }\r\n\r\n        // allow undefined days and months\r\n        struct[ 2 ] = (+struct[ 2 ] || 1) - 1;\r\n        struct[ 3 ] = +struct[ 3 ] || 1;\r\n\r\n        if( struct[ 8 ] !== 'Z' && struct[ 9 ] !== undefined ) {\r\n            minutesOffset = struct[ 10 ] * 60 + struct[ 11 ];\r\n\r\n            if( struct[ 9 ] === '+' ) {\r\n                minutesOffset = 0 - minutesOffset;\r\n            }\r\n        }\r\n\r\n        timestamp =\r\n            Date.UTC( struct[ 1 ], struct[ 2 ], struct[ 3 ], struct[ 4 ], struct[ 5 ] + minutesOffset, struct[ 6 ],\r\n                      struct[ 7 ] );\r\n    }\r\n    else {\r\n        timestamp = Date.parse( date );\r\n    }\r\n\r\n    return timestamp;\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/tools.ts\n **/","import { Record, RecordDefinition } from './transaction.ts'\r\nimport { assign, defaults, omit } from '../tools.ts'\r\nimport { Class, ClassDefinition, Extendable } from '../class.ts'\r\nimport { compile, AttributesSpec } from './define.ts'\r\n\r\nimport { TransactionalType } from './nestedTypes.ts'\r\n\r\nexport interface RecordConstructor extends Extendable {\r\n    new ( attrs? : {}, options? : {} ) : Record;\r\n    define( spec? : RecordDefinition, statics? : {} )\r\n}\r\n\r\nRecord.define = function( protoProps : RecordDefinition, staticProps ){\r\n    const baseProto : Record = Object.getPrototypeOf( this.prototype ),\r\n            BaseConstructor = < typeof Record >baseProto.constructor;\r\n\r\n    if( protoProps ) {\r\n        // Compile attributes spec, creating definition mixin.\r\n        const definition = compile( protoProps.attributes, <AttributesSpec> baseProto._attributes );\r\n\r\n        // Explicit 'properties' declaration overrides auto-generated attribute properties.\r\n        assign( definition.properties, protoProps.properties || {} );\r\n\r\n        // Merge in definition.\r\n        defaults( definition, omit( protoProps, 'attributes', 'collection' ) );            \r\n        Class.define.call( this, definition, staticProps );\r\n    }\r\n\r\n    return this;\r\n}\r\n\r\nRecord._attribute = TransactionalType\r\n\r\n\r\nexport { Record }\n\n\n/** WEBPACK FOOTER **\n ** ./src/record/index.ts\n **/","/**\r\n * Record core implementing transactional updates.\r\n * The root of all definitions. \r\n */\r\n\r\nimport { Class, ClassDefinition, trigger3, log } from '../toolkit/index.ts'\r\n\r\nimport { Constructor } from '../types.ts'\r\nimport { begin as _begin, markAsDirty as _markAsDirty, commit, Transactional, Transaction, TransactionOptions, Owner } from '../transactions.ts'\r\nimport { ChildrenErrors } from '../validation.ts'\r\n\r\n/***************************************************************\r\n * Record Definition as accepted by Record.define( definition )\r\n */\r\n\r\nexport interface RecordDefinition extends ClassDefinition {\r\n    attributes? : AttributeDescriptorMap\r\n}\r\n\r\nexport interface AttributeDescriptorMap {\r\n    [ name : string ] : AttributeDescriptor\r\n}\r\n\r\nexport interface AttributeDescriptor {\r\n    type? : Constructor\r\n    value? : any\r\n\r\n    parse? : AttributeParse\r\n    toJSON? : AttributeToJSON\r\n   \r\n    getHooks? : GetHook[]\r\n    transforms? : Transform[]\r\n    changeHandlers? : ChangeHandler[]\r\n}\r\n\r\nexport type GetHook = ( value : any, key : string ) => any;\r\n\r\nexport type ChangeAttrHandler = ( ( value : any, attr : string ) => void ) | string;\r\nexport type Transform = ( next : any, options : TransactionOptions, prev : any, record : Record ) => any;\r\nexport type ChangeHandler = ( next : any, prev : any, record : Record ) => void;\r\n\r\nexport type AttributeToJSON = ( value : any, key : string ) => any\r\nexport type AttributeParse = ( value : any, key : string ) => any\r\n\r\n/*************************************\r\n * Attribute definitions\r\n */\r\nexport interface AttributesValues {\r\n    [ key : string ] : any\r\n}\r\n\r\nexport type CloneAttributesCtor = new ( x : AttributesValues ) => AttributesValues\r\n\r\nexport interface AttributesSpec {\r\n    [ key : string ] : Attribute\r\n}\r\n\r\nexport interface Attribute extends AttributeUpdatePipeline, AttributeSerialization {\r\n    clone( value : any ) : any\r\n    create() : any\r\n    validate( record : Record, value : any, key : string )\r\n}\r\n\r\nexport interface AttributeUpdatePipeline{\r\n    canBeUpdated( prev : any, next : any ) : boolean\r\n    transform : Transform\r\n    isChanged( a : any, b : any ) : boolean\r\n    handleChange : ChangeHandler\r\n}\r\n\r\nexport interface AttributeSerialization {\r\n    toJSON : AttributeToJSON\r\n    parse : AttributeParse\r\n}\r\n\r\n/*******************************************************\r\n * Record core implementation\r\n */\r\n\r\ninterface ConstructorOptions extends TransactionOptions{\r\n    clone? : boolean\r\n}\r\n\r\n// Client unique id counter\r\nlet _cidCounter : number = 0;\r\n\r\nexport class Record extends Transactional implements Owner {\r\n    // Implemented at the index.ts to avoid circular dependency. Here we have just proper singature.\r\n    static define( protoProps : RecordDefinition, staticProps ) : typeof Record { return this; }\r\n\r\n    /***********************************\r\n     * Core Members\r\n     */\r\n    // Previous attributes\r\n    _previousAttributes : {}\r\n\r\n    // Current attributes    \r\n    attributes : AttributesValues\r\n\r\n    // Lazily evaluated changed attributes hash\r\n    _changedAttributes : AttributesValues\r\n\r\n    get changed(){\r\n        let changed = this._changedAttributes;\r\n\r\n        if( !changed ){\r\n            const prev = this._previousAttributes;\r\n            changed = {};\r\n\r\n            this.forEachAttr( this.attributes, ( value, key, attribute ) => { \r\n                if( attribute.isChanged( value, prev[ key ] ) ){\r\n                    changed[ key ] = value;\r\n                }\r\n            } );\r\n\r\n            this._changedAttributes = changed;\r\n        }\r\n\r\n        return changed;    \r\n    } \r\n\r\n    // Returns Record owner skipping collections. TODO: Move out\r\n    getOwner() : Owner {\r\n        const owner : any = this._owner;\r\n\r\n        // If there are no key, owner must be transactional object, and it's the collection.\r\n        // We don't expect that collection can be the member of collection, so we're skipping just one level up. An optimization.\r\n        return this._ownerKey ? owner : owner && owner._owner;\r\n    }\r\n\r\n    /***********************************\r\n     * Identity managements\r\n     */\r\n\r\n    // Id attribute name ('id' by default)\r\n    idAttribute : string;\r\n\r\n    // Fixed 'id' property pointing to id attribute\r\n    get id() : string | number { return this.attributes[ this.idAttribute ]; }\r\n    set id( x : string | number ){ setAttribute( this, this.idAttribute, x ); }\r\n\r\n    /***********************************\r\n     * Dynamically compiled stuff\r\n     */\r\n\r\n    // Attributes specifications \r\n    _attributes : AttributesSpec\r\n    \r\n    // Attributes object copy constructor\r\n    Attributes : CloneAttributesCtor\r\n\r\n    // forEach function for traversing through attributes, with protective default implementation\r\n    // Overriden by dynamically compiled loop unrolled function in define.ts\r\n    forEachAttr( attrs : {}, iteratee : ( value : any, key? : string, spec? : Attribute ) => void ) : void {\r\n        const { _attributes } = this;\r\n\r\n        for( let name in attrs ){\r\n            const spec = _attributes[ name ];\r\n\r\n            if( spec ){\r\n                iteratee( attrs[ name ], name, spec );\r\n            }\r\n            else{\r\n                log.warn( '[Unknown Attribute]', this, 'Unknown record attribute \"' + name + '\" is ignored:', attrs );\r\n            }\r\n        }\r\n    }\r\n\r\n    each( iteratee : ( value? : any, key? : string ) => void, context? : any ){\r\n        const fun = arguments.length === 2 ? ( v, k ) => iteratee.call( context, v, k ) : iteratee,\r\n            { attributes } = this;\r\n\r\n        for( const key in attributes ){\r\n            const value = attributes[ key ];\r\n            if( value !== void 0 ) fun( value, key );\r\n        }\r\n    }\r\n\r\n    // Attributes-level serialization\r\n    _toJSON(){ return {}; }\r\n\r\n    // Attributes-level parse\r\n    _parse( data ){ return data; }\r\n\r\n    // Create record default values, optionally augmenting given values \r\n    defaults( values? : {} ){ return {}; }\r\n\r\n    /***************************************************\r\n     * Record construction\r\n     */\r\n    // Create record, optionally setting an owner\r\n    constructor( a_values? : {}, a_options? : ConstructorOptions, owner? : Owner ){\r\n        super( _cidCounter++, owner );\r\n\r\n        const options = a_options || {},\r\n              values = ( options.parse ? this.parse( a_values ) :  a_values ) || {};\r\n\r\n        // TODO: type error for wrong object.\r\n\r\n        const attributes = options.clone ? cloneAttributes( this, values ) : this.defaults( values ); \r\n\r\n        this.forEachAttr( attributes, ( value : any, key : string, attr : AttributeUpdatePipeline ) => {\r\n            const next = attributes[ key ] = attr.transform( value, options, void 0, this );\r\n                  attr.handleChange( next, void 0, this );\r\n        });\r\n\r\n        this.attributes = this._previousAttributes = attributes;\r\n\r\n        this.initialize( a_values, a_options );\r\n    }\r\n\r\n    // Initialization callback, to be overriden by the subclasses \r\n    initialize( values?, options? ){}\r\n\r\n    // Deeply clone record, optionally setting new owner.\r\n    clone( owner? : any ) : this {\r\n        return new (<any>this.constructor)( this.attributes, { clone : true }, owner );\r\n    }\r\n\r\n    // Validate attributes.\r\n    _validateNested( errors : ChildrenErrors ) : number {\r\n        var length    = 0;\r\n\r\n        this.forEachAttr( this.attributes, ( value, name, attribute ) => {\r\n            const error = attribute.validate( this, value, name );\r\n\r\n            if( error ){\r\n                errors[ name ] = error;\r\n                length++;\r\n            }\r\n        } );\r\n\r\n        return length;\r\n    }\r\n\r\n    // Get attribute by key\r\n    get( key : string ) : any {\r\n        return this[ key ];\r\n    }\r\n\r\n    /**\r\n     * Serialization control\r\n     */\r\n\r\n    // Default record-level serializer, to be overriden by subclasses \r\n    toJSON() : Object {\r\n        const json = {};\r\n\r\n        this.forEachAttr( this.attributes, ( value, key : string, { toJSON } : AttributeSerialization ) =>{\r\n            // If attribute serialization is not disabled, and its value is not undefined...\r\n            if( toJSON && value !== void 0 ){\r\n                // ...serialize it according with its spec.\r\n                json[ key ] = toJSON.call( this, value, key );\r\n            }\r\n        });\r\n\r\n        return json;\r\n    }\r\n    \r\n    // Default record-level parser, to be overriden by the subclasses.\r\n    parse( data ){\r\n        // Call dynamically compiled loop-unrolled attribute-level parse function.\r\n        return this._parse( data );\r\n    }\r\n\r\n    /**\r\n     * Transactional control\r\n     */\r\n    \r\n    // Create transaction. TODO: Move to transaction constructor\r\n    _createTransaction( a_values : {}, options : TransactionOptions = {} ) : Transaction {\r\n        const isRoot = begin( this ),\r\n              changes : string[] = [],\r\n              nested : RecordTransaction[]= [],\r\n              { attributes } = this,\r\n              values = options.parse ? this.parse( a_values ) : a_values,\r\n              merge = !options.reset;\r\n\r\n        if( Object.getPrototypeOf( values ) === Object.prototype ){\r\n            this.forEachAttr( values, ( value, key : string, attr : AttributeUpdatePipeline ) => {\r\n                const prev = attributes[ key ];\r\n\r\n                // handle deep update...\r\n                if( merge && attr.canBeUpdated( prev, value ) ) { // todo - skip empty updates.\r\n                    const nestedTransaction = prev.createTransaction( value, options );\r\n                    if( nestedTransaction ){\r\n                        nested.push( nestedTransaction );\r\n                        changes.push( key );\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                // cast and hook...\r\n                const next = attr.transform( value, options, prev, this );\r\n\r\n                if( attr.isChanged( next, prev ) ) {\r\n                    attributes[ key ] = next;\r\n                    changes.push( key );\r\n\r\n                    // Do the rest of the job after assignment\r\n                    attr.handleChange( next, prev, this );\r\n                }\r\n            } );\r\n        }\r\n        else{\r\n            log.error( '[Type Error]', this, 'Record update rejected (', values, '). Incompatible type.' );\r\n        }\r\n\r\n        if( nested.length || changes.length ){\r\n            return new RecordTransaction( this, isRoot, nested, changes );\r\n        }\r\n        \r\n        // No changes\r\n        isRoot && commit( this, options );\r\n    }\r\n\r\n    // Handle nested changes\r\n    _onChildrenChange( child : Transactional, options : TransactionOptions ) : void {        \r\n        this.forceAttributeChange( child._ownerKey, options );\r\n    }\r\n\r\n    // Simulate attribute change \r\n    forceAttributeChange( key : string, options : TransactionOptions = {} ){\r\n        // Touch an attribute in bounds of transaction\r\n        const isRoot = begin( this );\r\n\r\n        if( !options.silent ){\r\n            markAsDirty( this );\r\n            trigger3( this, 'change:' + key, this.attributes[ key ], this, options );\r\n        }\r\n\r\n        isRoot && commit( this, options );\r\n    }\r\n\r\n    // Dispose object and all childrens\r\n    dispose(){\r\n        this.forEachAttr( this.attributes, ( value, key ) => {\r\n            if( value && this === value._owner ){\r\n                value.dispose();\r\n            }\r\n        });\r\n\r\n        super.dispose();\r\n    }\r\n};\r\n\r\n/**************************************************\r\n * Initialize Record prototype elements\r\n */\r\n\r\nconst recordProto = Record.prototype;\r\n\r\n// Default client id prefix \r\nrecordProto.cid = 'c';\r\n\r\n// Default id attribute name\r\nrecordProto.idAttribute = 'id';\r\n\r\n/***********************************************\r\n * Helper functions\r\n */\r\n\r\nfunction begin( record : Record ){\r\n    if( _begin( record ) ){\r\n        record._previousAttributes = new record.Attributes( record.attributes );\r\n        return true;\r\n    }\r\n    \r\n    return false;\r\n}\r\n\r\nfunction markAsDirty( record ){\r\n    _markAsDirty( record );\r\n    record._changedAttributes = null;\r\n}\r\n\r\n// Deeply clone record attributes\r\nfunction cloneAttributes( record : Record, a_attributes : AttributesValues ) : AttributesValues {\r\n    const attributes = new record.Attributes( a_attributes );\r\n\r\n    record.forEachAttr( attributes, function( value, name, attr : Attribute ){\r\n        attributes[ name ] = attr.clone( value ); //TODO: Add owner?\r\n    } );\r\n\r\n    return attributes;\r\n}\r\n\r\n // Optimized single attribute transactional update. To be called from attributes setters\r\n // options.silent === false, parse === false. \r\nexport function setAttribute( record : Record, name : string, value : any ) : void {\r\n    const isRoot  = begin( record ),\r\n          options = {},\r\n        { attributes } = record,\r\n          spec = record._attributes[ name ],\r\n          prev = attributes[ name ];\r\n\r\n    // handle deep update...\r\n    if( spec.canBeUpdated( prev, value ) ) {\r\n        const nestedTransaction = ( <Transactional> prev )._createTransaction( value, options );\r\n        if( nestedTransaction ){\r\n            nestedTransaction.commit( options, true );\r\n            markAsDirty( record );\r\n            trigger3( record, 'change:' + name, prev, record, options );\r\n        }\r\n    }\r\n    else {\r\n        // cast and hook...\r\n        const next = spec.transform( value, options, prev, record );\r\n\r\n        if( spec.isChanged( next, prev ) ) {\r\n            attributes[ name ] = next;\r\n\r\n            // Do the rest of the job after assignment\r\n            if( spec.handleChange ) {\r\n                spec.handleChange( next, prev, this );\r\n            }\r\n\r\n            markAsDirty( record );\r\n            trigger3( record, 'change:' + name, next, record, options );\r\n\r\n        }\r\n    }\r\n\r\n    isRoot && commit( record, options );\r\n}\r\n\r\n// Transaction class. Implements two-phase transactions on object's tree. \r\nclass RecordTransaction implements Transaction {\r\n    // open transaction\r\n    constructor( public object : Record, public isRoot : boolean, public nested : Transaction[], public changes : string[] ){\r\n        markAsDirty( object );\r\n    }\r\n\r\n    // commit transaction\r\n    commit( options : TransactionOptions = {}, isNested? : boolean ) : void {\r\n        const { nested, object, changes } = this;\r\n\r\n        // Commit all pending nested transactions...\r\n        for( let transaction of nested ){ \r\n            transaction.commit( options, true );\r\n        }\r\n\r\n        // Notify listeners on attribute changes...\r\n        if( !options.silent ){\r\n            const { attributes } = object;\r\n            for( let key of changes ){\r\n                trigger3( object, 'change:' + key, attributes[ key ], object, options );\r\n            }\r\n        }\r\n\r\n        this.isRoot && commit( object, options, isNested ); // Do not tell parent to update.\r\n    }\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/record/transaction.ts\n **/","export * from './tools.ts'\r\nexport * from './mixins.ts'\r\nexport * from './events.ts'\n\n\n/** WEBPACK FOOTER **\n ** ./src/toolkit/index.ts\n **/","/**\r\n * Simple overridable logging stubs\r\n *\r\n */\r\n\r\nexport let log = {\r\n    level : 2,\r\n\r\n    error( ...args : any[] ) : void {\r\n        console.error.apply( this, args );\r\n    },\r\n\r\n    warn( ...args : any[] ) : void {\r\n        if( this.level > 0 ) console.warn.apply( this, args );\r\n    },\r\n\r\n    info(){\r\n        if( this.level > 1 ) console.info.apply( this, arguments );\r\n    },\r\n\r\n    debug(){\r\n        if( this.level > 2 ) console.log.apply( this, arguments );\r\n    }\r\n};\r\n\r\n// Check if value is valid JSON.\r\nexport function isValidJSON( value : any ) : boolean {\r\n    if( value === null ){\r\n        return true;\r\n    }\r\n\r\n    switch( typeof value ){\r\n    case 'number' :\r\n    case 'string' :\r\n    case 'boolean' :\r\n        return true;\r\n\r\n    case 'object':\r\n        var proto = Object.getPrototypeOf( value );\r\n\r\n        if( proto === Object.prototype || proto === Array.prototype ){\r\n            return every( value, isValidJSON );\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n/**\r\n * Object manipulation helpers...\r\n */\r\n\r\ntype Iteratee = ( value : any, key? : string | number ) => any;\r\n\r\nfunction someArray( arr : any[], fun : Iteratee ) : any {\r\n    let result;\r\n\r\n    for( let i = 0; i < arr.length; i++ ){\r\n        if( result = fun( arr[ i ], i ) ){\r\n            return result;\r\n        }\r\n    }\r\n}\r\n\r\nfunction someObject( obj : {}, fun : Iteratee ) : any {\r\n    let result;\r\n\r\n    for( let key in obj ){\r\n        if( obj.hasOwnProperty( key ) ){\r\n            if( result = fun( obj[ key ], key ) ){\r\n                return result;\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nexport function some( obj, fun : Iteratee ) : any {\r\n    if( Object.getPrototypeOf( obj ) === ArrayProto ){\r\n        return someArray( obj, fun );\r\n    }\r\n    else{\r\n        return someObject( obj, fun );\r\n    }\r\n}\r\n\r\nexport function every( obj : { }, predicate : Iteratee ) : boolean {\r\n    return !some( obj, x => !predicate( x ) );\r\n}\r\n\r\nexport function getPropertyDescriptor( obj : {}, prop : string ) : PropertyDescriptor {\r\n    let desc : PropertyDescriptor;\r\n\r\n    for( let proto = obj; !desc && proto; proto = Object.getPrototypeOf( proto ) ) {\r\n        desc = Object.getOwnPropertyDescriptor( obj, prop );\r\n    }\r\n\r\n    return desc;\r\n}\r\n\r\nexport function omit( source : {}, ...rest : string[] ) : {}\r\nexport function omit( source ) : {} {\r\n    const dest = {}, discard = {};\r\n\r\n    for( let i = 1; i < arguments.length; i ++ ){\r\n        discard[ arguments[ i ] ] = true;\r\n    }\r\n\r\n    for( var name in source ) {\r\n        if( !discard[ name ] && source.hasOwnProperty( name ) ) {\r\n            dest[ name ] = source[ name ];\r\n        }\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\nexport function transform< A, B >( dest : { [ key : string ] : A }, source : { [ key : string ] : B }, fun : ( value : B, key : string ) => A | void ) : { [ key : string ] : A } {\r\n    for( var name in source ) {\r\n        if( source.hasOwnProperty( name ) ) {\r\n            var value = fun( source[ name ], name );\r\n            value === void 0 || ( dest[ name ] = < A >value );\r\n        }\r\n    }\r\n\r\n    return dest;\r\n}\r\n\r\nexport function fastAssign( dest : {}, source : {} ) : void {\r\n    for( var name in source ) {\r\n        dest[ name ] = source[ name ];\r\n    }\r\n}\r\n\r\nexport function fastDefaults( dest : {}, source : {} ) : void {\r\n    for( var name in source ) {\r\n        dest[ name ] === void 0 || ( dest[ name ] = source[ name ] );\r\n    }\r\n}\r\n\r\nfunction forAllArgs( fun ) {\r\n    return function< T >( dest : T, ...sources ) : T {\r\n        for( var i = 0; i < sources.length; i++ ) {\r\n            const source = sources[ i ];\r\n            source && fun( dest, source );\r\n        }\r\n\r\n        return dest;\r\n    }\r\n}\r\n\r\nexport const assign = forAllArgs( ( dest, source ) => {\r\n    for( var name in source ) {\r\n        if( source.hasOwnProperty( name ) ) {\r\n            dest[ name ] = source[ name ];\r\n        }\r\n    }\r\n} );\r\n\r\nexport const defaults = forAllArgs( ( dest, source ) => {\r\n    for( var name in source ) {\r\n        if( source.hasOwnProperty( name ) ) {\r\n            dest[ name ] === void 0 || ( dest[ name ] = source[ name ] );\r\n        }\r\n    }\r\n} );\r\n \r\nexport function once( func : Function ) : Function {\r\n    var memo, first = true;\r\n    return function() {\r\n        if ( first ) {\r\n            first = false;\r\n            memo = func.apply(this, arguments);\r\n            func = null;\r\n        }\r\n        return memo;\r\n    };\r\n}\r\n\r\n/**\r\n * notEqual( a, b ) function, for deep JSON comparison\r\n * Optimized for primitive types\r\n */\r\n\r\nconst ArrayProto = Array.prototype,\r\n      DateProto = Date.prototype,\r\n      ObjectProto = Object.prototype;\r\n\r\nexport function notEqual( a : any, b : any) : boolean {\r\n    if( a === b ) return false;\r\n\r\n    if( a && b && typeof a == 'object' && typeof b == 'object' ) {\r\n        const protoA = Object.getPrototypeOf( a );\r\n\r\n        if( protoA !== Object.getPrototypeOf( b ) ) return true;\r\n\r\n        switch( protoA ){\r\n            case DateProto   : return +a !== +b;\r\n            case ArrayProto  : return arraysNotEqual( a, b );\r\n            case ObjectProto :\r\n            case null:\r\n                return objectsNotEqual( a, b );\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nfunction objectsNotEqual( a, b ) {\r\n    const keysA = Object.keys( a );\r\n\r\n    if( keysA.length !== Object.keys( b ).length ) return true;\r\n\r\n    for( let i = 0; i < keysA.length; i++ ) {\r\n        const key = keysA[ i ];\r\n\r\n        if( !b.hasOwnProperty( key ) || notEqual( a[ key ], b[ key ] ) ) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\nfunction arraysNotEqual( a, b ) {\r\n    if( a.length !== b.length ) return true;\r\n\r\n    for( let i = 0; i < a.length; i++ ) {\r\n        if( notEqual( a[ i ], b[ i ] ) ) return true;\r\n    }\r\n\r\n    return false;\r\n}\r\n\r\n\r\nvar numericKeys    = [ 1, 4, 5, 6, 7, 10, 11 ],\r\n    msDatePattern  = /\\/Date\\(([0-9]+)\\)\\//,\r\n    isoDatePattern = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/;\r\n\r\nexport function parseDate( date ) {\r\n    var msDate, timestamp, struct, minutesOffset = 0;\r\n\r\n    if( msDate = msDatePattern.exec( date ) ) {\r\n        timestamp = Number( msDate[ 1 ] );\r\n    }\r\n    else if( ( struct = isoDatePattern.exec( date )) ) {\r\n        // avoid NaN timestamps caused by undefined values being passed to Date.UTC\r\n        for( var i = 0, k; ( k = numericKeys[ i ] ); ++i ) {\r\n            struct[ k ] = +struct[ k ] || 0;\r\n        }\r\n\r\n        // allow undefined days and months\r\n        struct[ 2 ] = (+struct[ 2 ] || 1) - 1;\r\n        struct[ 3 ] = +struct[ 3 ] || 1;\r\n\r\n        if( struct[ 8 ] !== 'Z' && struct[ 9 ] !== undefined ) {\r\n            minutesOffset = struct[ 10 ] * 60 + struct[ 11 ];\r\n\r\n            if( struct[ 9 ] === '+' ) {\r\n                minutesOffset = 0 - minutesOffset;\r\n            }\r\n        }\r\n\r\n        timestamp =\r\n            Date.UTC( struct[ 1 ], struct[ 2 ], struct[ 3 ], struct[ 4 ], struct[ 5 ] + minutesOffset, struct[ 6 ],\r\n                      struct[ 7 ] );\r\n    }\r\n    else {\r\n        timestamp = Date.parse( date );\r\n    }\r\n\r\n    return timestamp;\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/toolkit/tools.ts\n **/","/**\r\n * Mixins and @define metaprogramming class extensions\r\n * \r\n * Vlad Balin & Volicon, (c) 2016\r\n */\r\nimport { log, assign, omit, getPropertyDescriptor } from './tools.ts'\r\n\r\ntype MergeRule = 'merge' | 'pipe' | 'sequence' | 'reverse' | 'every' | 'some'\r\n\r\ninterface IMixinRules {\r\n    [ propertyName : string ] : MergeRule | IMixinRules\r\n}\r\n\r\nexport interface ClassDefinition {\r\n    properties? : PropertyDescriptorMap\r\n    mixins? : Array< Object >\r\n    mixinRules? : IMixinRules\r\n    [ name : string ] : any\r\n}\r\n\r\ndeclare function __extends( a, b )\r\n\r\nexport interface Factory {\r\n    create( ...args : any[] ) : {}\r\n}\r\n\r\nexport interface Extendable extends Factory {\r\n    define(spec? : ClassDefinition, statics? : {} ) : Extendable\r\n    extend(spec? : ClassDefinition, statics? : {} ) : Extendable\r\n    mixins( ...mixins : {}[] ) : Extendable\r\n    mixinRules( mixinRules : IMixinRules ) : Extendable\r\n}\r\n\r\n// Base class, holding metaprogramming class extensions\r\n// Supports mixins, and Class.define metaprogramming method.\r\nexport class Class {\r\n\r\n    // Generic class factory. May be overridden for abstract classes. Not inherited.\r\n    static create( a : any, b? : any, c? : any ) : Class {\r\n        return new (<any>this)( a, b, c );\r\n    }\r\n\r\n    protected static _mixinRules : IMixinRules = { properties : 'merge' };\r\n\r\n    /**\r\n     * Attach mixins to class prototype.\r\n     */\r\n    static mixins( ...mixins : {}[] ) : Extendable {\r\n        const proto      = this.prototype,\r\n              mergeRules : IMixinRules = this._mixinRules || {};\r\n\r\n        for( var i = mixins.length - 1; i >= 0; i-- ) {\r\n            const mixin = mixins[ i ];\r\n            if( mixin instanceof Array ) {\r\n                Class.mixins.apply( this, mixin );\r\n            }\r\n            else {\r\n                mergeProps( proto, mixin, mergeRules );\r\n            }\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    // Members merging policy is controlled by MyClass.mixinRules property.\r\n    // mixinRules are properly inherited and merged.\r\n    static mixinRules( mixinRules : IMixinRules ) : Extendable {\r\n        const Base = Object.getPrototypeOf( this.prototype ).constructor;\r\n\r\n        if( Base._mixinRules ) {\r\n            mergeProps( mixinRules, Base._mixinRules );\r\n        }\r\n\r\n        this._mixinRules = mixinRules;\r\n        return this;\r\n    }\r\n\r\n    // Autobinding helper to be used from constructors\r\n    bindAll( ...names : string [] ) : void\r\n    bindAll() {\r\n        for( var i = 0; i < arguments.length; i++ ) {\r\n            const name = arguments[ i ];\r\n\r\n            this[ name ] = this[ name ].bind( this );\r\n        }\r\n    }\r\n\r\n    // Attach Class methods to existing constructors\r\n    static attach( ...args : any[] ) : void {\r\n        for (let Ctor of args) {\r\n            Ctor.create            = this.create;\r\n            Ctor.define            = this.define;\r\n            Ctor.mixins            = this.mixins;\r\n            Ctor.mixinRules        = this.mixinRules;\r\n            Ctor._mixinRules       = this._mixinRules;\r\n            Ctor.prototype.bindAll = this.prototype.bindAll;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Main metaprogramming method. May be overriden in subclasses to customize the behavior.   \r\n     * - Merge definition to the prototype.\r\n     * - Add native properties with descriptors from spec.properties to the prototype.\r\n     * - Prevents inheritance of 'create' factory method.\r\n     * - Assign mixinRules static property, and merge it with parent.\r\n     * - Adds mixins.\r\n     */\r\n    static define( definition : ClassDefinition = {}, staticProps? : {} ) : Extendable {\r\n        // That actually might happen when we're using @define decorator... \r\n        if( !this.define ){\r\n            log.error( \"[Class.define] Class must have class extensions to use @define decorator. Use '@extendable' before @define, or extend the base class with class extensions.\", definition );\r\n            return this;\r\n        }\r\n\r\n        // Obtain references to prototype and base class.\r\n        const proto = this.prototype,\r\n              BaseClass : Extendable = Object.getPrototypeOf( proto ).constructor;\r\n\r\n        // Make sure we don't inherit class factories.\r\n        if( BaseClass.create === this.create ) {\r\n            this.create = Class.create;\r\n        }\r\n\r\n        // Extract prototype properties from the definition.\r\n        const protoProps = omit( definition, 'properties', 'mixins', 'mixinRules' ),\r\n            { properties = <PropertyDescriptorMap> {}, mixins, mixinRules } = definition;\r\n\r\n        // Update prototype and statics.\r\n        assign( proto, protoProps );\r\n        assign( this, staticProps );\r\n\r\n        // Define native properties.\r\n        properties && Object.defineProperties( proto, properties );\r\n\r\n        // Apply mixins and mixin rules.\r\n        mixinRules && this.mixinRules( mixinRules );\r\n        mixins && this.mixins( mixins );\r\n\r\n        return this;\r\n    }\r\n\r\n    // Backbone-compatible extend method to be used in ES5 and for backward compatibility\r\n    static extend(spec? : ClassDefinition, statics? : {} ) : Extendable {\r\n        let Subclass : Extendable;\r\n\r\n        // If constructor function is given...\r\n        if( spec && spec.hasOwnProperty( 'constructor' ) ){\r\n            // ...we need to manually call internal TypeScript __extend function. Hack! Hack!\r\n            Subclass = <any>spec.constructor; \r\n            __extends( Subclass, this );\r\n        }\r\n        // Otherwise, create the subclall in usual way.\r\n        else{\r\n            Subclass = class Subclass extends this {};\r\n        }\r\n\r\n        // And apply definitions\r\n        return Subclass.define( spec, statics );\r\n    }\r\n}\r\n\r\n// @mixinRules({ ... }) decorator\r\nexport function mixinRules( rules : IMixinRules ) {\r\n    return createDecorator( 'mixinRules', rules );\r\n}\r\n\r\n// @mixins( A, B, C ) decorator\r\nexport function mixins( ...list : {}[] ) {\r\n    return createDecorator( 'mixins', list );\r\n}\r\n\r\n// @extendable decorator\r\nexport function extendable( Type : Function ) : Function{\r\n    Class.attach( Type );\r\n    return Type;\r\n}\r\n\r\nfunction defineDecorator( spec : {} | Extendable ) {\r\n    return typeof spec === 'function' ?\r\n                   (<Extendable>spec).define() :\r\n                   createDecorator( 'define', spec );\r\n}\r\n\r\nexport { defineDecorator as define };\r\n\r\n// create ES7 decorator function for the static class members\r\nfunction createDecorator( name : string, spec : {} ) : ( Ctor : Extendable ) => Extendable {\r\n    return function( Ctor : Extendable ) : Extendable {\r\n        if( Ctor[ name ] ) {\r\n            Ctor[ name ]( spec );\r\n        }\r\n        else {\r\n            Class[ name ].call( Ctor, spec );\r\n        }\r\n\r\n        return Ctor;\r\n    }\r\n}\r\n\r\n/***********************\r\n * Mixins helpers\r\n */\r\nfunction mergeObjects( a : {}, b : {}, rules? : IMixinRules ) : {} {\r\n    const x = assign( {}, a );\r\n    return mergeProps( x , b, rules );\r\n}\r\n\r\ninterface IMergeFunctions {\r\n    [ name : string ] : ( a : Function, b : Function ) => Function\r\n}\r\n\r\nconst mergeFunctions : IMergeFunctions = {\r\n    pipe< A, B, C >( a: ( x : B ) => C, b : ( x : A ) => B ) : ( x : A ) => C {\r\n        return function( x : A ) : C {\r\n            return a.call( this, b.call( this, x ) );\r\n        }\r\n    },\r\n\r\n    sequence( a : Function, b : Function ){\r\n        return function() : void {\r\n            a.apply( this, arguments );\r\n            b.apply( this, arguments );\r\n        }\r\n    },\r\n\r\n    reverse( a : Function, b : Function ){\r\n        return function() : void {\r\n            b.apply( this, arguments );\r\n            a.apply( this, arguments );\r\n        }\r\n    },\r\n\r\n    every( a : Function, b : Function ){\r\n        return function() {\r\n            return a.apply( this, arguments ) && b.apply( this, arguments );\r\n        }\r\n    },\r\n\r\n    some( a : Function, b : Function ){\r\n        return function() {\r\n            return a.apply( this, arguments ) || b.apply( this, arguments );\r\n        }\r\n    }\r\n};\r\n\r\nfunction mergeProps< T extends {} >( target : T, source : {}, rules : IMixinRules = {}) : T {\r\n    for( let name of Object.getOwnPropertyNames( source ) ) {\r\n        const sourceProp = Object.getOwnPropertyDescriptor( source, name ),\r\n              destProp   = getPropertyDescriptor( target, name ); // Shouldn't be own\r\n\r\n        if( destProp ) {\r\n            const rule  = rules[ name ],\r\n                  value = destProp.value;\r\n\r\n            if( rule && value ) {\r\n                target[ name ] = typeof rule === 'object' ?\r\n                    mergeObjects( value, sourceProp.value, rule ) :(\r\n                        rule === 'merge' ?\r\n                            mergeObjects( value, sourceProp.value ) :\r\n                            mergeFunctions[ rule ]( value, sourceProp.value )\r\n                    );\r\n            }\r\n        }\r\n        else {\r\n            Object.defineProperty( target, name, sourceProp );\r\n        }\r\n    }\r\n\r\n    return target;\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/toolkit/mixins.ts\n **/","import { once } from './tools.ts'\r\nimport { Class } from './mixins.ts'\r\n\r\n/************\r\n * JIT-Optimized monomorphic functions to trigger single event \r\n */\r\nexport function trigger1( self : Messenger, name : string, a : any ) : void {\r\n    var _events = self._events;\r\n    if( _events ){\r\n        _fireEvent1( _events[ name ], a );\r\n        _fireEvent2( _events.all, name, a );\r\n    }\r\n};\r\n\r\nexport function trigger2( self : Messenger, name : string, a, b ) : void {\r\n    var _events = self._events;\r\n    if( _events ){\r\n        _fireEvent2( _events[ name ], a, b );\r\n        _fireEvent3( _events.all, name, a, b );\r\n    }\r\n};\r\n\r\nexport function trigger3( self : Messenger, name : string, a, b, c ) : void{\r\n    var _events = self._events;\r\n    if( _events ){\r\n        _fireEvent3( _events[ name ], a, b, c );\r\n        _fireEvent4( _events.all, name, a, b, c );\r\n    }\r\n};\r\n\r\n// ...and specialized functions with triggering loops.\r\n// Crappy JS JIT loves these small functions and code duplication.\r\nfunction _fireEvent1( events : Handler[], a ) : void {\r\n    if( events )\r\n        for( var i = 0, l = events.length, ev; i < l; i ++ )\r\n            (ev = events[i]).callback.call(ev.ctx, a );\r\n}\r\n\r\nfunction _fireEvent2( events : Handler[], a, b ) : void {\r\n    if( events )\r\n        for( var i = 0, l = events.length, ev; i < l; i ++ )\r\n            (ev = events[i]).callback.call(ev.ctx, a, b);\r\n}\r\n\r\nfunction _fireEvent3( events : Handler[], a, b, c ) : void {\r\n    if( events )\r\n        for( var i = 0, l = events.length, ev; i < l; i ++ )\r\n            (ev = events[i]).callback.call(ev.ctx, a, b, c);\r\n}\r\n\r\nfunction _fireEvent4( events : Handler[], a, b, c, d ) : void {\r\n    if( events )\r\n        for( var i = 0, l = events.length, ev; i < l; i ++ )\r\n            (ev = events[i]).callback.call(ev.ctx, a, b, c, d);\r\n}\r\n\r\n// Backbone.Events\r\n// ---------------\r\n\r\n// A module that can be mixed in to *any object* in order to provide it with\r\n// a custom event channel. You may bind a callback to an event with `on` or\r\n// remove with `off`; `trigger`-ing an event fires all callbacks in\r\n// succession.\r\n//\r\n//     var object = {};\r\n//     _.extend(object, Backbone.Events);\r\n//     object.on('expand', function(){ alert('expanded'); });\r\n//     object.trigger('expand');\r\n//\r\n\r\n// Regular expression used to split event strings.\r\nvar eventSplitter = /\\s+/;\r\n\r\n// Iterates over the standard `event, callback` (as well as the fancy multiple\r\n// space-separated events `\"change blur\", callback` and jQuery-style event\r\n// maps `{event: callback}`).\r\nvar eventsApi = function(iteratee, events, name, callback, opts) {\r\n    var i = 0, names;\r\n    if (name && typeof name === 'object') {\r\n        // Handle event maps.\r\n        if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\r\n        for (names = Object.keys(name); i < names.length ; i++) {\r\n            events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\r\n        }\r\n    } else if (name && eventSplitter.test(name)) {\r\n        // Handle space separated event names by delegating them individually.\r\n        for (names = name.split(eventSplitter); i < names.length; i++) {\r\n            events = iteratee(events, names[i], callback, opts);\r\n        }\r\n    } else {\r\n        // Finally, standard events.\r\n        events = iteratee(events, name, callback, opts);\r\n    }\r\n    return events;\r\n};\r\n\r\nfunction isEmpty( obj : {} ) : boolean {\r\n    for( var i in obj ){\r\n        return false;\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\nlet _idCount = 0;\r\nfunction uniqueId(){\r\n    return 'l' + _idCount++;\r\n}\r\n\r\nclass ListeningTo {\r\n    count : number = 0\r\n    constructor( public obj, public objId, public id, public listeningTo ){}\r\n}\r\n\r\ninterface ListeningToMap {\r\n    [ id : string ] : ListeningTo\r\n}\r\n\r\ninterface Listeners {\r\n    [ id : string ] : Messenger\r\n}\r\n\r\nexport abstract class Messenger implements Class {\r\n    bindAll : ( ...names : string [] ) => void\r\n\r\n    _events : EventsMap = void 0;\r\n    _listeners : Listeners = void 0;\r\n    _listeningTo : ListeningToMap = void 0;\r\n    cidPrefix : string\r\n    cid : string\r\n\r\n    constructor( cid : string | number ){\r\n        this.cid = this.cidPrefix + cid;\r\n    }\r\n\r\n    // Bind an event to a `callback` function. Passing `\"all\"` will bind\r\n    // the callback to all events fired.\r\n    on(name, callback, context) {\r\n        return internalOn(this, name, callback, context);\r\n    }\r\n    // Remove one or many callbacks. If `context` is null, removes all\r\n    // callbacks with that function. If `callback` is null, removes all\r\n    // callbacks for the event. If `name` is null, removes all bound\r\n    // callbacks for all events.\r\n    off(name? : string, callback? : Function, context? ) {\r\n        if (!this._events) return this;\r\n        this._events = eventsApi(offApi, this._events, name, callback,\r\n                                new OffOptions(\r\n                                    context,\r\n                                    this._listeners )\r\n                                );\r\n        return this;\r\n    }\r\n\r\n    // Tell this object to stop listening to either specific events ... or\r\n    // to every object it's currently listening to.\r\n    stopListening( obj? : Messenger, name? : string, callback? : Function ) {\r\n        var listeningTo = this._listeningTo;\r\n        if (!listeningTo) return this;\r\n\r\n        var ids = obj ? [obj.cid] : Object.keys(listeningTo);\r\n\r\n        for (var i = 0; i < ids.length; i++) {\r\n            var listening = listeningTo[ids[i]];\r\n\r\n            // If listening doesn't exist, this object is not currently\r\n            // listening to obj. Break out early.\r\n            if (!listening) break;\r\n\r\n            listening.obj.off(name, callback, this);\r\n        }\r\n        if (isEmpty(listeningTo)) this._listeningTo = void 0;\r\n\r\n        return this;\r\n    }\r\n\r\n    // Inversion-of-control versions of `on`. Tell *this* object to listen to\r\n    // an event in another object... keeping track of what it's listening to\r\n    // for easier unbinding later.\r\n    listenTo(obj : Messenger, name, callback? ) {\r\n        if (!obj) return this;\r\n        var id = obj.cid || (obj.cid = uniqueId());\r\n        var listeningTo = this._listeningTo || (this._listeningTo = {});\r\n        var listening = listeningTo[id];\r\n\r\n        // This object is not listening to any other events on `obj` yet.\r\n        // Setup the necessary references to track the listening callbacks.\r\n        if (!listening) {\r\n            var thisId = this.cid || (this.cid = uniqueId());\r\n            listening = listeningTo[id] = new ListeningTo( obj, id, thisId, listeningTo );\r\n        }\r\n\r\n        // Bind callbacks on obj, and keep track of them on listening.\r\n        internalOn(obj, name, callback, this, listening);\r\n        return this;\r\n    }\r\n\r\n    // Bind an event to only be triggered a single time. After the first time\r\n    // the callback is invoked, its listener will be removed. If multiple events\r\n    // are passed in using the space-separated syntax, the handler will fire\r\n    // once for each event, not once for a combination of all events.\r\n    once(name, callback, context) {\r\n        // Map the event into a `{event: once}` object.\r\n        var events = eventsApi(onceMap, {}, name, callback, this.off.bind( this ));\r\n        return this.on(events, void 0, context);\r\n    }\r\n\r\n    // Inversion-of-control versions of `once`.\r\n    listenToOnce(obj : Messenger, name, callback) {\r\n        // Map the event into a `{event: once}` object.\r\n        var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind( this, obj ) );\r\n        return this.listenTo(obj, events);\r\n    }\r\n\r\n    // Trigger one or many events, firing all bound callbacks. Callbacks are\r\n    // passed the same arguments as `trigger` is, apart from the event name\r\n    // (unless you're listening on `\"all\"`, which will cause your callback to\r\n    // receive the true name of the event as the first argument).\r\n    trigger(name) {\r\n        if (!this._events) return this;\r\n\r\n        var length = Math.max(0, arguments.length - 1);\r\n        var args = Array(length);\r\n        for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\r\n\r\n        eventsApi(triggerApi, this._events, name, void 0, args);\r\n        return this;\r\n    }\r\n\r\n    dispose(){\r\n        this.stopListening();\r\n        this.off();\r\n    }\r\n}\r\n\r\nMessenger.prototype.cidPrefix = 'l';\r\nexport const Events = Messenger.prototype;\r\nClass.attach( Messenger );\r\n\r\n// Guard the `listening` argument from the public API.\r\nvar internalOn = function(obj : Messenger, name, callback, context, listening? ) : Messenger {\r\n    obj._events = eventsApi(onApi, obj._events || {}, name,\r\n                            callback, new Handler( context, obj, listening));\r\n\r\n    if (listening) {\r\n        var listeners = obj._listeners || (obj._listeners = {});\r\n        listeners[listening.id] = listening;\r\n    }\r\n\r\n    return obj;\r\n};\r\n\r\ninterface Callback extends Function{\r\n    _callback? : any\r\n}\r\n\r\nclass Handler {\r\n    constructor( public context, public ctx, public listening : ListeningTo, public callback? : Callback ){\r\n    }\r\n\r\n    clone( callback ){\r\n        const { context, listening } = this;\r\n        if (listening) listening.count++;\r\n        return new Handler( context, context || this.ctx, listening, callback );\r\n    }\r\n}\r\n\r\ninterface EventsMap {\r\n    all? : Handler[]\r\n    [ name : string ] : Handler[]\r\n}\r\n\r\n// The reducing API that adds a callback to the `events` object.\r\nvar onApi = function(events : EventsMap, name : string, callback : Function, options) : EventsMap {\r\n    if (callback) {\r\n        var handlers = events[name] || (events[name] = []);\r\n        handlers.push( options.clone( callback ) );\r\n    }\r\n    return events;\r\n};\r\n\r\nclass OffOptions {\r\n    constructor( public context, public listeners : Listeners ){}\r\n}\r\n\r\n// The reducing API that removes a callback from the `events` object.\r\nvar offApi = function(events : EventsMap, name, callback, options : OffOptions ) {\r\n    if (!events) return;\r\n\r\n    var i = 0, listening;\r\n    var context = options.context, listeners = options.listeners;\r\n\r\n    // Delete all events listeners and \"drop\" events.\r\n    if (!name && !callback && !context) {\r\n        var ids = Object.keys(listeners);\r\n        for (; i < ids.length; i++) {\r\n            listening = listeners[ids[i]];\r\n            delete listeners[listening.id];\r\n            delete listening.listeningTo[listening.objId];\r\n        }\r\n        return;\r\n    }\r\n\r\n    var names = name ? [name] : Object.keys(events);\r\n    for (; i < names.length; i++) {\r\n        name = names[i];\r\n        var handlers = events[name];\r\n\r\n        // Bail out if there are no events stored.\r\n        if (!handlers) break;\r\n\r\n        // Replace events if there are any remaining.  Otherwise, clean up.\r\n        var remaining = [];\r\n        for (var j = 0; j < handlers.length; j++) {\r\n            var handler = handlers[j];\r\n            if (\r\n                callback && callback !== handler.callback &&\r\n                callback !== handler.callback._callback ||\r\n                context && context !== handler.context\r\n            ) {\r\n                remaining.push(handler);\r\n            } else {\r\n                listening = handler.listening;\r\n                if (listening && --listening.count === 0) {\r\n                    delete listeners[listening.id];\r\n                    delete listening.listeningTo[listening.objId];\r\n                }\r\n            }\r\n        }\r\n\r\n        // Update tail event if the list has any events.  Otherwise, clean up.\r\n        if (remaining.length) {\r\n            events[name] = remaining;\r\n        } else {\r\n            delete events[name];\r\n        }\r\n    }\r\n    if (!isEmpty(events)) return events;\r\n};\r\n\r\n// Reduces the event callbacks into a map of `{event: onceWrapper}`.\r\n// `offer` unbinds the `onceWrapper` after it has been called.\r\nvar onceMap = function(map, name, callback, offer) {\r\n    if (callback) {\r\n        var once = map[name] = once(function() {\r\n            offer(name, once);\r\n            callback.apply(this, arguments);\r\n        });\r\n        once._callback = callback;\r\n    }\r\n    return map;\r\n};\r\n\r\n// Handles triggering the appropriate event callbacks.\r\nvar triggerApi = function(objEvents, name, cb, args) {\r\n    if (objEvents) {\r\n        var events = objEvents[name];\r\n        var allEvents = objEvents.all;\r\n        if (events && allEvents) allEvents = allEvents.slice();\r\n        if (events) triggerEvents(events, args);\r\n        if (allEvents) triggerEvents(allEvents, [name].concat(args));\r\n    }\r\n    return objEvents;\r\n};\r\n\r\n// A difficult-to-believe, but optimized internal dispatch function for\r\n// triggering events. Tries to keep the usual cases speedy (most internal\r\n// Backbone events have 3 arguments).\r\nvar triggerEvents = function(events, args) {\r\n    var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\r\n    switch (args.length) {\r\n        case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\r\n        case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\r\n        case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\r\n        case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\r\n        default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\r\n    }\r\n};\n\n\n/** WEBPACK FOOTER **\n ** ./src/toolkit/events.ts\n **/","import { Messenger, trigger2, trigger3, assign } from './toolkit/index.ts'\r\nimport { ValidationError, Validatable, ChildrenErrors } from './validation.ts'\r\nimport { Traversable, resolveReference } from './references.ts'\r\n/***\r\n * Abstract class implementing ownership tree, tho-phase transactions, and validation. \r\n * 1. createTransaction() - apply changes to an object tree, and if there are some events to send, transaction object is created.\r\n * 2. transaction.commit() - send and process all change events, and close transaction.\r\n */\r\n\r\n// Transactional object interface\r\nexport abstract class Transactional extends Messenger implements Validatable, Traversable {\r\n    // Unique version token replaced on change\r\n    _changeToken : {} = {}\r\n\r\n    // true while inside of the transaction\r\n    _transaction : boolean = false;\r\n\r\n    // true, when in the middle of transaction and there're changes but is an unsent change event\r\n    _isDirty  : boolean = false;\r\n\r\n    // Backreference set by owner (Record, Collection, or other object)\r\n    _owner : Owner\r\n\r\n    // Key supplied by owner. Used by record to identify attribute key.\r\n    // Only collections doesn't set the key, which is used to distinguish collections.  \r\n    _ownerKey : string\r\n\r\n    // Name of the change event\r\n    _changeEventName : string\r\n\r\n    constructor( cid : string | number, owner? : Owner, ownerKey? : string ){\r\n        super( cid );\r\n        this._owner = owner;\r\n        this._ownerKey = ownerKey;\r\n    }\r\n\r\n    // Deeply clone ownership subtree, optionally setting the new owner\r\n    // (TODO: Do we really need it? Record must ignore events with empty keys)\r\n    // 'Pin store' shall assign this._defaultStore = this.getStore();\r\n    abstract clone( options? : { owner? : Owner, key? : string, pinStore? : boolean }) : this\r\n    \r\n    // Execute given function in the scope of ad-hoc transaction.\r\n    transaction( fun : ( self : this ) => void, options? : TransactionOptions ) : void{\r\n        const isRoot = begin( this );\r\n        fun( this );\r\n        isRoot && commit( this, options );\r\n    }\r\n\r\n    // Loop through the members in the scope of transaction.\r\n    // Transactional version of each()\r\n    updateEach( iteratee : ( val : any, key : string ) => void, options? : TransactionOptions ){\r\n        const isRoot = begin( this );\r\n        this.each( iteratee );\r\n        isRoot && commit( this, options );\r\n    }\r\n\r\n    // Apply bulk in-place object update in scope of ad-hoc transaction \r\n    set( values : any, options? : TransactionOptions ) : this {\r\n        if( values ){ \r\n            const transaction = this._createTransaction( values, options );\r\n            transaction && transaction.commit( options, true );\r\n        } \r\n\r\n        return this;\r\n    }\r\n\r\n    // Apply bulk object update without any notifications, and return open transaction.\r\n    // Used internally to implement two-phase commit.\r\n    // Returns null if there are no any changes.  \r\n    abstract _createTransaction( values : any, options? : TransactionOptions ) : Transaction\r\n    \r\n    // Parse function applied when 'parse' option is set for transaction.\r\n    parse( data : any ) : any { return data }\r\n\r\n    // Convert object to the serializable JSON structure\r\n    abstract toJSON() : {}\r\n\r\n    /*******************\r\n     * Traversals and member access\r\n     */\r\n    \r\n    // Get object member by its key.\r\n    abstract get( key : string ) : any;\r\n\r\n    // Get object member by symbolic reference.\r\n    deepGet( reference : string ) : any {\r\n        return resolveReference( this, reference, ( object, key ) => object.get( key ) );\r\n    }\r\n\r\n    //_isCollection : boolean\r\n\r\n    // Return owner skipping collections.\r\n    getOwner() : Owner {\r\n        return this._owner;\r\n    }\r\n\r\n    // Store used when owner chain store lookup failed. Static value in the prototype. \r\n    _defaultStore : Transactional\r\n\r\n    // Locate the closest store. Store object stops traversal by overriding this method. \r\n    getStore() : Transactional {\r\n        const { _owner } = this;\r\n        return _owner ? <Transactional> _owner.getStore() : this._defaultStore;\r\n    }\r\n\r\n\r\n    /***************************************************\r\n     * Iteration API\r\n     */\r\n\r\n    // Loop through the members. Must be efficiently implemented in container class.\r\n    abstract each( iteratee : ( val : any, key : string | number ) => void, context? : any )\r\n\r\n    // Map members to an array\r\n    map<T>( iteratee : ( val : any, key : string ) => T, context? : any ) : T[]{\r\n        const arr : T[] = [],\r\n              fun = arguments.length === 2 ? ( v, k ) => iteratee.call( context, v, k ) : iteratee;\r\n        \r\n        this.each( ( val, key ) => {\r\n            const result = fun( val, key );\r\n            if( result !== void 0 ) arr.push( result );\r\n        } );\r\n\r\n        return arr;\r\n    }\r\n\r\n    // Map members to an object\r\n    mapObject<T>( iteratee : ( val : any, key : string | number ) => T, context? : any ) : { [ key : string ] : T }{\r\n        const obj : { [ key : string ] : T } = {},\r\n            fun = arguments.length === 2 ? ( v, k ) => iteratee.call( context, v, k ) : iteratee;\r\n        \r\n        this.each( ( val, key ) => {\r\n            const result = iteratee( val, key );\r\n            if( result !== void 0 ) obj[ key ] = result;\r\n        } );\r\n\r\n        return obj;\r\n    }\r\n\r\n    // Get array of attribute keys (Record) or record ids (Collection) \r\n    keys() : string[] {\r\n        return this.map( ( value, key ) => {\r\n            if( value !== void 0 ) return key;\r\n        });\r\n    }\r\n\r\n    // Get array of attribute values (Record) or records (Collection)\r\n    values() : any[] {\r\n        return this.map( value => value );\r\n    }\r\n    \r\n    /*********************************\r\n     * Validation API\r\n     */\r\n\r\n    // Lazily evaluated validation error\r\n    _validationError : ValidationError = void 0\r\n\r\n    // Validate ownership tree and return valudation error \r\n    get validationError() : ValidationError {\r\n        return this._validationError || ( this._validationError = new ValidationError( this ) );\r\n    }\r\n\r\n    // Validate nested members. Returns errors count.\r\n    abstract _validateNested( errors : ChildrenErrors ) : number;\r\n\r\n    // Object-level validator. Returns validation error.\r\n    validate( obj? : Transactional ) : any {}\r\n\r\n    // Return validation error (or undefined) for nested object with the given key. \r\n    getValidationError( key : string ) : any {\r\n        var error = this.validationError;\r\n        return ( key ? error && error.nested[ key ] : error ) || null;\r\n    }\r\n\r\n    // Get validation error for the given symbolic reference.\r\n    deepValidationError( reference : string ) : any {\r\n        return resolveReference( this, reference, ( object, key ) => object.getValidationError( key ) );\r\n    }\r\n\r\n    // Iterate through all validation errors across the ownership tree.\r\n    eachValidationError( iteratee : ( error : any, key : string, object : Transactional ) => void ) : void {\r\n        const { validationError } = this;\r\n        validationError && validationError.eachError( iteratee, this );\r\n    }\r\n\r\n    // Check whenever member with a given key is valid. \r\n    isValid( key : string ) : boolean {\r\n        return !this.getValidationError( key );\r\n    }\r\n}\r\n\r\nTransactional.prototype._changeEventName = 'change';\r\n\r\n// Owner must accept children update events. It's an only way children communicates with an owner.\r\nexport interface Owner extends Traversable {\r\n    _onChildrenChange( child : Transactional, options : TransactionOptions );\r\n    getOwner() : Owner\r\n    getStore() : Transactional\r\n}\r\n\r\n// Transaction object used for two-phase commit protocol.\r\n// Must be implemented by subclasses.\r\nexport interface Transaction {\r\n    // Object transaction is being made on.\r\n    object : Transactional\r\n\r\n    // Send out change events, process update triggers, and close transaction.\r\n    // Nested transactions must be marked with isNested flag (it suppress owner notification).\r\n    commit( options? : TransactionOptions, isNested? : boolean )\r\n}\r\n\r\n// Options for distributed transaction  \r\nexport interface TransactionOptions {\r\n    // Invoke parsing \r\n    parse? : boolean\r\n\r\n    // Suppress change notifications and update triggers\r\n    silent? : boolean\r\n\r\n    // Update existing transactional members in place, or skip the update (ignored by models)\r\n    merge? : boolean // =true\r\n\r\n    // Should collections remove elements in set (ignored by models)  \r\n    remove? : boolean // =true\r\n\r\n    // Always replace enclosed objects with new instances\r\n    reset? : boolean // = false\r\n\r\n    validate? : boolean\r\n}\r\n\r\n/**\r\n * Low-level transactions API. Must be used like this:\r\n * const isRoot = begin( record );\r\n * ...\r\n * isRoot && commit( record, options );\r\n * \r\n * When committing nested transaction, the flag must be set to true. \r\n * commit( object, options, isNested ) \r\n */\r\n\r\n// Start transaction. Return true if it's the root one.\r\nexport function begin( object : Transactional ) : boolean {\r\n    return object._transaction ? false : ( object._transaction = true );  \r\n}\r\n\r\n// Mark transactional object as dirty, so change event will be sent on commit.\r\nexport function markAsDirty( object : Transactional ){\r\n    object._isDirty  = true;\r\n    object._changeToken = {};\r\n    object._validationError = void 0;\r\n}\r\n\r\n// Commit transaction. Send out change event and notify owner. Returns true if there were changes.\r\n// Should be executed for the root transaction only.\r\nexport function commit( object : Transactional, options : TransactionOptions, isNested? : boolean ){\r\n    const wasDirty = object._isDirty;\r\n\r\n    if( options.silent ){\r\n        object._isDirty  = false;\r\n    }\r\n    else{\r\n        while( object._isDirty ){\r\n            object._isDirty = false; \r\n            trigger2( object, object._changeEventName, object, options );\r\n        }\r\n    }\r\n    \r\n    object._transaction = false;\r\n\r\n    // Don't notify owner for the case of nested transaction, it already knows if there were changes  \r\n    if( !isNested && wasDirty && object._owner ){\r\n        object._owner._onChildrenChange( object, options );\r\n    }\r\n}\r\n\r\n/************************************\r\n * Ownership management\r\n */\r\n\r\n// Add reference to the record.\r\nexport function aquire( owner : Owner, child : Transactional, key? : string ) : void {\r\n    if( !child._owner ){\r\n        child._owner = owner;\r\n        child._ownerKey = key;\r\n    }\r\n}\r\n\r\n// Remove reference to the record.\r\nexport function free( owner : Owner, child : Transactional ) : void {\r\n    if( owner === child._owner ){\r\n        child._owner = void 0;\r\n        child._ownerKey = void 0;\r\n    }\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/transactions.ts\n **/","export interface ChildrenErrors {\r\n    [ key : string ] : ValidationError | any\r\n} \r\n\r\nexport interface Validatable {\r\n    _validateNested( errors : ChildrenErrors ) : number;\r\n    validate( self : any ) : any\r\n    get( key : string ) : any\r\n}\r\n\r\n// Validation error object.\r\nexport class ValidationError {\r\n    // Invalid nested object keys \r\n    nested : ChildrenErrors \r\n    length : number\r\n\r\n    // Local error\r\n    error : any\r\n\r\n    constructor( obj : Validatable ){\r\n        this.length = obj._validateNested( this.nested = {} );\r\n\r\n        if( this.error = obj.validate( obj ) ){\r\n            this.length++;\r\n        }\r\n    }\r\n\r\n    each( iteratee : ( value : any, key : string ) => void ){\r\n        const { error, nested } = this;\r\n\r\n        if( error ) iteratee( error, null );\r\n\r\n        for( const key in nested ){\r\n            iteratee( nested[ key ], key );\r\n        }\r\n    }\r\n\r\n    eachError( iteratee : ( error : any, key : string, object : Validatable ) => void, object : Validatable ){\r\n        this.each( ( value, key ) => {\r\n            if( value instanceof ValidationError ){\r\n                value._traverse( iteratee, object.get( key ) );\r\n            }\r\n            else{\r\n                iteratee( value, key, object );\r\n            }\r\n        });\r\n    }\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/validation.ts\n **/","/**\r\n * Some sketches for reference resolution.\r\n *\r\n * \r\n * a : Model.from( '~collection' )\r\n * \r\n * We need two functions. One for get, and one for compile. \r\n */\r\nexport interface Traversable {\r\n    getStore() : Traversable\r\n    getOwner() : Traversable\r\n    get( key : string ) : any \r\n}\r\n\r\nconst referenceMask =  /\\~|\\^|([^.]+)/g;\r\n\r\n// Compile reference to function\r\nexport function compileReference( reference : string ) : ( root : any ) => any {\r\n    const path = reference\r\n                    .match( referenceMask )\r\n                    .map( key => key === '~' ? 'getStrore()' : ( key === '^' ? 'getOwner()' : key ) )\r\n                    .join( '.' );\r\n\r\n    return <any> new Function( 'self', `return self.${ path };` );          \r\n}\r\n\r\nexport function resolveReference( root : Traversable, reference : string, action : ( object, key : string ) => any ) : any {\r\n    const path = reference.match( referenceMask ),\r\n          skip = path.length - 1;\r\n    \r\n    let self = root;\r\n\r\n    for( var i = 0; i < skip; i++ ){\r\n        const key = path[ i ];\r\n        switch( key ){\r\n            case '~' : self = self.getStore(); break;\r\n            case '^' : self = self.getOwner(); break;\r\n            default  : self = self.get( key );\r\n        }\r\n\r\n        // Do nothing if object on the path doesn't exist.\r\n        if( !self ) return;\r\n    }\r\n\r\n    action( self, path[ skip ] );\r\n    return self;\r\n}\r\n\r\n// Construct object reference { a : { b : { c : 0 } } }\r\nexport function referenceToObject( reference, value ){\r\n    const path = reference.split( '.' ),\r\n          root = {},\r\n          last = path.length - 1;\r\n    let current = root;\r\n\r\n    for( let i = 0; i < last; i++ ){\r\n        current = current[ path[ i ] ] = {};\r\n    }\r\n\r\n    current[ path[ last ] ] = value;\r\n\r\n    return root;\r\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/references.ts\n **/","import { GenericAttribute } from './attribute.ts';\r\nimport { Attribute, AttributesValues, AttributeDescriptorMap, CloneAttributesCtor } from './transaction.ts'\r\nimport { defaults, isValidJSON, transform } from '../tools.ts'\r\nimport { log } from '../tools.ts'\r\n\r\nexport interface DynamicMixin {\r\n    _attributes : AttributesSpec\r\n    Attributes : CloneAttributesCtor\r\n    properties : PropertyDescriptorMap\r\n    forEach? : ForEach\r\n    defaults : Defaults\r\n    _toJSON : ToJSON\r\n    _parse : Parse\r\n}\r\n\r\n// Refine AttributesSpec definition.\r\nexport interface AttributesSpec {\r\n    [ key : string ] : GenericAttribute\r\n}\r\n\r\ntype ForEach   = ( obj : {}, iteratee : ( val : any, key? : string, spec? : Attribute ) => void ) => void;\r\ntype Defaults  = ( attrs? : {} ) => {}\r\ntype Parse     = ( data : any ) => any;\r\ntype ToJSON    = () => any;\r\n\r\n// Compile attributes spec\r\nexport function compile( rawSpecs : AttributeDescriptorMap, baseAttributes : AttributesSpec ) : DynamicMixin {\r\n    const myAttributes = transform( <AttributesSpec>{}, rawSpecs, GenericAttribute.create ),\r\n          allAttributes = defaults( <AttributesSpec>{}, myAttributes, baseAttributes ),\r\n          Attributes = createCloneCtor( allAttributes ),\r\n          mixin : DynamicMixin = {\r\n            Attributes : Attributes,\r\n            _attributes : new Attributes( allAttributes ),\r\n            properties : transform( <PropertyDescriptorMap>{}, myAttributes, x => x.createPropertyDescriptor() ),\r\n            defaults : createDefaults( allAttributes ),\r\n            _toJSON : createToJSON( allAttributes ), // <- TODO: profile and check if there is any real benefit. I doubt it. \r\n            _parse : createParse( myAttributes, allAttributes )\r\n         }; \r\n\r\n    // Enable optimized forEach if warnings are disabled.\r\n    if( log.level > 0 ){\r\n        mixin.forEach = createForEach( allAttributes );\r\n    }\r\n\r\n    return mixin;\r\n}\r\n\r\nexport function createForEach( attrSpecs : AttributesSpec ) : ForEach {\r\n    let statements = [ 'var v, _a=this._attributes;' ];\r\n\r\n    for( let name in attrSpecs ){\r\n        statements.push( `( v = a.${name} ) === void 0 || f( v, \"${name}\", _a.${name} );` );\r\n    }\r\n\r\n    return <ForEach> new Function( 'a', 'f', statements.join( '' ) );\r\n}\r\n\r\nexport function createCloneCtor( attrSpecs : AttributesSpec ) : CloneAttributesCtor {\r\n    var statements = [];\r\n\r\n    for( let name in attrSpecs ){\r\n        statements.push( `this.${name} = x.${name};` );\r\n    }\r\n\r\n    var CloneCtor = new Function( \"x\", statements.join( '' ) );\r\n    CloneCtor.prototype = Object.prototype;\r\n    return <CloneAttributesCtor> CloneCtor;\r\n}\r\n\r\n// Create optimized model.defaults( attrs, options ) function\r\nfunction createDefaults( attrSpecs : AttributesSpec ) : Defaults {\r\n    let assign_f = ['var v;'], create_f = [];\r\n\r\n    function appendExpr( name, expr ){\r\n        assign_f.push( `this.${name} = ( v = a.${name} ) === void 0 ? ${expr} : v;` );\r\n        create_f.push( `this.${name} = ${expr};` );\r\n    }\r\n\r\n    // Compile optimized constructor function for efficient deep copy of JSON literals in defaults.\r\n    for( let name in attrSpecs ){\r\n        const attrSpec = attrSpecs[ name ],\r\n              { value, type } = attrSpec;\r\n\r\n        if( value === void 0 && type ){\r\n            // if type with no value is given, create an empty object\r\n            appendExpr( name, `i.${name}.create()` );//TODO: consider adding owner reference\r\n        }\r\n        else{\r\n            // If value is given, type casting logic will do the job later, converting value to the proper type.\r\n            if( isValidJSON( value ) ){\r\n                // JSON literals must be deep copied.\r\n                appendExpr( name, JSON.stringify( value ) );\r\n            }\r\n            else if( value === void 0 ){\r\n                // handle undefined value separately. Usual case for model ids.\r\n                appendExpr( name, 'void 0' );\r\n            }\r\n            else{\r\n                // otherwise, copy value by reference.\r\n                appendExpr( name, `i.${name}.value` );\r\n            }\r\n        }\r\n    }\r\n\r\n    const CreateDefaults : any = new Function( 'i', create_f.join( '' ) ),\r\n          AssignDefaults : any = new Function( 'a', 'i', assign_f.join( '' ) );\r\n\r\n    CreateDefaults.prototype = AssignDefaults.prototype = Object.prototype;\r\n\r\n    // Create model.defaults( attrs, options ) function\r\n    // 'attrs' will override default values, options will be passed to nested backbone types\r\n    return function( attrs? : {} ){ //TODO: Consider removing of the CreateDefaults. Currently is not used. May be used in Record costructor, though.\r\n        return attrs ? new AssignDefaults( attrs, this._attributes ) : new CreateDefaults( this._attributes );\r\n    }\r\n}\r\n\r\nfunction createParse( allAttrSpecs : AttributesSpec, attrSpecs : AttributesSpec ) : Parse {\r\n    var statements = [ 'var a=this._attributes;' ],\r\n        create     = false;\r\n\r\n    for( let name in allAttrSpecs ){\r\n        const local = attrSpecs[ name ];\r\n\r\n        // Is there any 'parse' option in local model definition?\r\n        if( local && local.parse ) create = true;\r\n\r\n        // Add statement for each attribute with 'parse' option.\r\n        if( allAttrSpecs[ name ].parse ){\r\n            const s = `r.${name} === void 0 ||( r.${name} = a.${name}.parse.call( this, r.${name}, \"${name}\") );`;\r\n            statements.push( s );\r\n        }\r\n    }\r\n\r\n    if( create ){\r\n        statements.push( 'return r;' );\r\n        return <any> new Function( 'r', statements.join( '' ) );\r\n    }\r\n }\r\n\r\nfunction createToJSON( attrSpecs : AttributesSpec ) : ToJSON {\r\n    let statements = [ `var json = {},v=this.attributes,a=this._attributes;` ];\r\n\r\n    for( let key in attrSpecs ){\r\n        const toJSON = attrSpecs[ key ].toJSON;\r\n\r\n        if( toJSON ){\r\n            statements.push( `json.${key} = a.${key}.toJSON.call( this, v.${ key }, '${key}' );` );\r\n        }\r\n    }\r\n\r\n    statements.push( `return json;` );\r\n\r\n    return <any> new Function( statements.join( '' ) );\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/record/define.ts\n **/","import { setAttribute, Record, Attribute, Transform, ChangeHandler, AttributeDescriptor } from './transaction.ts'\r\nimport { notEqual, assign } from '../tools.ts'\r\n\r\nimport { Owner, Transactional, TransactionOptions, Constructor } from '../types.ts'\r\n\r\ntype GetHook = ( value : any, key : string ) => any;\r\nexport type ChangeAttrHandler = ( ( value : any, attr : string ) => void ) | string;\r\n\r\ndeclare global {\r\n    interface Function {\r\n        _attribute : typeof GenericAttribute\r\n    }\r\n}\r\n\r\n// TODO: interface differs from options, do something obout it\r\nexport class GenericAttribute implements Attribute {\r\n    // Factory method to create attribute from options \r\n    static create( options : AttributeDescriptor, name : string ) : GenericAttribute {\r\n        const type = options.type,\r\n              AttributeCtor = type ? type._attribute : GenericAttribute;\r\n\r\n        return new AttributeCtor( name, options );\r\n    }\r\n    /**\r\n     * Update pipeline functions\r\n     * =========================\r\n     *\r\n     * Stage 0. canBeUpdated( value )\r\n     * - presence of this function implies attribute's ability to update in place.\r\n     */\r\n     canBeUpdated( prev, next ) : boolean {\r\n         return false;\r\n     }\r\n\r\n    /**\r\n     * Stage 1. Transform stage\r\n     */\r\n    transform( value, options, prev, model ) { return value; }\r\n\r\n    // convert attribute type to `this.type`\r\n    convert( value, options, model ) { return value; }\r\n\r\n    /**\r\n     * Stage 2. Check if attr value is changed\r\n     */\r\n    isChanged( a, b ) {\r\n        return notEqual( a, b );\r\n    }\r\n\r\n    /**\r\n     * Stage 3. Handle attribute change\r\n     */\r\n    handleChange( next, prev, model ) {}\r\n\r\n\r\n    /**\r\n     * End update pipeline definitions.\r\n     */\r\n\r\n    // create empty object passing backbone options to constructor...\r\n    create() { return new ( <any>this.type )(); }\r\n\r\n    // generic clone function for typeless attributes\r\n    // Must be overriden in sublass\r\n    clone( value, options : { deep? : boolean } = {} ) {\r\n        if( value && typeof value === 'object' ) {\r\n            // delegate to object's clone(), if it exist...\r\n            if( value.clone ) {\r\n                return value.clone( options );\r\n            }\r\n\r\n            if( options.deep ){\r\n                const proto = Object.getPrototypeOf( value );\r\n\r\n                // attempt to deep copy raw objects, assuming they are JSON\r\n                if( proto === Object.prototype || proto === Array.prototype ){\r\n                    return JSON.parse( JSON.stringify( value ) );\r\n                }\r\n            }\r\n        }\r\n\r\n        return value;\r\n    }\r\n\r\n    validate( record : Record, value : any, key : string ){}\r\n\r\n    toJSON( value, key ) {\r\n        return value && value.toJSON ? value.toJSON() : value;\r\n    }\r\n\r\n    createPropertyDescriptor() : PropertyDescriptor | void {\r\n        const { name, getHook } = this;\r\n\r\n        if( name !== 'id' ){\r\n            return {\r\n                // call to optimized set function for single argument.\r\n                set( value ){\r\n                    setAttribute( <any>this, name, value );\r\n                },\r\n\r\n                // attach get hook to the getter function, if present\r\n                get : getHook ?\r\n                      function() {\r\n                          return getHook.call( this, this.attributes[ name ], name );\r\n                      } :\r\n                      function() {\r\n                          return this.attributes[ name ];\r\n                      }\r\n            }\r\n        }\r\n    }\r\n\r\n    value : any\r\n    type : Constructor\r\n\r\n    parse : ( value, key : string ) => any\r\n\r\n    initialize( name : string, options ){}\r\n\r\n    constructor( public name : string, public options : AttributeDescriptor ) {\r\n        const {\r\n                  value, type, parse, toJSON,\r\n                  getHooks = [],\r\n                  transforms = [],\r\n                  changeHandlers = []\r\n              } = options;\r\n\r\n        this.value = value;\r\n        this.type  = type;\r\n\r\n        this.parse  = parse;\r\n        this.toJSON = toJSON === void 0 ? this.toJSON : toJSON;\r\n\r\n        /**\r\n         * Assemble pipelines...\r\n         */\r\n\r\n        // `convert` is default transform, which is always present...\r\n        this.transform = this.convert;\r\n\r\n        // No change handler by default\r\n        this.handleChange = null;\r\n\r\n        // Get hook from the attribute will be used first...\r\n        this.getHook = this.get || null;\r\n\r\n        // let subclasses configure the pipeline...\r\n        this.initialize.apply( this, arguments );\r\n\r\n        // let attribute spec configure the pipeline...\r\n        getHooks.forEach( gh => this.addGetHook( gh ) );\r\n        transforms.forEach( t => this.addTransform( t ) );\r\n        changeHandlers.forEach( ch => this.addChangeHandler( ch ) );\r\n    }\r\n\r\n    getHook : ( value, key : string ) => any\r\n    get : ( value, key : string ) => any\r\n\r\n    addGetHook( next : GetHook ) : void {\r\n        const prev = this.getHook;\r\n\r\n        this.getHook = prev ?\r\n                       function( value, name ) {\r\n                           const next = prev.call( value, name );\r\n                           return next.call( next, name );\r\n                       } : next;\r\n    }\r\n\r\n    addTransform( next : Transform ) : void {\r\n        const prev = this.transform;\r\n\r\n        this.transform = function( value, options, prev, model ) {\r\n                             const next = prev.call( this, value, options, prev, model );\r\n                             return next.call( this, next, options, prev, model );\r\n                         }\r\n    }\r\n\r\n    addChangeHandler( next : ChangeHandler ) : void {\r\n        const prev = this.handleChange;\r\n\r\n        this.handleChange = prev ?\r\n                            function( next, prev, model ) {\r\n                                prev.call( this, next, prev, model );\r\n                                next.call( this, next, prev, model );\r\n                            } : next;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/record/attribute.ts\n **/","import { Record } from './transaction' \r\nimport { GenericAttribute } from './attribute.ts'\r\nimport { Owner, Transactional, TransactionalConstructor, TransactionOptions } from '../types.ts' \r\n\r\nexport class TransactionalType extends GenericAttribute {\r\n    type : TransactionalConstructor;\r\n\r\n    canBeUpdated( prev : Transactional, next : any ) : boolean {\r\n        // If an object already exists, and new value is of incompatible type, let object handle the update.\r\n        return prev && next && !( next instanceof this.type );\r\n    }\r\n\r\n    convert( value : any, options : TransactionOptions, record : Record ){\r\n        // Invoke class factory to handle abstract classes\r\n        return value == null || value instanceof this.type ? value : this.type.create( value, options, record );\r\n    }\r\n\r\n    create() : Transactional {\r\n        return new this.type();\r\n    }\r\n\r\n    handleChange( next : Transactional, prev : Transactional, record : Record ){\r\n        // Remove reference to self\r\n        if( prev && prev._owner === record ){\r\n            prev._ownerKey = prev._owner = null;\r\n        } \r\n\r\n        // Take ownership if possible\r\n        if( next && !next._owner ){\r\n            next._owner = record;\r\n            next._ownerKey = this.name;\r\n        }\r\n    }\r\n}\r\n\r\nRecord._attribute = TransactionalType;\n\n\n/** WEBPACK FOOTER **\n ** ./src/record/nestedTypes.ts\n **/"]}