[
  {
    "__docId__": 0,
    "kind": "file",
    "name": "src/altInstance.js",
    "content": "/**\r\n * This is the alt instance that holds the state of the entire application.\r\n * All stores and actions are created on this instance.\r\n */\r\n\r\nimport Alt from 'alt';\r\n\r\nlet instance;\r\n\r\nsetAltInstance(new Alt());\r\n\r\nexport function setAltInstance(alt) {\r\n    if (instance) teardown(instance);\r\n    setup(alt);\r\n}\r\nexport function getAltInstance() {\r\n    return instance;\r\n}\r\n\r\n\r\n\r\nconst root = (global || window);\r\n\r\nfunction setup(alt) {\r\n    instance = alt;\r\n    if (process.env.NODE_ENV !== 'production') {\r\n\r\n        // Debugging with chrome devtools\r\n        // @see https://github.com/goatslacker/alt-devtool\r\n        require('alt-utils/lib/chromeDebug')(instance);\r\n\r\n        // sometimes, chromeDebug just doesn't update until an action is dispatched.\r\n        // we use a dummy action to do just that\r\n        const refreshAction = instance.generateActions('__refresh__').__refresh__;\r\n        instance.handleMessage = (e) => {\r\n            if (e.data && e.data.type === 'ALT' && e.data.source === 'alt-devtools') {\r\n                refreshAction.defer();\r\n            }\r\n        };\r\n        root && root.addEventListener && root.addEventListener('message', instance.handleMessage);\r\n    }\r\n}\r\nfunction teardown(alt) {\r\n    if (process.env.NODE_ENV !== 'production') {\r\n        root && root.removeEventListener && root.removeEventListener('message', instance.handleMessage);\r\n    }\r\n}",
    "static": true,
    "longname": "src/altInstance.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 1,
    "kind": "function",
    "name": "setAltInstance",
    "memberof": "src/altInstance.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/altInstance.js~setAltInstance",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/altInstance.js",
    "importStyle": "{setAltInstance}",
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "alt",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 2,
    "kind": "function",
    "name": "getAltInstance",
    "memberof": "src/altInstance.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/altInstance.js~getAltInstance",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/altInstance.js",
    "importStyle": "{getAltInstance}",
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 3,
    "kind": "variable",
    "name": "root",
    "memberof": "src/altInstance.js",
    "static": true,
    "longname": "src/altInstance.js~root",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/altInstance.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 4,
    "kind": "function",
    "name": "setup",
    "memberof": "src/altInstance.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/altInstance.js~setup",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/altInstance.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "alt",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 5,
    "kind": "function",
    "name": "teardown",
    "memberof": "src/altInstance.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/altInstance.js~teardown",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/altInstance.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 43,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "alt",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 6,
    "kind": "file",
    "name": "src/BindHandlers.js",
    "content": "import {\r\n    bind as bindAlt\r\n} from 'alt-utils/lib/decorators';\r\n\r\n\r\n// DEPRECATED\r\n// replace with \"calls and viewActions!\"\r\n\r\n\r\n/**\r\n * Creates a decorator for binding action handlers to a store.\r\n * A binding is created for each action that has a matching handler method mapping.\r\n *\r\n * The decorator takes any number of action handler definitions as arguments and applies their\r\n * bindings after concatinating them to a flat list, so you can pass either of these:\r\n * - an array of handler definitions\r\n * - any number of array of handler definitions\r\n * - any number of handlerdefinitions without arrays\r\n * - any mixed variation\r\n *\r\n * See manual/usage/action-handlers.md for more on this topic.\r\n */\r\nexport default function BindHandlers(...args) {\r\n    const definitions = args.reduce((result, def) => {\r\n        if (Array.isArray(def)) {\r\n            def.forEach(d => result.push(d));\r\n        }\r\n        else {\r\n            result.push(def);\r\n        }\r\n        return result;\r\n    }, []);\r\n    return function decorateStore(StoreClass) {\r\n        definitions.forEach(function bindActions({handler, bindings}, i) {\r\n            if (!handler || !handler.prototype) {\r\n                throw new Error('Invalid action handler');\r\n            }\r\n            // we need unique prefixes for the potentionally same method names\r\n            // using handler.prototype.constructor.name alone is useless after mangling/uglifying!\r\n            const name = `$${i}_${handler.prototype.constructor.name}`;\r\n            // collect the names of the methods defined in the handler decorator\r\n            const methodNames = Object.keys(bindings);\r\n            // now for each decorator method that has an action by the same name...\r\n            methodNames.forEach(function bindAction(methodName) {\r\n                if (typeof bindings[methodName] !== 'function') {\r\n                    throw new Error(`bindings.${methodName} is not a function (handler: ${name})`);\r\n                }\r\n                if (typeof handler.prototype[methodName] !== 'function') {\r\n                    throw new Error(`${name}.${methodName} is not a function`);\r\n                }\r\n                const storeMethodName = `${name}_${methodName}`;\r\n                // ...copy the method from the decorator class to the store class\r\n                StoreClass.prototype[storeMethodName] = handler.prototype[methodName];\r\n                // and bind the action to it, using Alt's 'bind' util\r\n                const applyBinding = bindAlt(bindings[methodName]);\r\n                applyBinding(\r\n                    StoreClass,\r\n                    storeMethodName,\r\n                    Object.getOwnPropertyDescriptor(StoreClass.prototype, storeMethodName)\r\n                );\r\n            });\r\n        });\r\n        return StoreClass;\r\n    };\r\n}\r\n\r\n",
    "static": true,
    "longname": "src/BindHandlers.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 7,
    "kind": "function",
    "name": "BindHandlers",
    "memberof": "src/BindHandlers.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/BindHandlers.js~BindHandlers",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/BindHandlers.js",
    "importStyle": "BindHandlers",
    "description": "Creates a decorator for binding action handlers to a store.\nA binding is created for each action that has a matching handler method mapping.\n\nThe decorator takes any number of action handler definitions as arguments and applies their\nbindings after concatinating them to a flat list, so you can pass either of these:\n- an array of handler definitions\n- any number of array of handler definitions\n- any number of handlerdefinitions without arrays\n- any mixed variation\n\nSee manual/usage/action-handlers.md for more on this topic.",
    "lineNumber": 23,
    "params": [
      {
        "name": "args",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 8,
    "kind": "file",
    "name": "src/callFactory.js",
    "content": "import {validateCreator, validateDefinition} from './utils/validate';\r\nimport {createLogger} from './utils/logging';\r\nimport createActions from './createActions';\r\n\r\nexport default function callFactory(name, {\r\n    namespace='global',\r\n    defaultActions=['loading', 'error', 'success'],\r\n    actions=createActions(`${namespace}:${name}`, defaultActions),\r\n    logger=createLogger(`${namespace}:${name}`),\r\n}={}) {\r\n    const errors = validateCreator({name, actions, logger}, logger);\r\n    const errorKeys = errors && Object.keys(errors);\r\n    if (errorKeys && errorKeys.length) {\r\n        throw new Error(errors[errorKeys[0]]);\r\n    }\r\n\r\n    return {\r\n\r\n        name,\r\n        actions,\r\n\r\n        create: (definition) => {\r\n            const createDefinition = typeof definition === 'function' ? definition : () => definition;\r\n            const call = Object.assign(createDefinition({name, actions, logger}), {\r\n                name,\r\n                actions,\r\n                logger\r\n            });\r\n            if (validateDefinition(call, logger)) {\r\n                throw new Error('Invalid call');\r\n            }\r\n            call.dataSource = {\r\n                // set the default actions\r\n                ...(call.actions || {}),\r\n                // set dataSource from the definition passed om - potentially overriding the actions\r\n                ...(call.dataSource || {})\r\n            };\r\n            return call;\r\n        },\r\n        createActions: (actionNames) => createActions(`${namespace}:${name}`, actionNames)\r\n    };\r\n}\r\n",
    "static": true,
    "longname": "src/callFactory.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 9,
    "kind": "function",
    "name": "callFactory",
    "memberof": "src/callFactory.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/callFactory.js~callFactory",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/callFactory.js",
    "importStyle": "callFactory",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "name",
        "types": [
          "*"
        ]
      },
      {
        "name": "objectPattern1",
        "optional": true,
        "types": [
          "{\"namespace\": *, \"defaultActions\": *, \"actions\": *, \"logger\": *}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "{\"name\": *, \"actions\": *, \"create\": *, \"createActions\": *}"
      ]
    }
  },
  {
    "__docId__": 10,
    "kind": "file",
    "name": "src/callSeries.js",
    "content": "import Promise from 'promise';\r\n/**\r\n * Retuns a promise and executes a series of calls.\r\n * Uses a timeout initially so that we don't run into errors when still in the middle of a dispatch.\r\n *\r\n *  import {callSeries} from 'shared/flux';\r\n *\r\n * @param {array} calls - An array of function that each returns a promise\r\n * @param {object} options - An array of function that each returns a promise\r\n * @param {boolean} options.log - Whether to log individual calls\r\n * @return {promise} - A promise that will be resolved when all calls succeeded or rejected if one call failed\r\n */\r\nexport default function callSeries(calls, {log = false} =  {}) {\r\n    return new Promise((resolve, reject) => {\r\n        let results = [];\r\n        setTimeout(() => {\r\n            function series(list) {\r\n                log && console.log('[callSeries] list', list);\r\n                var p = Promise.resolve();\r\n                return list.reduce(function(pacc, fn) {\r\n                    return pacc = pacc.then(res => {\r\n                        log && console.log('[callSeries] res', res);\r\n                        results.push(res);\r\n                        return fn(res);\r\n                    });\r\n                }, p);\r\n            }\r\n            series(calls)\r\n                .then(() => setTimeout(() => resolve(results)))\r\n                .catch((err) => reject(err));\r\n        });\r\n    });\r\n}\r\n",
    "static": true,
    "longname": "src/callSeries.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 11,
    "kind": "function",
    "name": "callSeries",
    "memberof": "src/callSeries.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/callSeries.js~callSeries",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/callSeries.js",
    "importStyle": "callSeries",
    "description": "Retuns a promise and executes a series of calls.\nUses a timeout initially so that we don't run into errors when still in the middle of a dispatch.\n\n import {callSeries} from 'shared/flux';",
    "lineNumber": 13,
    "params": [
      {
        "nullable": null,
        "types": [
          "array"
        ],
        "spread": false,
        "optional": false,
        "name": "calls",
        "description": "An array of function that each returns a promise"
      },
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "options",
        "description": "An array of function that each returns a promise"
      },
      {
        "nullable": null,
        "types": [
          "boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "options.log",
        "description": "Whether to log individual calls"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "promise"
      ],
      "spread": false,
      "description": "A promise that will be resolved when all calls succeeded or rejected if one call failed"
    }
  },
  {
    "__docId__": 12,
    "kind": "file",
    "name": "src/createActions.js",
    "content": "import {getAltInstance} from './altInstance';\r\n\r\n/**\r\n * Creates simple (data-pass-through) actions with a namespace.\r\n * Basically just like `alt.generateActions`, but within a given namespace instead of 'global'.\r\n *\r\n * @param {string} namespace - The namespace to use for the actions\r\n * @param {array<string>} actions - An array of action names\r\n * @return {object} An object containing the generated actions and constants\r\n */\r\nexport default function createActions(namespace, actions) {\r\n    return getAltInstance().createActions({\r\n        name: namespace,\r\n        ...[].concat(actions).reduce((result, action) => {\r\n            result[action] = (data={}) => data;\r\n            return result;\r\n        }, {})\r\n    });\r\n}\r\n",
    "static": true,
    "longname": "src/createActions.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 13,
    "kind": "function",
    "name": "createActions",
    "memberof": "src/createActions.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/createActions.js~createActions",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/createActions.js",
    "importStyle": "createActions",
    "description": "Creates simple (data-pass-through) actions with a namespace.\nBasically just like `alt.generateActions`, but within a given namespace instead of 'global'.",
    "lineNumber": 11,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "namespace",
        "description": "The namespace to use for the actions"
      },
      {
        "nullable": null,
        "types": [
          "array<string>"
        ],
        "spread": false,
        "optional": false,
        "name": "actions",
        "description": "An array of action names"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "object"
      ],
      "spread": false,
      "description": "An object containing the generated actions and constants"
    }
  },
  {
    "__docId__": 14,
    "kind": "file",
    "name": "src/createStore.js",
    "content": "import Immutable from 'immutable';\r\nimport { decorate, datasource, bind } from 'alt-utils/lib/decorators';\r\nimport immutable from 'alt-utils/lib/ImmutableUtil';\r\n\r\nimport {getAltInstance} from './altInstance';\r\nimport ImmutableStore from './ImmutableStore';\r\nimport getSources from './getSources';\r\n\r\nimport bindCalls from './decorators/bindCalls';\r\nimport bindActions from './decorators/bindActions';\r\n\r\nexport default function createStore(displayName, {\r\n    alt,\r\n    state,\r\n    calls,\r\n    sources,\r\n    viewActions\r\n} = {}) {\r\n\r\n    if (!displayName) {\r\n        throw new Error('displayName is required');\r\n    }\r\n\r\n    alt = alt || getAltInstance();\r\n    state = state || Immutable.fromJS({});\r\n\r\n    calls = calls || [];\r\n    sources = sources || getSources(calls);\r\n    viewActions = viewActions || [];\r\n\r\n    return alt.createStore((\r\n        @decorate(alt)\r\n        @datasource(sources)\r\n        @bindCalls(calls)\r\n        @bindActions(viewActions)\r\n        @immutable\r\n        class extends ImmutableStore {\r\n            constructor() {\r\n                super(state);\r\n            }\r\n        }\r\n    ), displayName);\r\n\r\n}\r\n",
    "static": true,
    "longname": "src/createStore.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 15,
    "kind": "function",
    "name": "createStore",
    "memberof": "src/createStore.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/createStore.js~createStore",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/createStore.js",
    "importStyle": "createStore",
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "displayName",
        "types": [
          "*"
        ]
      },
      {
        "name": "objectPattern1",
        "optional": true,
        "types": [
          "{\"alt\": *, \"state\": *, \"calls\": *, \"sources\": *, \"viewActions\": *}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 16,
    "kind": "file",
    "name": "src/decorators/bindActions.js",
    "content": "import {bind} from 'alt-utils/lib/decorators';\r\nimport flatten from '../utils/flatten';\r\nimport {getLevel as getLogLevel, logLevel} from '../utils/logging';\r\n\r\n/**\r\n * Decorates a store with any number of viewAction definitions.\r\n */\r\nexport default function bindActions(...args) {\r\n    return function decorate(storeClass) {\r\n        const calls = flatten(args);\r\n        calls.forEach(call => bindViewActionHandler(storeClass, call));\r\n        return storeClass;\r\n    };\r\n}\r\n\r\n\r\nfunction bindViewActionHandler(storeClass, definition) {\r\n\r\n    const {name, action, reducer, sideEffect, logger, logging} = definition;\r\n\r\n    const handlerName = `${name}`;\r\n\r\n    if (storeClass.prototype[handlerName]) throw new Error(`Duplicate handler \"${handlerName}\"`);\r\n\r\n    storeClass.prototype[handlerName] = function handleViewAction(payload) {\r\n\r\n        if (logging || getLogLevel() === logLevel.FORCE) {\r\n            logger[payload instanceof Error ? 'error' : 'log'](payload && payload.toJS ? payload.toJS() : payload);\r\n        }\r\n\r\n        const currentState = this.state;\r\n        let nextState = currentState;\r\n\r\n        try {\r\n            nextState = reducer && reducer(currentState, payload);\r\n        }\r\n        catch (error) {\r\n            console.error(`${handlerName}: error executing reducer`, error);\r\n        }\r\n\r\n        if (nextState && nextState !== currentState) {\r\n            this.setState(nextState);\r\n        }\r\n\r\n        if (sideEffect) {\r\n            setTimeout(() => {\r\n                try {\r\n                    sideEffect({state: nextState, prevState: currentState, payload});\r\n                }\r\n                catch (error) {\r\n                    console.error(`${handlerName}: error executing sideEffect`, error);\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    const bindActionHandler = bind(action);\r\n\r\n    bindActionHandler(\r\n        storeClass,\r\n        handlerName,\r\n        Object.getOwnPropertyDescriptor(storeClass.prototype, handlerName)\r\n    );\r\n\r\n};\r\n",
    "static": true,
    "longname": "src/decorators/bindActions.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 17,
    "kind": "function",
    "name": "bindActions",
    "memberof": "src/decorators/bindActions.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/bindActions.js~bindActions",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/decorators/bindActions.js",
    "importStyle": "bindActions",
    "description": "Decorates a store with any number of viewAction definitions.",
    "lineNumber": 8,
    "params": [
      {
        "name": "args",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 18,
    "kind": "function",
    "name": "bindViewActionHandler",
    "memberof": "src/decorators/bindActions.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/bindActions.js~bindViewActionHandler",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/bindActions.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "storeClass",
        "types": [
          "*"
        ]
      },
      {
        "name": "definition",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 19,
    "kind": "file",
    "name": "src/decorators/bindCalls.js",
    "content": "import {bind} from 'alt-utils/lib/decorators';\r\nimport flatten from '../utils/flatten';\r\nimport {getLevel as getLogLevel, logLevel} from '../utils/logging';\r\n/**\r\n * Decorates a store with any number of call definitions.\r\n */\r\nexport default function bindCalls(...args) {\r\n    return function decorate(storeClass) {\r\n        const calls = flatten(args);\r\n        calls.forEach(call => decorateStoreWithCall(storeClass, call));\r\n        return storeClass;\r\n    };\r\n}\r\n\r\n/**\r\n * Decorates a store with a single call definition.\r\n * Attaches the dataSource specified in the call definition using alt's datasource decorator.\r\n * Creates and binds a handler function for all reducers and actions specified in the call definition.\r\n */\r\nfunction decorateStoreWithCall(storeClass, callDefinition) {\r\n    const actionNames = Object.keys(callDefinition.actions).reduce((result, key) => {\r\n        // remove ACTION_CONSTANT variants generated by alt\r\n        if (result.indexOf(key.toLowerCase()) === -1) {\r\n            result.push(key);\r\n        }\r\n        return result;\r\n    }, []);\r\n    actionNames.forEach(reducerName => {\r\n        bindReducerHandler(reducerName, storeClass, callDefinition);\r\n    });\r\n}\r\n\r\n/**\r\n * Attaches a single reducer handling to the store.\r\n * A new handler method will be created on the store for each action associated\r\n * with a reducer (defaults to the action names: loading, error, success). Each handler will pass\r\n * the current state and the action payload to the reducer with the same name\r\n * and mutate the store with the new state returned by the reducer.\r\n * Any sideEffects defined in the call will be executed with a ({state, prevState, payload}) signature.\r\n */\r\nfunction bindReducerHandler(reducerName, storeClass, callDefinition) {\r\n\r\n    const handlerName = `_${callDefinition.name}_${reducerName}`;\r\n\r\n    if (storeClass.prototype[handlerName]) throw new Error(`Duplicate handler \"${handlerName}\"`);\r\n\r\n    storeClass.prototype[handlerName] = function handleCallAction(payload) {\r\n\r\n        const reducer = callDefinition.hasOwnProperty('reducers') && callDefinition.reducers[reducerName];\r\n        const sideEffect = callDefinition.hasOwnProperty('sideEffects') && callDefinition.sideEffects[reducerName];\r\n        const logging = callDefinition.hasOwnProperty('logging') && callDefinition.logging;\r\n        const logger = callDefinition.hasOwnProperty('logger') && callDefinition.logger;\r\n        const isError = payload instanceof Error;\r\n        if (isError) {\r\n            if (payload.response && payload.response.body && payload.response.body.message) {\r\n                logger.error(reducerName, payload.response.body.message);\r\n            }\r\n            // logger.debug(payload);\r\n        }\r\n        else if (logging || getLogLevel() === logLevel.FORCE) {\r\n            logger[isError ? 'error' : 'log'](reducerName, payload && payload.toJS ? payload.toJS() : payload);\r\n        }\r\n\r\n        const currentState = this.state;\r\n        let nextState = currentState;\r\n\r\n        if (reducer) {\r\n            //console.log(`[${handlerName}]`, payload, callDefinition);\r\n            try {\r\n                nextState = reducer(currentState, payload);\r\n            }\r\n            catch (error) {\r\n                console.error(`Error in reducer (${callDefinition.name}, ${reducerName})`, error);\r\n            }\r\n        }\r\n\r\n        if (reducer && !nextState) console.warn(`reducer \"${reducerName}\" in call \"${callDefinition.name}\" did not return a new state. Either you forgot to return it, or you should consider using a sideEffect instead of a reducer if no return value is needed.`);\r\n\r\n        if (nextState) {\r\n            this.setState(nextState);\r\n        }\r\n\r\n        if (sideEffect) {\r\n            setTimeout(() => {\r\n                try {\r\n                    sideEffect({state: nextState, prevState: currentState, payload});\r\n                }\r\n                catch (error) {\r\n                    console.error(`Error in sideEffect (${callDefinition.name}, ${reducerName})`, error);\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    const action = callDefinition.actions[reducerName];\r\n    const bindActionHandler = bind(action);\r\n\r\n    bindActionHandler(\r\n        storeClass,\r\n        handlerName,\r\n        Object.getOwnPropertyDescriptor(storeClass.prototype, handlerName)\r\n    );\r\n\r\n};\r\n",
    "static": true,
    "longname": "src/decorators/bindCalls.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 20,
    "kind": "function",
    "name": "bindCalls",
    "memberof": "src/decorators/bindCalls.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/bindCalls.js~bindCalls",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/decorators/bindCalls.js",
    "importStyle": "bindCalls",
    "description": "Decorates a store with any number of call definitions.",
    "lineNumber": 7,
    "params": [
      {
        "name": "args",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 21,
    "kind": "function",
    "name": "decorateStoreWithCall",
    "memberof": "src/decorators/bindCalls.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/bindCalls.js~decorateStoreWithCall",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/bindCalls.js",
    "importStyle": null,
    "description": "Decorates a store with a single call definition.\nAttaches the dataSource specified in the call definition using alt's datasource decorator.\nCreates and binds a handler function for all reducers and actions specified in the call definition.",
    "lineNumber": 20,
    "params": [
      {
        "name": "storeClass",
        "types": [
          "*"
        ]
      },
      {
        "name": "callDefinition",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 22,
    "kind": "function",
    "name": "bindReducerHandler",
    "memberof": "src/decorators/bindCalls.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/bindCalls.js~bindReducerHandler",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/bindCalls.js",
    "importStyle": null,
    "description": "Attaches a single reducer handling to the store.\nA new handler method will be created on the store for each action associated\nwith a reducer (defaults to the action names: loading, error, success). Each handler will pass\nthe current state and the action payload to the reducer with the same name\nand mutate the store with the new state returned by the reducer.\nAny sideEffects defined in the call will be executed with a ({state, prevState, payload}) signature.",
    "lineNumber": 41,
    "params": [
      {
        "name": "reducerName",
        "types": [
          "*"
        ]
      },
      {
        "name": "storeClass",
        "types": [
          "*"
        ]
      },
      {
        "name": "callDefinition",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 23,
    "kind": "file",
    "name": "src/decorators/bindHandlers.js",
    "content": "import {bind} from 'alt-utils/lib/decorators';\r\nimport flattenArrays from '../utils/flatten';\r\n\r\n/**\r\n * Decorates a store with any number of action handlers.\r\n */\r\nexport default function bindHandlers(actions, ...handlers) {\r\n    return function decorateStore(storeClass) {\r\n        // attach bound handler methods to the store class for each handler definition\r\n        flattenArrays(handlers).forEach(handler => attachBoundHandler(storeClass, actions[handler.name], handler));\r\n        return storeClass;\r\n    };\r\n}\r\n/**\r\n * Attaches a single reducer handling to the store.\r\n *\r\n * A new handler method will be created on the store class.\r\n * The handler method invokes the reducer giving it the current store state.\r\n * It then sets the reducer result as the new store state.\r\n *\r\n * If a sideEffect function is defined, it will be called with the signature `{state, prevState, payload}`\r\n *\r\n * @param {object} storeClass - The class of the store to be decorated\r\n * @param {object} action - An altjs action\r\n * @param {object} handler - An handler object with `{name[, reducer, sideEffect]}`\r\n */\r\nfunction attachBoundHandler(storeClass, action, handler) {\r\n    // name is required\r\n\r\n    const methodName = `__handle_${handler.name}`;\r\n\r\n    if (storeClass.prototype[methodName]) throw new Error(`Duplicate method \"${methodName}\"`);\r\n\r\n    /**\r\n     * Handles an action call and sets the next state of the store.\r\n     *\r\n     * @param {any} payload - the single argument that can be specified when calling an action.\r\n     *                      If you need to use more than one argument, use an object with any properties you need.\r\n     */\r\n    storeClass.prototype[methodName] = function handleAction(payload) {\r\n\r\n        const reducer = handler.hasOwnProperty('reducer') && handler.reducer;\r\n        const sideEffect = handler.hasOwnProperty('sideEffect') && handler.sideEffect;\r\n\r\n        const currentState = this.state;\r\n\r\n\r\n        // the actual operation: run the reducer and set its result as state\r\n        let nextState = currentState;\r\n        if (reducer) {\r\n            try {\r\n                nextState = reducer(currentState, payload);\r\n            }\r\n            catch (error) {\r\n                console.error(`Error in reducer (${handler.name}, ${handler.name})`, error);\r\n            }\r\n        }\r\n        if (nextState) {\r\n            this.setState(nextState);\r\n        }\r\n        else if (reducer) {\r\n            console.warn(`reducer \"${handler.name}\" in call \"${handler.name}\" did not return a new state.\r\n                Either you forgot to return it, or if no state change is required, maybe you should use a sideEffect instead of a reducer.\r\n            `);\r\n        }\r\n\r\n\r\n\r\n        if (sideEffect) {\r\n            try {\r\n                sideEffect({state: nextState, prevState: currentState, payload});\r\n            }\r\n            catch (error) {\r\n                console.error(`Error in sideEffect (${handler.name}, ${handler.name})`, error);\r\n            }\r\n        }\r\n    };\r\n\r\n    const bindhandler = bind(action);\r\n\r\n    bindhandler(\r\n        storeClass,\r\n        methodName,\r\n        Object.getOwnPropertyDescriptor(storeClass.prototype, methodName)\r\n    );\r\n\r\n};\r\n",
    "static": true,
    "longname": "src/decorators/bindHandlers.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 24,
    "kind": "function",
    "name": "bindHandlers",
    "memberof": "src/decorators/bindHandlers.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/bindHandlers.js~bindHandlers",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/decorators/bindHandlers.js",
    "importStyle": "bindHandlers",
    "description": "Decorates a store with any number of action handlers.",
    "lineNumber": 7,
    "params": [
      {
        "name": "actions",
        "types": [
          "*"
        ]
      },
      {
        "name": "handlers",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 25,
    "kind": "function",
    "name": "attachBoundHandler",
    "memberof": "src/decorators/bindHandlers.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/bindHandlers.js~attachBoundHandler",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/bindHandlers.js",
    "importStyle": null,
    "description": "Attaches a single reducer handling to the store.\n\nA new handler method will be created on the store class.\nThe handler method invokes the reducer giving it the current store state.\nIt then sets the reducer result as the new store state.\n\nIf a sideEffect function is defined, it will be called with the signature `{state, prevState, payload}`",
    "lineNumber": 27,
    "params": [
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "storeClass",
        "description": "The class of the store to be decorated"
      },
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "action",
        "description": "An altjs action"
      },
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "handler",
        "description": "An handler object with `{name[, reducer, sideEffect]}`"
      }
    ]
  },
  {
    "__docId__": 26,
    "kind": "file",
    "name": "src/decorators/connect.js",
    "content": "import connectToStores from 'alt-utils/lib/connectToStores';\r\nimport React, { createElement } from 'react';\r\n\r\n// TODO: deprecate connectAlternative asap!\r\n\r\n\r\n/* eslint-disable */\r\n/**\r\n * A component decorator for connecting to immutable stores.\r\n *\r\n * Basically a wrapper around `alt/utils/connectToStores`.  \r\n * Adds the necessary static methods `getStores()` and `getPropsFromStores()` to the decorated component.\r\n *\r\n * - Supports multiple stores.\r\n * - Supports a simplified, string-based access to stores, with optional renaming of props.\r\n * - Supports more flexible, redux-like access to stores using mapper functions.\r\n *\r\n * ### String notation\r\n *\r\n * @example\r\n * @connect([{store: MyStore, props: ['myValue', 'anotherValue']}])\r\n * export default class MyComponent extends React.Component {\r\n *      render() {\r\n *          const {myValue, anotherValue} = this.props;\r\n *          ...\r\n *      }\r\n * }\r\n *\r\n * You can rename props using the ` as ` alias syntax\r\n *\r\n * @example\r\n * @connect([{\r\n *      store: PeopleStore,\r\n *      props: ['items as people']\r\n * }, {\r\n *      store: ProductStore,\r\n *      props: ['items as products']\r\n * }])\r\n * export default class MyComponent extends React.Component {\r\n *      render() {\r\n *          // this.props.people, this.props.products, ...\r\n *      }\r\n * }\r\n *\r\n * ### Function notation\r\n *\r\n * Use mapper functions instead of strings in order to manually retrieve store values.\r\n * The function receives the store state and the component props.\r\n *\r\n * @example\r\n * @connect([{\r\n *      store: MyStore,\r\n *      props: (state, props) => {\r\n *          return {\r\n *              item: state.get('items').filter(item => item.get('id') === props.id)\r\n *          }\r\n *      }\r\n * }])\r\n * export default class MyComponent extends React.Component {\r\n *      render() {\r\n *          const item = this.props.item;\r\n *      }\r\n * }\r\n *\r\n * Technically, you could also mix all access methods, but this defeats the purpose of simple access:\r\n *\r\n * @example\r\n * @connect([{\r\n *      store: MyStore,\r\n *      props: ['someProp', 'anotherProp', (state, props) => {\r\n *          return {\r\n *              item: state.get('items').filter(item => item.get('id') === props.id)\r\n *          }\r\n *      }, 'some.nested.value as foo']\r\n * }])\r\n * export default class MyComponent extends React.Component {\r\n *      ...\r\n * }\r\n *\r\n * There are however valid usecase for mixing access methods. For example, you might have keys that themselves contain dots.\r\n * For example, that is the case when using `validate.js` with nested constraints and keeping validation results in the store.\r\n * There might be an `errors` map in your storewith keys like `user.address.street`. In such a case you wouldn't be able to access those values because the dots do not\r\n * represent the actual keyPath in the tree:\r\n *\r\n * @example\r\n * @connect([{\r\n *   store,\r\n *   props: ['user.address.street', (state) => ({errors: state.getIn(['errors', 'user.address.street'])})]\r\n * }])\r\n *\r\n * @see https://github.com/goatslacker/alt/blob/master/docs/utils/immutable.md\r\n * @see https://github.com/goatslacker/alt/blob/master/src/utils/connectToStores.js\r\n *\r\n * @param {Array<{store: AltStore, props: Array<string>}>} definitions - A list of objects that each define a store connection\r\n */\r\n/* eslint-enable */\r\nexport default function connect(definitions) {\r\n    return function(targetClass) {\r\n        targetClass.getStores = function() {\r\n            return definitions.map((def) => def.store);\r\n        };\r\n        targetClass.getPropsFromStores = function(componentProps) {\r\n            return definitions.reduce((result, def) => {\r\n                if (typeof def.props === 'function') {\r\n                    // the props definition is itself a function. return with its result.\r\n                    return Object.assign(result, def.props(def.store.state, componentProps));\r\n                }\r\n                // the props definition is an array. evaluate and reduce each of its elements\r\n                return def.props.reduce((result, accessor) => {\r\n                    return Object.assign(result, mapProps(accessor, def.store.state, componentProps));\r\n                }, result);\r\n            }, {});\r\n        };\r\n        return connectToStores(targetClass);\r\n    };\r\n}\r\n\r\nfunction mapProps(accessor, state, props) {\r\n    switch (typeof accessor) {\r\n        case 'function':\r\n            return mapFuncAccessor(accessor, state, props);\r\n        case 'string':\r\n            return mapStringAccessor(accessor, state);\r\n    }\r\n}\r\n\r\nfunction mapFuncAccessor(accessor, state, props) {\r\n    return accessor(state, props);\r\n}\r\n\r\nfunction mapStringAccessor(accessor, state) {\r\n    const {keyPath, propName} = parseAccessor(accessor);\r\n    return {\r\n        [propName]: state.getIn(keyPath)\r\n    };\r\n}\r\n\r\n/**\r\n * Takes the accessor defined by the component and retrieves `keyPath` and `propName`\r\n * The accessor may be the name of a top-level value in the store, or a path to a nested value.\r\n * Nested values can be accessed using a dot-separated syntax (e.g. `some.nested.value`).\r\n *\r\n * The name of the prop received by the component is the last part of the accessor in case of\r\n * a nested syntax, or the accessor itself in case of a simple top-level accessor.\r\n *\r\n * If you need to pass the value using a different prop name, you can use the ` as ` alias syntax,\r\n * e.g. `someProp as myProp` or `some.prop as myProp`.\r\n *\r\n * examples:\r\n *\r\n *      'someValue' // {keyPath: ['someValue'], propName: 'someValue'}\r\n *      'someValue as foo' // {keyPath: ['someValue'], propName: 'foo'}\r\n *      'some.nested.value' // {keyPath: ['some', 'nested', 'value'], propName: 'value'}\r\n *      'some.nested.value as foo' // {keyPath: ['some', 'nested', 'value'], propName: 'foo'}\r\n *\r\n * @param {string} string - The value accessor passed by the component decorator.\r\n * @return {object} result - A `{storeName, propName}` object\r\n * @return {string} result.keyPath - An immutablejs keyPath array to the value in the store\r\n * @return {string} result.propName - name for the prop as expected by the component\r\n */\r\nfunction parseAccessor(accessor) {\r\n    let keyPath, propName;\r\n    if (accessor.indexOf(' as ') > -1) {\r\n        // e.g. 'foo as bar' or 'some.foo as bar'\r\n        const parts = accessor.split(' as ');\r\n        keyPath = parts[0].split('.');\r\n        propName = parts[1];\r\n    }\r\n    else {\r\n        // e.g. 'foo' or 'some.foo'\r\n        keyPath = accessor.split('.');\r\n        propName = keyPath[keyPath.length - 1];\r\n    }\r\n    return {keyPath, propName};\r\n}\r\n\r\n\r\nfunction connectAlternative(store, mapStateToProps, WrappedComponent) {\r\n    return class Connect extends React.Component {\r\n\r\n        constructor(props, context) {\r\n            super(props, context);\r\n            const storeState = store.getState();\r\n            this.state = { storeState: mapStateToProps(storeState, props) };\r\n        }\r\n\r\n        componentDidMount() {\r\n            this._isMounted = true;\r\n            this.storeSubscription = store.listen(this.handleStoreUpdate);\r\n        }\r\n\r\n        componentWillUnmount() {\r\n            this._isMounted = false;\r\n            if (this.storeSubscription) {\r\n                store.unlisten(this.storeSubscription);\r\n            }\r\n        }\r\n\r\n        // if we use props in mapStateToProps,\r\n        // we need to run it again when props have changed\r\n        componentWillReceiveProps(nextProps) {\r\n            //untested! should work though\r\n            if(mapStateToProps.length > 1) {\r\n                this.setState({storeState: mapStateToProps(store.getState(), nextProps)});\r\n            }\r\n        }\r\n\r\n        handleStoreUpdate = state => {\r\n            if(this._isMounted) {\r\n                this.setState({ storeState: mapStateToProps(state, this.props) });\r\n            }\r\n        }\r\n\r\n        render() {\r\n            const mergedProps = { ...this.props, ...this.state.storeState };\r\n            return createElement(WrappedComponent, mergedProps);\r\n        }\r\n\r\n    };\r\n}\r\n\r\nexport {connectAlternative};\r\n",
    "static": true,
    "longname": "src/decorators/connect.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 27,
    "kind": "function",
    "name": "connect",
    "memberof": "src/decorators/connect.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/connect.js~connect",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/decorators/connect.js",
    "importStyle": "connect",
    "description": "A component decorator for connecting to immutable stores.\n\nBasically a wrapper around `alt/utils/connectToStores`.  \nAdds the necessary static methods `getStores()` and `getPropsFromStores()` to the decorated component.\n\n- Supports multiple stores.\n- Supports a simplified, string-based access to stores, with optional renaming of props.\n- Supports more flexible, redux-like access to stores using mapper functions.\n\n### String notation",
    "examples": [
      "@connect([{store: MyStore, props: ['myValue', 'anotherValue']}])\nexport default class MyComponent extends React.Component {\n     render() {\n         const {myValue, anotherValue} = this.props;\n         ...\n     }\n}\n\nYou can rename props using the ` as ` alias syntax",
      "@connect([{\n     store: PeopleStore,\n     props: ['items as people']\n}, {\n     store: ProductStore,\n     props: ['items as products']\n}])\nexport default class MyComponent extends React.Component {\n     render() {\n         // this.props.people, this.props.products, ...\n     }\n}\n\n### Function notation\n\nUse mapper functions instead of strings in order to manually retrieve store values.\nThe function receives the store state and the component props.",
      "@connect([{\n     store: MyStore,\n     props: (state, props) => {\n         return {\n             item: state.get('items').filter(item => item.get('id') === props.id)\n         }\n     }\n}])\nexport default class MyComponent extends React.Component {\n     render() {\n         const item = this.props.item;\n     }\n}\n\nTechnically, you could also mix all access methods, but this defeats the purpose of simple access:",
      "@connect([{\n     store: MyStore,\n     props: ['someProp', 'anotherProp', (state, props) => {\n         return {\n             item: state.get('items').filter(item => item.get('id') === props.id)\n         }\n     }, 'some.nested.value as foo']\n}])\nexport default class MyComponent extends React.Component {\n     ...\n}\n\nThere are however valid usecase for mixing access methods. For example, you might have keys that themselves contain dots.\nFor example, that is the case when using `validate.js` with nested constraints and keeping validation results in the store.\nThere might be an `errors` map in your storewith keys like `user.address.street`. In such a case you wouldn't be able to access those values because the dots do not\nrepresent the actual keyPath in the tree:",
      "@connect([{\n  store,\n  props: ['user.address.street', (state) => ({errors: state.getIn(['errors', 'user.address.street'])})]\n}])"
    ],
    "see": [
      "https://github.com/goatslacker/alt/blob/master/docs/utils/immutable.md",
      "https://github.com/goatslacker/alt/blob/master/src/utils/connectToStores.js"
    ],
    "lineNumber": 97,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array<{store: AltStore, props: Array<string>}>"
        ],
        "spread": false,
        "optional": false,
        "name": "definitions",
        "description": "A list of objects that each define a store connection"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 28,
    "kind": "function",
    "name": "mapProps",
    "memberof": "src/decorators/connect.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/connect.js~mapProps",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/connect.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 118,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "accessor",
        "types": [
          "*"
        ]
      },
      {
        "name": "state",
        "types": [
          "*"
        ]
      },
      {
        "name": "props",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 29,
    "kind": "function",
    "name": "mapFuncAccessor",
    "memberof": "src/decorators/connect.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/connect.js~mapFuncAccessor",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/connect.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 127,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "accessor",
        "types": [
          "*"
        ]
      },
      {
        "name": "state",
        "types": [
          "*"
        ]
      },
      {
        "name": "props",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 30,
    "kind": "function",
    "name": "mapStringAccessor",
    "memberof": "src/decorators/connect.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/connect.js~mapStringAccessor",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/connect.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 131,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "accessor",
        "types": [
          "*"
        ]
      },
      {
        "name": "state",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "{\"propName\": *}"
      ]
    }
  },
  {
    "__docId__": 31,
    "kind": "function",
    "name": "parseAccessor",
    "memberof": "src/decorators/connect.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/connect.js~parseAccessor",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/decorators/connect.js",
    "importStyle": null,
    "description": "Takes the accessor defined by the component and retrieves `keyPath` and `propName`\nThe accessor may be the name of a top-level value in the store, or a path to a nested value.\nNested values can be accessed using a dot-separated syntax (e.g. `some.nested.value`).\n\nThe name of the prop received by the component is the last part of the accessor in case of\na nested syntax, or the accessor itself in case of a simple top-level accessor.\n\nIf you need to pass the value using a different prop name, you can use the ` as ` alias syntax,\ne.g. `someProp as myProp` or `some.prop as myProp`.\n\nexamples:\n\n     'someValue' // {keyPath: ['someValue'], propName: 'someValue'}\n     'someValue as foo' // {keyPath: ['someValue'], propName: 'foo'}\n     'some.nested.value' // {keyPath: ['some', 'nested', 'value'], propName: 'value'}\n     'some.nested.value as foo' // {keyPath: ['some', 'nested', 'value'], propName: 'foo'}",
    "lineNumber": 161,
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "string",
        "description": "The value accessor passed by the component decorator."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": "result.propName - name for the prop as expected by the component"
    }
  },
  {
    "__docId__": 32,
    "kind": "function",
    "name": "connectAlternative",
    "memberof": "src/decorators/connect.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/decorators/connect.js~connectAlternative",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/decorators/connect.js",
    "importStyle": "{connectAlternative}",
    "description": null,
    "lineNumber": 178,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "store",
        "types": [
          "*"
        ]
      },
      {
        "name": "mapStateToProps",
        "types": [
          "*"
        ]
      },
      {
        "name": "WrappedComponent",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 33,
    "kind": "file",
    "name": "src/getSources.js",
    "content": "export default function getSources(calls) {\r\n    return calls.reduce((dataSource, call) => {\r\n        return Object.assign(dataSource, {\r\n            [call.name]: () => call.dataSource\r\n        });\r\n    }, {});\r\n}\r\n",
    "static": true,
    "longname": "src/getSources.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 34,
    "kind": "function",
    "name": "getSources",
    "memberof": "src/getSources.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/getSources.js~getSources",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/getSources.js",
    "importStyle": "getSources",
    "description": null,
    "lineNumber": 1,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "calls",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 35,
    "kind": "file",
    "name": "src/handlerFactory.js",
    "content": "import createActions from './createActions';\r\nimport {createLogger} from './utils/logging';\r\n\r\nexport default function handlerFactory(action, {\r\n    namespace='global',\r\n    logger=createLogger(action.id || action)\r\n}={}) {\r\n    const name = action.id || action;\r\n    action = typeof action === 'string' ? createActions(namespace, action)[action] : action;\r\n    return {\r\n        create: (createDefinition) => {\r\n            const definition = {\r\n                name,\r\n                action,\r\n                namespace,\r\n                logger\r\n            };\r\n            if (typeof createDefinition === 'function') {\r\n                return Object.assign(definition, createDefinition({namespace, logger}));\r\n            }\r\n            else {\r\n                return Object.assign(definition, createDefinition);\r\n            }\r\n        }\r\n    };\r\n}\r\n",
    "static": true,
    "longname": "src/handlerFactory.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 36,
    "kind": "function",
    "name": "handlerFactory",
    "memberof": "src/handlerFactory.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/handlerFactory.js~handlerFactory",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/handlerFactory.js",
    "importStyle": "handlerFactory",
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "action",
        "types": [
          "*"
        ]
      },
      {
        "name": "objectPattern1",
        "optional": true,
        "types": [
          "{\"namespace\": *, \"logger\": *}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "{\"create\": *}"
      ]
    }
  },
  {
    "__docId__": 37,
    "kind": "file",
    "name": "src/ImmutableStore.js",
    "content": "import Immutable from 'immutable';\r\nimport transmitter from 'transmitter';\r\n\r\nconst reset = transmitter();\r\nexport function resetStores() {\r\n    reset.publish();\r\n}\r\n\r\n\r\nexport default class ImmutableStore {\r\n    constructor(initialData) {\r\n        this.listName = 'items';\r\n        this.exportPublicMethods({\r\n            getItemById: this.getItemById,\r\n            getIndexById: this.getIndexById,\r\n            find: this.find,\r\n            reset: this.reset\r\n        });\r\n        if (initialData) {\r\n            this.init(initialData);\r\n        }\r\n        reset.subscribe(() => {\r\n            const data = this.initialData || {};\r\n            const nextState = data.toJS ? data : Immutable.fromJS(data);\r\n            this.setState(nextState);\r\n        });\r\n    }\r\n\r\n    init(data) {\r\n        this.initialData = data;\r\n        this.state = data.toJS ? data : Immutable.fromJS(data);\r\n        return this.state;\r\n    }\r\n\r\n    reset = () => {\r\n        this.change(this.initialData);\r\n    };\r\n\r\n    getItemById = (id, listName) => {\r\n        const list = this.state.get(listName || this.listName);\r\n        if (list) {\r\n            return list.find((item) => item.get('id') === id);\r\n        }\r\n        else {\r\n            console.warn(this, 'Failed in getItemById(): list not found');\r\n            //debugger; //eslint-disable-line\r\n        }\r\n        return null;\r\n    };\r\n\r\n    getIndexById = (id, listName) => {\r\n        listName = listName || this.listName;\r\n        const list = this.state.get(listName);\r\n        if (list) {\r\n            return list.indexOf(this.getItemById(id, listName));\r\n        }\r\n        console.warn(this, 'Failed in getIndexById(): list not found');\r\n        return -1;\r\n    };\r\n\r\n    /**\r\n     * Changes a property to a new value.\r\n     * There are three modes of calling this function:\r\n     *\r\n     * __change('key', value)__\r\n     * changes one property of the state object.\r\n     * @see https://facebook.github.io/immutable-js/docs/#/Map/set\r\n     *\r\n     * __change({key: value, ...})__\r\n     * changes any number of state properties at once\r\n     * @see https://facebook.github.io/immutable-js/docs/#/Map/mergeDeep\r\n     *\r\n     * __change({id:5}, {key: value})__\r\n     * changes any number of properties on any matching item within a list\r\n     * @see {@link #changeItem()}\r\n     * @see https://facebook.github.io/immutable-js/docs/#/Map/mergeDeep\r\n     */\r\n    change(prop, value) {\r\n        if (arguments.length === 2 && typeof prop !== 'string') {\r\n            this.changeItem(prop, value);\r\n        } else\r\n        if (arguments.length === 2) {\r\n            this.setState(this.state.set(prop, value.toJS ? value : Immutable.fromJS(value)));\r\n        } else {\r\n            this.setState(this.state.merge(prop.toJS ? prop : Immutable.fromJS(prop)));\r\n        }\r\n    }\r\n\r\n    setItemProp(id, key, value, listName) {\r\n        return this.state.merge({\r\n            [listName || this.listName]: this.state.get(listName || this.listName).map((item) => {\r\n                if (item.get('id') === id) {\r\n                    return item.set(key, value);\r\n                }\r\n                return item;\r\n            })\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Changes a specific item in a list within the state object.\r\n     * @throws Error if when no item could be found\r\n     * @param {object} filter\r\n     * @param {object} filter.item - An object that specifies key/value pairs that must be matched by list items, e.g. {id: 13}\r\n     * @param {string} [filter.list] - The name of the list to search in. Defaults to 'items'\r\n     * @param {object} data - An object containing key/value pairs for data to be set at matched items\r\n     */\r\n    changeItem(filter, data) {\r\n        //console.log('changeItem', filter, data);\r\n        const listName = filter.list || this.listName;\r\n        const list = this.state.get(listName);\r\n        //console.log('list found', list.toJS());\r\n        const matchingItem = this.find(listName, filter.item);\r\n        if(matchingItem) {\r\n            //console.log('item found', matchingItem);\r\n            const matchingIndex = list.indexOf(matchingItem);\r\n            const newItem = matchingItem.merge(data);\r\n            const newList = list.set(matchingIndex, newItem);\r\n            //console.log('new list', newList.toJS());\r\n            this.change({\r\n                [listName]: newList\r\n            });\r\n        } else {\r\n            throw new Error('changeItem: no item found for filter: ' + JSON.stringify(filter) + ', list:', JSON.stringify(list.toJS()));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Returns a list of items that match a filter.\r\n     *\r\n     * @param {string} listName - The name of the list within the state object.\r\n     * @param {object} filter - An object with key/value pairs to test items against\r\n     * @returns {List} A new immutable list that only contains items that matched all key/value pairs of `filter`\r\n     */\r\n    find = (listName, filter) => {\r\n        const list = this.state.get(listName);\r\n        const result = list.find((item) => {\r\n            let match = true;\r\n            Object.keys(filter).map((prop) => {\r\n                const itemValue = item.get(prop);\r\n                const filterValue = filter[prop];\r\n                if (itemValue !== filterValue) {\r\n                    match = false;\r\n                }\r\n            });\r\n            return match;\r\n        });\r\n        return result;\r\n    };\r\n\r\n    useApi() {\r\n        return this.getInstance();\r\n    }\r\n}\r\n\r\n",
    "static": true,
    "longname": "src/ImmutableStore.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 38,
    "kind": "variable",
    "name": "reset",
    "memberof": "src/ImmutableStore.js",
    "static": true,
    "longname": "src/ImmutableStore.js~reset",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/ImmutableStore.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 39,
    "kind": "function",
    "name": "resetStores",
    "memberof": "src/ImmutableStore.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/ImmutableStore.js~resetStores",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/ImmutableStore.js",
    "importStyle": "{resetStores}",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": []
  },
  {
    "__docId__": 40,
    "kind": "class",
    "name": "ImmutableStore",
    "memberof": "src/ImmutableStore.js",
    "static": true,
    "longname": "src/ImmutableStore.js~ImmutableStore",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/ImmutableStore.js",
    "importStyle": "ImmutableStore",
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "interface": false
  },
  {
    "__docId__": 41,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#constructor",
    "access": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "initialData",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 42,
    "kind": "member",
    "name": "listName",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#listName",
    "access": null,
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 43,
    "kind": "method",
    "name": "init",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#init",
    "access": null,
    "description": null,
    "lineNumber": 29,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "data",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 44,
    "kind": "member",
    "name": "initialData",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#initialData",
    "access": null,
    "description": null,
    "lineNumber": 30,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 45,
    "kind": "member",
    "name": "state",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#state",
    "access": null,
    "description": null,
    "lineNumber": 31,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 46,
    "kind": "member",
    "name": "reset",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#reset",
    "access": null,
    "description": null,
    "lineNumber": 35,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 47,
    "kind": "member",
    "name": "getItemById",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#getItemById",
    "access": null,
    "description": null,
    "lineNumber": 39,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 48,
    "kind": "member",
    "name": "getIndexById",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#getIndexById",
    "access": null,
    "description": null,
    "lineNumber": 51,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 49,
    "kind": "method",
    "name": "change",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#change",
    "access": null,
    "description": "Changes a property to a new value.\nThere are three modes of calling this function:\n\n__change('key', value)__\nchanges one property of the state object.",
    "see": [
      "https://facebook.github.io/immutable-js/docs/#/Map/set\n\n__change({key: value, ...})__\nchanges any number of state properties at once",
      "https://facebook.github.io/immutable-js/docs/#/Map/mergeDeep\n\n__change({id:5}, {key: value})__\nchanges any number of properties on any matching item within a list",
      "{@link #changeItem()}",
      "https://facebook.github.io/immutable-js/docs/#/Map/mergeDeep"
    ],
    "lineNumber": 78,
    "params": [
      {
        "name": "prop",
        "types": [
          "*"
        ]
      },
      {
        "name": "value",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 50,
    "kind": "method",
    "name": "setItemProp",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#setItemProp",
    "access": null,
    "description": null,
    "lineNumber": 89,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "id",
        "types": [
          "*"
        ]
      },
      {
        "name": "key",
        "types": [
          "*"
        ]
      },
      {
        "name": "value",
        "types": [
          "*"
        ]
      },
      {
        "name": "listName",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 51,
    "kind": "method",
    "name": "changeItem",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#changeItem",
    "access": null,
    "description": "Changes a specific item in a list within the state object.",
    "lineNumber": 108,
    "params": [
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "filter",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "filter.item",
        "description": "An object that specifies key/value pairs that must be matched by list items, e.g. {id: 13}"
      },
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": true,
        "name": "filter.list",
        "description": "The name of the list to search in. Defaults to 'items'"
      },
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "data",
        "description": "An object containing key/value pairs for data to be set at matched items"
      }
    ],
    "throws": [
      {
        "types": [
          "*"
        ],
        "description": "Error if when no item could be found"
      }
    ]
  },
  {
    "__docId__": 52,
    "kind": "member",
    "name": "find",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#find",
    "access": null,
    "description": "Returns a list of items that match a filter.",
    "lineNumber": 135,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{List} A new immutable list that only contains items that matched all key/value pairs of `filter`"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": false,
        "name": "listName",
        "description": "The name of the list within the state object."
      },
      {
        "nullable": null,
        "types": [
          "object"
        ],
        "spread": false,
        "optional": false,
        "name": "filter",
        "description": "An object with key/value pairs to test items against"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "List"
      ],
      "spread": false,
      "description": "A new immutable list that only contains items that matched all key/value pairs of `filter`"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 53,
    "kind": "method",
    "name": "useApi",
    "memberof": "src/ImmutableStore.js~ImmutableStore",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/ImmutableStore.js~ImmutableStore#useApi",
    "access": null,
    "description": null,
    "lineNumber": 151,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 54,
    "kind": "file",
    "name": "src/index.js",
    "content": "export {getAltInstance} from './altInstance';\r\nexport {setAltInstance} from './altInstance';\r\n\r\nexport connect from './decorators/connect';\r\nexport bindCalls from './decorators/bindCalls';\r\nexport bindHandlers from './decorators/bindHandlers';\r\nexport bindActions from './decorators/bindActions';\r\n\r\nexport ImmutableStore from './ImmutableStore';\r\nexport {resetStores} from './ImmutableStore';\r\n\r\nexport {connectAlternative} from './decorators/connect';\r\nexport callSeries from './callSeries';\r\nexport createStore from './createStore';\r\nexport callFactory from './callFactory';\r\nexport createActions from './createActions';\r\nexport handlerFactory from './handlerFactory';\r\nexport getSources from './getSources';\r\n\r\n",
    "static": true,
    "longname": "src/index.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 55,
    "kind": "file",
    "name": "src/utils/flatten.js",
    "content": "/**\r\n * Reduces a mixed array to a flat one.\r\n */\r\nexport default function flatten(...args) {\r\n    return args.reduce((result, arg) => {\r\n        if (Array.isArray(arg)) {\r\n            arg.forEach(e => {\r\n                if (Array.isArray(e)) {\r\n                    result = result.concat(flatten(e));\r\n                }\r\n                else {\r\n                    result.push(e);\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            result.push(arg);\r\n        }\r\n        return result;\r\n    }, []);\r\n}\r\n",
    "static": true,
    "longname": "src/utils/flatten.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 56,
    "kind": "function",
    "name": "flatten",
    "memberof": "src/utils/flatten.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/flatten.js~flatten",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/flatten.js",
    "importStyle": "flatten",
    "description": "Reduces a mixed array to a flat one.",
    "lineNumber": 4,
    "params": [
      {
        "name": "args",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 57,
    "kind": "file",
    "name": "src/utils/logging.js",
    "content": "/** Never log */\r\nconst NONE = 0;\r\n/** Log if a definition has `logging: true` */\r\nconst ALLOW = 1;\r\n/** Always log, regardless of `logging` in definition */\r\nconst FORCE = 2;\r\nexport const logLevel = {NONE, ALLOW, FORCE};\r\n\r\n\r\nlet level = ALLOW;\r\nexport function setLevel(value) {\r\n    level = value;\r\n}\r\nexport function getLevel() {\r\n    return level;\r\n}\r\n\r\nexport function createLogger(name) {\r\n    return {\r\n        log: (...args) => level > NONE && console.log(`[${name}]`, ...args),\r\n        info: (...args) => level > NONE && console.info(`[${name}]`, ...args),\r\n        warn: (...args) => level > NONE && console.warn(`[${name}]`, ...args),\r\n        error: (...args) => level > NONE && console.error(`[${name}]`, ...args),\r\n        trace: (...args) => level > NONE && console.trace(`[${name}]`, ...args),\r\n    };\r\n}\r\n",
    "static": true,
    "longname": "src/utils/logging.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 58,
    "kind": "variable",
    "name": "NONE",
    "memberof": "src/utils/logging.js",
    "static": true,
    "longname": "src/utils/logging.js~NONE",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": null,
    "description": "Never log",
    "lineNumber": 2,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 59,
    "kind": "variable",
    "name": "ALLOW",
    "memberof": "src/utils/logging.js",
    "static": true,
    "longname": "src/utils/logging.js~ALLOW",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": null,
    "description": "Log if a definition has `logging: true`",
    "lineNumber": 4,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 60,
    "kind": "variable",
    "name": "FORCE",
    "memberof": "src/utils/logging.js",
    "static": true,
    "longname": "src/utils/logging.js~FORCE",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": null,
    "description": "Always log, regardless of `logging` in definition",
    "lineNumber": 6,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 61,
    "kind": "variable",
    "name": "logLevel",
    "memberof": "src/utils/logging.js",
    "static": true,
    "longname": "src/utils/logging.js~logLevel",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": "{logLevel}",
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{\"NONE\": *, \"ALLOW\": *, \"FORCE\": *}"
      ]
    }
  },
  {
    "__docId__": 62,
    "kind": "variable",
    "name": "level",
    "memberof": "src/utils/logging.js",
    "static": true,
    "longname": "src/utils/logging.js~level",
    "access": null,
    "export": false,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 63,
    "kind": "function",
    "name": "setLevel",
    "memberof": "src/utils/logging.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/logging.js~setLevel",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": "{setLevel}",
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "value",
        "types": [
          "*"
        ]
      }
    ]
  },
  {
    "__docId__": 64,
    "kind": "function",
    "name": "getLevel",
    "memberof": "src/utils/logging.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/logging.js~getLevel",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": "{getLevel}",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 65,
    "kind": "function",
    "name": "createLogger",
    "memberof": "src/utils/logging.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/logging.js~createLogger",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/logging.js",
    "importStyle": "{createLogger}",
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "name",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "{\"log\": *, \"info\": *, \"warn\": *, \"error\": *, \"trace\": *}"
      ]
    }
  },
  {
    "__docId__": 66,
    "kind": "file",
    "name": "src/utils/validate/loggerConstraints.js",
    "content": "\r\nconst loggerConstraints = {\r\n    'logger.warn': {\r\n        presence: true,\r\n    },\r\n    'logger.error': {\r\n        presence: true,\r\n    },\r\n    'logger.log': {\r\n        presence: true,\r\n    },\r\n    'logger.info': {\r\n        presence: true,\r\n    },\r\n};\r\n\r\nexport default loggerConstraints;\r\n",
    "static": true,
    "longname": "src/utils/validate/loggerConstraints.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 67,
    "kind": "variable",
    "name": "loggerConstraints",
    "memberof": "src/utils/validate/loggerConstraints.js",
    "static": true,
    "longname": "src/utils/validate/loggerConstraints.js~loggerConstraints",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/validate/loggerConstraints.js",
    "importStyle": "loggerConstraints",
    "description": null,
    "lineNumber": 2,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "{\"logger.warn\": *, \"logger.error\": *, \"logger.log\": *, \"logger.info\": *}"
      ]
    }
  },
  {
    "__docId__": 68,
    "kind": "file",
    "name": "src/utils/validate/validateCreator.js",
    "content": "import validate from 'validate.js';\r\n\r\nimport loggerConstraints from './loggerConstraints';\r\n\r\nexport const creatorConstraints = (/*call*/) => ({\r\n    name: {\r\n        presence: true,\r\n    },\r\n    actions: {\r\n        presence: true,\r\n    },\r\n    ...loggerConstraints\r\n});\r\nexport default function validateCreator(call, logger=window.console) {\r\n    return validate(call, creatorConstraints(call));\r\n};\r\n",
    "static": true,
    "longname": "src/utils/validate/validateCreator.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 69,
    "kind": "function",
    "name": "creatorConstraints",
    "memberof": "src/utils/validate/validateCreator.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/validate/validateCreator.js~creatorConstraints",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/validate/validateCreator.js",
    "importStyle": "{creatorConstraints}",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": []
  },
  {
    "__docId__": 70,
    "kind": "function",
    "name": "validateCreator",
    "memberof": "src/utils/validate/validateCreator.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/validate/validateCreator.js~validateCreator",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/validate/validateCreator.js",
    "importStyle": "validateCreator",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "call",
        "types": [
          "*"
        ]
      },
      {
        "name": "logger",
        "optional": true,
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 71,
    "kind": "file",
    "name": "src/utils/validate/validateDefinition.js",
    "content": "import validate from 'validate.js';\r\n\r\nexport const definitionConstraints = (/*definition}*/) => ({\r\n    sideEffects: {\r\n        presence: false,\r\n    },\r\n    dataSource: {\r\n        presence: true,\r\n    },\r\n    reducers: {\r\n        presence: false,\r\n    },\r\n});\r\nexport default function validateDefinition(definition, logger=window.console) {\r\n    return validate(definition, definitionConstraints(definition));\r\n};\r\n",
    "static": true,
    "longname": "src/utils/validate/validateDefinition.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 72,
    "kind": "function",
    "name": "definitionConstraints",
    "memberof": "src/utils/validate/validateDefinition.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/validate/validateDefinition.js~definitionConstraints",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/validate/validateDefinition.js",
    "importStyle": "{definitionConstraints}",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": []
  },
  {
    "__docId__": 73,
    "kind": "function",
    "name": "validateDefinition",
    "memberof": "src/utils/validate/validateDefinition.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/validate/validateDefinition.js~validateDefinition",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/validate/validateDefinition.js",
    "importStyle": "validateDefinition",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "definition",
        "types": [
          "*"
        ]
      },
      {
        "name": "logger",
        "optional": true,
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 74,
    "kind": "file",
    "name": "src/utils/validate/validateHandler.js",
    "content": "import validate from 'validate.js';\r\n\r\nexport const handlerConstraints = (/*handler}*/) => ({\r\n    sideEffect: {\r\n        presence: false,\r\n    },\r\n    reducer: {\r\n        presence: true,\r\n    },\r\n    name: {\r\n        presence: true,\r\n    },\r\n});\r\nexport default function validateHandler(handler, logger=window.console) {\r\n    return validate(handler, handlerConstraints(handler));\r\n};\r\n",
    "static": true,
    "longname": "src/utils/validate/validateHandler.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 75,
    "kind": "function",
    "name": "handlerConstraints",
    "memberof": "src/utils/validate/validateHandler.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/validate/validateHandler.js~handlerConstraints",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/validate/validateHandler.js",
    "importStyle": "{handlerConstraints}",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": []
  },
  {
    "__docId__": 76,
    "kind": "function",
    "name": "validateHandler",
    "memberof": "src/utils/validate/validateHandler.js",
    "generator": false,
    "async": false,
    "static": true,
    "longname": "src/utils/validate/validateHandler.js~validateHandler",
    "access": null,
    "export": true,
    "importPath": "@xailabs/altx/src/utils/validate/validateHandler.js",
    "importStyle": "validateHandler",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "unknown": [
      {
        "tagName": "@_undocument",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "name": "handler",
        "types": [
          "*"
        ]
      },
      {
        "name": "logger",
        "optional": true,
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 77,
    "kind": "file",
    "name": "src/utils/validate.js",
    "content": "// TODO deeper validation logic, e.g. ensure that\r\n// - each key in bindings is also a key in reducers\r\n// - each value of bindings exists in actions etc\r\n\r\nexport {default as validateCreator} from './validate/validateCreator';\r\nexport {default as validateDefinition} from './validate/validateDefinition';\r\nexport {default as validateHandler} from './validate/validateHandler';\r\n\r\n",
    "static": true,
    "longname": "src/utils/validate.js",
    "access": null,
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 79,
    "kind": "external",
    "name": "Infinity",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Infinity",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 80,
    "kind": "external",
    "name": "NaN",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~NaN",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 81,
    "kind": "external",
    "name": "undefined",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~undefined",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 82,
    "kind": "external",
    "name": "null",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~null",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 83,
    "kind": "external",
    "name": "Object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 84,
    "kind": "external",
    "name": "object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 85,
    "kind": "external",
    "name": "Function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 86,
    "kind": "external",
    "name": "function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 87,
    "kind": "external",
    "name": "Boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 88,
    "kind": "external",
    "name": "boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 89,
    "kind": "external",
    "name": "Symbol",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Symbol",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 90,
    "kind": "external",
    "name": "Error",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Error",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 91,
    "kind": "external",
    "name": "EvalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~EvalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 92,
    "kind": "external",
    "name": "InternalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~InternalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 93,
    "kind": "external",
    "name": "RangeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RangeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 94,
    "kind": "external",
    "name": "ReferenceError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ReferenceError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 95,
    "kind": "external",
    "name": "SyntaxError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~SyntaxError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 96,
    "kind": "external",
    "name": "TypeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~TypeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 97,
    "kind": "external",
    "name": "URIError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~URIError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 98,
    "kind": "external",
    "name": "Number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 99,
    "kind": "external",
    "name": "number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 100,
    "kind": "external",
    "name": "Date",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Date",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 101,
    "kind": "external",
    "name": "String",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~String",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 102,
    "kind": "external",
    "name": "string",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~string",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 103,
    "kind": "external",
    "name": "RegExp",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RegExp",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 104,
    "kind": "external",
    "name": "Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 105,
    "kind": "external",
    "name": "Int8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 106,
    "kind": "external",
    "name": "Uint8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 107,
    "kind": "external",
    "name": "Uint8ClampedArray",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8ClampedArray",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 108,
    "kind": "external",
    "name": "Int16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 109,
    "kind": "external",
    "name": "Uint16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 110,
    "kind": "external",
    "name": "Int32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 111,
    "kind": "external",
    "name": "Uint32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 112,
    "kind": "external",
    "name": "Float32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 113,
    "kind": "external",
    "name": "Float64Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float64Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 114,
    "kind": "external",
    "name": "Map",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Map",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 115,
    "kind": "external",
    "name": "Set",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Set",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 116,
    "kind": "external",
    "name": "WeakMap",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakMap",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 117,
    "kind": "external",
    "name": "WeakSet",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakSet",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 118,
    "kind": "external",
    "name": "ArrayBuffer",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ArrayBuffer",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 119,
    "kind": "external",
    "name": "DataView",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~DataView",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 120,
    "kind": "external",
    "name": "JSON",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~JSON",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 121,
    "kind": "external",
    "name": "Promise",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Promise",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 122,
    "kind": "external",
    "name": "Generator",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Generator",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 123,
    "kind": "external",
    "name": "GeneratorFunction",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~GeneratorFunction",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 124,
    "kind": "external",
    "name": "Reflect",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Reflect",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 125,
    "kind": "external",
    "name": "Proxy",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "static": true,
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Proxy",
    "access": null,
    "description": "",
    "lineNumber": 193,
    "builtinExternal": true
  },
  {
    "__docId__": 127,
    "kind": "external",
    "name": "CanvasRenderingContext2D",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~CanvasRenderingContext2D",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 128,
    "kind": "external",
    "name": "DocumentFragment",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~DocumentFragment",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 129,
    "kind": "external",
    "name": "Element",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Element",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~Element",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 130,
    "kind": "external",
    "name": "Event",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Event",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~Event",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 131,
    "kind": "external",
    "name": "Node",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Node",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~Node",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 132,
    "kind": "external",
    "name": "NodeList",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/NodeList",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~NodeList",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 133,
    "kind": "external",
    "name": "XMLHttpRequest",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~XMLHttpRequest",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 134,
    "kind": "external",
    "name": "AudioContext",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/AudioContext",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "static": true,
    "longname": "BuiltinExternal/WebAPIExternal.js~AudioContext",
    "access": null,
    "description": "",
    "lineNumber": 34,
    "builtinExternal": true
  }
]