{"version":3,"sources":["webpack:///./src/domain/tenors.js","webpack:///./src/domain/equities.js","webpack:///./src/domain/routes.js","webpack:///./src/domain/viterra.js","webpack:///./src/domain/commodities.js","webpack:///./src/domain/positions.js","webpack:///./src/domain/index.js","webpack:///./src/main.js","webpack:///./src/helpers/RemoteData.js"],"names":["buildTenorsData","data","months","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","df","DataFrame","withColumn","row","get","slice","getTenorForDateAndMonth","tenors","date","month","filter","toCollection","buildRecommendationsTableData","recommendations","items","reduce","acc","rec","action","signal_action","replace","buy","availableCapital","buy_capital","sell_capital","shares","Math","round","signal_price","netShares","condition","currencyFormatter","format","order_limit","push","equity","ticker","_cellVariants","sort","x","y","fields","key","thClass","tdClass","buildExitIndicationsTableData","exit_indications","ei","delta","extractEquities","current","previous","equities","Set","target","Object","keys","startsWith","includes","add","colorClass","buildM2MTableData","footer_values","wte","Array","from","item","m2m","count","week","label","footer","footerClass","buildPortfolioTableData","net_shares","m2m_diff","cum_net_profit","pnl_plus_m2m","m2m_key","prev_m2m","m2m_pct_change","abs","pl_ratio","toFixed","buildAccountValuePlotData","dates","toArray","type","name","buildClosePricesPlotData","plots","listColumns","col","endsWith","a","b","buildRouteD3ForecastData","route","effectiveDate","filtered","tail","baseKey","spotPrices","spots","i","s","averageSpot","length","values","forecasts","ll_50s","ul_50s","ll_70s","ul_70s","min_value","min","max_value","max","value","forecast","ll_50","ul_50","ll_70","ul_70","buildRouteD3FeaturesData","columns","c","categories","map","select","renameAll","buildRouteD3PerformanceData","record","relDA3M","relForecast3M","relRange3M","relAccuracy3M","relDA6M","relForecast6M","relRange6M","relAccuracy6M","relDA1Y","relForecast1Y","relRange1Y","relAccuracy1Y","absDA3M","absForecast3M","absRange3M","absAccuracy3M","absDA6M","absForecast6M","absRange6M","absAccuracy6M","absDA1Y","absForecast1Y","absRange1Y","absAccuracy1Y","out","relative","past_three_months","accuracy","directionalAccuracy","forecastAccuracy","rangeAccuracy","past_six_months","past_year","absolute","viterraLabels","buildViterraD3ForecastData","buildViterraD3FeaturesData","buildViterraD3PerformanceData","buildCommodities","configuration","commodities","displayNames","capesize","panamax","iron_ore","commodity","concat","contracts","displayName","buildPositionsData","rawData","open_summary","realized_summary","open_trades","realized_trades","openSummary","rows","realizedSummary","openTrades","realizedTrades","moment","extendMoment","Moment","buildOpenTradesCardsData","dayData","d","markToMarket","partiallyRealized","marginExposure","premiumExposure","portfolio","valueAtRisk","value_at_risk","expectedShortfall","expected_shortfall","mark_to_market","partially_realized","margin_exposure","premium_exposure","buildRealizedCardData","firstDate","cumulativeNetProfit","profitLossRatio","averageNetProfitPerTrade","averageTradeDuration","averageVaR","maxVaR","sharpeRatio","sortinoRatio","overall","title","profit_loss_ratio","avg_net_profit_per_trade","avg_trade_duration","avg_var","max_var","sharpe_ratio","sortino_ratio","diffToClass","diff","day","previousDay","Number","String","recommendationToClass","recommendation","cls","closestDate","allDates","buildForecastGraphs","previousDayData","mm3","mm2","mm1","head","m0","m1","m2","m3","pastData","t","startDate","settlementStart","endDate","settlementDate","spotDates","spotKey","settlement","stat","mean","settlements","fill","futureData","ix","forecastKey","contract","engine","FFAPriceKey","range","by","previousForecasts","FFAPrices","previousFFAPrices","forecasts2E","previousForecasts2E","has2E","forecastDates","mode","line","color","dash","buildContractsData","graphData","contractMonth","marketPriceKey","marketPrice","marketPriceDiff","marketPriceDiffClass","spotPriceKey","spotPrice","spotPriceDiff","spotPriceDiffClass","blocked","initialMargin","maintenanceMargin","gap","callPut","U1StrikePrice","U2StrikePrice","U3StrikePrice","U1RawPremium","U2RawPremium","U3RawPremium","U1Premium","U2Premium","U3Premium","CV","impliedVolatility","makeGraph","marketPricesGraph","CVGraph","makePayoffGraph","strikeLevel","premium","strikePrice","width","compute","payoffGraph","enginesData","engineNames","fcast","ng_gap","recs","B","S","N","rawRecommendation","recommendationClass","buildDailyData","dashboard","config","routes","parameters","start_capital","index","lastDate","ftrColumns","features","ftrDates","ftrRows","ftrDf","routeData","weeks","number","d3ForecastData","d3FeaturesData","d3PerformanceData","forecastData","tennors","dateIndex","filteredDf","Vue","use","VueMoment","sync","store","router","Auth0Plugin","domain","clientId","audience","onRedirectCallback","appState","targetUrl","window","location","pathname","connection","origin","socket","io","reconnection","reconnectionDelay","maxReconnectionAttempts","Infinity","path","query","uuid","state","debug","process","localStorage","VueSocketIO","actionPrefix","eventToActionTransformer","actionName","productionTip","render","h","App","watch","this","$store","dispatch","$mount","wrap","component","createElement","daily_data","cata","NotAsked","Loading","e","DataError","props","error","params","slug","wrapPositions","positions_data","wrapOceanBoltAIS","oceanbolt_ais_data"],"mappings":"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","file":"js/app~a97bfcba.e1412c59.js","sourcesContent":["import DataFrame from 'dataframe-js'\n\nexport const buildTenorsData = function(data) {\n const months = {\n jan: 'January',\n feb: 'February',\n mar: 'March',\n apr: 'April',\n may: 'May',\n jun: 'June',\n jul: 'July',\n aug: 'August',\n sep: 'September',\n oct: 'October',\n nov: 'November',\n dec: 'December'\n }\n let df = new DataFrame(\n data,\n ['name', 'start', 'end', 'settlementStart',\n 'settlementDate', 'settlementDays']\n )\n df = df.withColumn('month', row => months[row.get('name').slice(0, 3)])\n return df\n}\n\nexport const getTenorForDateAndMonth = function(tenors, date, month) {\n return tenors.filter(row => row.get('end') >= date).slice(month, month+1).toCollection()[0]\n}\n\n","import {currencyFormatter} from '@/mixins';\n\nexport const buildRecommendationsTableData = function(recommendations) {\n const items = recommendations.reduce((acc, rec) => {\n const action = rec.signal_action.replace('Action.', '')\n const buy = action == \"BUY\"\n const availableCapital = buy ? rec.buy_capital : rec.sell_capital\n const shares = Math.round(availableCapital / rec.signal_price)\n const netShares = shares * (buy ? 1 : -1)\n const condition = `price ${buy ? 'below' : 'above'} ${currencyFormatter.format(rec.order_limit)}`\n if (shares != 0) {\n acc.push({\n equity: rec.ticker,\n action,\n availableCapital: currencyFormatter.format(availableCapital),\n netShares,\n condition,\n _cellVariants: {\n action: netShares < 0 ? \"red\" : \"green\",\n }\n })\n }\n return acc\n }, []).sort((x, y) => x.equity > y.equity)\n const fields = [\n {key: 'equity'},\n {key: 'action'},\n {key: 'availableCapital', thClass: 'text-right', tdClass: 'text-right'},\n {key: 'netShares', thClass: 'text-right', tdClass: 'text-right'},\n {key: 'condition', thClass: 'text-right', tdClass: 'text-right'}\n ]\n return {items, fields}\n}\n\nexport const buildExitIndicationsTableData = function(exit_indications) {\n const items = exit_indications.reduce((acc, ei) => {\n acc.push({\n equity: ei.ticker,\n action: ei.delta < 0 ? \"SELL\" : \"BUY\",\n netShares: Math.round(ei.delta),\n _cellVariants: {\n action: ei.delta < 0 ? \"red\" : \"green\",\n }\n })\n return acc\n }, []).sort((x, y) => x.equity > y.equity)\n const fields = [\n {key: 'equity'},\n {key: 'action'},\n {key: 'netShares', thClass: 'text-right', tdClass: 'text-right'}\n ]\n return {items, fields}\n}\n\nconst extractEquities = function(current, previous) {\n const equities = new Set()\n for (let target of [current, previous]) {\n for (let key of Object.keys(target)) {\n if (key.startsWith('m2m_') && !key.includes('wte')) {\n const equity = key.replace('m2m_', '')\n equities.add(equity)\n }\n }\n }\n return equities\n}\n\nconst colorClass = x => x < 0 ? \"red\" : \"green\"\n\nexport const buildM2MTableData = function(current, previous) {\n const equities = extractEquities(current, previous)\n const items = []\n const fields = [{key: 'equity'}]\n const footer_values = {}\n for (let wte of [0, 1, 2, 3, 4]) {\n const key = `m2m_wte${wte}`\n footer_values[key] = 0\n }\n for (let equity of Array.from(equities).sort()) {\n const item = {\n equity,\n '_cellVariants': {}\n }\n for (let wte of [0, 1, 2, 3, 4]) {\n const key = `m2m_wte${wte}`\n const m2m = current[`${key}_${equity}`]\n item[key] = currencyFormatter.format(m2m)\n item._cellVariants[key] = colorClass(m2m)\n footer_values[key] += m2m\n }\n items.push(item)\n }\n for (let wte of [0, 1, 2, 3, 4]) {\n const key = `m2m_wte${wte}`\n const count = wte + 1\n const week = count > 1 ? \"weeks\" : \"week\"\n const label = `M2M for exits in ${count} ${week}`\n fields.push({\n key, label, thClass: 'text-right', tdClass: 'text-right',\n footer: footer_values[key],\n footerClass: `text-right table-${colorClass(footer_values[key])}`\n })\n }\n return {\n items,\n fields\n }\n}\n\nexport const buildPortfolioTableData = function(current, previous) {\n const equities = extractEquities(current, previous)\n const items = []\n const footer_values = {\n net_shares: 0, m2m: 0, m2m_diff: 0, cum_net_profit: 0, pnl_plus_m2m: 0\n }\n for (let equity of Array.from(equities).sort()) {\n const m2m_key = `m2m_${equity}`\n const m2m = current[m2m_key]\n footer_values['m2m'] += m2m\n const prev_m2m = previous[m2m_key]\n const m2m_diff = m2m - prev_m2m\n footer_values['m2m_diff'] += m2m_diff\n const m2m_pct_change = prev_m2m == 0 ? 0 : (m2m_diff / Math.abs(prev_m2m)) * 100\n const cum_net_profit = current[`cum_net_profit_${equity}`] || 0\n footer_values['cum_net_profit'] += cum_net_profit\n let pl_ratio = current[`pnl_ratio_${equity}`]\n pl_ratio = pl_ratio ? pl_ratio.toFixed(2) + ':1' : 'N/A'\n const pnl_plus_m2m = m2m + cum_net_profit\n footer_values['pnl_plus_m2m'] += pnl_plus_m2m\n const netShares = Math.round(current[`delta_${equity}`])\n footer_values['net_shares'] += netShares\n items.push({\n equity,\n netShares,\n m2m: currencyFormatter.format(m2m),\n m2m_diff: currencyFormatter.format(m2m_diff),\n m2m_pct_change: `${m2m_pct_change.toFixed(2)}%`,\n cum_net_profit: currencyFormatter.format(cum_net_profit),\n pl_ratio,\n pnl_plus_m2m: currencyFormatter.format(pnl_plus_m2m),\n _cellVariants: {\n m2m: colorClass(m2m),\n m2m_diff: colorClass(m2m_diff),\n m2m_pct_change: colorClass(m2m_pct_change),\n cum_net_profit: colorClass(cum_net_profit),\n pnl_plus_m2m: colorClass(pnl_plus_m2m),\n }\n })\n }\n footer_values['m2m_pct_change'] = (\n footer_values['m2m_diff'] /\n Math.abs(footer_values['m2m'] - footer_values['m2m_diff'])\n )\n const fields = [\n {key: 'equity'},\n {\n key: 'netShares', thClass: 'text-right', tdClass: 'text-right',\n footer: footer_values['net_shares']\n },\n {\n key: 'm2m', label: 'M2M', thClass: 'text-right', tdClass: 'text-right',\n footer: footer_values['m2m'],\n footerClass: `text-right table-${colorClass(footer_values['m2m'])}`\n },\n {\n key: 'm2m_diff', label: 'M2M Daily Change', thClass: 'text-right',\n tdClass: 'text-right', footer: footer_values['m2m_diff'],\n footerClass: `text-right table-${colorClass(footer_values['m2m_diff'])}`\n },\n {\n key: 'm2m_pct_change', label: 'M2M Daily % Change',\n thClass: 'text-right', tdClass: 'text-right',\n footer: footer_values['m2m_pct_change'],\n footerClass: `text-right table-${colorClass(footer_values['m2m_pct_change'])}`\n },\n {\n key: 'cum_net_profit', label: 'Cum. Net Profit',\n thClass: 'text-right', tdClass: 'text-right',\n footer: footer_values['cum_net_profit'],\n footerClass: `text-right table-${colorClass(footer_values['cum_net_profit'])}`\n },\n {\n key: 'pl_ratio', label: 'Profit/loss Ratio',\n thClass: 'text-right', tdClass: 'text-right',\n footer: current['pnl_ratio'] ? current['pnl_ratio'].toFixed(2) + ':1' : 'N/A',\n footerClass: 'text-right'\n },\n {\n key: 'pnl_plus_m2m', label: 'P&L + M2M', thClass: 'text-right',\n tdClass: 'text-right', footer: footer_values['pnl_plus_m2m'],\n footerClass: `text-right table-${colorClass(footer_values['pnl_plus_m2m'])}`\n }\n ]\n return {\n items,\n fields\n }\n}\n\nexport const buildAccountValuePlotData = function(df) {\n const dates = df.toArray('date')\n return [\n {\n type: 'scatter',\n x: dates,\n y: df.toArray('account_value'),\n name: 'Account Value'\n },\n {\n type: 'scatter',\n x: dates,\n y: df.toArray('net_outcome'),\n name: 'Cum. Net Profit'\n },\n {\n type: 'scatter',\n x: dates,\n y: df.toArray('m2m'),\n name: 'M2M'\n }\n ]\n}\n\nexport const buildClosePricesPlotData = function(df) {\n const dates = df.toArray('date')\n const plots = []\n for (let col of df.listColumns()) {\n if (col.endsWith('_close')) {\n const ticker = col.replace('_close', '')\n plots.push({\n type: 'scatter',\n x: dates,\n y: df.toArray(col),\n name: ticker\n })\n }\n }\n return plots.sort((a, b) => a.name < b.name)\n}\n","export const buildRouteD3ForecastData = function(df, route, week, effectiveDate) {\n const filtered = df.filter(\n row => (\n row.get('date') <= effectiveDate &&\n row.get(`${route}_W${week}_spot_price`)\n )\n ).tail(250)\n const baseKey = route + '_W' + week\n const spotPrices = filtered.toArray(baseKey + '_spot_price')\n const spots = []\n for (let i of [1, 2, 3, 4, 5]) {\n const s = filtered.toArray(baseKey + '_spot_s' + i).slice(-1)[0]\n if (s) {\n spots.push(s)\n }\n }\n let averageSpot = null\n if (spots.length > 0) {\n averageSpot = spots.reduce((a, b) => a+b, 0) / spots.length\n }\n const values = spotPrices.slice(-4)\n const forecasts = filtered.toArray(baseKey + '_prediction').slice(-4)\n const ll_50s = filtered.toArray(baseKey + '_ll_50').slice(-4)\n const ul_50s = filtered.toArray(baseKey + '_ul_50').slice(-4)\n const ll_70s = filtered.toArray(baseKey + '_ll_70').slice(-4)\n const ul_70s = filtered.toArray(baseKey + '_ul_70').slice(-4)\n return {\n min_value: Math.min(...spotPrices),\n max_value: Math.max(...spotPrices),\n value: values.slice(-1)[0],\n values: values.slice(0, 3),\n spots,\n averageSpot,\n forecast: forecasts.slice(-1)[0],\n forecasts: forecasts.slice(0, 3),\n ll_50: ll_50s.slice(-1)[0],\n ll_50s: ll_50s.slice(0, 3),\n ul_50: ul_50s.slice(-1)[0],\n ul_50s: ul_50s.slice(0, 3),\n ll_70: ll_70s.slice(-1)[0],\n ll_70s: ll_70s.slice(0, 3),\n ul_70: ul_70s.slice(-1)[0],\n ul_70s: ul_70s.slice(0, 3)\n }\n}\n\nexport const buildRouteD3FeaturesData = function(df, route, week, effectiveDate) {\n const baseKey = route + '_W' + week\n const columns = df.listColumns()\n .filter(c => c.startsWith(baseKey))\n const categories = columns.map(c => c.slice(baseKey.length+1))\n return df\n .filter(row => row.get('date') <= effectiveDate)\n .select(...columns)\n .renameAll(categories)\n .tail(1)\n .toCollection()[0]\n}\n\nexport const buildRouteD3PerformanceData = function(df, route, week, effectiveDate) {\n const baseKey = route + '_W' + week\n const record = df\n .filter(row => row.get('date') <= effectiveDate)\n .tail(1)\n .toCollection()[0]\n const relDA3M = record[`${baseKey}_da_roll_pct_60`]\n const relForecast3M = record[`${baseKey}_error_norm_roll_pct_60`]\n const relRange3M = record[`${baseKey}_spot_inrange_roll_pct_60_50`]\n const relAccuracy3M = (\n relDA3M +\n relForecast3M +\n relRange3M\n ) / 3.0\n const relDA6M = record[`${baseKey}_da_roll_pct_125`]\n const relForecast6M = record[`${baseKey}_error_norm_roll_pct_125`]\n const relRange6M = record[`${baseKey}_spot_inrange_roll_pct_125_50`]\n const relAccuracy6M = (\n relDA6M +\n relForecast6M +\n relRange6M\n ) / 3.0\n const relDA1Y = record[`${baseKey}_da_roll_pct_250`]\n const relForecast1Y = record[`${baseKey}_error_norm_roll_pct_250`]\n const relRange1Y = record[`${baseKey}_spot_inrange_roll_pct_250_50`]\n const relAccuracy1Y = (\n relDA1Y +\n relForecast1Y +\n relRange1Y\n ) / 3.0\n const absDA3M = record[`${baseKey}_da_roll_60`]\n const absForecast3M = record[`${baseKey}_median_abs_pct_error_60`]\n const absRange3M = record[`${baseKey}_spot_inrange_roll_60_50`]\n const absAccuracy3M = (\n absDA3M +\n absForecast3M +\n absRange3M\n ) / 3.0\n const absDA6M = record[`${baseKey}_da_roll_125`]\n const absForecast6M = record[`${baseKey}_median_abs_pct_error_125`]\n const absRange6M = record[`${baseKey}_spot_inrange_roll_125_50`]\n const absAccuracy6M = (\n absDA6M +\n absForecast6M +\n absRange6M\n ) / 3.0\n const absDA1Y = record[`${baseKey}_da_roll_250`]\n const absForecast1Y = record[`${baseKey}_median_abs_pct_error_250`]\n const absRange1Y = record[`${baseKey}_spot_inrange_roll_250_50`]\n const absAccuracy1Y = (\n absDA1Y +\n absForecast1Y +\n absRange1Y\n ) / 3.0\n const out = {\n relative: {\n past_three_months: {\n accuracy: relAccuracy3M,\n directionalAccuracy: relDA3M,\n forecastAccuracy: relForecast3M,\n rangeAccuracy: relRange3M\n },\n past_six_months: {\n accuracy: relAccuracy6M,\n directionalAccuracy: relDA6M,\n forecastAccuracy: relForecast6M,\n rangeAccuracy: relRange6M\n },\n past_year: {\n accuracy: relAccuracy1Y,\n directionalAccuracy: relDA1Y,\n forecastAccuracy: relForecast1Y,\n rangeAccuracy: relRange1Y\n }\n },\n absolute: {\n past_three_months: {\n accuracy: absAccuracy3M,\n directionalAccuracy: absDA3M,\n forecastAccuracy: absForecast3M,\n rangeAccuracy: absRange3M\n },\n past_six_months: {\n accuracy: absAccuracy6M,\n directionalAccuracy: absDA6M,\n forecastAccuracy: absForecast6M,\n rangeAccuracy: absRange6M\n },\n past_year: {\n accuracy: absAccuracy1Y,\n directionalAccuracy: absDA1Y,\n forecastAccuracy: absForecast1Y,\n rangeAccuracy: absRange1Y\n }\n },\n }\n return out\n}\n","//import moment from 'moment'\n\nexport const viterraLabels = {\n 'pmx_M1_roll': 'Pmx M1',\n 'pmx_M2_roll': 'Pmx M2',\n 'pmx_M3_roll': 'Pmx M3',\n 'capes_M1_roll': 'Capes M1',\n 'capes_M2_roll': 'Capes M2',\n 'capes_M3_roll': 'Capes M3',\n 'pmx_Q2': 'Pmx Q2',\n 'pmx_Q3': 'Pmx Q3',\n 'pmx_Q4': 'Pmx Q4',\n 'capes_Q2': 'Capes Q2',\n 'capes_Q3': 'Capes Q3',\n 'capes_Q4': 'Capes Q4',\n 'P1A_82_proxy_W4': 'P1A',\n 'P1A_82_proxy_W5': 'P1A',\n 'P1A_82_proxy_W6': 'P1A',\n 'P2A_82_proxy_W4': 'P2A',\n 'P2A_82_proxy_W5': 'P2A',\n 'P2A_82_proxy_W6': 'P2A',\n 'P3A_82_proxy_W4': 'P3A',\n 'P3A_82_proxy_W5': 'P3A',\n 'P3A_82_proxy_W6': 'P3A',\n 'P6_82_W4': 'P6',\n 'P6_82_W5': 'P6',\n 'P6_82_W6': 'P6'\n}\n\nexport const buildViterraD3ForecastData = function(df, forecast, week, effectiveDate) {\n let baseKey = forecast\n if (forecast.includes('roll')) {\n baseKey = forecast.replace('_W4', '').replace('_W6', '')\n }\n const filtered = df.filter(\n row => (\n row.get('date') <= effectiveDate &&\n row.get(`${baseKey}_spot_price`)\n )\n ).tail(250)\n const spotPrices = filtered.toArray(baseKey + '_spot_price')\n const spots = []\n for (let i of [1, 2, 3, 4, 5]) {\n const s = filtered.toArray(baseKey + '_spot_s' + i).slice(-1)[0]\n if (s) {\n spots.push(s)\n }\n }\n let averageSpot = null\n if (spots.length > 0) {\n averageSpot = spots.reduce((a, b) => a+b, 0) / spots.length\n }\n const values = spotPrices.slice(-4)\n const forecasts = filtered.toArray(baseKey + '_prediction').slice(-4)\n const ll_50s = filtered.toArray(baseKey + '_ll_50').slice(-4)\n const ul_50s = filtered.toArray(baseKey + '_ul_50').slice(-4)\n const ll_70s = filtered.toArray(baseKey + '_ll_70').slice(-4)\n const ul_70s = filtered.toArray(baseKey + '_ul_70').slice(-4)\n return {\n min_value: Math.min(...spotPrices),\n max_value: Math.max(...spotPrices),\n value: values.slice(-1)[0],\n values: values.slice(0, 3),\n spots,\n averageSpot,\n forecast: forecasts.slice(-1)[0],\n forecasts: forecasts.slice(0, 3),\n ll_50: ll_50s.slice(-1)[0],\n ll_50s: ll_50s.slice(0, 3),\n ul_50: ul_50s.slice(-1)[0],\n ul_50s: ul_50s.slice(0, 3),\n ll_70: ll_70s.slice(-1)[0],\n ll_70s: ll_70s.slice(0, 3),\n ul_70: ul_70s.slice(-1)[0],\n ul_70s: ul_70s.slice(0, 3)\n }\n}\n\nexport const buildViterraD3FeaturesData = function(df, forecast, week, effectiveDate) {\n let baseKey = forecast\n if (forecast.includes('roll')) {\n baseKey = forecast.replace('_W4', '').replace('_W6', '')\n }\n const columns = df.listColumns()\n .filter(c => c.startsWith(baseKey))\n const categories = columns.map(c => c.slice(baseKey.length+1))\n return df\n .filter(row => row.get('date') <= effectiveDate)\n .select(...columns)\n .renameAll(categories)\n .tail(1)\n .toCollection()[0]\n}\n\nexport const buildViterraD3PerformanceData = function(df, forecast, week, effectiveDate) {\n let baseKey = forecast\n const record = df\n .filter(row => row.get('date') <= effectiveDate)\n .tail(1)\n .toCollection()[0]\n const relDA6M = record[`${baseKey}_da_roll_pct_125`]\n const relForecast6M = record[`${baseKey}_error_norm_roll_pct_125`]\n const relRange6M = record[`${baseKey}_target_inrange_roll_pct_125_50`]\n const relAccuracy6M = (\n relDA6M +\n relForecast6M +\n relRange6M\n ) / 3.0\n const relDA1Y = record[`${baseKey}_da_roll_pct_250`]\n const relForecast1Y = record[`${baseKey}_error_norm_roll_pct_250`]\n const relRange1Y = record[`${baseKey}_target_inrange_roll_pct_250_50`]\n const relAccuracy1Y = (\n relDA1Y +\n relForecast1Y +\n relRange1Y\n ) / 3.0\n const absDA6M = record[`${baseKey}_da_roll_125`]\n const absForecast6M = record[`${baseKey}_median_abs_pct_error_125`]\n const absRange6M = record[`${baseKey}_target_inrange_roll_125_50`]\n const absAccuracy6M = (\n absDA6M +\n absForecast6M +\n absRange6M\n ) / 3.0\n const absDA1Y = record[`${baseKey}_da_roll_250`]\n const absForecast1Y = record[`${baseKey}_median_abs_pct_error_250`]\n const absRange1Y = record[`${baseKey}_target_inrange_roll_250_50`]\n const absAccuracy1Y = (\n absDA1Y +\n absForecast1Y +\n absRange1Y\n ) / 3.0\n const out = {\n relative: {\n past_six_months: {\n accuracy: relAccuracy6M,\n directionalAccuracy: relDA6M,\n forecastAccuracy: relForecast6M,\n rangeAccuracy: relRange6M\n },\n past_year: {\n accuracy: relAccuracy1Y,\n directionalAccuracy: relDA1Y,\n forecastAccuracy: relForecast1Y,\n rangeAccuracy: relRange1Y\n }\n },\n absolute: {\n past_six_months: {\n accuracy: absAccuracy6M,\n directionalAccuracy: absDA6M,\n forecastAccuracy: absForecast6M,\n rangeAccuracy: absRange6M\n },\n past_year: {\n accuracy: absAccuracy1Y,\n directionalAccuracy: absDA1Y,\n forecastAccuracy: absForecast1Y,\n rangeAccuracy: absRange1Y\n }\n },\n }\n return out\n}\n","export const buildCommodities = function(data) {\n if (!data) return []\n if (data.type != 'commodities') return []\n if (!data.configuration.commodities) return []\n const displayNames = {\n capesize: 'Capesize',\n panamax: 'Panamax',\n iron_ore: 'Iron Ore'\n }\n const commodities = Object.keys(data.configuration.commodities).reduce(\n (acc, commodity) => acc.concat([{\n ...data.configuration.commodities[commodity],\n name: commodity,\n // TODO: this should belong to the config we get from the backend\n contracts: ['M1', 'M2', 'M3'],\n displayName: displayNames[commodity]\n }]),\n []\n )\n return commodities\n}\n","import DataFrame from 'dataframe-js'\n\n\nexport const buildPositionsData = function(rawData) {\n const { open_summary, realized_summary, open_trades, realized_trades } = rawData\n return {\n openSummary: new DataFrame(open_summary.rows, open_summary.columns),\n realizedSummary: new DataFrame(realized_summary.rows, realized_summary.columns),\n openTrades: new DataFrame(open_trades.rows, open_trades.columns),\n realizedTrades: new DataFrame(realized_trades.rows, realized_trades.columns)\n }\n}\n","import DataFrame from 'dataframe-js'\nimport * as Moment from 'moment'\nimport { extendMoment } from 'moment-range'\nimport { buildTenorsData, getTenorForDateAndMonth } from './tenors'\nimport {\n buildRecommendationsTableData,\n buildExitIndicationsTableData,\n buildM2MTableData,\n buildPortfolioTableData,\n buildAccountValuePlotData,\n buildClosePricesPlotData\n} from './equities'\nimport {\n buildRouteD3ForecastData,\n buildRouteD3FeaturesData,\n buildRouteD3PerformanceData,\n} from './routes'\nimport {\n viterraLabels,\n buildViterraD3ForecastData,\n buildViterraD3FeaturesData,\n buildViterraD3PerformanceData\n} from './viterra'\nexport * from './ais'\nexport * from './commodities'\nexport * from './equities'\nexport * from './positions'\nexport * from './tenors'\n\nconst moment = extendMoment(Moment)\n\nconst buildOpenTradesCardsData = function(dayData, commodities) {\n return commodities.reduce(\n (d, commodity) => ({\n ...d,\n [commodity]: {\n markToMarket: dayData[commodity + '_m2m'],\n partiallyRealized: dayData[commodity + '_partially_realized'],\n marginExposure: dayData[commodity + '_margin_exposure'],\n premiumExposure: dayData[commodity + '_premium_exposure'],\n delta: dayData[commodity + '_delta'],\n count: dayData[commodity + '_open_trades']\n }\n }),\n {\n portfolio: {\n valueAtRisk: dayData.value_at_risk,\n expectedShortfall: dayData.expected_shortfall,\n markToMarket: dayData.mark_to_market,\n partiallyRealized: dayData.partially_realized,\n marginExposure: dayData.margin_exposure,\n premiumExposure: dayData.premium_exposure,\n delta: dayData.delta,\n count: dayData.open_trades\n }\n }\n )\n}\n\nconst buildRealizedCardData = function(dayData, firstDate) {\n return ['ytd', 'tmr'].reduce(\n (d, key) => ({\n ...d,\n [key]: {\n cumulativeNetProfit: dayData[key + '_cum_net_profit'],\n profitLossRatio: dayData[key + '_profit_loss_ratio'],\n averageNetProfitPerTrade: dayData[key + '_avg_net_profit_per_trade'],\n averageTradeDuration: dayData[key + '_avg_trade_duration'],\n count: dayData[key + '_realized_trades'],\n averageVaR: dayData[key + '_avg_var'],\n maxVaR: dayData[key + '_max_var'],\n sharpeRatio: null,\n sortinoRatio: null\n }\n }),\n {\n overall: {\n title: moment(firstDate).format('MMM YY') + ' - Present',\n cumulativeNetProfit: dayData.cum_net_profit,\n profitLossRatio: dayData.profit_loss_ratio,\n averageNetProfitPerTrade: dayData.avg_net_profit_per_trade,\n averageTradeDuration: dayData.avg_trade_duration,\n count: dayData.realized_trades,\n averageVaR: dayData.avg_var,\n maxVaR: dayData.max_var,\n sharpeRatio: dayData.sharpe_ratio,\n sortinoRatio: dayData.sortino_ratio\n }\n }\n )\n}\n\nconst diffToClass = x => ({[(x[0] == '+' ? 'text-success' : 'text-danger')]: true})\n\nconst diff = function(key, day, previousDay) {\n const value = Number(day[key]) - Number(previousDay[key])\n return (value < 0 ? '' : '+') + String(value)\n}\n\nconst recommendationToClass = function(recommendation) {\n const cls = {'float-right': true}\n if (recommendation == 'B') {\n cls['text-success'] = true\n } else if (recommendation == 'S') {\n cls['text-danger'] = true\n }\n return cls\n}\n\nconst closestDate = (df, date) => {\n const allDates = df.toArray('date')\n if (!date) return allDates[allDates.length-1]\n return allDates.filter(d => d <= date).slice(-1)[0]\n}\n\nconst buildForecastGraphs = function(date, df, dayData, previousDayData, tenors, commodities) {\n const [mm3, mm2, mm1] = tenors.filter(row => row.get('end') < date).tail(3).toCollection()\n const [m0, m1, m2, m3] = tenors.filter(row => row.get('end') >= date).head(4).toCollection()\n\n return commodities.reduce((acc, commodity) => {\n const pastData = [mm3, mm2, mm1, m0].map(t => {\n const startDate = t.settlementStart\n const endDate = t.settlementDate > date ? date : t.settlementDate\n\n const slice = df.filter(row => row.get('date') >= startDate && row.get('date') <= endDate)\n const spotDates = slice.toArray('date')\n const spotKey = commodity + '_Spot_price'\n const spotPrices = slice.toArray(spotKey)\n const settlement = slice.stat.mean(spotKey)\n return {\n spotDates,\n spotPrices,\n settlements: Array(spotPrices.length).fill(settlement)\n }\n })\n\n const futureData = [m1, m2, m3].map((t, ix) => {\n const forecastKey = (contract, engine=1) => (\n commodity + '_forecast_engine_' + engine + '_M' + contract\n )\n const FFAPriceKey = contract => (\n commodity + '_FFA_price_M'+ contract\n )\n\n const dates = Array.from(\n moment.range(\n t.settlementStart,\n t.settlementDate\n ).by('day')\n ).map(x => x.format('YYYY-MM-DD'))\n\n const forecasts = Array(dates.length).fill(\n Math.round(dayData[forecastKey(ix+1)])\n )\n const previousForecasts = Array(dates.length).fill(\n Math.round(previousDayData[forecastKey(ix+1)])\n )\n const FFAPrices = Array(dates.length).fill(\n Math.round(dayData[FFAPriceKey(ix+1)])\n )\n const previousFFAPrices = Array(dates.length).fill(\n Math.round(previousDayData[FFAPriceKey(ix+1)])\n )\n const forecasts2E = Array(dates.length).fill(null)\n const previousForecasts2E = Array(dates.length).fill(null)\n const has2E = !!dayData[forecastKey(ix+1, 2)]\n if (has2E) {\n forecasts2E.fill(\n Math.round(dayData[forecastKey(ix+1, 2)])\n )\n previousForecasts2E.fill(\n Math.round(previousDayData[forecastKey(ix+1, 2)])\n )\n }\n return {\n dates,\n forecasts,\n previousForecasts,\n forecasts2E,\n previousForecasts2E,\n FFAPrices,\n previousFFAPrices\n }\n })\n const spotDates = [].concat(...pastData.map(x => x.spotDates))\n const forecastDates = [].concat(...futureData.map(x => x.dates))\n\n acc[commodity] = [\n {\n type: 'scatter',\n x: spotDates,\n y: [].concat(...pastData.map(x => x.spotPrices)),\n mode: 'lines',\n line: {color: 'rgba(243, 92, 16, 0.75)'},\n name: 'Spot Price',\n },\n {\n type: 'scatter',\n x: spotDates,\n y: [].concat(...pastData.map(x => x.settlements)),\n mode: 'lines',\n line: {color: 'rgba(243, 92, 16, 0.75)', dash: 'dot'},\n name: 'Settlement',\n },\n {\n type: 'scatter',\n x: forecastDates,\n y: [].concat(...futureData.map(x => x.forecasts)),\n mode: 'lines',\n line: {color: 'rgba(16, 54, 243, 0.5)'},\n name: \"Forecast\",\n },\n {\n type: 'scatter',\n x: forecastDates,\n y: [].concat(...futureData.map(x => x.previousForecasts)),\n mode: 'lines',\n line: {color: 'rgba(16, 54, 243, 0.5)', dash: 'dot'},\n name: \"Forecast (Previous)\",\n },\n {\n type: 'scatter',\n x: forecastDates,\n y: [].concat(...futureData.map(x => x.forecasts2E)),\n mode: 'lines',\n line: {color: 'rgba(16, 54, 243, 0.25)'},\n name: \"2nd Engine Forecast\",\n },\n {\n type: 'scatter',\n x: forecastDates,\n y: [].concat(...futureData.map(x => x.previousForecasts2E)),\n mode: 'lines',\n line: {color: 'rgba(16, 54, 243, 0.25)', dash: 'dot'},\n name: \"2nd Engine Forecast (Previous)\",\n },\n {\n type: 'scatter',\n x: forecastDates,\n y: [].concat(...futureData.map(x => x.FFAPrices)),\n mode: 'lines',\n line: {color: 'rgba(66, 248, 6, 0.8)'},\n name: \"FFA Price\",\n },\n {\n type: 'scatter',\n x: forecastDates,\n y: [].concat(...futureData.map(x => x.previousFFAPrices)),\n mode: 'lines',\n line: {color: 'rgba(66, 248, 6, 0.8)', dash: 'dot'},\n name: \"FFA Price (Previous)\",\n }\n ]\n return acc\n }, {})\n}\n\nconst buildContractsData = function(date, tenors, dayData, previousDayData, graphData, commodities) {\n const data = {}\n for (let i = 0; i < commodities.length; i++) {\n for (let contractMonth = 1; contractMonth <= 3; contractMonth++) {\n const commodity = commodities[i]\n const marketPriceKey = commodity + '_FFA_price_M' + contractMonth\n const marketPrice = dayData[marketPriceKey]\n const marketPriceDiff = diff(marketPriceKey, dayData, previousDayData)\n const marketPriceDiffClass = diffToClass(marketPriceDiff)\n const spotPriceKey = commodity + '_Spot_price'\n const spotPrice = dayData[spotPriceKey]\n const spotPriceDiff = diff(spotPriceKey, dayData, previousDayData)\n const spotPriceDiffClass = diffToClass(spotPriceDiff)\n const recommendation = dayData[commodity + '_Recommendation_M' + contractMonth]\n const blocked = dayData[commodity + '_Blocked_M' + contractMonth]\n const initialMargin = dayData[commodity + '_initial_margin_M' + contractMonth]\n const maintenanceMargin = dayData[commodity + '_maint_margin_M' + contractMonth]\n const gap = dayData[commodity + '_Gap_M' + contractMonth]\n const forecast = dayData[commodity + '_forecast_engine_1_M' + contractMonth]\n const callPut = recommendation == 'B' ? 'call' : 'put'\n const U1StrikePrice = dayData[commodity + '_U1_Strike_price_' + callPut + '_M' + contractMonth]\n const U2StrikePrice = dayData[commodity + '_U2_Strike_price_' + callPut + '_M' + contractMonth]\n const U3StrikePrice = dayData[commodity + '_U3_Strike_price_' + callPut + '_M' + contractMonth]\n const U1RawPremium = dayData[commodity + '_U1_Premium_M' + contractMonth]\n const U2RawPremium = dayData[commodity + '_U2_Premium_M' + contractMonth]\n const U3RawPremium = dayData[commodity + '_U3_Premium_M' + contractMonth]\n const U1Premium = Math.round(U1RawPremium / 30.0)\n const U2Premium = Math.round(U2RawPremium / 30.0)\n const U3Premium = Math.round(U3RawPremium / 30.0)\n const CV = dayData[commodity + '_CV_filter_M' + contractMonth]\n const impliedVolatility = dayData[commodity + '_Imp_Vol_M' + contractMonth]\n const makeGraph = (col, name) => ({\n type: 'scatter',\n x: graphData.toArray('date'),\n y: graphData.toArray(col),\n name\n })\n const marketPricesGraph = [\n makeGraph(commodity + '_FFA_price_M' + contractMonth, 'Market Price'),\n makeGraph(commodity + '_Spot_price', 'Spot Price')\n ]\n const CVGraph = [\n makeGraph(commodity + '_CV_filter_M' + contractMonth, 'CV Value')\n ]\n const makePayoffGraph = function(strikeLevel, premium, strikePrice, width=4000) {\n const x = []\n for (let i = marketPrice - width; i < marketPrice + width; i += 250) {\n x.push(i)\n }\n const compute = function(x) {\n let value = premium\n if ((x > strikePrice && recommendation == \"B\") ||\n (x < strikePrice && recommendation == \"S\")) {\n value = Math.abs(x - strikePrice) + premium\n }\n return value\n }\n const y = x.map(compute)\n const name = strikeLevel + ' Strike'\n return {type: 'scatter', x, y, name}\n }\n const payoffGraph = [\n makePayoffGraph(\"U1\", U1Premium, U1StrikePrice),\n makePayoffGraph(\"U2\", U2Premium, U2StrikePrice),\n makePayoffGraph(\"U3\", U3Premium, U3StrikePrice)\n ]\n let enginesData = []\n const engineNames = ['Main Engine', '2nd Engine', '3rd Engine']\n for (let i = 1; i <= 3; i++) {\n const rec = dayData[commodity + '_recommendation_engine_' + i + '_M' + contractMonth]\n const fcast = dayData[commodity + '_forecast_engine_' + i + '_M' + contractMonth]\n const ng_gap = dayData[commodity + '_gap_engine_' + i + '_M' + contractMonth]\n const recs = {\n B: 'Buy',\n S: 'Sell',\n N: 'Do Nothing'\n }\n if (rec) {\n enginesData.push({\n name: engineNames[i-1],\n recommendation: recs[rec],\n forecast: Math.round(fcast),\n gap: ng_gap && ng_gap.toFixed(2)\n })\n }\n }\n data[commodities[i] + '_M' + contractMonth] = {\n contract: 'M' + contractMonth,\n commodity: commodities[i],\n month: getTenorForDateAndMonth(tenors, date, contractMonth).month,\n date,\n recommendation,\n blocked,\n initialMargin,\n maintenanceMargin,\n gap,\n forecast,\n rawRecommendation: recommendation,\n recommendationClass: recommendationToClass(recommendation),\n marketPrice,\n marketPriceDiff,\n marketPriceDiffClass,\n spotPrice,\n spotPriceDiff,\n spotPriceDiffClass,\n U1StrikePrice,\n U2StrikePrice,\n U3StrikePrice,\n U1Premium,\n U2Premium,\n U3Premium,\n CV,\n impliedVolatility,\n payoffGraph,\n marketPricesGraph,\n CVGraph,\n enginesData\n }\n }\n }\n return data\n}\n\nexport const buildDailyData = function(date, data) {\n const columns = [\n 'index', 'date', ...data.dashboard.columns\n ]\n let dates = Object.keys(data.dashboard.dates).sort()\n const rows = data.dashboard.data.map((row, ix) => {\n return [ix, dates[ix], ...row]\n })\n let df = new DataFrame(rows, columns)\n if (data.type == 'routes') {\n // Work around broken data on baltic holidays\n const key = `${data.dashboard.config.routes[0].name}_W1_spot_price`\n df = df.filter(\n row => row.get(key)\n )\n dates = df.toArray('date')\n }\n if (data.type == 'equities') {\n // expand the columns\n df = df.withColumn(\n 'account_value',\n row => (\n data.configuration.parameters.start_capital +\n row.get('net_outcome') +\n row.get('m2m')\n )\n ).withColumn(\n 'available_capital',\n row => (\n data.configuration.parameters.start_capital +\n row.get('m2m')\n )\n ).withColumn(\n 'pct_avail_cap_used',\n row => (\n (row.get('available_capital') - row.get('balance')) /\n row.get('available_capital')\n )\n )\n }\n const effectiveDate = closestDate(df, date)\n const dayData = df.filter(row => row.get('date') == effectiveDate).toCollection()[0]\n const previousDayData = df.filter(row => row.get('index') == dayData.index-1).toCollection()[0]\n const firstDate = dates[0]\n\n const record = {\n date: effectiveDate,\n lastDate: dates[dates.length-1],\n dayData,\n previousDayData,\n forecasts: {}\n }\n if (data.type == 'routes') {\n const ftrColumns = [\n 'index', 'date', ...data.dashboard.features.columns\n ]\n const ftrDates = Object.keys(data.dashboard.features.dates).sort()\n const ftrRows = data.dashboard.features.data.map((row, ix) => {\n return [ix, ftrDates[ix], ...row]\n })\n const ftrDf = new DataFrame(ftrRows, ftrColumns).filter(row => row.get('date') <= effectiveDate)\n const routes = []\n for (const route of data.dashboard.config.routes) {\n const routeData = {\n 'name': route.name,\n }\n const weeks = []\n for (const week of route.weeks) {\n weeks.push({\n number: week,\n d3ForecastData: buildRouteD3ForecastData(\n df,\n route.name,\n week,\n effectiveDate\n ),\n d3FeaturesData: buildRouteD3FeaturesData(\n ftrDf,\n route.name,\n week,\n effectiveDate\n ),\n d3PerformanceData: buildRouteD3PerformanceData(\n df,\n route.name,\n week,\n effectiveDate\n ),\n })\n routeData['weeks'] = weeks\n }\n routes.push(routeData)\n }\n record['routes'] = routes\n } else if (data.type == 'viterra') {\n const ftrColumns = [\n 'index', 'date', ...data.dashboard.features.columns\n ]\n const ftrDates = Object.keys(data.dashboard.features.dates).sort()\n const ftrRows = data.dashboard.features.data.map((row, ix) => {\n return [ix, ftrDates[ix], ...row]\n })\n const ftrDf = new DataFrame(ftrRows, ftrColumns).filter(row => row.get('date') <= effectiveDate)\n const forecasts = {}\n for (const forecast of data.dashboard.config.forecasts) {\n const forecastData = {\n 'name': forecast.name,\n 'label': viterraLabels[forecast.name],\n 'week': forecast.week,\n 'd3ForecastData': buildViterraD3ForecastData(\n df,\n forecast.name,\n forecast.week,\n effectiveDate\n ),\n 'd3FeaturesData': buildViterraD3FeaturesData(\n ftrDf,\n forecast.name,\n forecast.week,\n effectiveDate\n ),\n 'd3PerformanceData': buildViterraD3PerformanceData(\n df,\n forecast.name,\n forecast.week,\n effectiveDate\n ),\n }\n forecasts[forecast.name] = forecastData\n }\n record['forecasts'] = forecasts\n } else if (data.type == 'commodities') {\n const graphData = df.filter(row => row.get('date') <= effectiveDate).tail(90)\n const commodities = Object.keys(data.configuration.commodities)\n const tenors = buildTenorsData(data.dashboard.tennors)\n record['tenor'] = tenors\n record['forecastGraphs'] = buildForecastGraphs(effectiveDate, df, dayData, previousDayData, tenors, commodities)\n record['openTradesCardsData'] = buildOpenTradesCardsData(dayData, commodities)\n record['realizedCardData'] = buildRealizedCardData(dayData, firstDate)\n record['contractsData'] = buildContractsData(effectiveDate, tenors, dayData, previousDayData, graphData, commodities)\n } else if (data.type == 'equities') {\n const dateIndex = data.dashboard.dates[effectiveDate]\n record['exitIndications'] = buildExitIndicationsTableData(\n data.dashboard.exit_indications[dateIndex]\n )\n record['recommendations'] = buildRecommendationsTableData(\n data.dashboard.recommendations[dateIndex]\n )\n record['portfolioTableData'] = buildPortfolioTableData(\n dayData, previousDayData\n )\n record['m2mTableData'] = buildM2MTableData(\n dayData, previousDayData\n )\n const filteredDf = df.filter(row => row.get('date') <= effectiveDate)\n record['accountValuePlotData'] = buildAccountValuePlotData(\n filteredDf\n )\n record['closePricesPlotData'] = buildClosePricesPlotData(\n filteredDf\n )\n }\n return record\n}\n","import 'mutationobserver-shim'\nimport Vue from 'vue'\nimport './plugins/bootstrap-vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\nimport VueSocketIO from 'vue-socket.io-extended'\nimport { io } from 'socket.io-client'\nimport store from './store'\nimport { sync } from 'vuex-router-sync'\nimport { domain, clientId, audience } from \"../auth_config.json\";\nimport { Auth0Plugin } from \"./auth\";\nimport './assets/tbi.css'\nimport VueMoment from 'vue-moment'\n\nVue.use(VueMoment);\n\n// Hold the router state in the store\nsync(store, router);\n\nVue.use(Auth0Plugin, {\n domain,\n clientId,\n audience,\n onRedirectCallback: appState => {\n router.push(\n appState && appState.targetUrl\n ? appState.targetUrl\n : window.location.pathname\n );\n }\n});\n\nconst connection = process.env.NODE_ENV === 'development' ? 'http://localhost:8000' : window.location.origin;\nconst socket = io(connection, {\n reconnection: true,\n reconnectionDelay: 500,\n maxReconnectionAttempts: Infinity,\n path: \"/socket.io\",\n query: {\n uuid: store.state.uuid\n }\n})\nconst debug = process.env.NODE_ENV === 'development';\nif (debug) {\n localStorage.debug = '*'\n}\n\nVue.use(VueSocketIO, socket, {\n store,\n actionPrefix: 'SOCKET_',\n eventToActionTransformer: (actionName) => actionName\n});\n\nVue.config.productionTip = false\n\nconst vue = new Vue({\n router,\n render: h => h(App),\n store,\n watch: {\n '$auth.isAuthenticated': async function(value) {\n if (value) {\n this.$store.dispatch('login');\n }\n }\n }\n}).$mount('#app')\nif (process.env.NODE_ENV == 'development') {\n window._vue = vue;\n}\n","import DataError from '@/components/Error.vue';\nimport Loading from '@/components/Loading.vue';\nimport NotAsked from '@/components/NotAsked.vue';\n\nexport const wrap = component => ({\n name: 'RemoteData',\n render: function(createElement) {\n return this.$store.state.daily_data.cata({\n 'NotAsked': () => createElement(NotAsked, [],),\n 'Loading': () => createElement(Loading, []),\n 'Error': e => createElement(DataError, {props: {error: e}}),\n 'Success': d => createElement(\n component,\n {\n props: {\n name: this.$store.state.route.params.name,\n slug: this.$store.state.route.params.slug,\n data: d,\n commodities: this.$store.state.commodities\n }\n }\n )\n })\n }\n})\n\nexport const wrapPositions = component => ({\n name: 'RemoteData',\n render: function(createElement) {\n return this.$store.state.positions_data.cata({\n 'NotAsked': () => createElement(NotAsked, [],),\n 'Loading': () => createElement(Loading, []),\n 'Error': e => createElement(DataError, {props: {error: e}}),\n 'Success': d => createElement(\n component,\n {\n props: {\n data: d\n }\n }\n )\n })\n }\n})\n\nexport const wrapOceanBoltAIS = component => ({\n name: 'RemoteData',\n render: function(createElement) {\n return this.$store.state.oceanbolt_ais_data.cata({\n 'NotAsked': () => createElement(NotAsked, [],),\n 'Loading': () => createElement(Loading, []),\n 'Error': e => createElement(DataError, {props: {error: e}}),\n 'Success': d => createElement(\n component,\n {\n props: {\n data: d\n }\n }\n )\n })\n }\n})\n"],"sourceRoot":""}