[
  {
    "__docId__": 1,
    "kind": "external",
    "name": "Infinity",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Infinity",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 2,
    "kind": "external",
    "name": "NaN",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~NaN",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 3,
    "kind": "external",
    "name": "undefined",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~undefined",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 4,
    "kind": "external",
    "name": "null",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~null",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 5,
    "kind": "external",
    "name": "Object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Object",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 6,
    "kind": "external",
    "name": "object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~object",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 7,
    "kind": "external",
    "name": "Function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Function",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 8,
    "kind": "external",
    "name": "function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~function",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 9,
    "kind": "external",
    "name": "Boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Boolean",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 10,
    "kind": "external",
    "name": "boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~boolean",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 11,
    "kind": "external",
    "name": "Symbol",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Symbol",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 12,
    "kind": "external",
    "name": "Error",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Error",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 13,
    "kind": "external",
    "name": "EvalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~EvalError",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 14,
    "kind": "external",
    "name": "InternalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~InternalError",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 15,
    "kind": "external",
    "name": "RangeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~RangeError",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 16,
    "kind": "external",
    "name": "ReferenceError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~ReferenceError",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 17,
    "kind": "external",
    "name": "SyntaxError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~SyntaxError",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 18,
    "kind": "external",
    "name": "TypeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~TypeError",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 19,
    "kind": "external",
    "name": "URIError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~URIError",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 20,
    "kind": "external",
    "name": "Number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Number",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 21,
    "kind": "external",
    "name": "number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~number",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 22,
    "kind": "external",
    "name": "Date",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Date",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 23,
    "kind": "external",
    "name": "String",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~String",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 24,
    "kind": "external",
    "name": "string",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~string",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 25,
    "kind": "external",
    "name": "RegExp",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~RegExp",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 26,
    "kind": "external",
    "name": "Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 27,
    "kind": "external",
    "name": "Int8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Int8Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 28,
    "kind": "external",
    "name": "Uint8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Uint8Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 29,
    "kind": "external",
    "name": "Uint8ClampedArray",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Uint8ClampedArray",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 30,
    "kind": "external",
    "name": "Int16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Int16Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 31,
    "kind": "external",
    "name": "Uint16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Uint16Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 32,
    "kind": "external",
    "name": "Int32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Int32Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 33,
    "kind": "external",
    "name": "Uint32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Uint32Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 34,
    "kind": "external",
    "name": "Float32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Float32Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 35,
    "kind": "external",
    "name": "Float64Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Float64Array",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 36,
    "kind": "external",
    "name": "Map",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Map",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 37,
    "kind": "external",
    "name": "Set",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Set",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 38,
    "kind": "external",
    "name": "WeakMap",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~WeakMap",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 39,
    "kind": "external",
    "name": "WeakSet",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~WeakSet",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 40,
    "kind": "external",
    "name": "ArrayBuffer",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~ArrayBuffer",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 41,
    "kind": "external",
    "name": "DataView",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~DataView",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 42,
    "kind": "external",
    "name": "JSON",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~JSON",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 43,
    "kind": "external",
    "name": "Promise",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Promise",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 44,
    "kind": "external",
    "name": "Generator",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Generator",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 45,
    "kind": "external",
    "name": "GeneratorFunction",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~GeneratorFunction",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 46,
    "kind": "external",
    "name": "Reflect",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Reflect",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 47,
    "kind": "external",
    "name": "Proxy",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
    "memberof": "src/.external-ecmascript.js",
    "static": true,
    "longname": "src/.external-ecmascript.js~Proxy",
    "access": "public",
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 48,
    "kind": "file",
    "name": "src/config.js",
    "content": "/** @ignore */\nexport default {\n    debug: process.env.NODE_ENV != 'production',\n    logPrefix: 'escshopify',\n};\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/config.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 49,
    "kind": "file",
    "name": "src/entities/Cart.js",
    "content": "import Evee from 'evee';\nimport Queue from 'promise-queue';\nimport deepEqual from 'deep-equal';\nimport _ from 'lodash';\n\nimport config from 'config';\nimport log from 'log';\nimport ajaxApi from 'http/shopifyAJAXAPI';\n\nconst TAG = 'Cart';\n\n\n/**\n * @typedef {Object}  ShopifyCartLineItem\n * @property {Number} id\n * @property {Object|null} properties\n * @property {Number} quantity\n * @property {Number} variant_id\n * @property {String} key\n * @property {String} title\n * @property {Number} price\n * @property {Number} original_price\n * @property {Number} discounted_price\n * @property {Number} original_line_price\n * @property {Number} line_price\n * @property {Number} total_discount\n * @property {Object[]} discounts\n * @property {String|null} sku\n * @property {Number} grams\n * @property {String} vendor\n * @property {Boolean} taxable\n * @property {Number} product_id\n * @property {Boolean} gift_card\n * @property {String} url\n * @property {String|null} image\n * @property {String} handle\n * @property {Boolean} requires_shipping\n * @property {String|null} product_type\n * @property {String} product_title\n * @property {String|null} product_description\n * @property {String} variant_title\n * @property {String[]} variant_options\n */\n\n/**\n * @typedef {Object} ShopifyCart\n * @property {String} token\n * @property {String} note\n * @property {Object} attributes\n * @property {Number} total_price\n * @property {Number} total_weight\n * @property {ShopifyCartLineItem[]} items\n * @property {Boolean} requires_shipping\n */\n\n/**\n * Shopify Cart entity.\n * @extends {evee}\n */\nexport default class Cart extends Evee {\n    /**\n     * Construct a new instance of the cart entity.\n     */\n    constructor() {\n        super();\n\n        /** @type {promise-queue} */\n        this._queue = new Queue(1, Infinity);\n        this._attributes = {};\n        this._ready = false;\n\n        /** @type {Object[]} */\n        this._items = [];\n        this._attributes = {};\n    }\n\n    /**\n     * Initialize the cart entity with the current state of the visitor's cart.\n     * @param {ShopifyCart} cartData - Shopify Cart object.\n     */\n    initialize(cartData) {\n        this._loadFromShopifyCart(cartData);\n\n        this._emitUpdate('init', null);\n        if (this.items.length == 0) {\n            this._emitClear([]);\n        }\n\n        log.send(log.DEBUG, TAG, 'Loaded.');\n    }\n\n    /**\n     * Alias to getItems();\n     * @type {ShopifyCartLineItem[]}\n     */\n    get items() { return this.getItems(); }\n    /**\n     * Returns items in the cart (in the normal Shopify line item format.\n     * @returns {ShopifyCartLineItem[]}\n     */\n    getItems() {\n        return this._items;\n    }\n\n    /**\n     * Alias to getTotalPrice();\n     * @type {Number}\n     */\n    get total_price() { return this.getTotalPrice(); }\n    /**\n     * Alias to getTotalPrice();\n     * @type {Number}\n     */\n    get totalPrice() { return this.getTotalPrice(); }\n    /**\n     * Calculates the total value of the cart.\n     * @returns {Number}\n     */\n    getTotalPrice() {\n        return _.reduce(this.items, (total, item) => {\n            return total + item.line_price;\n        }, 0)\n    }\n\n    /**\n     * Reloads the cart state via AJAX.\n     * @returns {Promise<src/entities/Cart.js~Cart, Error>}\n     */\n    async reload() {\n        var cartData = await ajaxApi.get('/cart.js');\n        this._loadFromShopifyCart(cartData.data);\n        return this;\n    }\n        \n\n\n\n    /**\n     * Alias to getAttributes()\n     * @type {Object}\n     */\n    get attributes() { return this.getAttributes(); }\n    /**\n     * Returns cart attributes.\n     * @returns {Object}\n     */\n    getAttributes() {\n        return this._attributes;\n    }\n\n    /**\n     * Sets all attributes on the cart. This will override/remove existing attributes.\n     * @param {Object} attributes - New attributes for the cart.\n     * @returns {Promise<src/entities/Cart.js~Cart, Error>}\n     */\n    setAttributes(attributes) {\n        log.sendObject(log.DEBUG, TAG, 'Setting attributes...', {\n            attributes\n        });\n        return this._queue.add(async () => {\n            var cart = await ajaxApi.post({attributes});\n            this._loadFromShopifyCart(cart.data);\n            this._emitUpdate('attribute-updated', null);\n        });\n    }\n\n    getAttribute(key) {\n        return this._attributes[key];\n    }\n\n    setAttribute(key, value) {\n        log.sendObject(log.DEBUG, TAG, 'Setting attribute...', {\n            key,\n            value\n        });\n        return this._queue.add(async () => {\n            var newAttributes = Object.assign({}, this._attributes);\n            newAttributes[key] = value;\n            var cart = await ajaxApi.post({attributes: newAttributes});\n            this._loadFromShopifyCart(cart.data);\n            this._emitUpdate('attribute-updated', null);\n        });\n    }\n\n\n    /**\n     * Add a new item to the cart.\n     * @param {Number|String} id - Variant ID to add to cart.\n     * @param {Number} quantity - Quantity to add.\n     * @param {Object} properties - Line item attributes.\n     * @returns {Promise<ShopifyCartLineItem, Error>}\n     */\n    addItem(id, quantity, properties) {\n        log.sendObject(log.DEBUG, TAG, 'Queuing addItem...', {\n            id,\n            quantity,\n            properties\n        });\n        return this._queue.add(async () => {\n            var res = await ajaxApi.post('/cart/add.js', {\n                id,\n                quantity,\n                properties\n            });\n            var data = res.data;\n            log.sendObject(log.DEBUG, TAG, 'addItem resonse', data);\n            if (data.id) {\n                var item = this._loadItem(data);\n                this._emitAdd(item);\n                this._emitUpdate('add', item);\n                return item;\n            }\n            throw new Error(data);\n        });\n    }\n\n    updateItem(lineNumber, quantity, properties) {\n        return this._queue.add(() => {\n            return new Promise((acc, rej) => {\n\n            });\n        });\n    }\n\n    removeItem(lineNumber) {\n        return this._queue.add(() => {\n            return new Promise((acc, rej) => {\n\n            });\n        });\n    }\n\n    updateItemById(id, quantity, properties) {\n        return this._queue.add(() => {\n            return new Promise((acc, rej) => {\n\n            });\n        });\n    }\n\n    updateItemById(id, quantity, properties) {\n        return this._queue.add(() => {\n            return new Promise((acc, rej) => {\n\n            });\n        });\n    }\n\n    updateItemQuantitiesById(updates) {\n        return this._queue.add(() => {\n            return new Promise((acc, rej) => {\n\n            });\n        });\n    }\n\n    removeItemById(id) {\n        return this._queue.add(() => {\n            return new Promise((acc, rej) => {\n\n            });\n        });\n    }\n\n    /**\n     * Clear the cart.\n     * @returns {Promise<src/entities/Cart.js~Cart, Error>}\n     */\n    clear() {\n        return this._queue.add(async () => {\n            var cartData = await ajaxApi.post('/cart/clear.js');\n            var oldItems = this.items;\n            this._loadFromShopifyCart(cartData);\n            this._emitClear(oldItems);\n        });\n    }\n\n\n    _loadItem(itemData) {\n        for (var item of this.items) {\n            if (item.id == itemData.id && deepEqual(item.properties, itemData.properties)) {\n                item.quantity = itemData.quantity;\n                return item;\n            }\n        }\n\n        this.items.push(itemData);\n        return itemData;\n    }\n\n    _emitUpdate(operation, item) {\n        var data ={\n            items: this.items,\n            operation,\n            item\n        };\n        log.sendObject(log.DEBUG, TAG, 'Event: update', data);\n        this.emit('update', data);\n    }\n\n    _emitClear(oldItems) {\n        var data ={\n            oldItems\n        };\n        log.sendObject(log.DEBUG, TAG, 'Event: clear', data);\n        this.emit('clear', data);\n    }\n\n    _emitAdd(item) {\n        var data ={\n            items: this.items,\n            item\n        };\n        log.sendObject(log.DEBUG, TAG, 'Event: add', data);\n        this.emit('add', data);\n    }\n\n    _emitUpdateItem(item) {\n        var data ={\n            items: this.items,\n            item\n        };\n        log.sendObject(log.DEBUG, TAG, 'Event: updae-item', data);\n        this.emit('update-item', data);\n    }\n\n    _emitRemove(item) {\n        var data = {\n            items: this.items,\n            item\n        };\n        log.sendObject(log.DEBUG, TAG, 'Event: remove', data);\n        this.emit('clear', data);\n    }\n\n    _loadFromShopifyCart(cart) {\n        this._items = cart.items || [];\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/entities/Cart.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 50,
    "kind": "variable",
    "name": "TAG",
    "memberof": "src/entities/Cart.js",
    "static": true,
    "longname": "src/entities/Cart.js~TAG",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/entities/Cart.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    },
    "ignore": true
  },
  {
    "__docId__": 51,
    "kind": "typedef",
    "name": "ShopifyCartLineItem",
    "memberof": "src/entities/Cart.js",
    "static": true,
    "longname": "src/entities/Cart.js~ShopifyCartLineItem",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "id",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Object",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "properties",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "quantity",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "variant_id",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "key",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "title",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "price",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "original_price",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "discounted_price",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "original_line_price",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "line_price",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "total_discount",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Object[]"
        ],
        "spread": false,
        "optional": false,
        "name": "discounts",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "sku",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "grams",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "vendor",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "taxable",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "product_id",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "gift_card",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "url",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "image",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "handle",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "requires_shipping",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "product_type",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "product_title",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "product_description",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "variant_title",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String[]"
        ],
        "spread": false,
        "optional": false,
        "name": "variant_options",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "ShopifyCartLineItem"
    }
  },
  {
    "__docId__": 52,
    "kind": "typedef",
    "name": "ShopifyCart",
    "memberof": "src/entities/Cart.js",
    "static": true,
    "longname": "src/entities/Cart.js~ShopifyCart",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "token",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "note",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "attributes",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "total_price",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "total_weight",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "ShopifyCartLineItem[]"
        ],
        "spread": false,
        "optional": false,
        "name": "items",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "requires_shipping",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "ShopifyCart"
    }
  },
  {
    "__docId__": 53,
    "kind": "class",
    "name": "Cart",
    "memberof": "src/entities/Cart.js",
    "static": true,
    "longname": "src/entities/Cart.js~Cart",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/entities/Cart.js",
    "importStyle": "Cart",
    "description": "Shopify Cart entity.",
    "lineNumber": 60,
    "interface": false,
    "extends": [
      "evee"
    ]
  },
  {
    "__docId__": 54,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#constructor",
    "access": "public",
    "description": "Construct a new instance of the cart entity.",
    "lineNumber": 64
  },
  {
    "__docId__": 55,
    "kind": "member",
    "name": "_queue",
    "memberof": "src/entities/Cart.js~Cart",
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_queue",
    "access": "private",
    "description": null,
    "lineNumber": 68,
    "type": {
      "nullable": null,
      "types": [
        "promise-queue"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 56,
    "kind": "member",
    "name": "_attributes",
    "memberof": "src/entities/Cart.js~Cart",
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_attributes",
    "access": "private",
    "description": null,
    "lineNumber": 69,
    "undocument": true,
    "type": {
      "types": [
        "{}"
      ]
    }
  },
  {
    "__docId__": 57,
    "kind": "member",
    "name": "_ready",
    "memberof": "src/entities/Cart.js~Cart",
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_ready",
    "access": "private",
    "description": null,
    "lineNumber": 70,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 58,
    "kind": "member",
    "name": "_items",
    "memberof": "src/entities/Cart.js~Cart",
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_items",
    "access": "private",
    "description": null,
    "lineNumber": 73,
    "type": {
      "nullable": null,
      "types": [
        "Object[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 60,
    "kind": "method",
    "name": "initialize",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#initialize",
    "access": "public",
    "description": "Initialize the cart entity with the current state of the visitor's cart.",
    "lineNumber": 81,
    "params": [
      {
        "nullable": null,
        "types": [
          "ShopifyCart"
        ],
        "spread": false,
        "optional": false,
        "name": "cartData",
        "description": "Shopify Cart object."
      }
    ],
    "return": null
  },
  {
    "__docId__": 61,
    "kind": "get",
    "name": "items",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#items",
    "access": "public",
    "description": "Alias to getItems();",
    "lineNumber": 96,
    "type": {
      "nullable": null,
      "types": [
        "ShopifyCartLineItem[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 62,
    "kind": "method",
    "name": "getItems",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#getItems",
    "access": "public",
    "description": "Returns items in the cart (in the normal Shopify line item format.",
    "lineNumber": 101,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{ShopifyCartLineItem[]}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "ShopifyCartLineItem[]"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 63,
    "kind": "get",
    "name": "total_price",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#total_price",
    "access": "public",
    "description": "Alias to getTotalPrice();",
    "lineNumber": 109,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 64,
    "kind": "get",
    "name": "totalPrice",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#totalPrice",
    "access": "public",
    "description": "Alias to getTotalPrice();",
    "lineNumber": 114,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 65,
    "kind": "method",
    "name": "getTotalPrice",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#getTotalPrice",
    "access": "public",
    "description": "Calculates the total value of the cart.",
    "lineNumber": 119,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 66,
    "kind": "method",
    "name": "reload",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#reload",
    "access": "public",
    "description": "Reloads the cart state via AJAX.",
    "lineNumber": 129,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise<src/entities/Cart.js~Cart, Error>}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<src/entities/Cart.js~Cart, Error>"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 67,
    "kind": "get",
    "name": "attributes",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#attributes",
    "access": "public",
    "description": "Alias to getAttributes()",
    "lineNumber": 142,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 68,
    "kind": "method",
    "name": "getAttributes",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#getAttributes",
    "access": "public",
    "description": "Returns cart attributes.",
    "lineNumber": 147,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Object}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 69,
    "kind": "method",
    "name": "setAttributes",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#setAttributes",
    "access": "public",
    "description": "Sets all attributes on the cart. This will override/remove existing attributes.",
    "lineNumber": 156,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise<src/entities/Cart.js~Cart, Error>}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "attributes",
        "description": "New attributes for the cart."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<src/entities/Cart.js~Cart, Error>"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 70,
    "kind": "method",
    "name": "getAttribute",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#getAttribute",
    "access": "public",
    "description": null,
    "lineNumber": 167,
    "undocument": true,
    "params": [
      {
        "name": "key",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 71,
    "kind": "method",
    "name": "setAttribute",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#setAttribute",
    "access": "public",
    "description": null,
    "lineNumber": 171,
    "undocument": true,
    "params": [
      {
        "name": "key",
        "types": [
          "*"
        ]
      },
      {
        "name": "value",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 72,
    "kind": "method",
    "name": "addItem",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#addItem",
    "access": "public",
    "description": "Add a new item to the cart.",
    "lineNumber": 193,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise<ShopifyCartLineItem, Error>}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number",
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "id",
        "description": "Variant ID to add to cart."
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "quantity",
        "description": "Quantity to add."
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "properties",
        "description": "Line item attributes."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<ShopifyCartLineItem, Error>"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 73,
    "kind": "method",
    "name": "updateItem",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#updateItem",
    "access": "public",
    "description": null,
    "lineNumber": 217,
    "undocument": true,
    "params": [
      {
        "name": "lineNumber",
        "types": [
          "*"
        ]
      },
      {
        "name": "quantity",
        "types": [
          "*"
        ]
      },
      {
        "name": "properties",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 74,
    "kind": "method",
    "name": "removeItem",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#removeItem",
    "access": "public",
    "description": null,
    "lineNumber": 225,
    "undocument": true,
    "params": [
      {
        "name": "lineNumber",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 75,
    "kind": "method",
    "name": "updateItemById",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#updateItemById",
    "access": "public",
    "description": null,
    "lineNumber": 233,
    "undocument": true,
    "params": [
      {
        "name": "id",
        "types": [
          "*"
        ]
      },
      {
        "name": "quantity",
        "types": [
          "*"
        ]
      },
      {
        "name": "properties",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 76,
    "kind": "method",
    "name": "updateItemById",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#updateItemById",
    "access": "public",
    "description": null,
    "lineNumber": 241,
    "undocument": true,
    "params": [
      {
        "name": "id",
        "types": [
          "*"
        ]
      },
      {
        "name": "quantity",
        "types": [
          "*"
        ]
      },
      {
        "name": "properties",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 77,
    "kind": "method",
    "name": "updateItemQuantitiesById",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#updateItemQuantitiesById",
    "access": "public",
    "description": null,
    "lineNumber": 249,
    "undocument": true,
    "params": [
      {
        "name": "updates",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 78,
    "kind": "method",
    "name": "removeItemById",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#removeItemById",
    "access": "public",
    "description": null,
    "lineNumber": 257,
    "undocument": true,
    "params": [
      {
        "name": "id",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 79,
    "kind": "method",
    "name": "clear",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#clear",
    "access": "public",
    "description": "Clear the cart.",
    "lineNumber": 269,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise<src/entities/Cart.js~Cart, Error>}"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<src/entities/Cart.js~Cart, Error>"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 80,
    "kind": "method",
    "name": "_loadItem",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_loadItem",
    "access": "private",
    "description": null,
    "lineNumber": 279,
    "undocument": true,
    "params": [
      {
        "name": "itemData",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 81,
    "kind": "method",
    "name": "_emitUpdate",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_emitUpdate",
    "access": "private",
    "description": null,
    "lineNumber": 291,
    "undocument": true,
    "params": [
      {
        "name": "operation",
        "types": [
          "*"
        ]
      },
      {
        "name": "item",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 82,
    "kind": "method",
    "name": "_emitClear",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_emitClear",
    "access": "private",
    "description": null,
    "lineNumber": 301,
    "undocument": true,
    "params": [
      {
        "name": "oldItems",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 83,
    "kind": "method",
    "name": "_emitAdd",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_emitAdd",
    "access": "private",
    "description": null,
    "lineNumber": 309,
    "undocument": true,
    "params": [
      {
        "name": "item",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 84,
    "kind": "method",
    "name": "_emitUpdateItem",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_emitUpdateItem",
    "access": "private",
    "description": null,
    "lineNumber": 318,
    "undocument": true,
    "params": [
      {
        "name": "item",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 85,
    "kind": "method",
    "name": "_emitRemove",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_emitRemove",
    "access": "private",
    "description": null,
    "lineNumber": 327,
    "undocument": true,
    "params": [
      {
        "name": "item",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 86,
    "kind": "method",
    "name": "_loadFromShopifyCart",
    "memberof": "src/entities/Cart.js~Cart",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Cart.js~Cart#_loadFromShopifyCart",
    "access": "private",
    "description": null,
    "lineNumber": 336,
    "undocument": true,
    "params": [
      {
        "name": "cart",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 88,
    "kind": "file",
    "name": "src/entities/Shop.js",
    "content": "import Evee from 'evee';\nimport Queue from 'promise-queue';\nimport deepEqual from 'deep-equal';\nimport _ from 'lodash';\n\nimport config from 'config';\nimport log from 'log';\n\nconst TAG = 'Shop';\n\n\n/**\n * @typedef {Object}  ShopifyShop\n * @property {ShopifyAddress} address\n * @property {Number} collections_count\n * @property {String} currency\n * @property {String} description\n * @property {String} domain\n * @property {String} email\n * @property {String[]} enabled_payment_types\n * @property {String} locale\n * @property {String} money_format\n * @property {String} money_format_with_currency\n * @property {String} name\n * @property {String} password_message\n * @property {String} permanent_domain\n * @property {ShopifyPolicy[]} policies\n * @property {String} refund_policy\n * @property {String} secure_url\n * @property {String} terms_of_service\n * @property {String[]} types\n * @property {String} url\n * @property {String[]} vendors\n */\n\n/**\n * @typedef {Object} ShopifyAddress\n * @property {String} address1\n * @property {String} address2\n * @property {String} city\n * @property {String|null} company\n * @property {String} country\n * @property {String} country_code\n * @property {String|null} first_name\n * @property {String|null} last_name\n * @property {Number|null} latitude\n * @property {Number|null} longitude\n * @property {String|null} name\n * @property {String|null} phone\n * @property {String|null} province\n * @property {String|null} province_code\n * @property {String|null} zip\n */\n\n/**\n * @typedef {Object} ShopifyPolicy\n * @property {String} body\n * @property {String} title\n */\n\n/**\n * Shopify Shop entity.\n * @extends {evee}\n */\nexport default class Shop extends Evee {\n    /**\n     * Construct a new instance of the shop entity.\n     */\n    constructor() {\n        super();\n\n        /** @type {ShopifyAddress} */\n        this.address = null;\n        /** @type {Number} */\n        this.collections_count = null;\n        /** @type {String} */\n        this.currency = null;\n        /** @type {String} */\n        this.description = null;\n        /** @type {String} */\n        this.domain = null;\n        /** @type {String} */\n        this.email = null;\n        /** @type {String[]} */\n        this.enabled_payment_types = [];\n        /** @type {String} */\n        this.locale = null;\n        /** @type {String} */\n        this.money_format = null;\n        /** @type {String} */\n        this.money_format_with_currency = null;\n        /** @type {String} */\n        this.name = null;\n        /** @type {String} */\n        this.password_message = null;\n        /** @type {String} */\n        this.permanent_domain = null;\n        /** @type {ShopifyPolicy[]} */\n        this.policies = [];\n        /** @type {String} */\n        this.refund_policy = null;\n        /** @type {String} */\n        this.secure_url = null;\n        /** @type {String} */\n        this.terms_of_service = null;\n        /** @type {String[]} */\n        this.types = [];\n        /** @type {String} */\n        this.url = null;\n        /** @type {String[]} */\n        this.vendors = [];\n    }\n\n    /**\n     * Initialize the shop entity with the global shop state.\n     * @param {ShopifyShop} shopData - Shopify shop object.\n     */\n    initialize(shopData) {\n        this._loadFromShopifyShop(shopData);\n\n        this.emit('init', { shop: this });\n        log.send(log.DEBUG, TAG, 'Loaded.');\n    }\n\n    /**\n     * Loads properties from the given shop.\n     * @param {ShopifyShop} shop\n     */\n    _loadFromShopifyShop(shop) {\n        this.address = shop.address;\n        this.collections_count = shop.collections_count;\n        this.currency = shop.currency;\n        this.description = shop.description;\n        this.domain = shop.domain;\n        this.email = shop.email;\n        this.enabled_payment_types = shop.enabled_payment_types;\n        this.locale = shop.locale;\n        this.money_format = shop.money_format;\n        this.money_format_with_currency = shop.money_format_with_currency;\n        this.name = shop.name;\n        this.password_message = shop.password_message;\n        this.permanent_domain = shop.permanent_domain;\n        this.policies = shop.policies;\n        this.refund_policy = shop.refund_polcy;\n        this.secure_url = shop.secure_url;\n        this.terms_of_service = shop.terms_of_service;\n        this.types = shop.types;\n        this.url = shop.url;\n        this.vendors = shop.vendors;\n    }\n\n    /**\n     * Normalizes a relative URL according to the current pathname.\n     * @param {String} rel\n     * @returns {String}\n     */\n    _normalizeRelativeUrl(rel) {\n        var normal = relative;\n        if (normal.length > 0 && normal[0] != '/') {\n            normal = window.location.pathname + normal;\n        }\n    }\n        \n\n    /**\n     * Generates an absolute URL containing the shop primary domain.\n     * @param {String} relative - A relative URL to make absolute (i.e. '/collections/all')\n     * @returns {String}\n     */\n    makeAbsoluteUrl(relative) {\n        var normal = this._normalizeRelativeUrl(relative);\n        return this.secure_url + normal;\n    }\n\n    /**\n     * Generates an absolute URL containing the shop's myshopify domain.\n     * @param {String} relative - A relative URL to make absolute (i.e. '/collections/all')\n     * @returns {String}\n     */\n    makePermanentUrl(relative) {\n        var normal = this._normalizeRelativeUrl(relative);\n        return this.secure_url.replace(this.domain, this.permanent_domain) + normal;\n    }\n\n\n}\n\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/entities/Shop.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 89,
    "kind": "variable",
    "name": "TAG",
    "memberof": "src/entities/Shop.js",
    "static": true,
    "longname": "src/entities/Shop.js~TAG",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/entities/Shop.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    },
    "ignore": true
  },
  {
    "__docId__": 90,
    "kind": "typedef",
    "name": "ShopifyShop",
    "memberof": "src/entities/Shop.js",
    "static": true,
    "longname": "src/entities/Shop.js~ShopifyShop",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "ShopifyAddress"
        ],
        "spread": false,
        "optional": false,
        "name": "address",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "collections_count",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "currency",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "description",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "domain",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "email",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String[]"
        ],
        "spread": false,
        "optional": false,
        "name": "enabled_payment_types",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "locale",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "money_format",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "money_format_with_currency",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "password_message",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "permanent_domain",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "ShopifyPolicy[]"
        ],
        "spread": false,
        "optional": false,
        "name": "policies",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "refund_policy",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "secure_url",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "terms_of_service",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String[]"
        ],
        "spread": false,
        "optional": false,
        "name": "types",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "url",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String[]"
        ],
        "spread": false,
        "optional": false,
        "name": "vendors",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "ShopifyShop"
    }
  },
  {
    "__docId__": 91,
    "kind": "typedef",
    "name": "ShopifyAddress",
    "memberof": "src/entities/Shop.js",
    "static": true,
    "longname": "src/entities/Shop.js~ShopifyAddress",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "address1",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "address2",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "city",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "company",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "country",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "country_code",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "first_name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "last_name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "latitude",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "longitude",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "phone",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "province",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "province_code",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "zip",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "ShopifyAddress"
    }
  },
  {
    "__docId__": 92,
    "kind": "typedef",
    "name": "ShopifyPolicy",
    "memberof": "src/entities/Shop.js",
    "static": true,
    "longname": "src/entities/Shop.js~ShopifyPolicy",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "body",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "title",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "ShopifyPolicy"
    }
  },
  {
    "__docId__": 93,
    "kind": "class",
    "name": "Shop",
    "memberof": "src/entities/Shop.js",
    "static": true,
    "longname": "src/entities/Shop.js~Shop",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/entities/Shop.js",
    "importStyle": "Shop",
    "description": "Shopify Shop entity.",
    "lineNumber": 65,
    "interface": false,
    "extends": [
      "evee"
    ]
  },
  {
    "__docId__": 94,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/entities/Shop.js~Shop",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Shop.js~Shop#constructor",
    "access": "public",
    "description": "Construct a new instance of the shop entity.",
    "lineNumber": 69
  },
  {
    "__docId__": 95,
    "kind": "member",
    "name": "address",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#address",
    "access": "public",
    "description": null,
    "lineNumber": 73,
    "type": {
      "nullable": null,
      "types": [
        "ShopifyAddress"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 96,
    "kind": "member",
    "name": "collections_count",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#collections_count",
    "access": "public",
    "description": null,
    "lineNumber": 75,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 97,
    "kind": "member",
    "name": "currency",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#currency",
    "access": "public",
    "description": null,
    "lineNumber": 77,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 98,
    "kind": "member",
    "name": "description",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#description",
    "access": "public",
    "description": null,
    "lineNumber": 79,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 99,
    "kind": "member",
    "name": "domain",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#domain",
    "access": "public",
    "description": null,
    "lineNumber": 81,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 100,
    "kind": "member",
    "name": "email",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#email",
    "access": "public",
    "description": null,
    "lineNumber": 83,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 101,
    "kind": "member",
    "name": "enabled_payment_types",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#enabled_payment_types",
    "access": "public",
    "description": null,
    "lineNumber": 85,
    "type": {
      "nullable": null,
      "types": [
        "String[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 102,
    "kind": "member",
    "name": "locale",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#locale",
    "access": "public",
    "description": null,
    "lineNumber": 87,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 103,
    "kind": "member",
    "name": "money_format",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#money_format",
    "access": "public",
    "description": null,
    "lineNumber": 89,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 104,
    "kind": "member",
    "name": "money_format_with_currency",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#money_format_with_currency",
    "access": "public",
    "description": null,
    "lineNumber": 91,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 105,
    "kind": "member",
    "name": "name",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#name",
    "access": "public",
    "description": null,
    "lineNumber": 93,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 106,
    "kind": "member",
    "name": "password_message",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#password_message",
    "access": "public",
    "description": null,
    "lineNumber": 95,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 107,
    "kind": "member",
    "name": "permanent_domain",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#permanent_domain",
    "access": "public",
    "description": null,
    "lineNumber": 97,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 108,
    "kind": "member",
    "name": "policies",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#policies",
    "access": "public",
    "description": null,
    "lineNumber": 99,
    "type": {
      "nullable": null,
      "types": [
        "ShopifyPolicy[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 109,
    "kind": "member",
    "name": "refund_policy",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#refund_policy",
    "access": "public",
    "description": null,
    "lineNumber": 101,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 110,
    "kind": "member",
    "name": "secure_url",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#secure_url",
    "access": "public",
    "description": null,
    "lineNumber": 103,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 111,
    "kind": "member",
    "name": "terms_of_service",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#terms_of_service",
    "access": "public",
    "description": null,
    "lineNumber": 105,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 112,
    "kind": "member",
    "name": "types",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#types",
    "access": "public",
    "description": null,
    "lineNumber": 107,
    "type": {
      "nullable": null,
      "types": [
        "String[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 113,
    "kind": "member",
    "name": "url",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#url",
    "access": "public",
    "description": null,
    "lineNumber": 109,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 114,
    "kind": "member",
    "name": "vendors",
    "memberof": "src/entities/Shop.js~Shop",
    "static": false,
    "longname": "src/entities/Shop.js~Shop#vendors",
    "access": "public",
    "description": null,
    "lineNumber": 111,
    "type": {
      "nullable": null,
      "types": [
        "String[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 115,
    "kind": "method",
    "name": "initialize",
    "memberof": "src/entities/Shop.js~Shop",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Shop.js~Shop#initialize",
    "access": "public",
    "description": "Initialize the shop entity with the global shop state.",
    "lineNumber": 118,
    "params": [
      {
        "nullable": null,
        "types": [
          "ShopifyShop"
        ],
        "spread": false,
        "optional": false,
        "name": "shopData",
        "description": "Shopify shop object."
      }
    ],
    "return": null
  },
  {
    "__docId__": 116,
    "kind": "method",
    "name": "_loadFromShopifyShop",
    "memberof": "src/entities/Shop.js~Shop",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Shop.js~Shop#_loadFromShopifyShop",
    "access": "private",
    "description": "Loads properties from the given shop.",
    "lineNumber": 129,
    "params": [
      {
        "nullable": null,
        "types": [
          "ShopifyShop"
        ],
        "spread": false,
        "optional": false,
        "name": "shop",
        "description": ""
      }
    ],
    "return": null
  },
  {
    "__docId__": 137,
    "kind": "method",
    "name": "_normalizeRelativeUrl",
    "memberof": "src/entities/Shop.js~Shop",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Shop.js~Shop#_normalizeRelativeUrl",
    "access": "private",
    "description": "Normalizes a relative URL according to the current pathname.",
    "lineNumber": 157,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "rel",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 138,
    "kind": "method",
    "name": "makeAbsoluteUrl",
    "memberof": "src/entities/Shop.js~Shop",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Shop.js~Shop#makeAbsoluteUrl",
    "access": "public",
    "description": "Generates an absolute URL containing the shop primary domain.",
    "lineNumber": 170,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "relative",
        "description": "A relative URL to make absolute (i.e. '/collections/all')"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 139,
    "kind": "method",
    "name": "makePermanentUrl",
    "memberof": "src/entities/Shop.js~Shop",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/Shop.js~Shop#makePermanentUrl",
    "access": "public",
    "description": "Generates an absolute URL containing the shop's myshopify domain.",
    "lineNumber": 180,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "relative",
        "description": "A relative URL to make absolute (i.e. '/collections/all')"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 140,
    "kind": "file",
    "name": "src/entities/index.js",
    "content": "import Cart from './Cart';\nimport Shop from './Shop';\n\nclass Entities {\n    constructor() {\n        /** @type {src/entities/Cart.js~Cart} */\n        this.Cart = Cart;\n        /** @type {src/entities/Shop.js~Shop} */\n        this.Shop = Shop;\n    }\n}\n\n/** @ignore */\nexport default new Entities;\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/entities/index.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 141,
    "kind": "class",
    "name": "Entities",
    "memberof": "src/entities/index.js",
    "static": true,
    "longname": "src/entities/index.js~Entities",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/entities/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "pseudoExport": true,
    "undocument": true,
    "interface": false
  },
  {
    "__docId__": 142,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/entities/index.js~Entities",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/entities/index.js~Entities#constructor",
    "access": "public",
    "description": null,
    "lineNumber": 5,
    "undocument": true
  },
  {
    "__docId__": 143,
    "kind": "member",
    "name": "Cart",
    "memberof": "src/entities/index.js~Entities",
    "static": false,
    "longname": "src/entities/index.js~Entities#Cart",
    "access": "public",
    "description": null,
    "lineNumber": 7,
    "type": {
      "nullable": null,
      "types": [
        "src/entities/Cart.js~Cart"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 144,
    "kind": "member",
    "name": "Shop",
    "memberof": "src/entities/index.js~Entities",
    "static": false,
    "longname": "src/entities/index.js~Entities#Shop",
    "access": "public",
    "description": null,
    "lineNumber": 9,
    "type": {
      "nullable": null,
      "types": [
        "src/entities/Shop.js~Shop"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 145,
    "kind": "variable",
    "name": "entities",
    "memberof": "src/entities/index.js",
    "static": true,
    "longname": "src/entities/index.js~entities",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/entities/index.js",
    "importStyle": "entities",
    "description": null,
    "lineNumber": 14,
    "ignore": true,
    "type": {
      "types": [
        "src/entities/index.js~Entities"
      ]
    }
  },
  {
    "__docId__": 146,
    "kind": "file",
    "name": "src/http/RequestQueuable.js",
    "content": "/**\n * A class which contains a request queue and processes requests.\n */\nexport default class RequestQueuable {\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/http/RequestQueuable.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 147,
    "kind": "class",
    "name": "RequestQueuable",
    "memberof": "src/http/RequestQueuable.js",
    "static": true,
    "longname": "src/http/RequestQueuable.js~RequestQueuable",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/http/RequestQueuable.js",
    "importStyle": "RequestQueuable",
    "description": "A class which contains a request queue and processes requests.",
    "lineNumber": 4,
    "interface": false
  },
  {
    "__docId__": 148,
    "kind": "file",
    "name": "src/http/shopifyAJAXAPI.js",
    "content": "import axios from 'axios';\n\n\nexport default axios.create({\n    timeout: 10000,\n});\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/http/shopifyAJAXAPI.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 149,
    "kind": "file",
    "name": "src/index.js",
    "content": "import * as index from '~/index';\nimport _utils from '~/utils/general';\nimport _entities from '~/entities/index';\nimport _plugins from '~/plugins/index';\n\nimport log from '~/log.js';\n\n\n/** @ignore */\nconst TAG = 'Bootstrap';\n\n\n\n/**\n * Plugins\n * @type {src/plugins/index.js~Plugins}\n */\nexport let plugins = _plugins;\n\n/**\n * Entities\n * @type {src/entities/index.js~Entities}\n */\nexport let entities = _entities;\n\n/**\n * General utilities\n * @type {src/utils/general.js~GeneralUtils}\n */\nexport let utils = _utils;\n\n\n\n/**\n * Main libary entry point.\n */\nexport default index;\n\n\nlog.send(log.DEBUG, TAG, 'Initialized.');\n\n\n\n// For docs\n/** @external {js-money} https://www.npmjs.com/package/js-money */\n/** @external {evee} https://www.npmjs.com/package/evee */\n/** @external {promise-queue} https://www.npmjs.com/package/promise-queue */\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/index.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 150,
    "kind": "variable",
    "name": "TAG",
    "memberof": "src/index.js",
    "static": true,
    "longname": "src/index.js~TAG",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify",
    "importStyle": null,
    "description": null,
    "lineNumber": 10,
    "ignore": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 151,
    "kind": "variable",
    "name": "plugins",
    "memberof": "src/index.js",
    "static": true,
    "longname": "src/index.js~plugins",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify",
    "importStyle": "{plugins}",
    "description": "Plugins",
    "lineNumber": 18,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/index.js~Plugins"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 152,
    "kind": "variable",
    "name": "entities",
    "memberof": "src/index.js",
    "static": true,
    "longname": "src/index.js~entities",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify",
    "importStyle": "{entities}",
    "description": "Entities",
    "lineNumber": 24,
    "type": {
      "nullable": null,
      "types": [
        "src/entities/index.js~Entities"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 153,
    "kind": "variable",
    "name": "utils",
    "memberof": "src/index.js",
    "static": true,
    "longname": "src/index.js~utils",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify",
    "importStyle": "{utils}",
    "description": "General utilities",
    "lineNumber": 30,
    "type": {
      "nullable": null,
      "types": [
        "src/utils/general.js~GeneralUtils"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 154,
    "kind": "external",
    "name": "js-money",
    "externalLink": "https://www.npmjs.com/package/js-money",
    "memberof": "src/index.js",
    "static": true,
    "longname": "src/index.js~js-money",
    "access": "public",
    "description": null
  },
  {
    "__docId__": 155,
    "kind": "external",
    "name": "evee",
    "externalLink": "https://www.npmjs.com/package/evee",
    "memberof": "src/index.js",
    "static": true,
    "longname": "src/index.js~evee",
    "access": "public",
    "description": null
  },
  {
    "__docId__": 156,
    "kind": "external",
    "name": "promise-queue",
    "externalLink": "https://www.npmjs.com/package/promise-queue",
    "memberof": "src/index.js",
    "static": true,
    "longname": "src/index.js~promise-queue",
    "access": "public",
    "description": null
  },
  {
    "__docId__": 157,
    "kind": "file",
    "name": "src/log.js",
    "content": "import config from './config';\nimport Log from './utils/Log';\nimport ConsoleLogger from './utils/loggers/ConsoleLogger';\n\n/** @ignore */\nconst TAG = 'LogBootstrap';\n\n// Setup library-level logging\nconst log = new Log;\n\nlog.setLogPrefix(config.logPrefix);\n\n/** @ignore */\nconst logger = new ConsoleLogger;\nif (!config.debug) {\n    logger.setLogLevel(log.WARN);\n}\nlog.addLogger(logger);\nlog.send(log.DEBUG, TAG, 'Initialized logging.');\n\n\n/** @type {src/utils/Log.js~Log} */\nexport default log;\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/log.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 158,
    "kind": "variable",
    "name": "TAG",
    "memberof": "src/log.js",
    "static": true,
    "longname": "src/log.js~TAG",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/log.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "ignore": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 159,
    "kind": "variable",
    "name": "logger",
    "memberof": "src/log.js",
    "static": true,
    "longname": "src/log.js~logger",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/log.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 14,
    "ignore": true,
    "type": {
      "types": [
        "src/utils/loggers/ConsoleLogger.js~ConsoleLogger"
      ]
    }
  },
  {
    "__docId__": 160,
    "kind": "file",
    "name": "src/plugins/easycurrency/EasyCurrency.js",
    "content": "import Evee from 'evee';\nimport Money from 'js-money';\nimport config from './config';\nimport state from './state';\nimport log from 'log';\nimport MoneySpanSet from './MoneySpanSet';\nimport MoneySpan from './MoneySpan';\nimport GeoserviceResolver from './resolvers/GeoserviceResolver';\nimport DefaultFormatter from './formatters/DefaultFormatter';\nimport Formatter from './formatters/Formatter';\nimport CurrencyResolver from './resolvers/CurrencyResolver';\nimport SelectHelper from './helpers/SelectHelper';\nimport Session from './Session';\nimport GeoService from '~/plugins/geoservice/GeoService';\n\n/** @ignore */\nconst TAG = 'EasyCurrency';\n\n/** @ignore */\nvar instanceCount = 0;\n\n/**\n * Plugin for automatic currency conversion, tax handling, etc.\n * @extends {evee}\n * @private\n */\nclass EasyCurrency extends Evee {\n\n    /**\n     * Creates a new instance of EasyCurrency.\n     * This class is intended to be used as a singleton, and has global\n     * side-effects - do not create multiple instances.\n     */\n    constructor() {\n        super();\n\n        instanceCount++;\n            var styles = [];\n        if (instanceCount > 1) {\n            log.warn(TAG, 'More than one instance of EasyCurrency has been created. This may cause unexpected behavior.');\n        }\n\n        /** @type {src/plugins/easycurrency/config.js~Config} */\n        this._config = config;\n        /** @type {src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver} */\n        this._resolver = null;\n        /** @type {src/plugins/easycurrency/state.js~State} */\n        this._state = state;\n        /** @type {src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet} */\n        this._moneySpanSet = new MoneySpanSet;\n        /** @type {src/plugins/easycurrency/formatters/Formatter.js~Formatter} */\n        this._formatter = new DefaultFormatter;\n        /** @type {src/plugins/easycurrency/Session.js~Session} */\n        this._session = new Session;\n\n        /** @type {src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper} */\n        this.selectHelper = new SelectHelper(this);\n    }\n\n\n    /**\n     * Uses a default {@link GeoserviceResolver} as the currency resolver.\n     */\n    useGeoserviceResolver() {\n        this.setCurrencyResolver(new GeoserviceResolver);\n    }\n\n\n    /**\n     * Start running EasyCurrency on the current page.\n     * @param {Object|src/plugins/easycurrency/config.js~Config} config\n     * @emits {Object|src/plugins/easycurrency/config.js~Config} beforeInitialize(config)\n     * @emits {Object|src/plugins/easycurrency/config.js~Config} initialize(config)\n     */\n    initialize(config) {\n        this.emit('beforeInitialize', config);\n        log.debug(TAG, 'Initialized with config', config);\n        if (config) {\n            this._config = Object.assign({}, this._config, config);\n        }\n\n        var currency = this._session.getCurrency();\n        var fromSession = currency;\n        currency = currency || this._config.defaultCurrency;\n\n        this.setActiveCurrency(this._session.getCurrency() || this._config.defaultCurrency);\n        this.emit('initialize', config);\n\n        if (!fromSession && this._config.useGeoForCurrency) {\n\t\t\tvar geoService = new GeoService;\n            geoService.lookupGeo().then((result) => {\n                log.debug(TAG, 'Got currency from geoservice: ' + result.currency);\n                this.setActiveCurrency(result.currency);\n            });\n        }\n    }\n\n    /**\n     * Sets the active currency, and refreshs any money spans.\n     * @param {String} currency Currency code\n     * @emits {String} beforeCurrencyChanged(currency)\n     * @emits {String} currencyChanged(currency)\n     */\n    setActiveCurrency(currency) {\n        this.emit('beforeCurrencyChanged', currency);\n        log.debug(TAG, 'Set active currency', currency);\n\n\t\tif (!currency || \n\t\t\t\t(this._config.allowedCurrencies != 'any'\n\t\t\t\t\t&& this._config.allowedCurrencies.indexOf(currency) == -1)) {\n\t\t\tlog.debug(TAG, 'Currency not in whitelist, switching to base currency.');\n\t\t\tcurrency = this._config.defaultCurrency;\n\t\t}\n\n        this._state.currency = currency;\n\n        this._session.saveCurrency(currency);\n\n        this.parse();\n        this.render();\n        this.emit('currencyChanged', currency);\n    }\n\n\n    /**\n     * Returns the active currency.\n     * @return {String}\n     */\n    getActiveCurrency() {\n        return this._state.currency;\n    }\n\n    /**\n     * Returns the available currency codes.\n     * @return {String[]}\n     */\n    async getAvailableCurrencies() {\n        return this._resolver.listCurrencyCodes();\n    }\n\n\n    /**\n     * Attempts to find new money spans on the page.\n     * Change moneySpanSelectors / moneySpanParser config options to modify\n     * how money spans are parsed.\n     * @emits {null} beforeParse\n     * @emits {null} parse\n     */\n    parse() {\n        this.emit('beforeParse');\n        log.debug(TAG, 'Parsing');\n        var els = [];\n        for (let selector of this._config.moneySpanSelectors) {\n\n            var els = document.querySelectorAll(selector);\n            for (let i = 0; i < els.length; i++) {\n                var el = els[i];\n                this._processElement(el);\n            }\n        }\n        this.emit('parse');\n    }\n\n    /**\n     * @param {DOMNode}\tel - Element to process\n     */\n    _processElement(el) {\n        var money = this._config.moneySpanParser(el, this);\n        var moneySpan = new MoneySpan(money, this);\n        moneySpan.setElement(el);\n        this._moneySpanSet.add(moneySpan);\n    }\n\n\n    /**\n     * Forces all money spans to re-render.\n     * @emits {null} beforeRender\n     * @emits {null} render\n     */\n    render() {\n        this.emit('beforeRender');\n        log.debug(TAG, 'Rendering');\n        for (let moneySpan of this._moneySpanSet.list()) {\n            moneySpan.render();\n        }\n        this.emit('render');\n    }\n\n\n\n    /**\n     * Returns the current state.\n     * @return {src/plugins/easycurrency/state.js~State}\n     */\n    getState() {\n        return this._state;\n    }\n\n\n    /**\n     * Format a value as a currency\n     * @param {js-money|Number} amount\n     * @param {String|null} [currency] If null, uses current currency.\n     * @return {String}\n     */\n    format(amount, currency) {\n        if (typeof amount == 'number') {\n            amount = new Money(amount, currency || this._state.currency);\n        }\n        var str = this._formatter.format(amount.amount, amount.currency);\n        return str;\n    }\n\n    /**\n     * Convert an amount to another currency.\n     * @param {js-money|Number} amount\n     * @param {String} [to] - If null, uses current currency\n     * @param {null|String} [from] Ignored if amount is a Money object.\n     * @return {Promise<js-money>}\n     */\n    async convert(amount, to, from) {\n        if (typeof amount == 'number') {\n            amount = new Money(amount, from || this._state.currency);\n        }\n        var rate = await this._resolver.getConversionRate(amount.currency, to || this._state.currency);\n        return new Money(amount.multiply(rate).amount, Money[to || this._state.currency]);\n    }\n\n    /**\n     * Adds the current tax rate to the given amount\n     * @param {js-money|Number} amount\n     * @return {Promise<js-money>}\n     */\n    async addTax(amount) {\n        if (typeof amount == 'number') {\n            amount = new Money(amount, this._state.currency);\n        }\n        return amount.multiply(1 + this._state.taxRate);\n    }\n\n\n    /**\n     * Sets the current tax rate.\n     * @param {type}\ttaxRate - Tax rate as a decimal percentage (i.e. 20% = 0.2)\n     * @emits {null} beforeChangeTaxRate\n     * @emits {null} taxRateChanged\n     */\n    setTaxRate(taxRate) {\n        this.emit('beforeChangeTaxRate');\n        this._state.taxRate = taxRate;\n\n        this.parse();\n        this.render();\n        this.emit('taxRateChanged');\n    }\n\n\n\n\n    /**\n     * Overrides the default currency resolver, which provides information\n     * about the available currencies.\n     * @param {src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver} resolver\n     * @emits {src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver} currencyResolverChanged(resolver)\n     */\n    setCurrencyResolver(resolver) {\n        this._resolver = resolver;\n        this.emit('currencyResolverChanged', resolver);\n    }\n\n\n    /**\n     * Overrides the default formatter.\n     * @param {src/plugins/easycurrency/formatters/Formatter.js~Formatter} formatter\n     * @emits {src/plugins/easycurrency/formatters/Formatter.js~Formatter} formatterChanged(formatter)\n     */\n    setFormatter(formatter) {\n        this._formatter = formatter;\n        this.emit('formatterChanged', resolver);\n    }\n\n}\n\n\nEasyCurrency.formatters = {\n    DefaultFormatter,\n    Formatter\n};\n\nEasyCurrency.helpers = {\n    SelectHelper,\n};\n\nEasyCurrency.resolvers = {\n    CurrencyResolver,\n    GeoserviceResolver\n};\n\nexport default EasyCurrency;\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/EasyCurrency.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 161,
    "kind": "variable",
    "name": "TAG",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js",
    "static": true,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~TAG",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/EasyCurrency.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 17,
    "ignore": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 162,
    "kind": "variable",
    "name": "instanceCount",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js",
    "static": true,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~instanceCount",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/EasyCurrency.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 20,
    "ignore": true,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 163,
    "kind": "class",
    "name": "EasyCurrency",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js",
    "static": true,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "access": "private",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/EasyCurrency.js",
    "importStyle": "EasyCurrency",
    "description": "Plugin for automatic currency conversion, tax handling, etc.",
    "lineNumber": 27,
    "interface": false,
    "extends": [
      "evee"
    ]
  },
  {
    "__docId__": 164,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#constructor",
    "access": "public",
    "description": "Creates a new instance of EasyCurrency.\nThis class is intended to be used as a singleton, and has global\nside-effects - do not create multiple instances.",
    "lineNumber": 34
  },
  {
    "__docId__": 165,
    "kind": "member",
    "name": "_config",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#_config",
    "access": "private",
    "description": null,
    "lineNumber": 44,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/config.js~Config"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 166,
    "kind": "member",
    "name": "_resolver",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#_resolver",
    "access": "private",
    "description": null,
    "lineNumber": 46,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 167,
    "kind": "member",
    "name": "_state",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#_state",
    "access": "private",
    "description": null,
    "lineNumber": 48,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/state.js~State"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 168,
    "kind": "member",
    "name": "_moneySpanSet",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#_moneySpanSet",
    "access": "private",
    "description": null,
    "lineNumber": 50,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 169,
    "kind": "member",
    "name": "_formatter",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#_formatter",
    "access": "private",
    "description": null,
    "lineNumber": 52,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/formatters/Formatter.js~Formatter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 170,
    "kind": "member",
    "name": "_session",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#_session",
    "access": "private",
    "description": null,
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/Session.js~Session"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 171,
    "kind": "member",
    "name": "selectHelper",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#selectHelper",
    "access": "public",
    "description": null,
    "lineNumber": 57,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 172,
    "kind": "method",
    "name": "useGeoserviceResolver",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#useGeoserviceResolver",
    "access": "public",
    "description": "Uses a default {@link GeoserviceResolver} as the currency resolver.",
    "lineNumber": 64,
    "params": [],
    "return": null
  },
  {
    "__docId__": 173,
    "kind": "method",
    "name": "initialize",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#initialize",
    "access": "public",
    "description": "Start running EasyCurrency on the current page.",
    "lineNumber": 75,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object",
          "src/plugins/easycurrency/config.js~Config"
        ],
        "spread": false,
        "optional": false,
        "name": "config",
        "description": ""
      }
    ],
    "emits": [
      {
        "types": [
          "Object",
          "src/plugins/easycurrency/config.js~Config"
        ],
        "description": "beforeInitialize(config)"
      },
      {
        "types": [
          "Object",
          "src/plugins/easycurrency/config.js~Config"
        ],
        "description": "initialize(config)"
      }
    ],
    "return": null
  },
  {
    "__docId__": 175,
    "kind": "method",
    "name": "setActiveCurrency",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#setActiveCurrency",
    "access": "public",
    "description": "Sets the active currency, and refreshs any money spans.",
    "lineNumber": 104,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "currency",
        "description": "Currency code"
      }
    ],
    "emits": [
      {
        "types": [
          "String"
        ],
        "description": "beforeCurrencyChanged(currency)"
      },
      {
        "types": [
          "String"
        ],
        "description": "currencyChanged(currency)"
      }
    ],
    "return": null
  },
  {
    "__docId__": 176,
    "kind": "method",
    "name": "getActiveCurrency",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#getActiveCurrency",
    "access": "public",
    "description": "Returns the active currency.",
    "lineNumber": 129,
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 177,
    "kind": "method",
    "name": "getAvailableCurrencies",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#getAvailableCurrencies",
    "access": "public",
    "description": "Returns the available currency codes.",
    "lineNumber": 137,
    "return": {
      "nullable": null,
      "types": [
        "String[]"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 178,
    "kind": "method",
    "name": "parse",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#parse",
    "access": "public",
    "description": "Attempts to find new money spans on the page.\nChange moneySpanSelectors / moneySpanParser config options to modify\nhow money spans are parsed.",
    "lineNumber": 149,
    "emits": [
      {
        "types": [
          "null"
        ],
        "description": "beforeParse"
      },
      {
        "types": [
          "null"
        ],
        "description": "parse"
      }
    ],
    "params": [],
    "return": null
  },
  {
    "__docId__": 179,
    "kind": "method",
    "name": "_processElement",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#_processElement",
    "access": "private",
    "description": "",
    "lineNumber": 167,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMNode"
        ],
        "spread": false,
        "optional": false,
        "name": "el",
        "description": "Element to process"
      }
    ],
    "return": null
  },
  {
    "__docId__": 180,
    "kind": "method",
    "name": "render",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#render",
    "access": "public",
    "description": "Forces all money spans to re-render.",
    "lineNumber": 180,
    "emits": [
      {
        "types": [
          "null"
        ],
        "description": "beforeRender"
      },
      {
        "types": [
          "null"
        ],
        "description": "render"
      }
    ],
    "params": [],
    "return": null
  },
  {
    "__docId__": 181,
    "kind": "method",
    "name": "getState",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#getState",
    "access": "public",
    "description": "Returns the current state.",
    "lineNumber": 195,
    "return": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/state.js~State"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 182,
    "kind": "method",
    "name": "format",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#format",
    "access": "public",
    "description": "Format a value as a currency",
    "lineNumber": 206,
    "params": [
      {
        "nullable": null,
        "types": [
          "js-money",
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": true,
        "name": "currency",
        "description": "If null, uses current currency."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 183,
    "kind": "method",
    "name": "convert",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#convert",
    "access": "public",
    "description": "Convert an amount to another currency.",
    "lineNumber": 221,
    "params": [
      {
        "nullable": null,
        "types": [
          "js-money",
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": true,
        "name": "to",
        "description": "If null, uses current currency"
      },
      {
        "nullable": null,
        "types": [
          "null",
          "String"
        ],
        "spread": false,
        "optional": true,
        "name": "from",
        "description": "Ignored if amount is a Money object."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<js-money>"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 184,
    "kind": "method",
    "name": "addTax",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#addTax",
    "access": "public",
    "description": "Adds the current tax rate to the given amount",
    "lineNumber": 234,
    "params": [
      {
        "nullable": null,
        "types": [
          "js-money",
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<js-money>"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 185,
    "kind": "method",
    "name": "setTaxRate",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#setTaxRate",
    "access": "public",
    "description": "Sets the current tax rate.",
    "lineNumber": 248,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "taxRate",
        "description": "Tax rate as a decimal percentage (i.e. 20% = 0.2)"
      }
    ],
    "emits": [
      {
        "types": [
          "null"
        ],
        "description": "beforeChangeTaxRate"
      },
      {
        "types": [
          "null"
        ],
        "description": "taxRateChanged"
      }
    ],
    "return": null
  },
  {
    "__docId__": 186,
    "kind": "method",
    "name": "setCurrencyResolver",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#setCurrencyResolver",
    "access": "public",
    "description": "Overrides the default currency resolver, which provides information\nabout the available currencies.",
    "lineNumber": 266,
    "params": [
      {
        "nullable": null,
        "types": [
          "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver"
        ],
        "spread": false,
        "optional": false,
        "name": "resolver",
        "description": ""
      }
    ],
    "emits": [
      {
        "types": [
          "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver"
        ],
        "description": "currencyResolverChanged(resolver)"
      }
    ],
    "return": null
  },
  {
    "__docId__": 188,
    "kind": "method",
    "name": "setFormatter",
    "memberof": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency#setFormatter",
    "access": "public",
    "description": "Overrides the default formatter.",
    "lineNumber": 277,
    "params": [
      {
        "nullable": null,
        "types": [
          "src/plugins/easycurrency/formatters/Formatter.js~Formatter"
        ],
        "spread": false,
        "optional": false,
        "name": "formatter",
        "description": ""
      }
    ],
    "emits": [
      {
        "types": [
          "src/plugins/easycurrency/formatters/Formatter.js~Formatter"
        ],
        "description": "formatterChanged(formatter)"
      }
    ],
    "return": null
  },
  {
    "__docId__": 190,
    "kind": "file",
    "name": "src/plugins/easycurrency/MoneySpan.js",
    "content": "import config from './config';\nimport Money from 'js-money';\n\n/**\n * Represents an element which renders a monetary value.\n */\nexport default class MoneySpan {\n    /**\n     * Create a new MoneySpan instance.\n     * @param {js-money} money The initial value of the element.\n     * @param {src/plugins/easycurrency/main.js~EasyCurrency} easyCurrency EasyCurrency\n     */\n    constructor(money, easyCurrency) {\n        /** @type {DOMNode} */\n        this._element = null;\n        /** @type {js-money} */\n        this._money = money;\n        /** @type {src/plugins/easycurrency/main.js~EasyCurrency} */\n        this._easyCurrency = easyCurrency;\n    }\n\n\n    /**\n     * Retrieves the element this money span is attached to.\n     * @return {DOMNode}\n     */\n    getElement() {\n        return this._element;\n    }\n\n\n    /**\n     * Attaches this money span to the given element.\n     * @param {DOMNode}\tel - The element to attach to.\n     */\n    setElement(el) {\n        this._element = el;\n    }\n\n    /**\n     * Destroys this MoneySpan.\n     */\n    destroy() {\n        this._element = null;\n        this._easyCurrency = null;\n        this._money = null;\n    }\n\n    /**\n     * Set an element which this money value will render to when changed.\n     * @param {DOMNode} element - The element to render to.\n     */\n    setRenderElement(element) {\n        this._element = element;\n        this.render();\n    }\n\n    /**\n     * Change the value of this MoneySpan.\n     * @param {js-money} money\n     */\n    set(money) {\n        this._money = money;\n        this.render();\n    }\n\n    /**\n     * Re-render the element.\n     */\n    render() {\n        if (!this._element) {\n            return;\n        }\n\n        this._easyCurrency.addTax(this._money)\n            .then((v) => this._easyCurrency.convert(v))\n            .then((v) => this._easyCurrency.format(v))\n            .then((str) => {\n                this._element.innerText = str;\n            });\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/MoneySpan.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 191,
    "kind": "class",
    "name": "MoneySpan",
    "memberof": "src/plugins/easycurrency/MoneySpan.js",
    "static": true,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/MoneySpan.js",
    "importStyle": "MoneySpan",
    "description": "Represents an element which renders a monetary value.",
    "lineNumber": 7,
    "interface": false
  },
  {
    "__docId__": 192,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#constructor",
    "access": "public",
    "description": "Create a new MoneySpan instance.",
    "lineNumber": 13,
    "params": [
      {
        "nullable": null,
        "types": [
          "js-money"
        ],
        "spread": false,
        "optional": false,
        "name": "money",
        "description": "The initial value of the element."
      },
      {
        "nullable": null,
        "types": [
          "src/plugins/easycurrency/main.js~EasyCurrency"
        ],
        "spread": false,
        "optional": false,
        "name": "easyCurrency",
        "description": "EasyCurrency"
      }
    ]
  },
  {
    "__docId__": 193,
    "kind": "member",
    "name": "_element",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#_element",
    "access": "private",
    "description": null,
    "lineNumber": 15,
    "type": {
      "nullable": null,
      "types": [
        "DOMNode"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 194,
    "kind": "member",
    "name": "_money",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#_money",
    "access": "private",
    "description": null,
    "lineNumber": 17,
    "type": {
      "nullable": null,
      "types": [
        "js-money"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 195,
    "kind": "member",
    "name": "_easyCurrency",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#_easyCurrency",
    "access": "private",
    "description": null,
    "lineNumber": 19,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/main.js~EasyCurrency"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 196,
    "kind": "method",
    "name": "getElement",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#getElement",
    "access": "public",
    "description": "Retrieves the element this money span is attached to.",
    "lineNumber": 27,
    "return": {
      "nullable": null,
      "types": [
        "DOMNode"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 197,
    "kind": "method",
    "name": "setElement",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#setElement",
    "access": "public",
    "description": "Attaches this money span to the given element.",
    "lineNumber": 36,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMNode"
        ],
        "spread": false,
        "optional": false,
        "name": "el",
        "description": "The element to attach to."
      }
    ],
    "return": null
  },
  {
    "__docId__": 199,
    "kind": "method",
    "name": "destroy",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#destroy",
    "access": "public",
    "description": "Destroys this MoneySpan.",
    "lineNumber": 43,
    "params": [],
    "return": null
  },
  {
    "__docId__": 203,
    "kind": "method",
    "name": "setRenderElement",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#setRenderElement",
    "access": "public",
    "description": "Set an element which this money value will render to when changed.",
    "lineNumber": 53,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMNode"
        ],
        "spread": false,
        "optional": false,
        "name": "element",
        "description": "The element to render to."
      }
    ],
    "return": null
  },
  {
    "__docId__": 205,
    "kind": "method",
    "name": "set",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#set",
    "access": "public",
    "description": "Change the value of this MoneySpan.",
    "lineNumber": 62,
    "params": [
      {
        "nullable": null,
        "types": [
          "js-money"
        ],
        "spread": false,
        "optional": false,
        "name": "money",
        "description": ""
      }
    ],
    "return": null
  },
  {
    "__docId__": 207,
    "kind": "method",
    "name": "render",
    "memberof": "src/plugins/easycurrency/MoneySpan.js~MoneySpan",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpan.js~MoneySpan#render",
    "access": "public",
    "description": "Re-render the element.",
    "lineNumber": 70,
    "params": [],
    "return": null
  },
  {
    "__docId__": 208,
    "kind": "file",
    "name": "src/plugins/easycurrency/MoneySpanSet.js",
    "content": "/**\n * Represents a unique set of MoneySpan objects.\n */\nexport default class MoneySpanSet {\n    /**\n     * Create an empty MoneySpanSet.\n     */\n    constructor() {\n        /** @type {Object<String, MoneySpan>} */\n        this._spansByElement = new WeakMap();\n        this._allSpans = [];\n    }\n\n    /**\n     * Add a new span to the set.\n     * @param {src/plugins/easycurrency/MoneySpan.js~MoneySpan}\tmoneySpan - Span to add\n     */\n    add(moneySpan) {\n        this._spansByElement.set(moneySpan.getElement(),  moneySpan);\n        this._allSpans.push(moneySpan);\n    }\n\n    /**\n     * Find a span by the element it renders to.\n     * @param {type}\telement - The element the span renders to.\n     * @return {undefined|src/plugins/easycurrency/MoneySpan.js~MoneySpan}\n     */\n    findByElement(element) {\n        return this._spansByElement.get(element);\n    }\n\n    /**\n     * Returns a list of all the spans in the set.\n     * @return {MoneySpan[]}\n     */\n    list() {\n        return this._allSpans;\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/MoneySpanSet.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 209,
    "kind": "class",
    "name": "MoneySpanSet",
    "memberof": "src/plugins/easycurrency/MoneySpanSet.js",
    "static": true,
    "longname": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/MoneySpanSet.js",
    "importStyle": "MoneySpanSet",
    "description": "Represents a unique set of MoneySpan objects.",
    "lineNumber": 4,
    "interface": false
  },
  {
    "__docId__": 210,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet#constructor",
    "access": "public",
    "description": "Create an empty MoneySpanSet.",
    "lineNumber": 8
  },
  {
    "__docId__": 211,
    "kind": "member",
    "name": "_spansByElement",
    "memberof": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet",
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet#_spansByElement",
    "access": "private",
    "description": null,
    "lineNumber": 10,
    "type": {
      "nullable": null,
      "types": [
        "Object<String, MoneySpan>"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 212,
    "kind": "member",
    "name": "_allSpans",
    "memberof": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet",
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet#_allSpans",
    "access": "private",
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*[]"
      ]
    }
  },
  {
    "__docId__": 213,
    "kind": "method",
    "name": "add",
    "memberof": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet#add",
    "access": "public",
    "description": "Add a new span to the set.",
    "lineNumber": 18,
    "params": [
      {
        "nullable": null,
        "types": [
          "src/plugins/easycurrency/MoneySpan.js~MoneySpan"
        ],
        "spread": false,
        "optional": false,
        "name": "moneySpan",
        "description": "Span to add"
      }
    ],
    "return": null
  },
  {
    "__docId__": 214,
    "kind": "method",
    "name": "findByElement",
    "memberof": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet#findByElement",
    "access": "public",
    "description": "Find a span by the element it renders to.",
    "lineNumber": 28,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "element",
        "description": "The element the span renders to."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "undefined",
        "src/plugins/easycurrency/MoneySpan.js~MoneySpan"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 215,
    "kind": "method",
    "name": "list",
    "memberof": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/MoneySpanSet.js~MoneySpanSet#list",
    "access": "public",
    "description": "Returns a list of all the spans in the set.",
    "lineNumber": 36,
    "return": {
      "nullable": null,
      "types": [
        "MoneySpan[]"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 216,
    "kind": "file",
    "name": "src/plugins/easycurrency/Session.js",
    "content": "import localStorage from 'local-storage-fallback';\nimport utils from 'utils/general';\n\n\n/**\n * Methods for persisting the state into the current session.\n */\nexport default class Session {\n\n    /**\n     * Retrieves the active currency from session.\n     * @return {undefined|String}\n     */\n    getCurrency() {\n        return localStorage.getItem(utils.safeStorageKey('escshopify', 'EasyCurrency::Session:currency'));\n    }\n\n\n    /**\n     * Records the active currency in the session.\n     * @param {null|String}\tvalue - The currency to record, or null to clear.\n     */\n    saveCurrency(value) {\n        localStorage.setItem(utils.safeStorageKey('escshopify', 'EasyCurrency::Session:currency'), value);\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/Session.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 217,
    "kind": "class",
    "name": "Session",
    "memberof": "src/plugins/easycurrency/Session.js",
    "static": true,
    "longname": "src/plugins/easycurrency/Session.js~Session",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/Session.js",
    "importStyle": "Session",
    "description": "Methods for persisting the state into the current session.",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 218,
    "kind": "method",
    "name": "getCurrency",
    "memberof": "src/plugins/easycurrency/Session.js~Session",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/Session.js~Session#getCurrency",
    "access": "public",
    "description": "Retrieves the active currency from session.",
    "lineNumber": 14,
    "return": {
      "nullable": null,
      "types": [
        "undefined",
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 219,
    "kind": "method",
    "name": "saveCurrency",
    "memberof": "src/plugins/easycurrency/Session.js~Session",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/Session.js~Session#saveCurrency",
    "access": "public",
    "description": "Records the active currency in the session.",
    "lineNumber": 23,
    "params": [
      {
        "nullable": null,
        "types": [
          "null",
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": "The currency to record, or null to clear."
      }
    ],
    "return": null
  },
  {
    "__docId__": 220,
    "kind": "file",
    "name": "src/plugins/easycurrency/config.js",
    "content": "import Money from 'js-money';\n\n/** Config*/\nclass Config {\n    /**\n     * Construct a new config.\n     * @param {Object}\toptions - Properties to initialze on config.\n     */\n    constructor(options) {\n        options = Object.assign({}, {\n            defaultCurrency: 'USD',\n            useGeoForCurrency: true,\n            moneySpanSelectors: [\n                '[data-money]'\n            ],\n            moneySpanParser: function(el, easyCurrency) {\n                var amount = el.dataset.money;\n                var currency = el.dataset.moneyCurrency || easyCurrency._config.defaultCurrency;\n                delete el.dataset.money;\n                delete el.dataset.moneyCurrency;\n                amount = Number(amount);\n                return new Money(amount, currency);\n            },\n\t\t\tallowedCurrencies: 'any',\n        }, options);\n\n        /** @type {String} Currency code, used for initial currency. */\n        this.defaultCurrency = options.defaultCurrency;\n        /** @type {Boolean} If true, currency will be determined via geoservice on load. */\n        this.useGeoForCurrency = options.useGeoForCurrency;\n        /** @type {String[]} Array of CSS selectors for finding money spans */\n        this.moneySpanSelectors = options.moneySpanSelectors;\n        /** @type {function(el: DOMNode, easyCurrency: src/easycurrency/main.js~EasyCurrency): js-money} Callback which determines initial money span value. */\n        this.moneySpanParser = options.moneySpanParser;\n    }\n}\n\n/** @ignore */\nexport default new Config();\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/config.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 221,
    "kind": "class",
    "name": "Config",
    "memberof": "src/plugins/easycurrency/config.js",
    "static": true,
    "longname": "src/plugins/easycurrency/config.js~Config",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/config.js",
    "importStyle": null,
    "description": "Config",
    "lineNumber": 4,
    "pseudoExport": true,
    "interface": false
  },
  {
    "__docId__": 222,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/easycurrency/config.js~Config",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/config.js~Config#constructor",
    "access": "public",
    "description": "Construct a new config.",
    "lineNumber": 9,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "options",
        "description": "Properties to initialze on config."
      }
    ]
  },
  {
    "__docId__": 223,
    "kind": "member",
    "name": "defaultCurrency",
    "memberof": "src/plugins/easycurrency/config.js~Config",
    "static": false,
    "longname": "src/plugins/easycurrency/config.js~Config#defaultCurrency",
    "access": "public",
    "description": null,
    "lineNumber": 28,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 224,
    "kind": "member",
    "name": "useGeoForCurrency",
    "memberof": "src/plugins/easycurrency/config.js~Config",
    "static": false,
    "longname": "src/plugins/easycurrency/config.js~Config#useGeoForCurrency",
    "access": "public",
    "description": null,
    "lineNumber": 30,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 225,
    "kind": "member",
    "name": "moneySpanSelectors",
    "memberof": "src/plugins/easycurrency/config.js~Config",
    "static": false,
    "longname": "src/plugins/easycurrency/config.js~Config#moneySpanSelectors",
    "access": "public",
    "description": null,
    "lineNumber": 32,
    "type": {
      "nullable": null,
      "types": [
        "String[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 226,
    "kind": "member",
    "name": "moneySpanParser",
    "memberof": "src/plugins/easycurrency/config.js~Config",
    "static": false,
    "longname": "src/plugins/easycurrency/config.js~Config#moneySpanParser",
    "access": "public",
    "description": null,
    "lineNumber": 34,
    "type": {
      "nullable": null,
      "types": [
        "function(el: DOMNode, easyCurrency: src/easycurrency/main.js~EasyCurrency): js-money"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 227,
    "kind": "variable",
    "name": "config",
    "memberof": "src/plugins/easycurrency/config.js",
    "static": true,
    "longname": "src/plugins/easycurrency/config.js~config",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/config.js",
    "importStyle": "config",
    "description": null,
    "lineNumber": 39,
    "ignore": true,
    "type": {
      "types": [
        "src/plugins/easycurrency/config.js~Config"
      ]
    }
  },
  {
    "__docId__": 228,
    "kind": "file",
    "name": "src/plugins/easycurrency/formatters/DefaultFormatter.js",
    "content": "import * as currencies from 'js-money/lib/currency.js';\nimport Formatter from './Formatter';\n\n\n/**\n * A default formatting implementation.\n * Formats most currencies as $00.00, except JPY which is 00 $\n */\nexport default class DefaultFormatter extends Formatter {\n    /**\n     * Format a currency.\n     * @param {type}\tamount - Amount in cents.\n     * @param {type}\tcurrency - Currency code to convert to.\n     * @return {String}\n     */\n    format(amount, currency) {\n        var currencyInfo = currencies[currency];\n\n        if (currencyInfo.code == 'JPY') {\n            return this._suffixSymbolNoDecimal(amount, currencyInfo, true);\n        }\n\n        return this._formatPrefixedSymbolTwoDecimal(amount, currencyInfo, false);\n    }\n\n\n    /**\n     * Format as 00 $\n     * @param {Number}\tamount\n     * @param {Object}\tcurrencyInfo\n     * @param {Boolean}\tspace\n     * @return {String}\n     */\n    _suffixSymbolNoDecimal(amount, currencyInfo, space) {\n        // Amount is always in cents, even for JPY\n        return (amount / 100) + (space ? ' ' : '') + currencyInfo.symbol_native;\n    }\n\n    /**\n     * Format as $00.00\n     * @param {Number}\tamount\n     * @param {Object}\tcurrencyInfo\n     * @param {Boolean}\tspace\n     * @return {String}\n     */\n    _formatPrefixedSymbolTwoDecimal(amount, currencyInfo, space) {\n        return currencyInfo.symbol_native + (space ? ' ' : '') + (amount / 100).toFixed(2);\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/formatters/DefaultFormatter.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 229,
    "kind": "class",
    "name": "DefaultFormatter",
    "memberof": "src/plugins/easycurrency/formatters/DefaultFormatter.js",
    "static": true,
    "longname": "src/plugins/easycurrency/formatters/DefaultFormatter.js~DefaultFormatter",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/formatters/DefaultFormatter.js",
    "importStyle": "DefaultFormatter",
    "description": "A default formatting implementation.\nFormats most currencies as $00.00, except JPY which is 00 $",
    "lineNumber": 9,
    "interface": false,
    "extends": [
      "src/plugins/easycurrency/formatters/Formatter.js~Formatter"
    ]
  },
  {
    "__docId__": 230,
    "kind": "method",
    "name": "format",
    "memberof": "src/plugins/easycurrency/formatters/DefaultFormatter.js~DefaultFormatter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/formatters/DefaultFormatter.js~DefaultFormatter#format",
    "access": "public",
    "description": "Format a currency.",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": "Amount in cents."
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "currency",
        "description": "Currency code to convert to."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 231,
    "kind": "method",
    "name": "_suffixSymbolNoDecimal",
    "memberof": "src/plugins/easycurrency/formatters/DefaultFormatter.js~DefaultFormatter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/formatters/DefaultFormatter.js~DefaultFormatter#_suffixSymbolNoDecimal",
    "access": "private",
    "description": "Format as 00 $",
    "lineNumber": 34,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "currencyInfo",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "space",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 232,
    "kind": "method",
    "name": "_formatPrefixedSymbolTwoDecimal",
    "memberof": "src/plugins/easycurrency/formatters/DefaultFormatter.js~DefaultFormatter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/formatters/DefaultFormatter.js~DefaultFormatter#_formatPrefixedSymbolTwoDecimal",
    "access": "private",
    "description": "Format as $00.00",
    "lineNumber": 46,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "currencyInfo",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "space",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 233,
    "kind": "file",
    "name": "src/plugins/easycurrency/formatters/Formatter.js",
    "content": "/**\n * Formats currencies.\n * This is an abstract class which formatters should extend from.\n * @public\n */\nexport default class Formatter {\n\n    /**\n     * Format a currency.\n     * @param {type}\tamount - Amount in cents.\n     * @param {type}\tcurrency - Currency code to convert to.\n     * @return {String}\n     */\n    format(amount, currency) {\n        throw Error('Formatter should implement format');\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/formatters/Formatter.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 234,
    "kind": "class",
    "name": "Formatter",
    "memberof": "src/plugins/easycurrency/formatters/Formatter.js",
    "static": true,
    "longname": "src/plugins/easycurrency/formatters/Formatter.js~Formatter",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/formatters/Formatter.js",
    "importStyle": "Formatter",
    "description": "Formats currencies.\nThis is an abstract class which formatters should extend from.",
    "lineNumber": 6,
    "interface": false
  },
  {
    "__docId__": 235,
    "kind": "method",
    "name": "format",
    "memberof": "src/plugins/easycurrency/formatters/Formatter.js~Formatter",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/formatters/Formatter.js~Formatter#format",
    "access": "public",
    "description": "Format a currency.",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "amount",
        "description": "Amount in cents."
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "currency",
        "description": "Currency code to convert to."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 236,
    "kind": "file",
    "name": "src/plugins/easycurrency/helpers/SelectHelper.js",
    "content": "/**\n * Helper to bind select elements to EasyCurrency.\n */\nexport default class SelectHelper {\n\n    /**\n     * Construct a new instance of the helper.\n     * @param {src/plugins/easycurrency/EasyCurrency.js~EasyCurrency} easyCurrency\n     */\n    constructor(easyCurrency) {\n        /** @type {src/plugins/easycurrency/EasyCurrency.js~EasyCurrency} */\n        this._easyCurrency = easyCurrency;\n    }\n\n\n    /**\n     * Bind a input element with EasyCurrency.\n     * @param {DOMNode}\telement\n     */\n    link(element) {\n        element.addEventListener('change', (e) => {\n            this._easyCurrency.setActiveCurrency(element.value);\n        });\n\n        this._easyCurrency.on('currencyChanged', (e) => {\n            var newCurrency = e.data;\n            element.value = newCurrency;\n        });\n\n        element.value = this._easyCurrency.getActiveCurrency();\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/helpers/SelectHelper.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 237,
    "kind": "class",
    "name": "SelectHelper",
    "memberof": "src/plugins/easycurrency/helpers/SelectHelper.js",
    "static": true,
    "longname": "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/helpers/SelectHelper.js",
    "importStyle": "SelectHelper",
    "description": "Helper to bind select elements to EasyCurrency.",
    "lineNumber": 4,
    "interface": false
  },
  {
    "__docId__": 238,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper#constructor",
    "access": "public",
    "description": "Construct a new instance of the helper.",
    "lineNumber": 10,
    "params": [
      {
        "nullable": null,
        "types": [
          "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency"
        ],
        "spread": false,
        "optional": false,
        "name": "easyCurrency",
        "description": ""
      }
    ]
  },
  {
    "__docId__": 239,
    "kind": "member",
    "name": "_easyCurrency",
    "memberof": "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper",
    "static": false,
    "longname": "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper#_easyCurrency",
    "access": "private",
    "description": null,
    "lineNumber": 12,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 240,
    "kind": "method",
    "name": "link",
    "memberof": "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/helpers/SelectHelper.js~SelectHelper#link",
    "access": "public",
    "description": "Bind a input element with EasyCurrency.",
    "lineNumber": 20,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMNode"
        ],
        "spread": false,
        "optional": false,
        "name": "element",
        "description": ""
      }
    ],
    "return": null
  },
  {
    "__docId__": 241,
    "kind": "file",
    "name": "src/plugins/easycurrency/resolvers/CurrencyResolver.js",
    "content": "/**\n * Provides information about available currencies.\n * This is an abstract class which resolvers should extend from.\n * @public\n */\nexport default class CurrencyResolver {\n    /**\n     * List the available currencies.\n     * @return {String[]}\n     * @throws {Error} - CurrencyResolver should implement listCurrencyCodes\n     */\n    async listCurrencyCodes() {\n        throw Error('CurrencyResolver should implement listCurrencyCodes');\n    }\n\n\n    /**\n     * Get conversion rate for a specific currency pair.\n     * @param {String}\tfrom\n     * @param {String}\tto\n     * @return {Number}\n     * @throws {Error} - CurrencyResolver should implement getConversionRate\n     */\n    async getConversionRate(from, to) {\n        throw Error('CurrencyResolver should implement getConversionRate');\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/resolvers/CurrencyResolver.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 242,
    "kind": "class",
    "name": "CurrencyResolver",
    "memberof": "src/plugins/easycurrency/resolvers/CurrencyResolver.js",
    "static": true,
    "longname": "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/resolvers/CurrencyResolver.js",
    "importStyle": "CurrencyResolver",
    "description": "Provides information about available currencies.\nThis is an abstract class which resolvers should extend from.",
    "lineNumber": 6,
    "interface": false
  },
  {
    "__docId__": 243,
    "kind": "method",
    "name": "listCurrencyCodes",
    "memberof": "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver#listCurrencyCodes",
    "access": "public",
    "description": "List the available currencies.",
    "lineNumber": 12,
    "return": {
      "nullable": null,
      "types": [
        "String[]"
      ],
      "spread": false,
      "description": ""
    },
    "throws": [
      {
        "types": [
          "Error"
        ],
        "description": "CurrencyResolver should implement listCurrencyCodes"
      }
    ],
    "params": []
  },
  {
    "__docId__": 244,
    "kind": "method",
    "name": "getConversionRate",
    "memberof": "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver#getConversionRate",
    "access": "public",
    "description": "Get conversion rate for a specific currency pair.",
    "lineNumber": 24,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "from",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "to",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "throws": [
      {
        "types": [
          "Error"
        ],
        "description": "CurrencyResolver should implement getConversionRate"
      }
    ]
  },
  {
    "__docId__": 245,
    "kind": "file",
    "name": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js",
    "content": "import CurrencyResolver from './CurrencyResolver';\nimport GeoService from '~/plugins/geoservice/GeoService';\n\nimport * as currencies from 'js-money/lib/currency.js';\n\n/**\n * Gets currency information from the ESC Geoservice.\n * @private\n */\nexport default class GeoserviceResolver extends CurrencyResolver {\n    /**\n     * Create new instance of GeoserviceResolver.\n     */\n    constructor() {\n        super();\n\n        /** @type {Object} */\n        this._rates = null;\n        /** @type {Boolean} */\n        this._requested = false;\n        /** @type {Promise<Object, Error} */\n        this._ratesPromise = null;\n\n        this._geoService = new GeoService;\n    }\n\n\n    /**\n     * Retrieves rates from the server.\n     * Rates are cached in memory.\n     * @return {Promise<Object, Error>}\n     */\n    async _getRates() {\n        if (this._rates) {\n            return this._rates;\n        }\n\n        if (!this._ratesPromise) {\n            this._ratesPromise = (async () => {\n                var rates = await this._geoService.getCurrencyInfo();\n                this._rates = rates;\n                return rates;\n            })();\n        }\n        return await this._ratesPromise;\n    }\n\n    /**\n     * List the available currencies.\n     * @return {String[]}\n     * @throws {Error} - CurrencyResolver should implement listCurrencyCodes\n     */\n    async listCurrencyCodes() {\n        return Object.keys(currencies);\n    }\n\n    /**\n     * Get conversion rate for a specific currency pair.\n     * @param {String}\tfrom\n     * @param {String}\tto\n     * @return {Number}\n     * @throws {Error} - CurrencyResolver should implement getConversionRate\n     */\n    async getConversionRate(from, to) {\n        var info = await this._getRates();\n\n        var baseToFrom = from == info.base ? 1 : info.rates[from];\n        var fromToBase = 1 / baseToFrom;\n        var baseToTo = to == info.base ? 1 : info.rates[to];\n\n        var combinedRate = fromToBase * baseToTo;\n        return combinedRate;\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/resolvers/GeoserviceResolver.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 246,
    "kind": "class",
    "name": "GeoserviceResolver",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js",
    "static": true,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "access": "private",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/resolvers/GeoserviceResolver.js",
    "importStyle": "GeoserviceResolver",
    "description": "Gets currency information from the ESC Geoservice.",
    "lineNumber": 10,
    "interface": false,
    "extends": [
      "src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver"
    ]
  },
  {
    "__docId__": 247,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#constructor",
    "access": "public",
    "description": "Create new instance of GeoserviceResolver.",
    "lineNumber": 14
  },
  {
    "__docId__": 248,
    "kind": "member",
    "name": "_rates",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#_rates",
    "access": "private",
    "description": null,
    "lineNumber": 18,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 249,
    "kind": "member",
    "name": "_requested",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#_requested",
    "access": "private",
    "description": null,
    "lineNumber": 20,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 250,
    "kind": "member",
    "name": "_ratesPromise",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#_ratesPromise",
    "access": "private",
    "description": null,
    "lineNumber": 22,
    "type": {
      "nullable": null,
      "types": [
        "Promise<Object, Error"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 251,
    "kind": "member",
    "name": "_geoService",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#_geoService",
    "access": "private",
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 252,
    "kind": "method",
    "name": "_getRates",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#_getRates",
    "access": "private",
    "description": "Retrieves rates from the server.\nRates are cached in memory.",
    "lineNumber": 33,
    "return": {
      "nullable": null,
      "types": [
        "Promise<Object, Error>"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 255,
    "kind": "method",
    "name": "listCurrencyCodes",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#listCurrencyCodes",
    "access": "public",
    "description": "List the available currencies.",
    "lineNumber": 53,
    "return": {
      "nullable": null,
      "types": [
        "String[]"
      ],
      "spread": false,
      "description": ""
    },
    "throws": [
      {
        "types": [
          "Error"
        ],
        "description": "CurrencyResolver should implement listCurrencyCodes"
      }
    ],
    "params": []
  },
  {
    "__docId__": 256,
    "kind": "method",
    "name": "getConversionRate",
    "memberof": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/easycurrency/resolvers/GeoserviceResolver.js~GeoserviceResolver#getConversionRate",
    "access": "public",
    "description": "Get conversion rate for a specific currency pair.",
    "lineNumber": 64,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "from",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "to",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "throws": [
      {
        "types": [
          "Error"
        ],
        "description": "CurrencyResolver should implement getConversionRate"
      }
    ]
  },
  {
    "__docId__": 257,
    "kind": "file",
    "name": "src/plugins/easycurrency/state.js",
    "content": "/**\n * Represents the current currency settings.\n */\nclass State {\n    /**\n     * Create new instance of the state.\n     */\n    constructor() {\n        /** @type {null|String} */\n        this.currency = null;\n        /** @type {Number} */\n        this.taxRate = 0;\n    }\n}\n\n/** @ignore */\nexport default new State();\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/easycurrency/state.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 258,
    "kind": "class",
    "name": "State",
    "memberof": "src/plugins/easycurrency/state.js",
    "static": true,
    "longname": "src/plugins/easycurrency/state.js~State",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/state.js",
    "importStyle": null,
    "description": "Represents the current currency settings.",
    "lineNumber": 4,
    "pseudoExport": true,
    "interface": false
  },
  {
    "__docId__": 259,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/easycurrency/state.js~State",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/easycurrency/state.js~State#constructor",
    "access": "public",
    "description": "Create new instance of the state.",
    "lineNumber": 8
  },
  {
    "__docId__": 260,
    "kind": "member",
    "name": "currency",
    "memberof": "src/plugins/easycurrency/state.js~State",
    "static": false,
    "longname": "src/plugins/easycurrency/state.js~State#currency",
    "access": "public",
    "description": null,
    "lineNumber": 10,
    "type": {
      "nullable": null,
      "types": [
        "null",
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 261,
    "kind": "member",
    "name": "taxRate",
    "memberof": "src/plugins/easycurrency/state.js~State",
    "static": false,
    "longname": "src/plugins/easycurrency/state.js~State#taxRate",
    "access": "public",
    "description": null,
    "lineNumber": 12,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 262,
    "kind": "variable",
    "name": "state",
    "memberof": "src/plugins/easycurrency/state.js",
    "static": true,
    "longname": "src/plugins/easycurrency/state.js~state",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/easycurrency/state.js",
    "importStyle": "state",
    "description": null,
    "lineNumber": 17,
    "ignore": true,
    "type": {
      "types": [
        "src/plugins/easycurrency/state.js~State"
      ]
    }
  },
  {
    "__docId__": 263,
    "kind": "file",
    "name": "src/plugins/geoservice/API.js",
    "content": "import axios from 'axios';\n\n/** API root URL */\nconst ROOT_URL = 'https://geo.eastsideapps.io/api/v1';\n/** Path for geolcation */\nconst PATH_GEOIP = '/info?ip={ip}';\n/** Path for currency info */\nconst PATH_CURRENCY = '/currency';\n\n\n/**\n * Handles requests to the ESC Geoservice.\n */\nexport default class API {\n    /**\n     * Create a new instance of the API.\n     */\n    constructor() {\n        /** @type {String} */\n        this.rootUrl = ROOT_URL;\n    }\n\n    /**\n     * Lookup GeoIP info for a given IP address. Uses local IP if not provided.\n     * @param {String|null} ip\n     * @returns {Promise<Object, Error>} GeoIP info. Throws if request fails.\n     */\n    async geoip(ip) {\n        if (!ip) {\n            ip = '';\n        }\n        var url = this.rootUrl + PATH_GEOIP.replace('{ip}', ip);\n        var res = await axios.get(url);\n\n        if (!res.data.success) {\n            throw new Error('Request failed.');\n        }\n\n        return res.data.result;\n    }\n\n\n    /**\n     * Lookup currency information.\n     * @return {Promise<Object, Error>}\n     */\n    async currency() {\n        var url = this.rootUrl + PATH_CURRENCY;\n        var res = await axios.get(url);\n\n        if (!res.data.success) {\n            throw new Error('Request failed.');\n        }\n\n        return res.data.rates;\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/geoservice/API.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 264,
    "kind": "variable",
    "name": "ROOT_URL",
    "memberof": "src/plugins/geoservice/API.js",
    "static": true,
    "longname": "src/plugins/geoservice/API.js~ROOT_URL",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/plugins/geoservice/API.js",
    "importStyle": null,
    "description": "API root URL",
    "lineNumber": 4,
    "type": {
      "types": [
        "string"
      ]
    },
    "ignore": true
  },
  {
    "__docId__": 265,
    "kind": "variable",
    "name": "PATH_GEOIP",
    "memberof": "src/plugins/geoservice/API.js",
    "static": true,
    "longname": "src/plugins/geoservice/API.js~PATH_GEOIP",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/plugins/geoservice/API.js",
    "importStyle": null,
    "description": "Path for geolcation",
    "lineNumber": 6,
    "type": {
      "types": [
        "string"
      ]
    },
    "ignore": true
  },
  {
    "__docId__": 266,
    "kind": "variable",
    "name": "PATH_CURRENCY",
    "memberof": "src/plugins/geoservice/API.js",
    "static": true,
    "longname": "src/plugins/geoservice/API.js~PATH_CURRENCY",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/plugins/geoservice/API.js",
    "importStyle": null,
    "description": "Path for currency info",
    "lineNumber": 8,
    "type": {
      "types": [
        "string"
      ]
    },
    "ignore": true
  },
  {
    "__docId__": 267,
    "kind": "class",
    "name": "API",
    "memberof": "src/plugins/geoservice/API.js",
    "static": true,
    "longname": "src/plugins/geoservice/API.js~API",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/geoservice/API.js",
    "importStyle": "API",
    "description": "Handles requests to the ESC Geoservice.",
    "lineNumber": 14,
    "interface": false
  },
  {
    "__docId__": 268,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/geoservice/API.js~API",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/geoservice/API.js~API#constructor",
    "access": "public",
    "description": "Create a new instance of the API.",
    "lineNumber": 18
  },
  {
    "__docId__": 269,
    "kind": "member",
    "name": "rootUrl",
    "memberof": "src/plugins/geoservice/API.js~API",
    "static": false,
    "longname": "src/plugins/geoservice/API.js~API#rootUrl",
    "access": "public",
    "description": null,
    "lineNumber": 20,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 270,
    "kind": "method",
    "name": "geoip",
    "memberof": "src/plugins/geoservice/API.js~API",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/geoservice/API.js~API#geoip",
    "access": "public",
    "description": "Lookup GeoIP info for a given IP address. Uses local IP if not provided.",
    "lineNumber": 28,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Promise<Object, Error>} GeoIP info. Throws if request fails."
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String",
          "null"
        ],
        "spread": false,
        "optional": false,
        "name": "ip",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<Object, Error>"
      ],
      "spread": false,
      "description": "GeoIP info. Throws if request fails."
    }
  },
  {
    "__docId__": 271,
    "kind": "method",
    "name": "currency",
    "memberof": "src/plugins/geoservice/API.js~API",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/geoservice/API.js~API#currency",
    "access": "public",
    "description": "Lookup currency information.",
    "lineNumber": 47,
    "return": {
      "nullable": null,
      "types": [
        "Promise<Object, Error>"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 272,
    "kind": "file",
    "name": "src/plugins/geoservice/GeoService.js",
    "content": "import Evee from 'evee';\nimport API from './API';\n\n/**\n * @typedef {Object} GSGeoResponse\n * @property {GSContinent} continent\n * @property {GSCountry} country\n * @property {GSLocation} location\n * @property {GSCountry} registered_country\n * @property {String} currency\n */\n/**\n * @typedef {Object} GSTranslatedString\n * @property {String} de\n * @property {String} en\n * @property {String} es\n * @property {String} fr\n * @property {String} ja\n * @property {String} pt-BR\n * @property {String} ru\n * @property {String} zh-CN\n */\n/**\n * @typedef {Object} GSContinent\n * @property {String} code\n * @property {Number} geoname_id\n * @property {GSTranslatedString} names\n */\n/**\n * @typedef {Object} GSCountry\n * @property {Number} geoname_id\n * @property {String} iso_code\n * @property {GSTranslatedString} names\n */\n/**\n * @typedef {Object} GSLocation\n * @property {Number} accuracy_radius\n * @property {Number} latitude\n * @property {Number} longitude\n */\n\n/**\n * @typedef {Object} GSCurrencyResponse\n * @property {String} base\n * @property {String} date - Update date in Y-M-D format\n * @property {GSCurrencyRates} rates\n */\n/**\n * @typedef {Object} GSCurrencyRates\n * @property {Number} AUD\n * @property {Number} BGN\n * @property {Number} BRL\n * @property {Number} CAD\n * @property {Number} CHF\n * @property {Number} CNY\n * @property {Number} CZK\n * @property {Number} DKK\n * @property {Number} GBP\n * @property {Number} HKD\n * @property {Number} HUF\n * @property {Number} IDR\n * @property {Number} ILD\n * @property {Number} INR\n * @property {Number} JPY\n * @property {Number} KRW\n * @property {Number} MXN\n * @property {Number} MYR\n * @property {Number} NOK\n * @property {Number} NZD\n * @property {Number} PHP\n * @property {Number} PLN\n * @property {Number} RON\n * @property {Number} RUB\n * @property {Number} SEK\n * @property {Number} SGD\n * @property {Number} THB\n * @property {Number} TRY\n * @property {Number} ZAR\n * @property {Number} EUR\n */\n\n\n/**\n * Provides access to the ESC Geoservice.\n */\nexport default class GeoService extends Evee {\n\n    /**\n     * Create a new instance of GeoService.\n     */\n    constructor() {\n        super();\n\n\n        /** @type {src/plugins/geoservice/API.js~API} */\n        this.api = new API();\n        /** @type {Boolean} */\n        this.cacheLookups = true;\n        /** @type {Object<String, Object>} */\n        this._cachedLookups = {};\n    }\n\n\n    /**\n     * Retrieves geolocation information.\n     * @param {String}\t[ip] - IP address to get information on. If not supplied, uses local IP.\n     * @return {Promise<GSGeoResponse|Error>}\n     */\n    async lookupGeo(ip) {\n        if (!ip) {\n            ip = '';\n        }\n\n        if (this.cacheLookups && this._cachedLookups[ip]) {\n            return this._cachedLookups[ip];\n        }\n\n        var result = await this.api.geoip(ip);\n        if (this.cacheLookups) {\n            this._cachedLookups[ip] = result;\n        }\n        return result;\n    }\n\n\n\n    /**\n     * Retrieves currency info.\n     * @return {Promise<GSCurrencyResponse, Error>}\n     */\n    async getCurrencyInfo() {\n        return await this.api.currency();\n    }\n\n\n\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/geoservice/GeoService.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 273,
    "kind": "typedef",
    "name": "GSGeoResponse",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GSGeoResponse",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "GSContinent"
        ],
        "spread": false,
        "optional": false,
        "name": "continent",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "GSCountry"
        ],
        "spread": false,
        "optional": false,
        "name": "country",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "GSLocation"
        ],
        "spread": false,
        "optional": false,
        "name": "location",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "GSCountry"
        ],
        "spread": false,
        "optional": false,
        "name": "registered_country",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "currency",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "GSGeoResponse"
    }
  },
  {
    "__docId__": 274,
    "kind": "typedef",
    "name": "GSTranslatedString",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GSTranslatedString",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "de",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "en",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "es",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "fr",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "ja",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "pt-BR",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "ru",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "zh-CN",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "GSTranslatedString"
    }
  },
  {
    "__docId__": 275,
    "kind": "typedef",
    "name": "GSContinent",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GSContinent",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "code",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "geoname_id",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "GSTranslatedString"
        ],
        "spread": false,
        "optional": false,
        "name": "names",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "GSContinent"
    }
  },
  {
    "__docId__": 276,
    "kind": "typedef",
    "name": "GSCountry",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GSCountry",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "geoname_id",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "iso_code",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "GSTranslatedString"
        ],
        "spread": false,
        "optional": false,
        "name": "names",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "GSCountry"
    }
  },
  {
    "__docId__": 277,
    "kind": "typedef",
    "name": "GSLocation",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GSLocation",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "accuracy_radius",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "latitude",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "longitude",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "GSLocation"
    }
  },
  {
    "__docId__": 278,
    "kind": "typedef",
    "name": "GSCurrencyResponse",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GSCurrencyResponse",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "base",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "date",
        "description": "Update date in Y-M-D format"
      },
      {
        "nullable": null,
        "types": [
          "GSCurrencyRates"
        ],
        "spread": false,
        "optional": false,
        "name": "rates",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "GSCurrencyResponse"
    }
  },
  {
    "__docId__": 279,
    "kind": "typedef",
    "name": "GSCurrencyRates",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GSCurrencyRates",
    "access": "public",
    "description": "",
    "properties": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "AUD",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "BGN",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "BRL",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "CAD",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "CHF",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "CNY",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "CZK",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "DKK",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "GBP",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "HKD",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "HUF",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "IDR",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "ILD",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "INR",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "JPY",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "KRW",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "MXN",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "MYR",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "NOK",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "NZD",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "PHP",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "PLN",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "RON",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "RUB",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "SEK",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "SGD",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "THB",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "TRY",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "ZAR",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "EUR",
        "description": ""
      }
    ],
    "type": {
      "types": [
        "Object"
      ],
      "optional": false,
      "name": "GSCurrencyRates"
    }
  },
  {
    "__docId__": 280,
    "kind": "class",
    "name": "GeoService",
    "memberof": "src/plugins/geoservice/GeoService.js",
    "static": true,
    "longname": "src/plugins/geoservice/GeoService.js~GeoService",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/geoservice/GeoService.js",
    "importStyle": "GeoService",
    "description": "Provides access to the ESC Geoservice.",
    "lineNumber": 86,
    "interface": false,
    "extends": [
      "evee~Evee"
    ]
  },
  {
    "__docId__": 281,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/geoservice/GeoService.js~GeoService",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/geoservice/GeoService.js~GeoService#constructor",
    "access": "public",
    "description": "Create a new instance of GeoService.",
    "lineNumber": 91
  },
  {
    "__docId__": 282,
    "kind": "member",
    "name": "api",
    "memberof": "src/plugins/geoservice/GeoService.js~GeoService",
    "static": false,
    "longname": "src/plugins/geoservice/GeoService.js~GeoService#api",
    "access": "public",
    "description": null,
    "lineNumber": 96,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/geoservice/API.js~API"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 283,
    "kind": "member",
    "name": "cacheLookups",
    "memberof": "src/plugins/geoservice/GeoService.js~GeoService",
    "static": false,
    "longname": "src/plugins/geoservice/GeoService.js~GeoService#cacheLookups",
    "access": "public",
    "description": null,
    "lineNumber": 98,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 284,
    "kind": "member",
    "name": "_cachedLookups",
    "memberof": "src/plugins/geoservice/GeoService.js~GeoService",
    "static": false,
    "longname": "src/plugins/geoservice/GeoService.js~GeoService#_cachedLookups",
    "access": "private",
    "description": null,
    "lineNumber": 100,
    "type": {
      "nullable": null,
      "types": [
        "Object<String, Object>"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 285,
    "kind": "method",
    "name": "lookupGeo",
    "memberof": "src/plugins/geoservice/GeoService.js~GeoService",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/geoservice/GeoService.js~GeoService#lookupGeo",
    "access": "public",
    "description": "Retrieves geolocation information.",
    "lineNumber": 109,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": true,
        "name": "ip",
        "description": "IP address to get information on. If not supplied, uses local IP."
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Promise<GSGeoResponse|Error>"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 286,
    "kind": "method",
    "name": "getCurrencyInfo",
    "memberof": "src/plugins/geoservice/GeoService.js~GeoService",
    "generator": false,
    "async": true,
    "static": false,
    "longname": "src/plugins/geoservice/GeoService.js~GeoService#getCurrencyInfo",
    "access": "public",
    "description": "Retrieves currency info.",
    "lineNumber": 131,
    "return": {
      "nullable": null,
      "types": [
        "Promise<GSCurrencyResponse, Error>"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 287,
    "kind": "file",
    "name": "src/plugins/index.js",
    "content": "import EasyCurrency from './easycurrency/EasyCurrency';\nimport GeoService from './geoservice/GeoService';\n\nclass Plugins {\n    constructor() {\n        /** @type {src/plugins/easycurrency/EasyCurrency.js~EasyCurrency} */\n        this.EasyCurrency = EasyCurrency;\n        /** @type {src/plugins/geoservice/GeoService.js~GeoService} */\n        this.GeoService = GeoService;\n    }\n}\n\n/** @ignore */\nexport default new Plugins;\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/plugins/index.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 288,
    "kind": "class",
    "name": "Plugins",
    "memberof": "src/plugins/index.js",
    "static": true,
    "longname": "src/plugins/index.js~Plugins",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "pseudoExport": true,
    "undocument": true,
    "interface": false
  },
  {
    "__docId__": 289,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/plugins/index.js~Plugins",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/plugins/index.js~Plugins#constructor",
    "access": "public",
    "description": null,
    "lineNumber": 5,
    "undocument": true
  },
  {
    "__docId__": 290,
    "kind": "member",
    "name": "EasyCurrency",
    "memberof": "src/plugins/index.js~Plugins",
    "static": false,
    "longname": "src/plugins/index.js~Plugins#EasyCurrency",
    "access": "public",
    "description": null,
    "lineNumber": 7,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/easycurrency/EasyCurrency.js~EasyCurrency"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 291,
    "kind": "member",
    "name": "GeoService",
    "memberof": "src/plugins/index.js~Plugins",
    "static": false,
    "longname": "src/plugins/index.js~Plugins#GeoService",
    "access": "public",
    "description": null,
    "lineNumber": 9,
    "type": {
      "nullable": null,
      "types": [
        "src/plugins/geoservice/GeoService.js~GeoService"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 292,
    "kind": "variable",
    "name": "plugins",
    "memberof": "src/plugins/index.js",
    "static": true,
    "longname": "src/plugins/index.js~plugins",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/plugins/index.js",
    "importStyle": "plugins",
    "description": null,
    "lineNumber": 14,
    "ignore": true,
    "type": {
      "types": [
        "src/plugins/index.js~Plugins"
      ]
    }
  },
  {
    "__docId__": 293,
    "kind": "file",
    "name": "src/utils/Log.js",
    "content": "import logLevel from './loggers/logLevel.js';\nimport Logger from './loggers/Logger.js';\nimport ConsoleLogger from './loggers/ConsoleLogger.js';\n\n/**\n * Provides well-formatted logging with log level filtering.\n */\nclass Log {\n    /**\n     * Create a new log.\n     */\n    constructor() {\n        /** @type {Logger[]} */\n        this.loggers = [];\n        /** @type {String} */\n        this._logPrefix = '';\n    }\n\n    setLogPrefix(prefix) {\n        this._logPrefix = prefix;\n        for (let logger of this.loggers) {\n            logger.setLogPrefix(prefix);\n        }\n    }\n\n\n    /**\n     * Adds a new logger, which will process any log methods called.\n     * @param {Logger}\tlogger - A new logger to process log requests.\n     */\n    addLogger(logger) {\n        this.loggers.push(logger);\n        logger.setLogPrefix(this._logPrefix);\n    }\n\n\n    /**\n     * Logs a message to the console\n     * @param {type}\tlevel - Logging level\n     * @param {type}\ttag - Logging tag\n     * @param {type}\ttext - Text to log\n     */\n    send(level, tag, text) {\n        for (let logger of this.loggers) {\n            logger.send(level, tag, text);\n        }\n    }\n\n\n    /**\n     * Log an object.\n     * @param {type}\tlevel - Logging level\n     * @param {type}\ttag - Logging tag\n     * @param {type}\ttext - Logging text\n     * @param {type}\tobject - Object to be logged\n     */\n    sendObject(level, tag, text, object) {\n        for (let logger of this.loggers) {\n            logger.sendObject(level, tag, text, object);\n        }\n    }\n\n\n    /**\n     * Alias for .send(Log.DEBUG, ...) / .sendObject(Log.DEBUG, ...)\n     * @param {String} tag Log tag\n     * @param {String} text Log message\n     * @param {Object} [text] Optional object to debug\n     */\n    debug(tag, text, object) {\n        if (object != undefined) {\n            this.sendObject(logLevel.DEBUG, tag, text, object);\n        } else {\n            this.send(logLevel.DEBUG, tag, text);\n        }\n    }\n    /**\n     * Alias for .send(Log.INFO, ...) / .sendObject(Log.INFO, ...)\n     * @param {String} tag Log tag\n     * @param {String} text Log message\n     * @param {Object} [text] Optional object to debug\n     */\n    info(tag, text, object) {\n        if (object != undefined) {\n            this.sendObject(logLevel.INFO, tag, text, object);\n        } else {\n            this.send(logLevel.INFO, tag, text);\n        }\n    }\n    /**\n     * Alias for .send(Log.WARN, ...) / .sendObject(Log.WARN, ...)\n     * @param {String} tag Log tag\n     * @param {String} text Log message\n     * @param {Object} [text] Optional object to debug\n     */\n    warn(tag, text, object) {\n        if (object != undefined) {\n            this.sendObject(logLevel.WARN, tag, text, object);\n        } else {\n            this.send(logLevel.WARN, tag, text);\n        }\n    }\n    /**\n     * Alias for .send(Log.ERROR, ...) / .sendObject(Log.ERROR, ...)\n     * @param {String} tag Log tag\n     * @param {String} text Log message\n     * @param {Object} [text] Optional object to debug\n     */\n    error(tag, text, object) {\n        if (object != undefined) {\n            this.sendObject(logLevel.ERROR, tag, text, object);\n        } else {\n            this.send(logLevel.ERROR, tag, text);\n        }\n    }\n    /**\n     * Alias for .send(Log.FATAL, ...) / .sendObject(Log.FATAL, ...)\n     * @param {String} tag Log tag\n     * @param {String} text Log message\n     * @param {Object} [text] Optional object to debug\n     */\n    fatal(tag, text, object) {\n        if (object != undefined) {\n            this.sendObject(logLevel.FATAL, tag, text, object);\n        } else {\n            this.send(logLevel.FATAL, tag, text);\n        }\n    }\n}\n\n\n// Expose log levels on Log\n/** @ignore */\nvar levelMap = logLevel.getMap();\nfor (var key in levelMap) {\n    Log.prototype[levelMap[key]] = key;\n}\n\nLog.loggers = {\n    Logger,\n    ConsoleLogger\n};\n\nexport default Log;\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/utils/Log.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 294,
    "kind": "variable",
    "name": "levelMap",
    "memberof": "src/utils/Log.js",
    "static": true,
    "longname": "src/utils/Log.js~levelMap",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/utils/Log.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 134,
    "ignore": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 295,
    "kind": "class",
    "name": "Log",
    "memberof": "src/utils/Log.js",
    "static": true,
    "longname": "src/utils/Log.js~Log",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/utils/Log.js",
    "importStyle": "Log",
    "description": "Provides well-formatted logging with log level filtering.",
    "lineNumber": 8,
    "interface": false
  },
  {
    "__docId__": 296,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#constructor",
    "access": "public",
    "description": "Create a new log.",
    "lineNumber": 12
  },
  {
    "__docId__": 297,
    "kind": "member",
    "name": "loggers",
    "memberof": "src/utils/Log.js~Log",
    "static": false,
    "longname": "src/utils/Log.js~Log#loggers",
    "access": "public",
    "description": null,
    "lineNumber": 14,
    "type": {
      "nullable": null,
      "types": [
        "Logger[]"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 298,
    "kind": "member",
    "name": "_logPrefix",
    "memberof": "src/utils/Log.js~Log",
    "static": false,
    "longname": "src/utils/Log.js~Log#_logPrefix",
    "access": "private",
    "description": null,
    "lineNumber": 16,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 299,
    "kind": "method",
    "name": "setLogPrefix",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#setLogPrefix",
    "access": "public",
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "params": [
      {
        "name": "prefix",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 301,
    "kind": "method",
    "name": "addLogger",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#addLogger",
    "access": "public",
    "description": "Adds a new logger, which will process any log methods called.",
    "lineNumber": 31,
    "params": [
      {
        "nullable": null,
        "types": [
          "Logger"
        ],
        "spread": false,
        "optional": false,
        "name": "logger",
        "description": "A new logger to process log requests."
      }
    ],
    "return": null
  },
  {
    "__docId__": 302,
    "kind": "method",
    "name": "send",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#send",
    "access": "public",
    "description": "Logs a message to the console",
    "lineNumber": 43,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": "Logging level"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Logging tag"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Text to log"
      }
    ],
    "return": null
  },
  {
    "__docId__": 303,
    "kind": "method",
    "name": "sendObject",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#sendObject",
    "access": "public",
    "description": "Log an object.",
    "lineNumber": 57,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": "Logging level"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Logging tag"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Logging text"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "object",
        "description": "Object to be logged"
      }
    ],
    "return": null
  },
  {
    "__docId__": 304,
    "kind": "method",
    "name": "debug",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#debug",
    "access": "public",
    "description": "Alias for .send(Log.DEBUG, ...) / .sendObject(Log.DEBUG, ...)",
    "lineNumber": 70,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Log tag"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Log message"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": true,
        "name": "text",
        "description": "Optional object to debug"
      }
    ],
    "return": null
  },
  {
    "__docId__": 305,
    "kind": "method",
    "name": "info",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#info",
    "access": "public",
    "description": "Alias for .send(Log.INFO, ...) / .sendObject(Log.INFO, ...)",
    "lineNumber": 83,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Log tag"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Log message"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": true,
        "name": "text",
        "description": "Optional object to debug"
      }
    ],
    "return": null
  },
  {
    "__docId__": 306,
    "kind": "method",
    "name": "warn",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#warn",
    "access": "public",
    "description": "Alias for .send(Log.WARN, ...) / .sendObject(Log.WARN, ...)",
    "lineNumber": 96,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Log tag"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Log message"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": true,
        "name": "text",
        "description": "Optional object to debug"
      }
    ],
    "return": null
  },
  {
    "__docId__": 307,
    "kind": "method",
    "name": "error",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#error",
    "access": "public",
    "description": "Alias for .send(Log.ERROR, ...) / .sendObject(Log.ERROR, ...)",
    "lineNumber": 109,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Log tag"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Log message"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": true,
        "name": "text",
        "description": "Optional object to debug"
      }
    ],
    "return": null
  },
  {
    "__docId__": 308,
    "kind": "method",
    "name": "fatal",
    "memberof": "src/utils/Log.js~Log",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/Log.js~Log#fatal",
    "access": "public",
    "description": "Alias for .send(Log.FATAL, ...) / .sendObject(Log.FATAL, ...)",
    "lineNumber": 122,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Log tag"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Log message"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": true,
        "name": "text",
        "description": "Optional object to debug"
      }
    ],
    "return": null
  },
  {
    "__docId__": 309,
    "kind": "file",
    "name": "src/utils/general.js",
    "content": "import Log from './Log';\n\n/**\n * General-purpose utilties.\n */\nclass GeneralUtils {\n    constructor() {\n        /** @type {src/utils/Log.js~Log} */\n        this.Log = Log;\n    }\n\n\n    /**\n    * Executes the given callback on DOMContentLoaded.\n    * @param {function(): void} callback\n    */\n    onLoad(callback) {\n        if (document.readyState != 'loading') {\n            callback();\n        } else {\n            document.addEventListener('DOMContentLoaded', () => {\n                callback();\n            });\n        }\n    }\n\n\n    /**\n     * Create a unique key suitable for storing in localStorage, etc.\n     * @param {String}\tnamespace\n     * @param {String}\tkey\n     * @return {String}\n     */\n    safeStorageKey(namespace, key) {\n        return '__'+namespace+'__'+key;\n    }\n}\n\n\n/** @ignore */\nexport default new GeneralUtils;\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/utils/general.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 310,
    "kind": "class",
    "name": "GeneralUtils",
    "memberof": "src/utils/general.js",
    "static": true,
    "longname": "src/utils/general.js~GeneralUtils",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/utils/general.js",
    "importStyle": null,
    "description": "General-purpose utilties.",
    "lineNumber": 6,
    "pseudoExport": true,
    "interface": false
  },
  {
    "__docId__": 311,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/utils/general.js~GeneralUtils",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/general.js~GeneralUtils#constructor",
    "access": "public",
    "description": null,
    "lineNumber": 7,
    "undocument": true
  },
  {
    "__docId__": 312,
    "kind": "member",
    "name": "Log",
    "memberof": "src/utils/general.js~GeneralUtils",
    "static": false,
    "longname": "src/utils/general.js~GeneralUtils#Log",
    "access": "public",
    "description": null,
    "lineNumber": 9,
    "type": {
      "nullable": null,
      "types": [
        "src/utils/Log.js~Log"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 313,
    "kind": "method",
    "name": "onLoad",
    "memberof": "src/utils/general.js~GeneralUtils",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/general.js~GeneralUtils#onLoad",
    "access": "public",
    "description": "Executes the given callback on DOMContentLoaded.",
    "lineNumber": 17,
    "params": [
      {
        "nullable": null,
        "types": [
          "function(): void"
        ],
        "spread": false,
        "optional": false,
        "name": "callback",
        "description": ""
      }
    ],
    "return": null
  },
  {
    "__docId__": 314,
    "kind": "method",
    "name": "safeStorageKey",
    "memberof": "src/utils/general.js~GeneralUtils",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/general.js~GeneralUtils#safeStorageKey",
    "access": "public",
    "description": "Create a unique key suitable for storing in localStorage, etc.",
    "lineNumber": 34,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "namespace",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "key",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 315,
    "kind": "variable",
    "name": "generalUtils",
    "memberof": "src/utils/general.js",
    "static": true,
    "longname": "src/utils/general.js~generalUtils",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/utils/general.js",
    "importStyle": "generalUtils",
    "description": null,
    "lineNumber": 41,
    "ignore": true,
    "type": {
      "types": [
        "src/utils/general.js~GeneralUtils"
      ]
    }
  },
  {
    "__docId__": 316,
    "kind": "file",
    "name": "src/utils/loggers/ConsoleLogger.js",
    "content": "import logLevel from './logLevel.js';\nimport Logger from './Logger';\n\n\n/**\n * Basic logger that logs to the environment console.\n */\nexport default class ConsoleLogger extends Logger {\n\n    /**\n     * Create a new ConsoleLogger.\n     */\n    constructor() {\n        super();\n\n        /** @type {Number} */\n        this.level = logLevel.DEBUG;\n        /** @type {Boolean} */\n        this.useFancyStyling = this._canUseFancyStyling();\n    }\n\n    _canUseFancyStyling() {\n        var browser = {};\n        browser.isFirefox = /firefox/i.test(navigator.userAgent);\n        browser.isIE = document.documentMode;\n\n        var support = {};\n        support.consoleApply = !browser.isIE || document.documentMode && document.documentMode > 9;\n        support.functionGetters = support.consoleApply;\n        support.console = !!window.console;\n        support.modifiedConsole = !browser.isIE && support.console && console.log.toString().indexOf('apply') !== -1;\n        support.consoleStyles = !!window.chrome || !!browser.isFirefox;\n        support.consoleGroups = !!(window.console && console.group);\n        return support.consoleStyles;\n    }\n\n\n    /**\n     * Sets current logging level. Messages below this log level will be ignored.\n     * @param {Number}\tlevel\n     */\n    setLogLevel(level) {\n        this.level = level;\n    }\n\n     /**\n      * Logs a message to the console\n      * @param {type}\tlevel - Logging level\n      * @param {type}\ttag - Logging tag\n      * @param {type}\ttext - Text to log\n      */\n    send(level, tag, text) {\n        if (level < this.level) { return; }\n\n        var fn = console.log;\n        if ((console.error && level == logLevel.ERROR)\n            || (console.error && level == logLevel.FATAL)) {\n            fn = console.error;\n        }\n        if (console.warn && level == logLevel.WARN) {\n            fn = console.warn;\n        }\n        if (console.info && level == logLevel.INFO) {\n            fn = console.info;\n        }\n        if (console.debug && level == logLevel.DEBUG) {\n            fn = console.debug;\n        }\n        // Binding back to console because iOS Safari is weird\n        if (this.useFancyStyling) {\n            var str = '%c' + this.logPrefix + '%c' + logLevel.levelToString(level);\n            str += '%c %c'+tag+'%c'+text;\n            var levelColor = {\n                DEBUG: '#454F5B; color: white;',\n                INFO: '#007ACE; color: white;',\n                WARN: '#EEC200; color: white;',\n                ERROR: '#BF0711; color: white;',\n                FATAL: 'linear-gradient(to top, #EEC200 0, #BF0711 100%); color: white;'\n            }[logLevel.levelToString(level)];\n            var styles = [\n                'background: #202E78; border-top-left-radius: 4px; border-bottom-left-radius: 4px; padding: 0 8px;color: white',\n                'width: 55px; text-align: center; padding: 0 8px; border-bottom-right-radius: 4px; border-top-right-radius: 4px;background:'+levelColor,\n                'padding: 0 2px;',\n                'background: #084E8A;padding:0 8px; color: white;border-radius: 8px;',\n                'padding:0 8px;'\n            ];\n\n            fn.bind(console)(str, ...styles);\n        } else {\n            fn.bind(console)('['+this.logPrefix+'] ' + logLevel.levelToString(level) + ': ' + '[' + tag + '] ' + text);\n        }\n    }\n\n    /**\n     * Log an object.\n     * @param {type}\tlevel - Logging level\n     * @param {type}\ttag - Logging tag\n     * @param {type}\ttext - Logging text\n     * @param {type}\tobject - Object to be logged\n     */\n    sendObject(level, tag, text, object) {\n        if (level < this.level) { return; }\n\n        var fn = console.log;\n        if ((console.error && level == logLevel.ERROR)\n            || (console.error && level == logLevel.FATAL)) {\n            fn = console.error;\n        }\n        if (console.warn && level == logLevel.WARN) {\n            fn = console.warn;\n        }\n        if (console.info && level == logLevel.INFO) {\n            fn = console.info;\n        }\n        if (console.debug && level == this.DEBUG) {\n            fn = console.debug;\n        }\n        // Binding back to console because iOS Safari is weird\n        if (this.useFancyStyling) {\n            var str = '%c' + this.logPrefix + '%c' + logLevel.levelToString(level);\n            str += '%c %c'+tag+'%c'+text+ ' %o';\n            var levelColor = {\n                DEBUG: '#454F5B; color: white;',\n                INFO: '#007ACE; color: white;',\n                WARN: '#EEC200; color: white;',\n                ERROR: '#BF0711; color: white;',\n                FATAL: 'linear-gradient(to top, #EEC200 0, #BF0711 100%); color: white;'\n            }[logLevel.levelToString(level)];\n            var styles = [\n                'background: #202E78; border-top-left-radius: 4px; border-bottom-left-radius: 4px; padding: 0 8px;color: white',\n                'width: 55px; text-align: center; padding: 0 8px; border-bottom-right-radius: 4px; border-top-right-radius: 4px;background:'+levelColor,\n                'padding: 0 2px;',\n                'background: #084E8A;padding:1px 8px; color: white;border-radius: 8px;',\n                'padding-left: 8px;'\n            ];\n\n            fn.bind(console)(str, ...styles, object);\n        } else {\n            fn.bind(console)('['+this.logPrefix+'] ' + logLevel.levelToString(level) + ': ' + '[' + tag + '] ' + text, object);\n        }\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/utils/loggers/ConsoleLogger.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 317,
    "kind": "class",
    "name": "ConsoleLogger",
    "memberof": "src/utils/loggers/ConsoleLogger.js",
    "static": true,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/utils/loggers/ConsoleLogger.js",
    "importStyle": "ConsoleLogger",
    "description": "Basic logger that logs to the environment console.",
    "lineNumber": 8,
    "interface": false,
    "extends": [
      "src/utils/loggers/Logger.js~Logger"
    ]
  },
  {
    "__docId__": 318,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger#constructor",
    "access": "public",
    "description": "Create a new ConsoleLogger.",
    "lineNumber": 13
  },
  {
    "__docId__": 319,
    "kind": "member",
    "name": "level",
    "memberof": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "static": false,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger#level",
    "access": "public",
    "description": null,
    "lineNumber": 17,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 320,
    "kind": "member",
    "name": "useFancyStyling",
    "memberof": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "static": false,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger#useFancyStyling",
    "access": "public",
    "description": null,
    "lineNumber": 19,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 321,
    "kind": "method",
    "name": "_canUseFancyStyling",
    "memberof": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger#_canUseFancyStyling",
    "access": "private",
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 322,
    "kind": "method",
    "name": "setLogLevel",
    "memberof": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger#setLogLevel",
    "access": "public",
    "description": "Sets current logging level. Messages below this log level will be ignored.",
    "lineNumber": 42,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": ""
      }
    ],
    "return": null
  },
  {
    "__docId__": 324,
    "kind": "method",
    "name": "send",
    "memberof": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger#send",
    "access": "public",
    "description": "Logs a message to the console",
    "lineNumber": 52,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": "Logging level"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Logging tag"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Text to log"
      }
    ],
    "return": null
  },
  {
    "__docId__": 325,
    "kind": "method",
    "name": "sendObject",
    "memberof": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/ConsoleLogger.js~ConsoleLogger#sendObject",
    "access": "public",
    "description": "Log an object.",
    "lineNumber": 101,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": "Logging level"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Logging tag"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Logging text"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "object",
        "description": "Object to be logged"
      }
    ],
    "return": null
  },
  {
    "__docId__": 326,
    "kind": "file",
    "name": "src/utils/loggers/Logger.js",
    "content": "/**\n * Abtstract class representing an object which can log debug messages.\n * Can be attached to a Log with addLogger().\n */\n export default class Logger {\n\n    constructor() {\n        this.logPrefix = '';\n    }\n\n    setLogPrefix(prefix) {\n        this.logPrefix = prefix;\n    }\n\n     /**\n      * Logs a message to the console\n      * @param {type}\tlevel - Logging level\n      * @param {type}\ttag - Logging tag\n      * @param {type}\ttext - Text to log\n      */\n    send(level, tag, text) {\n        throw new Error('Logger should implement send()');\n    }\n\n    /**\n     * Log an object.\n     * @param {type}\tlevel - Logging level\n     * @param {type}\ttag - Logging tag\n     * @param {type}\ttext - Logging text\n     * @param {type}\tobject - Object to be logged\n     */\n    sendObject(level, tag, text, object) {\n        throw new Error('Logger should implement sendObject()');\n    }\n}\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/utils/loggers/Logger.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 327,
    "kind": "class",
    "name": "Logger",
    "memberof": "src/utils/loggers/Logger.js",
    "static": true,
    "longname": "src/utils/loggers/Logger.js~Logger",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/utils/loggers/Logger.js",
    "importStyle": "Logger",
    "description": "Abtstract class representing an object which can log debug messages.\nCan be attached to a Log with addLogger().",
    "lineNumber": 5,
    "interface": false
  },
  {
    "__docId__": 328,
    "kind": "constructor",
    "name": "constructor",
    "memberof": "src/utils/loggers/Logger.js~Logger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/Logger.js~Logger#constructor",
    "access": "public",
    "description": null,
    "lineNumber": 7,
    "undocument": true
  },
  {
    "__docId__": 329,
    "kind": "member",
    "name": "logPrefix",
    "memberof": "src/utils/loggers/Logger.js~Logger",
    "static": false,
    "longname": "src/utils/loggers/Logger.js~Logger#logPrefix",
    "access": "public",
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 330,
    "kind": "method",
    "name": "setLogPrefix",
    "memberof": "src/utils/loggers/Logger.js~Logger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/Logger.js~Logger#setLogPrefix",
    "access": "public",
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "params": [
      {
        "name": "prefix",
        "types": [
          "*"
        ]
      }
    ],
    "return": null
  },
  {
    "__docId__": 332,
    "kind": "method",
    "name": "send",
    "memberof": "src/utils/loggers/Logger.js~Logger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/Logger.js~Logger#send",
    "access": "public",
    "description": "Logs a message to the console",
    "lineNumber": 21,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": "Logging level"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Logging tag"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Text to log"
      }
    ],
    "return": null
  },
  {
    "__docId__": 333,
    "kind": "method",
    "name": "sendObject",
    "memberof": "src/utils/loggers/Logger.js~Logger",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/Logger.js~Logger#sendObject",
    "access": "public",
    "description": "Log an object.",
    "lineNumber": 32,
    "params": [
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": "Logging level"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Logging tag"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "Logging text"
      },
      {
        "nullable": null,
        "types": [
          "type"
        ],
        "spread": false,
        "optional": false,
        "name": "object",
        "description": "Object to be logged"
      }
    ],
    "return": null
  },
  {
    "__docId__": 334,
    "kind": "file",
    "name": "src/utils/loggers/logLevel.js",
    "content": "/** @ignore */\nvar map = {\n    0: 'DEBUG',\n    1: 'INFO',\n    2: 'WARN',\n    3: 'ERROR',\n    4: 'FATAL'\n};\n\n\n/**\n * Encapsulates logging levels\n */\nclass LogLevel {\n    /**\n     * Get a map of availble logging levels.\n     * @return {Object<Number, String>}\n     */\n    getMap() {\n        return map;\n    }\n\n\n    /**\n     * Get level name by level identifier.\n     * @param {String}\tlevel\n     * @return {Number}\n     */\n    levelToString(level) {\n        return map[level];\n    }\n\n    /**\n     * Get level identifier by level name.\n     * @param {String}\tlevel\n     * @return {Number}\n     */\n    stringToLevel(str) {\n        for (let key in map) {\n            if (map[key] == str) {\n                return key;\n            }\n        }\n        return null;\n    }\n}\n\nfor (var key in map) {\n    LogLevel.prototype[map[key]] = key;\n}\n\n/** Instance of LogLevel */\nexport default new LogLevel();\n",
    "static": true,
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/src/utils/loggers/logLevel.js",
    "access": "public",
    "description": null,
    "lineNumber": 1
  },
  {
    "__docId__": 335,
    "kind": "variable",
    "name": "map",
    "memberof": "src/utils/loggers/logLevel.js",
    "static": true,
    "longname": "src/utils/loggers/logLevel.js~map",
    "access": "public",
    "export": false,
    "importPath": "@eastsideco/escshopify/src/utils/loggers/logLevel.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 2,
    "ignore": true,
    "type": {
      "types": [
        "{\"0\": string, \"1\": string, \"2\": string, \"3\": string, \"4\": string}"
      ]
    }
  },
  {
    "__docId__": 336,
    "kind": "class",
    "name": "LogLevel",
    "memberof": "src/utils/loggers/logLevel.js",
    "static": true,
    "longname": "src/utils/loggers/logLevel.js~LogLevel",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/utils/loggers/logLevel.js",
    "importStyle": null,
    "description": "Encapsulates logging levels",
    "lineNumber": 14,
    "pseudoExport": true,
    "interface": false
  },
  {
    "__docId__": 337,
    "kind": "method",
    "name": "getMap",
    "memberof": "src/utils/loggers/logLevel.js~LogLevel",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/logLevel.js~LogLevel#getMap",
    "access": "public",
    "description": "Get a map of availble logging levels.",
    "lineNumber": 19,
    "return": {
      "nullable": null,
      "types": [
        "Object<Number, String>"
      ],
      "spread": false,
      "description": ""
    },
    "params": []
  },
  {
    "__docId__": 338,
    "kind": "method",
    "name": "levelToString",
    "memberof": "src/utils/loggers/logLevel.js~LogLevel",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/logLevel.js~LogLevel#levelToString",
    "access": "public",
    "description": "Get level name by level identifier.",
    "lineNumber": 29,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 339,
    "kind": "method",
    "name": "stringToLevel",
    "memberof": "src/utils/loggers/logLevel.js~LogLevel",
    "generator": false,
    "async": false,
    "static": false,
    "longname": "src/utils/loggers/logLevel.js~LogLevel#stringToLevel",
    "access": "public",
    "description": "Get level identifier by level name.",
    "lineNumber": 38,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "level",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    }
  },
  {
    "__docId__": 340,
    "kind": "variable",
    "name": "logLevel",
    "memberof": "src/utils/loggers/logLevel.js",
    "static": true,
    "longname": "src/utils/loggers/logLevel.js~logLevel",
    "access": "public",
    "export": true,
    "importPath": "@eastsideco/escshopify/src/utils/loggers/logLevel.js",
    "importStyle": "logLevel",
    "description": "Instance of LogLevel",
    "lineNumber": 53,
    "type": {
      "types": [
        "src/utils/loggers/logLevel.js~LogLevel"
      ]
    }
  },
  {
    "kind": "index",
    "content": "# escshopify\nWIP JS library for Shopify, containing a variety of useful functionality.\n\n\nDocs: https://escshopify.eastsideapps.io/\nNPM: `npm i @eastsideco/escshopify`\n",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/README.md",
    "name": "./README.md",
    "static": true,
    "access": "public"
  },
  {
    "kind": "packageJSON",
    "content": "{\n    \"name\": \"@eastsideco/escshopify\",\n    \"version\": \"0.0.23\",\n    \"description\": \"\",\n    \"main\": \"lib/escshopify.web.js\",\n    \"scripts\": {\n        \"build\": \"webpack --env dev && webpack --env build\",\n        \"dev\": \"webpack --progress --colors --watch --env dev\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://bitbucket.org/sigapps/escshopify.git\"\n    },\n    \"keywords\": [],\n    \"author\": \"ESC App Team\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/krasimir/webpack-library-starter/issues\"\n    },\n    \"homepage\": \"https://github.com/krasimir/webpack-library-starter\",\n    \"devDependencies\": {\n        \"babel-cli\": \"^6.26.0\",\n        \"babel-core\": \"^6.26.0\",\n        \"babel-eslint\": \"^8.0.2\",\n        \"babel-loader\": \"^7.1.2\",\n        \"babel-plugin-add-module-exports\": \"^0.2.1\",\n        \"babel-preset-es2015\": \"^6.24.1\",\n        \"chai\": \"^4.1.2\",\n        \"eslint\": \"^4.12.0\",\n        \"eslint-loader\": \"^1.9.0\",\n        \"mocha\": \"^4.0.1\",\n        \"webpack\": \"^3.8.1\",\n        \"webpack-dev-server\": \"^2.9.7\",\n        \"yargs\": \"^10.0.3\"\n    },\n    \"dependencies\": {\n        \"axios\": \"^0.17.1\",\n        \"babel-plugin-transform-runtime\": \"^6.23.0\",\n        \"babel-preset-env\": \"^1.6.1\",\n        \"babel-preset-stage-2\": \"^6.24.1\",\n        \"deep-equal\": \"^1.0.1\",\n        \"esdoc\": \"^1.0.4\",\n        \"esdoc-importpath-plugin\": \"^1.0.1\",\n        \"esdoc-standard-plugin\": \"^1.0.0\",\n        \"evee\": \"^2.1.0\",\n        \"js-money\": \"^0.6.3\",\n        \"jsdoc\": \"^3.5.5\",\n        \"local-storage-fallback\": \"^4.0.2\",\n        \"lodash\": \"^4.17.4\",\n        \"promise-queue\": \"^2.2.3\",\n        \"superagent\": \"^3.8.1\",\n        \"superagent-bluebird-promise\": \"^4.2.0\"\n    }\n}\n",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/package.json",
    "name": "package.json",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manualIndex",
    "content": "# @eastsideco/escshopify\n_A modular support library for building Shopify themes with ES6 and webpack._\n\nWhile the library can be used directly from any ES6 code (or traditional non-compiled scripts via a script tag), this library is ultimately intended to be used alongside two other tools:\n\n- The SALVO theme development framework, which provides an environment for structuring themes and components. SALVO usually takes care of initializing many aspects of this library and providing a convinient interface for the theme developer.\n- MATTv2, the second generation theme deployment framework.\n\nThe library is still a WIP and may change radically in structure and/or function.\n",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/index.md",
    "name": "./manual/index.md",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manualAsset",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/asset",
    "name": "./manual/asset",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/overview.md",
    "name": "./manual/overview.md",
    "content": "# Overview\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/entities.md",
    "name": "./manual/entities.md",
    "content": "# Entities\nEntities represent common environment models that all Shopify themes need to work with. For example: the session cart; shop settings; product information.\n\nThese entities may be read-only (i.e. shop current format info), or provide an interface for modifying the entity (i.e. cart items).\n\nEntities can be accessed from the object under EscShopifyJS.Entities.\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/entities/cart.md",
    "name": "./manual/entities/cart.md",
    "content": "# Entities/Cart\nThe Cart module provides an interface to the state of the visitor's cart and the cart AJAX API.\n\nFor member and method documentation, see the API reference. For event documentation and examples, see below.\n\n## Example\nThe following example shows a simple JS component which keeps track of the number of items in the visitor's cart.\n\n**ES6**:\n```js\nimport {entities, utils} from '@eastsideco/escshopify';\n\nconst cart = new entities.Cart;\n\nexport default class CartCounter {\n    constructor(element) {\n        this._element = element;\n\n        cart.on('update', () => this.render());\n        utils.onLoad(() => this.render());\n    }\n\n    async render() {\n        await cart.ready();\n        \n        var count = cart.items.reduce((total, i) => total + i.quantity, 0);\n        this._element.innerText = count;\n    }\n}\n```\n\n## Getting Started\n\n### Initializing the cart state\nBefore using the cart module, you should initialize it with the current state of the cart, for example from a binding created in Liquid.\n\n_This is done for you automatically if you use SALVO._\n\n**ES6**:\n```js\nimport {entities, utils} from '@eastsideco/escshopify';\n\nconst cart = new entities.Cart;\n\ncartData = { token: '...', items: [ ... ], ... };\ncart.initialize(cartData);\n```\n\n### Reading the cart\n\nYou can access the items in the cart using `.items`. It's highly recommended to check or wait for the cart entity to be 'ready' before doing this. Async/await makes this quite trivial.\n\n**ES6**:\n```js\nimport {entities, utils} from '@eastsideco/escshopify';\n\nconst cart = new entities.Cart;\n\n// Using async/await\nasync function printCartItemNames() {\n    await cart.ready();\n    for (let cart.items as item) {\n        console.log(item.title + ' x' + item.quantity);\n    }\n}\n\n// Using promises\nfunction printCartItemNames() {\n    cart.ready().then(() => {\n        for (let cart.items as item) {\n            console.log(item.title + ' x' + item.quantity);\n        }\n    });\n}\n\n// Checking cart state syncronously\nfunction printCartItemNames() {\n    if (cart.isReady) {\n        for (let cart.items as item) {\n            console.log(item.title + ' x' + item.quantity);\n        }\n    }\n}\n```\n\n### Setting cart items and attributes\n\nYou can modify the cart items using `#addItem`, `#updateItem`, etc.\nYou can modify cart attributes using `#setAttribute` or `#setAttributes`.\n\n**ES6**:\n```js\ncart.addItem(variantId, 1);\n```\n```js\nawait cart.addItem(variantId, 1);\ncart.updateItemById(variantId, 3);\n```\n```js\n// Setting a line item attribute on each item in the cart:\nfor (let item, lineNumber of cart.items) {\n    cart.updateItem(lineNumber, item.quantity, {\n        promotion: 'Added by promotion'\n    });\n}\n```\n#### Important warning about async \n**Warning:** Most setter methods are asynchronous. Await the promise fulfillment, or be aware that the cart state may not reflect your changes.\n\nExamples:\n\n**ES6**:\n```js\n// starting cart attributes: { test: 1 }\ncart.setAttribute('test', 2);\nconsole.log(cart.getAttribute('test')); // may still 1?\n```\n```js\n// starting cart attributes: { test: 1 }\nawait cart.setAttribute('test', 2);\nconsole.log(cart.getAttribute('test')); // definitely 2\n```\n```js\n// starting cart attributes: { test: 1 }\ncart.setAttribute('test', 2).then(() => {\n    console.log(cart.getAttribute('test'); // definitely 2\n});\n```\nYou can use `Promise#all` to wait for multiple changes to complete:\n```js\n// Set attributes on all line items and wait until complete\nvar promises = [];\nfor (let item, lineNumber of cart.items) {\n    promises.push(cart.updateItem(lineNumber, item.quantity, { attribute: 'test' }));\n}\nconsole.log(cart.items); // Attributes may or may not be updated?\nawait Promise.all(promises);\nconsole.log(cart.items); // Attributes are definitely updated\n```\n\n## Events\n\nListen to the following events to track the lifecycle of this entity.\n\n### update \nThe cart was modified.\n```txt\nObject[]    items       - The new state of items in the cart.\nString      operation   - 'add', 'item-updated', 'remove', 'init', or 'attribute-updated'\nObject|Null item        - Item that was added/updated/removed.\n```\nUpdating an item to 0 qty is considered a `remove`.\n\n```js\ncart.on('update', (e) => {\n    this.cartTotalMinusGiftcards = _.reduce(e.items, (total, item) => {\n        return item.gift_card ? total : total + item.line_price;\n    }, 0);\n});\n```\n\n### add\nAn item has been added.\n```\nObject[]    items       - The new state of items in the cart.\nObject      item        - Item that was added.\n```\nUpdating an existing item with higher qty _does not_ fire this event (see `item-updated`).\n\n```js\ncart.on('add', (e) => {\n// \"Thanks for adding Example Product!\"\nwindow.alert('Thanks for adding ' + e.item.product_title + '!');\n});\n```\n\n### item-updated\nAn item has been modified.\n```\nObject[]    items       - The new state of items in the cart.\nObject      item        - Item that was updated (after update).\n```\nAdding a new line item _does not_ fire this event (see `add`).\n\n### remove\nAn item has been removed.\n```\nObject[]    items       - The new state of items in the cart.\nObject      item        - Item that was removed.\n```\n\n### clear\nThe cart is now empty.\n```\nObject[]    oldItems    - Items that were previously in the cart.\n```\nThis will typically fire when the last item is removed from the cart.\n\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/entities/shop.md",
    "name": "./manual/entities/shop.md",
    "content": "# Entities/Shop\n\nThe Shop entity represents global shop settings and details (i.e. contact email address, policies, URL, etc.)\n\nThis entity is read-only, and it properties match that of the Shopify `shop` liquid object. There are some extra methods and properties added for convinience.\n\n## Examples\n\n**ES6**:\n```js\nimport {entities, utils} from '@eastsideco/escshopify';\n\nconst shop = new entities.Shop;\n\n// Accessing shop properties:\nvar primaryDomain = shop.domain;\nvar myshopifyDomain = shop.permanent_domain;\n\nvar storeName = shop.name;\n\nvar defaultCurrency = shop.currency;\n\nvar averageCollectionSize = shop.products_count / shop.collections_count;\n\n\n// Generating absolute shop URLs:\nvar absoluteUrl = shop.makeAbsoluteUrl('/collections/all'); // https://shop.com/collections/all\nvar permanentUrl = shop.makePermanentUrl('/collections/all'); // https://shop.myshopify.com/collections/all\n```\n\n\n## Getting Started\n### Initializing the shop state\n\nBefore using the shop module, you should initialize it with the global shop state, for eaxmple from a binding created in Liquid.\n\n_This is done for you automatically if you use SALVO._\n\n**ES6**:\n```js\nimport {entities, utils} from '@eastsideco/escshopify';\n\nconst shop = new entities.Shop;\n\nshopData = { name: '...', domain: '...', ... };\nshop.initialize(shopData);\n```\n\n## Events\n\nListen to the following events to track the lifecycle of this entity.\n\n### init\nThe shop entity was initialized.\n```txt\nObject  shop        - The current shop entity.\n```\n\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/plugins.md",
    "name": "./manual/plugins.md",
    "content": "# Plugins\n\nPlugins are larger modules which encapsulate a more complex piece of functionality (i.e. currency conversion and formatting). Plugins are self-contained and entirely optional, but they provide an easy way to implement common complex funtionality.\n\n\nPlugins can be accessed via the object under EscShopifyJs.Plugins.\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/plugins/easycurrency.md",
    "name": "./manual/plugins/easycurrency.md",
    "content": "# Plugins/EasyCurrency\nThe EasyCurrency module provides easy-to-use and highly customizable frontend\ncurrency conversion.\n\n## Getting started\n\n### Simple example\nBy default, EC will convert elements with `[data-money]`, optionally making use\nof the `[data-money-currency]` property.\n\nFor example, this element:  \n`<span data-money=\"1234\" data-money-currency=\"USD\">$12.34</span>`  \nMay be converted to:  \n`<span>£10.00</span>`  \nNote that amounts are specified in integer units (i.e. cents).\n\nNote that the default parser removes the initialization properties from the element\nafter initialization, but this may not always be the case.  \n**Warning:** Don't use the initialization properties to read/write conversion\nstate after initialization (as you would have in the classic EC) - there are\nnow other mechanisms for supporting this.\n\n\n**ES6**:\n```js\nimport {plugins, utils} from '@eastsideco/escshopify';\n\nconst easyCurrency = new plugins.EasyCurrency;\n\n// Initialize EC once the page has loaded.\nutils.onLoad(() => {\n    easyCurrency.useGeoserviceResolver();\n    easyCurrency.initialize({\n        defaultCurrency: 'GBP'\n    });\n});\n\n```\n\n**ES5**:\n```html\n<script src=\"escshopify.web.js\"></script>\n<script>\n(function() {\n    // Initialize EC once the page has loaded.\n    escshopify.utils.onLoad(function() {\n        var easyCurrency = new escshopify.plugins.EasyCurrency();\n\n        easyCurrency.useGeoserviceResolver();\n        easyCurrency.initialize({\n            defaultCurrency: 'GBP'\n        });\n    });\n})();\n</script>\n```\n\n\n### Config options\nHere is an example with all of the config options and default values:  \nSee the reference for Config#constructor for more info.\n\n**ES6**:\n```js\nimport {plugins, utils} from '@eastsideco/escshopify';\n\nconst easyCurrency = new plugins.EasyCurrency;\n\n// Initialize EC once the page has loaded.\nutils.onLoad(() => {\n    easyCurrency.useGeoserviceResolver();\n    easyCurrency.initialize({\n        // Currency to use before geolocation is first resolved.\n        defaultCurrency: 'GBP',\n        // List of currencies the user can use, or the string 'any'.\n        allowedCurrencies: 'any', // ['USD', 'EUR'],\n        // Whether to set currency based on geolocation.\n        useGeoForCurrency: true,\n        // Selectors to parse as MoneySpans\n        moneySpanSelectors: [\n            '[data-money]'\n        ],\n        // How to extract amount + currency from the selected elements\n        moneySpanParser: function(el, easyCurrency) {\n            var amount = el.dataset.money;\n            var currency = el.dataset.moneyCurrency || easyCurrency.getState().currency;\n            delete el.dataset.money;\n            delete el.dataset.moneyCurrency;\n            amount = Number(amount);\n            return new Money(amount, currency);\n        },\n    });\n});\n```\n\n\n\n## Events\n\nEasyCurrency extends evee and provides a variety of events for to listening to changes. See the 'Emit' sections of the class reference for a list of events.\n**ES6**:\n```js\nimport {plugins, utils} from '@eastsideco/escshopify';\n\nconst easyCurrency = new plugins.EasyCurrency;\n\n// Initialize EC once the page has loaded.\nutils.onLoad(() => {\n    easyCurrency.useGeoserviceResolver();\n    easyCurrency.initialize({\n        defaultCurrency: 'GBP',\n    });\n\n    easyCurrency.on('currencyChanged', (e) => {\n        alert('Currency is now: ' + e.data);\n    });\n});\n```\n\n\n\n## Extending EasyCurrency\n\n### Formatters\n\nEasyCurrency uses a\n[Formatter](../class/src/plugins/easycurrency/formatters/Formatter.js~Formatter.html)\nto format currencies.\n\nTo override currency formatting, make an object extending Formatter (or with #format),\nand then call EasyCurrency#setFormatter.\n\n**ES6**:\n```js\n// CustomFormatter.js\nimport {plugins} from '@eastsideco/escshopify';\n\nexport default class CustomFormatter extends plugins.EasyCurrency.formatters.Formatter {\n    format(amount, currency) {\n        return (amount / 100).toFixed(2) + ' ' + currency; // i.e. \"12.34 USD\"\n    }\n}\n\n// main.js\nimport {plugins, utils} from '@eastsideco/escshopify';\nimport CustomFormatter from './CustomFormatter';\n\nconst easyCurrency = new plugins.EasyCurrency;\n\n// Initialize EC once the page has loaded.\nutils.onLoad(() => {\n    easyCurrency.useGeoserviceResolver();\n    easyCurrency.setFormatter(new CustomFormatter);\n    easyCurrency.initialize({\n        defaultCurrency: 'GBP',\n    });\n});\n```\n\n\n### Currency Resolvers\n\nEasyCurrency uses a\n[CurrencyResolver](../class/src/plugins/easycurrency/resolvers/CurrencyResolver.js~CurrencyResolver.html)\nto determine which currencies are available and the conversion rate between them.\n\nTo override convertion rates or available currencies, make an object extending CurrencyResolver (or with #getConversionRate and #listCurrencyCodes), and call EasyCurrency#setCurrencyResolver.\n\n**ES6**:\n```js\n// CustomResolver.js\nimport {plugins} from '@eastsideco/escshopify';\n\nexport default class CustomResolver extends plugins.EasyCurrency.resolvers.CurrencyResolver {\n    async listCurrencyCodes() {\n        return ['USD', 'GBP', 'EUR'];\n    }\n\n    async getConversionRate(from, to) {\n        // Just an example, please don't write rates like this.\n        var rates = {\n            USD: { USD: 1, GBP: 0.8, EUR: 0.9 },\n            GBP: { USD: 1/0.8, GBP: 1, EUR: (1/0.8)*0.9 },\n            EUR: { USD: 1/0.9, GBP (1/0.9)*0.8, EUR: 1}\n        };\n\n        return rates[from][to];\n    }\n}\n\n// main.js\nimport {plugins, utils} from '@eastsideco/escshopify';\nimport CustomResolver from './CustomResolver';\n\nconst easyCurrency = new plugins.EasyCurrency;\n\n// Initialize EC once the page has loaded.\nutils.onLoad(() => {\n    easyCurrency.useGeoserviceResolver();\n    easyCurrency.setCurrencyResolver(new CustomResolver);\n    easyCurrency.initialize({\n        defaultCurrency: 'GBP',\n    });\n});\n```\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/plugins/geoservice.md",
    "name": "./manual/plugins/geoservice.md",
    "content": "# Plugins/Geoservice\n\nThe Geoservice module provides an easy-to-use interface for visitor geolocation and currency information.\n\n## Getting started\n### Get visitor geolocation info\n\n**ES6**:\n```js\nimport {plugins} from '@eastsideco/escshopify';\n\nconst geoService = new plugins.GeoService;\n\nasync function alertVisitorCountry() {\n    var geoInfo = await geoService.lookupGeo();\n    alert(geoInfo.country.iso_code);\n}\n```\n\n### Get currency exchange rates\n**Note**: It's highly recommended to use the EasyCurrency plugin instead of re-implementing currency conversion yourself - it had more features and covers many easy-to-miss edge cases.\n\n**ES6**:\n```js\nimport {plugins} from '@eastsideco/escshopify';\n\nconst geoService = new plugins.GeoService;\n\nclass VisitorCurrencyConverter {\n    constructor(baseCurrency) {\n        this._baseCurrency = basyCurrency;\n        this._visitorCurrency = 'USD';\n        this._rates = null\n\n        this._getRates();\n        this._getVisitorCurrency();\n    }\n\n    async _getVisitorCurrency() {\n        var geoInfo = await geoService.lookupGeo();\n        this._visitorCurrency = geoInfo.currency;\n    }\n\n    async _getRates() {\n        var res = await geoService.getCurrencyInfo();\n        this._rates = res.rates;\n    }\n\n    convert(amount) {\n        var baseToUsd = this._baseCurrency == 'USD' ? 1 : this._rates[this._baseCurrency];\n        var usdToVisitor = this._visitorCurency == 'USD' ? 1 : this._rates[this._visitorCurrency;\n\n        var rate = usdToVisitor / baseToUsd;\n        \n        return amount * rate;\n    }    \n}\n```\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/utils.md",
    "name": "./manual/utils.md",
    "content": "# Utilities\n\nThe library provides various utility functions to reduce boilerplate and make common tasks easier.\n\nMost of these utilties can be found in the general utils module, but some groups of functionality have been put into their own standalone modules (i.e. logging).\n\n",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/utils/general.md",
    "name": "./manual/utils/general.md",
    "content": "",
    "static": true,
    "access": "public"
  },
  {
    "kind": "manual",
    "longname": "/home/kiran-price/Projects/_esc_shopify_js/v2/manual/utils/log.md",
    "name": "./manual/utils/log.md",
    "content": "# Utilities/Log\n\nThe Log util module provides a very basic logging framework for level and module-based logging. The log utility support custom loggers (i.e. to send logs via AJAX or to the DOM), and level-based muting (i.e. ignoring debug-level messages).\n\n## Using SALVO\nIf you're using SALVO, a logger has already been configured for you - simple use salvo.log:\n\n**ES6**:\n```js\nimport salvo from 'salvo';\n\nsalvo.log.send(salvo.log.WARN, 'Example', 'This is an example message.');\n```\n\n## Log levels and tags\nThe log interface accepts three arguments: log level, tag, and message.\n\nThe log level is a description of the purpose and importance of the log message: DEBUG, INFO, WARN, ERROR, or FATAL. These constants are defined on the log instance, i.e. `log.DEBUG`, `log.WARN`, etc.\n\nThe log tag is a description of where the log message comes from. Typically, it should be the name of a component or class. Log tags help find track down log messages, or filter messages in the debugger. A common pattern is to have a TAG constant in your classes like so:\n\n**ES6**:\n```js\nimport log from 'log';\n\nconst TAG = 'ExampleComponent';\n\nclass ExampleComponent {\n    constructor() {\n        log.send(log.DEBUG, TAG, 'Created a new thing!');\n    }\n}\n```\n\n## Getting started\n### Create a logging module\nCreate a module in your application which bootstraps logging like so:\n\n**ES6**:\n```js\n// log.js\nimport {Log} from '@eastsideco/esc-shopify';\nimport ConsoleLogger from '@eastsideco/esc-shopify/src/utils/loggers/ConsoleLogger.js';\n\nconst log = new Log;\nconst defaultLogger = new ConsoleLogger();\n\nlog.addLogger(logger);\n\nexport default log;\n```\n\nYou can then use the log like so:\n```js\nimport log from 'log';\n\nlog.send(log.WARN, 'Example', 'This is an example message');\nlog.sendObject(log.DEBUG, 'Example', 'This is an example object', {\n    test: 123\n});\n```\n\n### Setting a log level\nYou can mute logging below a given level by calling `Log#setLogLevel`:\n```js\nif (!config.debug) {\n    log.setLogLevel(log.WARN);\n}\n```\n\n\n\n## Writing new loggers\n\nA single log instance can write to multiple loggers. By default, the library provides a ConsoleLogger, which simply passes the log arguments on to window.console, but you can extend this if you need to display logs elsewhere for some reason.\n\n**ES6**:\n```js\n// DOMLogger.js\nimport Logger from '@eastsideco/escshopify/src/utils/loggers/Logger.js';\n\nexport default class DOMLogger extends Logger {\n    constructor(element) {\n        this._element = element;\n    }\n\n    send(level, tag, text) {\n        var child = document.createElement('p');\n        child.classList.add('level-'+level);\n        child.innerText = tag + ': ' + text;\n        this._element.appendChild(child);\n    }\n\n    sendObject(level, tag, text, object) {\n        this.send(level, tag, text + ' -- ' + JSON.stringify(object);\n    }\n}\n\n// log.js\nimport {Log} from '@eastsideco/shopify';\nimport ConsoleLogger from '@eastsideco/shopify/src/utils/loggers/ConsoleLogger.js';\nimport DOMLogger from './DomLogger';\n\nconst log = new Log;\nconst defaultLogger = new ConsoleLogger;\nconst customLogger = new DOMLogger;\n\nlog.addLogger(defaultLogger);\nlog.addLogger(customLogger);\n\nexport default log;\n```\n        \n\n\n\n",
    "static": true,
    "access": "public"
  }
]