{"version":3,"file":"index.js","mappings":"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","sources":["webpack://OverlayAPI/webpack/universalModuleDefinition","webpack://OverlayAPI/webpack/bootstrap","webpack://OverlayAPI/webpack/runtime/define property getters","webpack://OverlayAPI/webpack/runtime/hasOwnProperty shorthand","webpack://OverlayAPI/./src/utils/logger.ts","webpack://OverlayAPI/./src/utils/getter.ts","webpack://OverlayAPI/./src/modules/injectExtendData.ts","webpack://OverlayAPI/./src/modules/isCEFSharp.ts","webpack://OverlayAPI/./src/utils/adder.ts","webpack://OverlayAPI/./src/modules/mergeCombatant.ts","webpack://OverlayAPI/./src/overlay.ts","webpack://OverlayAPI/./src/modules/jobClassConversion.ts","webpack://OverlayAPI/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"OverlayAPI\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"OverlayAPI\"] = factory();\n\telse\n\t\troot[\"OverlayAPI\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * console info logger\n */\nexport function logInfo(...args: unknown[]) {\n console.log('[ffxiv-overlay-api]', ...args);\n}\n\n/**\n * console error logger\n */\nexport function logError(...args: unknown[]) {\n console.error('[ffxiv-overlay-api]', ...args);\n}\n\n/**\n * console warn logger\n */\nexport function logWarn(...args: unknown[]) {\n console.warn('[ffxiv-overlay-api]', ...args);\n}\n","export function getInt(input: string | number) {\n const toInt = Number.parseInt || window.parseInt;\n return toInt(`${input}`) || 0;\n}\n\n/**\n * get number from pct string\n */\nexport function getPctNum(str: string) {\n const exp = /([0-9]+)%/gi.exec(str);\n if (exp && exp[1]) {\n return getInt(exp[1]) || 0;\n }\n return 0;\n}\n","import {\n JobType,\n CombatantData,\n EncounterData,\n LimitBreakData,\n EventData,\n ExtendData,\n} from '../types';\nimport { getPctNum, getInt } from '../utils/getter';\n\n/**\n * parse job type\n */\nfunction parseJob(jobName: string): { name: string; type: JobType } {\n jobName = jobName.toLowerCase();\n\n const dps = [\n // base\n 'acn',\n 'arc',\n 'lnc',\n 'pgl',\n 'rog',\n 'thm',\n // melee\n 'drg',\n 'mnk',\n 'nin',\n 'sam',\n 'rpr',\n // magical ranged\n 'smn',\n 'blm',\n 'rdm',\n // physical ranged\n 'brd',\n 'mch',\n 'dnc',\n // special\n 'blu',\n ];\n const healer = [\n // base\n 'cnj',\n // add\n 'whm',\n 'sch',\n 'ast',\n 'sge',\n ];\n const tank = [\n // base\n 'gla',\n 'mrd',\n // add\n 'pld',\n 'war',\n 'drk',\n 'gnb',\n ];\n\n const hand = ['crp', 'bsm', 'arm', 'gsm', 'lwr', 'wvr', 'alc', 'cul'];\n const land = ['bot', 'fsh', 'min'];\n\n if (dps.includes(jobName)) {\n return { name: jobName, type: 'dps' };\n } else if (healer.includes(jobName)) {\n return { name: jobName, type: 'healer' };\n } else if (tank.includes(jobName)) {\n return { name: jobName, type: 'tank' };\n } else if (hand.includes(jobName)) {\n return { name: jobName, type: 'hand' };\n } else if (land.includes(jobName)) {\n return { name: jobName, type: 'land' };\n } else {\n return { name: jobName || 'unknown', type: 'unknown' };\n }\n}\n\n/**\n * parse single player\n */\nfunction parsePlayer(data: any): CombatantData {\n let [maxHit, maxHitDamage] = ['', 0];\n const maxHitData = (data.maxhit || '').split('-');\n if (maxHitData.length > 1) {\n maxHit = maxHitData[0];\n maxHitDamage = getInt(maxHitData[1]);\n }\n let [maxHeal, maxHealDamage] = ['', 0];\n const maxHealData = (data.maxheal || '').split('-');\n if (maxHealData.length > 1) {\n maxHeal = maxHealData[0];\n maxHealDamage = getInt(maxHealData[1]);\n }\n\n const jobParsed = parseJob(data.Job || '');\n\n return {\n name: data.name,\n\n job: jobParsed.name,\n jobType: jobParsed.type,\n\n dps: getInt(data.encdps),\n last10DPS: getInt(data.Last10DPS),\n last30DPS: getInt(data.Last30DPS),\n last60DPS: getInt(data.Last60DPS),\n hps: getInt(data.enchps),\n\n swings: getInt(data.swings),\n hits: getInt(data.hits),\n deaths: getInt(data.deaths),\n\n directHits: getInt(data.DirectHitCount),\n directHitPct: data.DirectHitPct || '',\n critHits: getInt(data.crithits),\n critHitPct: data['crithit%'] || '',\n directCritHits: getInt(data.CritDirectHitCount),\n directCritHitPct: data.CritDirectHitPct || '',\n\n damage: getInt(data.damage),\n damageTaken: getInt(data.damagetaken),\n damagePct: data['damage%'] || '',\n\n healed: getInt(data.healed),\n healsTaken: getInt(data.healstaken),\n healsPct: data['healed%'] || '', // this includes shield pct\n overHeal: getInt(data.overHeal),\n overHealPct: data.OverHealPct || '',\n shield: getInt(data.damageShield),\n shieldPct: `${\n Math.round(\n (getInt(data.damageShield) / getInt(data.healed) || 0) *\n getPctNum(data['healed%'] || '')\n ) || 0\n }%`,\n\n maxHit,\n maxHitDamage,\n maxHeal,\n maxHealDamage,\n };\n}\n\n/**\n * parse encounter data\n */\nfunction parseEncounter(data: any): EncounterData {\n return {\n duration: data.duration || '',\n durationSeconds: getInt(data.DURATION),\n zoneName: data.CurrentZoneName || '',\n\n dps: getInt(data.encdps),\n last10DPS: getInt(data.Last10DPS),\n last30DPS: getInt(data.Last30DPS),\n last60DPS: getInt(data.Last60DPS),\n hps: getInt(data.enchps),\n\n damage: getInt(data.damage),\n healed: getInt(data.healed),\n shield: getInt(data.damageShield),\n };\n}\n\n/**\n * parse LB data\n */\nfunction parseLimitBreak(data: any): LimitBreakData {\n let maxHit = '';\n const maxHitData = (data.maxhit || '').split('-');\n if (maxHitData.length > 1) {\n maxHit = maxHitData[0];\n }\n let maxHeal = '';\n const maxHealData = (data.maxheal || '').split('-');\n if (maxHealData.length > 1) {\n maxHeal = maxHealData[0];\n }\n\n return {\n name: 'Limit Break',\n\n dps: getInt(data.encdps),\n hps: getInt(data.enchps),\n\n damage: getInt(data.damage),\n healed: getInt(data.healed),\n shield: getInt(data.damageShield),\n\n maxHit,\n maxHeal,\n };\n}\n\n/**\n * inject extended data\n */\nfunction injectExtendData(data: EventData): EventData {\n if (data.type === 'CombatData') {\n // common data\n const parsedData: ExtendData = {\n active: data.isActive === 'true' || data.isActive === true,\n encounter: parseEncounter(data.Encounter),\n combatant: [],\n };\n\n // combatant\n const combatantKeys = Object.keys(data.Combatant);\n const combatantValidKeys = combatantKeys.filter((key) =>\n Object.prototype.hasOwnProperty.call(data.Combatant, key)\n );\n combatantValidKeys.forEach((key) => {\n if (key === 'Limit Break') {\n parsedData.limitBreak = parseLimitBreak(data.Combatant[key]);\n } else {\n parsedData.combatant.push(parsePlayer(data.Combatant[key]));\n }\n });\n\n data.extendData = parsedData;\n }\n return data;\n}\n\nexport default injectExtendData;\n","function isCEFSharp() {\n return !!window.OverlayPluginApi;\n}\n\nexport default isCEFSharp;\n","import { getPctNum } from './getter';\n\nexport function addNumber(...args: number[]) {\n if (!args.length) {\n return 0;\n }\n let sum = 0;\n for (let i = 0; i < args.length; i++) {\n sum += args[i] || 0;\n }\n return sum;\n}\n\n/**\n * damagePct, healsPct, etc.\n */\nexport function addPct(...args: string[]) {\n if (!args.length) {\n return '0%';\n }\n let sum = 0;\n for (let i = 0; i < args.length; i++) {\n const num = getPctNum(args[i]);\n sum += num;\n }\n return `${sum}%`;\n}\n\nexport interface HitData {\n hits: number; // this type of hit number\n totalHits: number; // total number of hits\n}\n/**\n * directHitPct, critHitPct, etc.\n */\nexport function addHitPct(...args: HitData[]) {\n if (!args.length) {\n return { hits: 0, hitPct: '0%' };\n }\n let numerator = 0;\n let denominator = 0;\n for (let i = 0; i < args.length; i++) {\n numerator += args[i].hits || 0;\n denominator += args[i].totalHits || 0;\n }\n if (denominator === 0 || numerator === 0) {\n return { hits: 0, hitPct: '0%' };\n }\n return {\n hits: numerator,\n hitPct: `${Math.round((numerator / denominator) * 100)}%`,\n };\n}\n\nexport function addOverHealPct(...args: string[]) {\n if (!args.length) {\n return '0%';\n }\n let tsum = 0;\n let tnum = 0;\n for (let i = 0; i < args.length; i++) {\n const num = getPctNum(args[i]);\n if (num > 0) {\n tsum += num;\n tnum++;\n }\n }\n if (tnum === 0) {\n return '0%';\n }\n return `${Math.round(tsum / tnum)}%`;\n}\n\nexport interface MaxHitData {\n hit: string;\n hitDamage: number;\n}\n/**\n * maxHit, maxHeal, etc.\n */\nexport function addMax(...args: MaxHitData[]): MaxHitData {\n if (!args.length) {\n return { hit: '', hitDamage: 0 };\n }\n let max = { hit: '', hitDamage: 0 };\n for (let i = 0; i < args.length; i++) {\n if (args[i].hitDamage > max.hitDamage) {\n max = args[i];\n }\n }\n return max;\n}\n","import {\n addNumber,\n addPct,\n addMax,\n addHitPct,\n addOverHealPct,\n HitData,\n MaxHitData,\n} from '../utils/adder';\nimport { CombatantData } from '../types';\n\nfunction mergeCombatant(...args: CombatantData[]) {\n if (!args.length) {\n return null;\n }\n\n const dps: number[] = [];\n const last10DPS: number[] = [];\n const last30DPS: number[] = [];\n const last60DPS: number[] = [];\n const hps: number[] = [];\n\n const swings: number[] = [];\n const hits: number[] = [];\n const deaths: number[] = [];\n\n const direct: HitData[] = [];\n const crit: HitData[] = [];\n const directCrit: HitData[] = [];\n\n const damage: number[] = [];\n const damageTaken: number[] = [];\n const damagePct: string[] = [];\n\n const healed: number[] = [];\n const healsTaken: number[] = [];\n const healsPct: string[] = [];\n const overHeal: number[] = [];\n const overHealPct: string[] = [];\n\n const maxHit: MaxHitData[] = [];\n const maxHeal: MaxHitData[] = [];\n\n args.forEach((item) => {\n dps.push(item.dps);\n last10DPS.push(item.last10DPS);\n last30DPS.push(item.last30DPS);\n last60DPS.push(item.last60DPS);\n hps.push(item.hps);\n\n swings.push(item.swings);\n hits.push(item.hits);\n deaths.push(item.deaths);\n\n direct.push({ hits: item.directHits, totalHits: item.hits });\n crit.push({ hits: item.critHits, totalHits: item.hits });\n directCrit.push({ hits: item.directCritHits, totalHits: item.hits });\n\n damage.push(item.damage);\n damageTaken.push(item.damageTaken);\n damagePct.push(item.damagePct);\n\n healed.push(item.healed);\n healsTaken.push(item.healsTaken);\n healsPct.push(item.healsPct);\n overHeal.push(item.overHeal);\n overHealPct.push(item.overHealPct);\n\n maxHit.push({ hit: item.maxHit, hitDamage: item.maxHitDamage });\n maxHeal.push({ hit: item.maxHeal, hitDamage: item.maxHealDamage });\n });\n\n const ret: CombatantData = {\n name: args[0].name,\n\n job: args[0].job,\n jobType: args[0].jobType,\n\n dps: addNumber(...dps),\n last10DPS: addNumber(...last10DPS),\n last30DPS: addNumber(...last30DPS),\n last60DPS: addNumber(...last60DPS),\n hps: addNumber(...hps),\n\n swings: addNumber(...swings),\n hits: addNumber(...hits),\n deaths: addNumber(...deaths),\n\n damage: addNumber(...damage),\n damageTaken: addNumber(...damageTaken),\n damagePct: addPct(...damagePct),\n\n healed: addNumber(...healed),\n healsTaken: addNumber(...healsTaken),\n healsPct: addPct(...healsPct),\n overHeal: addNumber(...overHeal),\n overHealPct: addOverHealPct(...overHealPct),\n } as CombatantData;\n\n let hitTemp = addHitPct(...direct);\n ret.directHits = hitTemp.hits;\n ret.directHitPct = hitTemp.hitPct;\n hitTemp = addHitPct(...crit);\n ret.critHits = hitTemp.hits;\n ret.critHitPct = hitTemp.hitPct;\n hitTemp = addHitPct(...directCrit);\n ret.directCritHits = hitTemp.hits;\n ret.directCritHitPct = hitTemp.hitPct;\n\n let maxHitTemp = addMax(...maxHit);\n ret.maxHit = maxHitTemp.hit;\n ret.maxHitDamage = maxHitTemp.hitDamage;\n maxHitTemp = addMax(...maxHeal);\n ret.maxHeal = maxHitTemp.hit;\n ret.maxHealDamage = maxHitTemp.hitDamage;\n\n return ret;\n}\n\nexport default mergeCombatant;\n","import { logInfo, logError, logWarn } from './utils/logger';\nimport injectExtendData from './modules/injectExtendData';\nimport isCEFSharp from './modules/isCEFSharp';\nimport mergeCombatant from './modules/mergeCombatant';\nimport { EventType, EventData, EventCallback } from './types';\n\n// messages callbacks in callback mode\ntype MsgCallback = (msg: any) => void;\n\n// messages send with `_sendMessage`\ninterface MsgPacket {\n msg: any;\n cb?: MsgCallback;\n}\n\ntype EventCenterItem = {\n started: boolean;\n listeners: EventCallback[];\n};\n\ntype EventCenter = {\n CombatData: EventCenterItem;\n LogLine: EventCenterItem;\n ImportedLogLines: EventCenterItem;\n ChangeZone: EventCenterItem;\n ChangePrimaryPlayer: EventCenterItem;\n OnlineStatusChanged: EventCenterItem;\n PartyChanged: EventCenterItem;\n BroadcastMessage: EventCenterItem;\n};\n\n// `common.js` L44\ninterface ResponsePromises {\n [rseq: number]: (...args: any[]) => void; // `resolve()` functions from Promise\n}\n\nclass OverlayAPI {\n // singleton\n static _instance: OverlayAPI | null = null;\n // function for merging combatant like pets into first player arg\n static mergeCombatant = mergeCombatant;\n // check if in overlay plugin emblemed cef\n static isCEFSharp = isCEFSharp;\n\n // plugin init status\n private _status = false;\n\n // event subscribers\n private _eventCenter: EventCenter = {\n CombatData: { started: false, listeners: [] },\n LogLine: { started: false, listeners: [] },\n ImportedLogLines: { started: false, listeners: [] },\n ChangeZone: { started: false, listeners: [] },\n ChangePrimaryPlayer: { started: false, listeners: [] },\n OnlineStatusChanged: { started: false, listeners: [] },\n PartyChanged: { started: false, listeners: [] },\n BroadcastMessage: { started: false, listeners: [] },\n };\n // waiting queue before api init\n private _queue: MsgPacket[] = [];\n\n // websocket mode related things\n private _wsURL =\n Array.from(\n /[?&]OVERLAY_WS=([^&]+)/.exec(window.location.href) ||\n /[?&]HOST_PORT=([^&]+)/.exec(window.location.href) ||\n []\n )[1] || '';\n private _ws: WebSocket | null = null;\n private _rseqCounter = 0;\n private _responsePromises: ResponsePromises = {};\n\n /**\n * init API\n */\n constructor() {\n // singleton\n if (OverlayAPI._instance) {\n logWarn(`class OverlayAPI should only have one instance`);\n return OverlayAPI._instance;\n }\n\n // check mode\n if (this._wsURL) {\n logInfo('initializing api in websocket mode...');\n this._initWS();\n } else {\n logInfo('initializing api in callback mode...');\n this._initCB();\n }\n // `common.js` _L97 binding\n window.dispatchOverlayEvent = this._triggerEvents.bind(this);\n\n // singleton\n if (!OverlayAPI._instance) {\n OverlayAPI._instance = this;\n }\n }\n\n /**\n * `common.js` L90\n * event trigger function, need `this` binding\n */\n private _triggerEvents(data: EventData) {\n // if this event type has subscribers\n if (this._eventCenter[data.type]) {\n // trigger all this event's callback\n for (const cb of this._eventCenter[data.type].listeners) {\n cb(injectExtendData(data));\n }\n }\n }\n\n /**\n * `common.js` L12 & L65\n * send message in callback mode & websocket mode\n */\n private _sendMessage(msg: any, cb?: MsgCallback) {\n if (this._wsURL) {\n if (this._status) {\n try {\n (this._ws as WebSocket).send(JSON.stringify(msg));\n } catch (e) {\n logError(e, msg);\n return;\n }\n } else {\n this._queue.push({ msg });\n }\n } else {\n if (this._status) {\n try {\n window.OverlayPluginApi.callHandler(JSON.stringify(msg), cb);\n } catch (e) {\n logError(e, msg);\n return;\n }\n } else {\n this._queue.push({ msg, cb });\n }\n }\n }\n\n /**\n * `common.js` L19\n * init api in websocket mode\n */\n private _initWS() {\n // legacy ws url support\n let url = this._wsURL;\n if (!url.includes('/ws')) {\n url += (url.endsWith('/') ? '' : '/') + 'ws';\n }\n // check & init or reinit websocket\n const _doInit = () => {\n this._ws = new WebSocket(url);\n // log error & retry after 1s\n this._ws.addEventListener('error', () => {\n try {\n this._ws && this._ws.close();\n // eslint-disable-next-line no-empty\n } catch {}\n setTimeout(() => {\n _doInit();\n }, 1000);\n });\n // successfully connected WebSocket\n this._ws.addEventListener('open', () => {\n this._status = true;\n // send all messages in queue to OverlayPlugin\n for (const { msg } of this._queue) {\n this._sendMessage(msg);\n }\n logInfo('websocket mode api ready');\n });\n // on message loaded from WebSocket\n this._ws.addEventListener('message', (msg) => {\n let data: EventData;\n try {\n data = JSON.parse(msg.data) as EventData;\n } catch (e) {\n logError(e, msg);\n return;\n }\n // `common.js` L44\n if (data.rseq !== undefined && this._responsePromises[data.rseq]) {\n this._responsePromises[data.rseq](data);\n delete this._responsePromises[data.rseq];\n } else {\n this._triggerEvents(data);\n }\n });\n };\n _doInit();\n }\n\n /**\n * `common.js` L72\n * init api in callback mode\n */\n private _initCB() {\n // if CEF environment not ready retry after 1s\n if (!window.OverlayPluginApi || !window.OverlayPluginApi.ready) {\n setTimeout(() => {\n this._initCB();\n }, 1000);\n return;\n }\n // mark api loaded\n this._status = true;\n // bind `this` for callback function called by OverlayAPI\n // `common.js` L81 binding\n window.__OverlayCallback = this._triggerEvents.bind(this);\n // send all messages in queue to OverlayPlugin\n for (const { msg, cb } of this._queue) {\n this._sendMessage(msg, cb);\n }\n logInfo('callback mode api ready');\n }\n\n /**\n * add an event listener\n */\n addListener(event: EventType, cb: EventCallback) {\n if (this._eventCenter[event].started) {\n logWarn(\n `listener for \\`${event}\\` added after event transmission already started`\n );\n logWarn(`some events might have been missed`);\n logWarn(`please register your listeners before calling \\`startEvent()\\``);\n }\n // push events\n if (typeof cb === 'function') {\n this._eventCenter[event].listeners.push(cb);\n logInfo(`listener for \\`${event}\\` added`);\n }\n }\n\n /**\n * remove a listener\n */\n removeListener(event: EventType, cb: EventCallback) {\n if (typeof cb === 'function') {\n const cbPos = this._eventCenter[event].listeners.indexOf(cb);\n if (cbPos > -1) {\n this._eventCenter[event].listeners.splice(cbPos, 1);\n logInfo(`listener for \\`${event}\\` removed`);\n } else {\n logWarn(`listener for \\`${event}\\` not found`);\n }\n }\n }\n\n /**\n * remove all listener of one event type\n */\n removeAllListener(event: EventType) {\n this._eventCenter[event].listeners = [];\n logInfo(`all listener for \\`${event}\\` removed`);\n }\n\n /**\n * get all listeners of a event\n */\n getAllListener(event: EventType) {\n return this._eventCenter[event].listeners;\n }\n\n /**\n * start listening event\n */\n startEvent() {\n const eventTypesWithListeners = (\n Object.keys(this._eventCenter) as Array\n ).filter((eventType) => {\n return this._eventCenter[eventType].listeners.length > 0;\n });\n this._sendMessage({\n call: 'subscribe',\n events: eventTypesWithListeners,\n });\n logInfo(\n `${eventTypesWithListeners.length} types of event transmission started`\n );\n }\n\n /**\n * ends current encounter and save it, not working in websocket mode\n */\n async endEncounter() {\n if (this._status && isCEFSharp()) {\n await window.OverlayPluginApi.endEncounter();\n logInfo('encounter ended');\n }\n }\n\n /**\n * `common.js` L122\n * this function allows you to call an overlay handler,\n * these handlers are declared by Event Sources,\n * either built into OverlayPlugin or loaded through addons like Cactbot\n */\n callHandler(msg: any) {\n let p: Promise;\n if (this._wsURL) {\n const rseq = this._rseqCounter++;\n msg.rseq = rseq;\n p = new Promise((resolve) => {\n this._responsePromises[rseq] = resolve;\n });\n this._sendMessage(msg);\n } else {\n p = new Promise((resolve) => {\n this._sendMessage(msg, (data) => {\n resolve(data == null ? null : JSON.parse(data));\n });\n });\n }\n return p;\n }\n\n /**\n * simulate triggering event once\n */\n simulateData(data: EventData) {\n this._triggerEvents(data);\n }\n}\n\nexport default OverlayAPI;\n","interface ConversionMap {\n [key: string]: string;\n}\n\nconst classJobMap: ConversionMap = {\n // dps\n acn: 'smn',\n arc: 'brd',\n lnc: 'drg',\n pgl: 'mnk',\n rog: 'nin',\n thm: 'blm',\n // healer\n cnj: 'whm',\n // tank\n gla: 'pld',\n mrd: 'war',\n};\n\nconst jobClassMap: ConversionMap = {};\nObject.keys(classJobMap).forEach((key) => {\n jobClassMap[classJobMap[key]] = key;\n});\n\nexport function class2job(baseClass: string) {\n return classJobMap[baseClass] || baseClass;\n}\n\nexport function job2class(job: string) {\n return jobClassMap[job] || job;\n}\n","/*! ffxiv-overlay-plugin | DSRKafuU (https://dsrkafuu.net) | Copyright (c) MIT License */\n\n/* source `common.js` 4a00a65 */\n/* https://github.com/ngld/OverlayPlugin/commits/master/docs/assets/shared/common.js */\n\nimport OverlayAPI from './overlay';\n\nexport { OverlayAPI };\nexport default OverlayAPI;\n\nexport { default as isCEFSharp } from './modules/isCEFSharp';\nexport { class2job, job2class } from './modules/jobClassConversion';\nexport { default as mergeCombatant } from './modules/mergeCombatant';\n\nexport type {\n JobType,\n EncounterData,\n LimitBreakData,\n CombatantData,\n ExtendData,\n EventType,\n EventData,\n EventCallback,\n} from './types';\n"],"names":[],"sourceRoot":""}