{"version":3,"file":"chunks-2d5510b8c1fd28b2/apps_common_shopline-utils_index_js.4bbc19d765055355.js","mappings":"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","sources":["webpack://assemble/./apps/common/constants/index.js","webpack://assemble/./apps/common/shopline-utils/index.js","webpack://assemble/./apps/common/utils/index.js"],"sourcesContent":["\nexport const API_VERSION = \"v2\";\nexport const ICON_SET_BOX= \"box\";\nexport const ICON_SET_BLUEPRINT = \"bp\";\nexport const ICON_SET_FONTAWESOME = \"fa\";\n\nexport const DESERIALIZE_TYPE_OBJECT = \"OBJECT\";\nexport const DESERIALIZE_TYPE_ARRAY_OBJECTS = \"ARRAY_OBJECTS\";\nexport const DESERIALIZE_TYPE_CUSTOM = \"CUSTOM\";\n\nexport const COOKIE_EXPIRES_DAYS = 365;\n\nexport const COOKIE_ID = \"ov_cookie_id\";\nexport const COOKIE_CONTACT_ID = \"ov_contact_id\";\n\nexport const COOKIE_REVIEWS_UPVOTED = \"ov_reviews_upvoted\";\nexport const COOKIE_BACKINSTOCK_VISITOR_ID = \"ov_backinstock_visitor_id\";\n\nexport const COOKIE_PROMPT_SESSION_NUM_VIEWED_PAGES = \"ov_prompt_session_num_viewed_pages\";\nexport const COOKIE_PROMPT_SESSION_VISITOR_TYPE = \"ov_prompt_session_visitor_type\";\nexport const COOKIE_PROMPT_SESSION_FIRST_SEEN = \"ov_prompt_session_first_seen\";\nexport const COOKIE_PROMPT_VISITOR_ID = \"ov_prompt_visitor_id\";\nexport const COOKIE_PROMPT_LAST_SEEN = \"ov_prompt_last_seen\";\n\n\n\n","import * as utils from './Utils';\n\n\nfunction loadStoreConfig() {\n let handle = window.OnVoardData.handle;\n const successCallback = (response) => {\n window.OnVoardData.config = response;\n window.OnVoardEventsData.loadStoreConfig = true;\n };\n\n const errorCallback = (errors) => {\n console.error(error);\n window.OnVoardEventsData.loadStoreConfig = false;\n };\n\n let qs = {};\n qs['handle'] = handle;\n\n utils.getRq({\n \"url\": utils.buildUrl(`shopline-store-config`, qs),\n \"successCallback\": successCallback,\n \"errorCallback\": errorCallback\n });\n}\n\n\nfunction waitUntilProvisionReady(callback) {\n let interval = 0;\n let authorization = null;\n let handle = window.setInterval(() => {\n if (interval > 1000*15) {\n clearInterval(handle);\n return;\n }\n\n let ready = true;\n if (window.OnVoardEventsData && window.OnVoardEventsData.loadProductData && window.OnVoardEventsData.shopline_cart && window.OnVoardEventsData.loadStoreConfig) {\n window.OnVoardEventsData.shoplineProvisionReady = true;\n clearInterval(handle);\n callback();\n return;\n }\n\n interval += 200;\n }, 200);\n}\n\nexport function loadProductData() {\n if (window.OnVoardEventsData.loadProductData) return;\n\n if (window.OnVoardData['page_type'] !== 'product') {\n window.OnVoardEventsData.loadProductData = true;\n return;\n }\n\n let handle = window.OnVoardData.product.handle;\n if (!handle) {\n window.OnVoardEventsData.loadProductData = true;\n return;\n }\n\n let successCallback = (response) => {\n let product = response.products[0];\n if (product) {\n product.variants.forEach((v) => {\n window.OnVoardData.product.variants.forEach((existingVariant) => {\n if (existingVariant.id !== v.id) return;\n existingVariant['title'] = v['title'];\n existingVariant['sku'] = v['sku'];\n existingVariant['compare_at_price'] = v['compare_at_price'];\n existingVariant['price'] = v['price'];\n\n })\n })\n\n window.OnVoardData.product['available'] = window.OnVoardData.product.variants.some((v) => v.available);\n window.OnVoardData.product['tags'] = product.tags;\n\n window.OnVoardData.product['compare_at_price'] = product['compare_at_price'];\n window.OnVoardData.product['compare_at_price_max'] = product['compare_at_price_max'];\n window.OnVoardData.product['compare_at_price_min'] = product['compare_at_price_min'];\n\n window.OnVoardData.product['price'] = product['price'];\n window.OnVoardData.product['price_max'] = product['price_max'];\n window.OnVoardData.product['price_min'] = product['price_min'];\n }\n\n window.OnVoardEventsData.loadProductData = true;\n };\n\n let errorCallback = (error) => {\n console.error(error);\n window.OnVoardEventsData.loadProductData = true;\n };\n\n utils.getRq({\n \"url\": `/api/product/products.json?handle=${handle}`,\n \"headers\": {\n 'Content-Type': 'application/json',\n },\n \"successCallback\": successCallback,\n \"errorCallback\": errorCallback\n });\n}\n\n\n\nexport function provision(loadScriptsCallback) {\n if (typeof Shopline === 'undefined') return;\n\n let preloadData = window.__PRELOAD_STATE__ || {};\n let shoplineData = window.Shopline || {};\n\n var ovData = {};\n ovData[\"ecommerce_platform\"] = \"shopline\";\n ovData[\"product\"] = {};\n ovData[\"customer\"] = {};\n ovData[\"cart\"] = {};\n ovData[\"currency\"] = shoplineData.currency;\n ovData[\"currency_config\"] = shoplineData.currencyConfig;\n ovData[\"currency_rates\"] = preloadData.currencyRates;\n ovData[\"merchant_id\"] = shoplineData.merchantId;\n ovData[\"store_id\"] = shoplineData.storeId;\n ovData[\"handle\"] = shoplineData.handle;\n ovData[\"uri\"] = shoplineData.uri;\n ovData[\"template\"] = preloadData.template;\n\n if (preloadData.product) ovData['product'] = preloadData.product;\n if (shoplineData.customer) ovData['customer'] = shoplineData.customer;\n\n if (ovData[\"uri\"])\n\n if (preloadData.template === 'index') ovData['page_type'] = 'home';\n if (preloadData.template === 'product') ovData['page_type'] = 'product';\n if (preloadData.template === 'products/detail') ovData['page_type'] = 'product';\n if (preloadData.template === 'cart') ovData['page_type'] = 'cart';\n if (preloadData.template === 'collection') ovData['page_type'] = 'collection';\n if (preloadData.templateAlias.toLocaleLowerCase() === 'checkout') ovData['page_type'] = 'checkout';\n if (preloadData.templateAlias.toLocaleLowerCase() === 'thankyou') ovData['page_type'] = 'thankyou';\n\n window.OnVoardData = ovData;\n utils.loadCart();\n loadStoreConfig();\n loadProductData();\n\n waitUntilProvisionReady(() => {\n loadScriptsCallback();\n });\n}\n","import axios from 'axios';\nimport get from 'lodash/get';\nimport ldIsEmpty from 'lodash/isEmpty';\nimport queryString from 'query-string';\nimport { customAlphabet } from 'nanoid';\nimport dictionary from 'nanoid-dictionary';\nimport * as constants from 'common/constants';\n\n\nexport function isProduction() {\n if (process.env.NODE_ENV === 'production') {\n return true;\n } else {\n return false;\n }\n}\n\nexport function isPreview() {\n if (typeof IS_PREVIEW !== 'undefined' && IS_PREVIEW) return true;\n return false;\n}\n\nexport function isClientProduction() {\n if (isProduction() && !isPreview()) return true;\n return false;\n}\n\nexport function getEcommercePlatform() {\n let ovData = window.OnVoardData;\n if (!ovData) return;\n return ovData.ecommerce_platform;\n}\n\nexport function getPlatformIdentifierForEngagement() {\n let platform = getEcommercePlatform();\n if (platform === 'bigcommerce') return window.OnVoardData.store_hash;\n if (platform === 'easystore') return window.OnVoardData.shop.domain;\n if (platform === 'shopify' && window.OnVoardData) return window.OnVoardData.shop.myshopify_domain;\n if (platform === 'shopline') return window.Shopline.storeId;\n if (platform === 'shopware') return window.OnVoardData.app_shop_id;\n if (platform === 'wix') return window.OnVoardData.account_id;\n if (platform === 'woocommerce') return window.location.hostname;\n return;\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined';\n}\n\n// https://stackoverflow.com/a/26824304/1446284\nexport function isInt(val) {\n var expression = /^[0-9]+$/;\n return expression.test(val);\n}\n\n// https://stackoverflow.com/a/9716488/1446284\nexport function isNumeric(val) {\n return !isNaN(parseFloat(val)) && isFinite(val);\n}\n\nexport function isBoolean(value) {\n return typeof value === 'boolean';\n}\n\nexport function isString(val) {\n return typeof val === 'string';\n}\n\nexport function isFunction(val) {\n return typeof val === 'function';\n}\n\nexport function isArray(val) {\n return Array.isArray(val);\n}\n\nexport function isObject(val) {\n return (!!val) && (val.constructor === Object);\n}\n\nexport function isEmpty(val) {\n return ldIsEmpty(val);\n}\n\nexport function stringContains(string, subString) {\n return string.indexOf(subString) !== -1;\n}\n\n// Use jquery's `inArray` to check if value is in array.\n// Will return boolean instead of value index\nexport function inArray(item, arrayList) {\n if ($.inArray(item, arrayList) !== -1) return true;\n return false;\n}\n\nexport function loopObject(object, callback) {\n for (var k in object) {\n let v = object[k];\n callback(k, v);\n }\n}\n\nexport function getRandomInt(max) {\n return Math.floor(Math.random() * Math.floor(max));\n}\n\nexport function generateHash(length=16) {\n return [...Array(length)].map(() => Math.random().toString(36)[2]).join('');\n}\n\nexport function formatAmount(amount) {\n amount = amount.toString();\n amount = amount.replace(/[^0-9.-]/g, '');\n amount = parseFloat(amount);\n return amount;\n}\n\nexport function isMobileScreen() {\n if (!isBrowser()) return;\n var screenWidth = window.screen.width;\n var screenHeight = window.screen.height;\n return screenWidth >= 768 ? false : true;\n}\n\n// In seconds precision\nexport function getCurrentTimestamp() {\n return Math.floor(Date.now() / 1000);\n}\n\nexport function currentURL() {\n if (!isBrowser()) return;\n return window.location.href;\n}\n\nexport function currentURLWithoutParams() {\n if (!isBrowser()) return;\n return window.location.protocol + '//' + window.location.host + window.location.pathname;\n}\n\nexport function currentDomain() {\n if (!isBrowser()) return;\n return window.location.hostname;\n}\n\nexport function currentURLPath() {\n if (!isBrowser()) return;\n return window.location.pathname;\n}\n\nexport function getScrollPercent() {\n if (!isBrowser()) return;\n const h = document.documentElement;\n const b = document.body;\n const st = 'scrollTop';\n const sh = 'scrollHeight';\n return (h[st]||b[st]) / ((h[sh]||b[sh]) - h.clientHeight) * 100;\n}\n\n\nexport function appendQueryString(url, qs) {\n const parsed = queryString.parseUrl(url);\n qs = {...parsed.query, ...qs};\n\n Object.keys(qs).forEach((key) => (qs[key] === null || qs[key] === \"\") && delete qs[key]);\n let stringified = queryString.stringify(qs);\n if (!stringified) {\n return url;\n } else {\n return url + \"?\" + stringified;\n }\n}\n\n// {url: 'https://foo.bar', query: {foo: 'bar'}}\nexport function parseUrl(url) {\n return queryString.parseUrl(url);\n}\n\n// {foo: 'bar'}\nexport function parseQueryString(val) {\n return queryString.parse(val);\n}\n\nexport function removeQueryString(url) {\n return url.split(\"?\")[0];\n}\n\n// Scroll to top of element. Useful when you are using scrollable elements\nexport function scrollElementTop(el) {\n el.scrollTop = el.scrollHeight;\n\n setTimeout(() => {\n el.scrollTop = 0;\n }, 100);\n}\n\nexport function getCssValueForSelector(selector, propKey) {\n if (!isBrowser()) return;\n const el = document.querySelector(selector);\n if (!el) return;\n\n style = window.getComputedStyle(el);\n return style.getPropertyValue(propKey);\n}\n\nexport function attachUrlChangeEvent() {\n if (window.OV_ATTACHED_URL_CHANGE_EVENT) return null;\n\n let platform = getEcommercePlatform();\n\n // shopline need this to detect\n // https://phpcoder.tech/detect-url-change-in-javascript-without-refresh/\n if (platform === 'shopline') {\n let lastUrl = location.href;\n new MutationObserver(() => {\n const url = location.href;\n if (url !== lastUrl) {\n lastUrl = url;\n window.dispatchEvent(new Event('ovurlchange'));\n }\n }).observe(document, {subtree: true, childList: true});\n\n window.OV_ATTACHED_URL_CHANGE_EVENT = 1;\n return;\n }\n\n // See https://stackoverflow.com/a/52809105/1446284\n history.pushState = (f => function pushState(){\n var ret = f.apply(this, arguments);\n window.dispatchEvent(new Event('pushstate'));\n window.dispatchEvent(new Event('ovurlchange'));\n return ret;\n })(history.pushState);\n\n history.replaceState = (f => function replaceState(){\n var ret = f.apply(this, arguments);\n window.dispatchEvent(new Event('replacestate'));\n window.dispatchEvent(new Event('ovurlchange'));\n return ret;\n })(history.replaceState);\n\n window.addEventListener('popstate', () => {\n window.dispatchEvent(new Event('ovurlchange'))\n });\n\n window.OV_ATTACHED_URL_CHANGE_EVENT = 1;\n}\n\nexport function attachHashChangeEvent() {\n if (window.OV_ATTACHED_HASH_CHANGE_EVENT) return null;\n\n window.addEventListener('hashchange', () => {\n window.dispatchEvent(new Event('ovhashchange'))\n });\n\n window.OV_ATTACHED_HASH_CHANGE_EVENT = 1;\n}\n\n// See https://stackoverflow.com/a/43467144/1446284\nexport function isValidUrl(value) {\n if (!value) return false;\n if (value.startsWith(\"//\")) value = value.replace(\"//\", \"https://\");\n if (!value.startsWith(\"http://\") && !value.startsWith(\"https://\")) {\n value = `http://${value}`\n }\n\n let url;\n try {\n url = new URL(value);\n } catch (_) {\n return false;\n }\n\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n}\n\n// https://gist.github.com/ManUtopiK/469aec75b655d6a4d912aeb3b75af3c9\nexport function cleanGraphQLResponse(input) {\n if (!input) return null\n const output = {}\n const isObject = obj => {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n }\n\n Object.keys(input).forEach(key => {\n if (input[key] && input[key].edges) {\n output[key] = input[key].edges.map(edge =>\n cleanGraphQLResponse(edge.node)\n )\n } else if (isObject(input[key])) {\n output[key] = cleanGraphQLResponse(input[key])\n } else if (key !== '__typename') {\n output[key] = input[key]\n }\n })\n\n return output\n}\n\n\nconst requestAnimFrame = (function() {\n if (window.requestAnimationFrame) return window.requestAnimationFrame;\n return (callback, element) => window.setTimeout(callback, 1000 / 60);\n})();\n\n// See https://gist.github.com/joelambert/1002116\nexport function requestInterval(fn, delay) {\n if(!window.requestAnimationFrame) return window.setInterval(fn, delay);\n\n let start = new Date().getTime();\n let handle = new Object();\n\n function loop() {\n var current = new Date().getTime(),\n delta = current - start;\n\n if(delta >= delay) {\n fn.call();\n start = new Date().getTime();\n }\n\n handle.value = requestAnimFrame(loop);\n };\n\n handle.value = requestAnimFrame(loop);\n return handle;\n}\n\n\n// See https://gist.github.com/joelambert/1002116\nexport function clearRequestInterval(handle) {\n if (window.cancelAnimationFrame) window.cancelAnimationFrame(handle.value);\n clearInterval(handle);\n}\n\nexport function stringifyError(error) {\n try {\n error = JSON.stringify(error);\n } catch {}\n return error;\n}\n\nexport function printErrors(errors) {\n if (isArray(errors)) {\n errors.forEach((error) => {\n console.log(error);\n });\n\n return;\n }\n\n if (isObject(errors)) {\n for (let [key, value] of Object.entries(errors)) {\n console.log(`${key}: ${value}`);\n }\n\n return;\n }\n\n console.log(errors);\n}\n\n\n//===================================================\n// interceptRequests\n//===================================================\n// https://gist.github.com/sergeimuller/a609a9df7d30e2625a177123797471e2\nfunction replaceXHROpen(interceptPaths, callback) {\n let oldXHROpen = window.XMLHttpRequest.prototype.open;\n window.XMLHttpRequest.prototype.open = function(method, url, async, user, password) {\n this.addEventListener('load', function() {\n if (!interceptPaths.some((path) => url.includes(path))) return;\n\n // Can't guarantee response is always json\n callback(this.response, url);\n });\n\n oldXHROpen.apply(this, arguments);\n }\n\n // required because some apps or themes mess jQuery up and causing unexpected issues\n try {\n if (window.jQuery) {\n jQuery(document).ajaxSuccess(function(event, xhr, settings) {\n if (!interceptPaths.some((path) => settings.url.includes(path))) return;\n\n // Can't guarantee response is always json\n callback(xhr.responseText, settings.url);\n });\n }\n } catch(e) {}\n}\n\n// https://stackoverflow.com/a/64961272/1446284\nfunction replaceFetch(interceptPaths, callback) {\n let oldFetch = window.fetch;\n window.fetch = async (...args) => {\n const reqUrl = args[0];\n const response = await oldFetch(...args);\n if (!reqUrl || !interceptPaths.some((path) => reqUrl.includes(path))) return response;\n\n // Can't guarantee response is always json\n response\n .clone()\n .text()\n .then((textResponse) => {\n callback(textResponse, reqUrl);\n })\n .catch((err) => {\n console.error(err);\n })\n\n return response;\n }\n}\n\n\nexport function interceptRequests(interceptPaths, callback) {\n if (getEcommercePlatform() === 'shopline' && window.__AJAX_INTERCEPTOR__) {\n window.__AJAX_INTERCEPTOR__((data) => {\n if (data.method !== 'GET') return;\n if (!interceptPaths.some((path) => data.url.includes(path))) return;\n\n // Can't guarantee response is always json\n callback(data.xhr.responseText, data.url);\n });\n }\n\n replaceXHROpen(interceptPaths, callback);\n replaceFetch(interceptPaths, callback);\n}\n\n\n//===================================================\n// API Utils\n//===================================================\nexport function handleErrorCallback(error, errorCallback) {\n if (error.response) {\n if (error.response.status === 500) {\n errorCallback(\"Server error 500. This error indicates that there are some issues on our end.\");\n return;\n }\n\n if (error.response.data) {\n if (error.response.data.errors && Array.isArray(error.response.data.errors)) {\n errorCallback(error.response.data.errors.join(\"\\n\"));\n return;\n }\n\n errorCallback(error.response.data);\n return;\n }\n }\n\n errorCallback(error.message);\n}\n\nexport function handleRqSuccess(response, successCallback) {\n successCallback(response.data);\n};\n\n\nexport function handleRqError(error, errorCallback) {\n handleErrorCallback(error, errorCallback);\n};\n\n\nexport function getRq(kwargs) {\n const config = {};\n config['method'] = 'get';\n config['url'] = kwargs.url;\n if (kwargs.headers) config['headers'] = kwargs.headers;\n\n axios(config)\n .then((response) => handleRqSuccess(response, kwargs.successCallback))\n .catch((error) => handleRqError(error, kwargs.errorCallback));\n};\n\nexport function postRq(kwargs) {\n const config = {};\n config['method'] = 'post';\n config['url'] = kwargs.url;\n config['data'] = kwargs.data || \"{}\";\n if (kwargs.headers) config['headers'] = kwargs.headers;\n\n axios(config)\n .then((response) => handleRqSuccess(response, kwargs.successCallback))\n .catch((error) => handleRqError(error, kwargs.errorCallback));\n};\n\nexport function buildUrl(path, qs={}) {\n return appendQueryString(`${BASE_API_URL}/${constants.API_VERSION}/${path}`, qs);\n}\n\nexport function uniqueId(prefix='', length=16) {\n const generator = customAlphabet(dictionary.alphanumeric, length);\n let id = generator();\n if (prefix) id = `${prefix}${id}`;\n return id;\n}\n\n// https://github.com/scopsy/await-to-js\nexport function to(promise) {\n return promise.then(data => {\n return [null, data];\n })\n .catch(err => [err]);\n}\n"],"names":["API_VERSION","ICON_SET_BOX","ICON_SET_BLUEPRINT","ICON_SET_FONTAWESOME","DESERIALIZE_TYPE_OBJECT","DESERIALIZE_TYPE_ARRAY_OBJECTS","DESERIALIZE_TYPE_CUSTOM","COOKIE_EXPIRES_DAYS","COOKIE_ID","COOKIE_CONTACT_ID","COOKIE_REVIEWS_UPVOTED","COOKIE_BACKINSTOCK_VISITOR_ID","COOKIE_PROMPT_SESSION_NUM_VIEWED_PAGES","COOKIE_PROMPT_SESSION_VISITOR_TYPE","COOKIE_PROMPT_SESSION_FIRST_SEEN","COOKIE_PROMPT_VISITOR_ID","COOKIE_PROMPT_LAST_SEEN","loadProductData","window","OnVoardEventsData","OnVoardData","handle","product","utils","response","products","variants","forEach","v","existingVariant","id","some","available","tags","error","console","provision","loadScriptsCallback","Shopline","qs","preloadData","__PRELOAD_STATE__","shoplineData","ovData","currency","currencyConfig","currencyRates","merchantId","storeId","uri","template","customer","templateAlias","toLocaleLowerCase","config","loadStoreConfig","errors","callback","interval","setInterval","clearInterval","shopline_cart","shoplineProvisionReady","waitUntilProvisionReady","isProduction","isPreview","IS_PREVIEW","isClientProduction","getEcommercePlatform","ecommerce_platform","getPlatformIdentifierForEngagement","platform","store_hash","shop","domain","myshopify_domain","app_shop_id","account_id","location","hostname","isBrowser","isInt","val","test","isNumeric","isNaN","parseFloat","isFinite","isBoolean","value","isString","isFunction","isArray","Array","isObject","constructor","Object","isEmpty","ldIsEmpty","stringContains","string","subString","indexOf","inArray","item","arrayList","$","loopObject","object","k","getRandomInt","max","Math","floor","random","generateHash","length","map","toString","join","formatAmount","amount","replace","isMobileScreen","screenWidth","screen","width","height","getCurrentTimestamp","Date","now","currentURL","href","currentURLWithoutParams","protocol","host","pathname","currentDomain","currentURLPath","getScrollPercent","h","document","documentElement","b","body","st","sh","clientHeight","appendQueryString","url","parsed","queryString","query","keys","key","stringified","parseUrl","parseQueryString","removeQueryString","split","scrollElementTop","el","scrollTop","scrollHeight","setTimeout","getCssValueForSelector","selector","propKey","querySelector","style","getComputedStyle","getPropertyValue","attachUrlChangeEvent","OV_ATTACHED_URL_CHANGE_EVENT","f","lastUrl","MutationObserver","dispatchEvent","Event","observe","subtree","childList","history","pushState","ret","apply","this","arguments","replaceState","addEventListener","attachHashChangeEvent","OV_ATTACHED_HASH_CHANGE_EVENT","isValidUrl","startsWith","URL","_","cleanGraphQLResponse","input","output","obj","edges","edge","node","requestAnimFrame","requestAnimationFrame","element","requestInterval","fn","delay","start","getTime","loop","call","clearRequestInterval","cancelAnimationFrame","stringifyError","JSON","stringify","printErrors","log","entries","interceptRequests","interceptPaths","__AJAX_INTERCEPTOR__","data","method","path","includes","xhr","responseText","oldXHROpen","XMLHttpRequest","prototype","open","async","user","password","jQuery","ajaxSuccess","event","settings","e","replaceXHROpen","oldFetch","fetch","reqUrl","clone","text","then","textResponse","err","replaceFetch","handleErrorCallback","errorCallback","status","message","handleRqSuccess","successCallback","handleRqError","getRq","kwargs","headers","axios","postRq","buildUrl","BASE_API_URL","constants","uniqueId","prefix","generator","customAlphabet","dictionary","to","promise"],"sourceRoot":""}