{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack:///./src/helper/map.js","webpack:///./src/helper/noop.js","webpack:///./src/helper/logger.js","webpack:///./src/index.js","webpack:///./src/helper/node-list-to-array.js","webpack:///./src/handle-events.js","webpack:///./src/helper/send-beacon.js","webpack:///./src/helper/notify-error.js","webpack:///./node_modules/debug/src/browser.js","webpack:///./node_modules/debug/src/common.js","webpack:///./node_modules/ms/index.js","webpack:///./src/create-viewable-instance.js","webpack:///./src/helper/uuid.js"],"names":["module","exports","e","__esModule","idx","len","functor","length","result","Array","fn","join","log","adEvents","JSON","parse","adElement","getAttribute","removeAttribute","currentEventId","setAttribute","logFn","fnSendRenderedEvent","fnSendViewableEvent","fnSendClickEvent","tagName","attrName","document","querySelectorAll","findAdElements","i","ATTR_NAME","ATTR_UUID","boot","applyEventHandlerToElement","isEventListenerInstalled","window","addEventListener","removeEventListener","array","prototype","slice","call","nodes","push","events","noop","eventName","Promise","all","type","v","url","then","beacon","src","notifyError","targetElement","getClientRects","handleEvents","viewableInstanceFactory","_viewableInstance","start","Image","onerror","reject","sendBeacon","defaultReject","onload","resolve","defaultResolve","Error","Symbol","iterator","obj","constructor","_typeof","_console","console","apply","arguments","formatArgs","args","this","useColors","namespace","humanize","diff","c","color","splice","index","lastC","replace","match","save","storage","setItem","removeItem","load","r","getItem","process","env","DEBUG","__nwjs","navigator","userAgent","toLowerCase","documentElement","style","WebkitAppearance","firebug","exception","table","parseInt","RegExp","$1","localStorage","colors","require","formatters","j","stringify","error","message","hash","charCodeAt","createDebug","Math","abs","debug","enabled","_len","_key","self","curr","Date","ms","prevTime","prev","coerce","unshift","formatter","val","selectColor","destroy","extend","init","instances","indexOf","default","stack","disable","enable","names","skips","split","namespaces","substr","instance","name","test","Object","keys","forEach","exec","n","parseFloat","msAbs","plural","round","s","m","h","d","w","y","options","isFinite","long","fmtLong","fmtShort","measure","_ref$VIEWABLE_CONTINU","VIEWABLE_CONTINUOUS_TIME","_ref$VIEWABLE_THRESHO","VIEWABLE_THRESHOLD","onLoadCallback","canUseIntersectionObserver","viewableInstance","_instance","isFiredViewableEvent","visibleTimeout","_visibleTimerCallback","_processChanges","observer","takeRecords","element","isVisible","_releaseTimer","_releaseInstance","clearTimeout","unobserve","disconnect","changes","changeRecord","target","_isViewable","icr","width","height","bcr","boundingClientRect","intersectionRect","setTimeout","IntersectionObserver","threshold","trackVisibility","delay","observe","percentOfPixels","minimumAmountOfTime","successCallback","dt","getTime","random","toString"],"mappings":"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","file":"ka-middle-ad-event-handler.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) { if(!__webpack_require__.o(exports, name)) exports[name] = getter };\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) { exports.__esModule = true }\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = {};\n \t\t__webpack_require__.r(ns);\n \t\tns['default'] = value;\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) (function (key) { __webpack_require__.d(ns, key, function() { return value[key]; }) }(key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export default function map (fn, functor) {\n var idx = 0\n var len = functor.length\n var result = Array(len)\n while (idx < len) {\n result[idx] = fn(functor[idx])\n idx += 1\n }\n return result\n}\n","export default function noop () {\n /* do nothing */\n}\n","/* global __PACKAGE__, __VERSION__, __ENVIRONMENT__ */\nimport debug from 'debug'\n\nexport default function logger (moduleName) {\n const packagePrefix = [__PACKAGE__, `${__VERSION__}-${__ENVIRONMENT__}`].join('@')\n return debug([packagePrefix, moduleName].join(':'))\n}\n","/* global __NAMESPACE__ */\nimport map from './helper/map'\nimport nodeListToArray from './helper/node-list-to-array'\nimport { fnSendClickEvent, fnSendRenderedEvent, fnSendViewableEvent } from './handle-events'\nimport logger from './helper/logger'\nimport uuid from './helper/uuid'\n\nconst ATTR_NAME = 'data-ad-events'\nconst ATTR_UUID = 'data-ad-uuid'\n\nconst log = logger('global')\n\nfunction applyEventHandlerToElement (adElement) {\n log('applyEventHandlerToElement: start')\n try {\n const adEvents = JSON.parse(adElement.getAttribute(ATTR_NAME))\n adElement.removeAttribute(ATTR_NAME)\n\n const currentEventId = uuid()\n adElement.setAttribute(ATTR_UUID, currentEventId)\n\n const logFn = logger(adElement.getAttribute(ATTR_UUID))\n\n fnSendRenderedEvent(adElement, adEvents, logFn)\n fnSendViewableEvent(adElement, adEvents, logFn)\n fnSendClickEvent(adElement, adEvents, logFn)\n } catch (ignore) {\n }\n log('applyEventHandlerToElement: end')\n}\n\nfunction findAdElements (tagName = 'li', attrName = ATTR_NAME) {\n return nodeListToArray(document.querySelectorAll(tagName + '[' + attrName + ']'))\n}\n\nfunction boot () {\n log('boot: start')\n map(applyEventHandlerToElement, findAdElements())\n log('boot: end')\n}\n\nboot.findAdElements = findAdElements\nboot.applyEventHandlerToElement = applyEventHandlerToElement\n\nfunction installEventListener () {\n// Global Event Listener 설치\n if (!boot.isEventListenerInstalled) {\n log('install onload event listener')\n boot.isEventListenerInstalled = true\n window.addEventListener('load', function _bootstrap () {\n log('fired onload event listener')\n window.removeEventListener('load', _bootstrap)\n boot()\n })\n }\n}\n\nfunction installApiEndpoint () {\n window[__NAMESPACE__] = window[__NAMESPACE__] || boot\n}\n\ninstallEventListener()\ninstallApiEndpoint()\n","export default function nodeListToArray (nodes) {\n var array = null\n try {\n array = Array.prototype.slice.call(nodes, 0) // non-IE and IE9+\n } catch (ex) {\n array = []\n for (var i = 0, len = nodes.length; i < len; i += 1) {\n array.push(nodes[i])\n }\n }\n return array\n}\n","import noop from './helper/noop'\nimport map from './helper/map'\nimport sendBeacon from './helper/send-beacon'\nimport notifyError from './helper/notify-error'\nimport createViewableInstance from './create-viewable-instance'\n\nfunction handleEvents (eventName) {\n return function (events, logFn) {\n events = events || []\n logFn = logFn || noop\n logFn(eventName + ': filtering beacon from Events')\n\n return Promise.all(\n map(function (e) {\n if (e.type === eventName) {\n logFn(`${eventName}: getting urls from them`)\n\n var v = e.url\n\n logFn(eventName + ': sending beacon to ' + v)\n\n return sendBeacon(v)\n .then(function (beacon) {\n logFn(eventName + ': beacon ' + beacon.src + ' is just sent')\n })\n .catch(notifyError)\n }\n }, events)\n )\n }\n}\n\nfunction addRenderEventListener (fn) {\n return function (targetElement, adEvents, logFn) {\n if (targetElement.getClientRects().length > 0) {\n fn(adEvents, logFn)\n }\n }\n}\n\nfunction addViewableEventListener (fn) {\n return function (targetElement, adEvents, logFn) {\n var viewableInstanceFactory = createViewableInstance(targetElement)\n\n targetElement._viewableInstance = viewableInstanceFactory(function (containerNode) {\n fn(adEvents, logFn)\n })\n\n targetElement._viewableInstance.start()\n }\n}\n\nfunction addClickEventListener (fn) {\n return function (targetElement, adEvents, logFn) {\n targetElement && targetElement.addEventListener('click', function () {\n fn(adEvents, logFn)\n }, true)\n }\n}\n\nconst fnSendRenderedEvent = addRenderEventListener(handleEvents('rendered'))\nconst fnSendViewableEvent = addViewableEventListener(handleEvents('viewable'))\nconst fnSendClickEvent = addClickEventListener(handleEvents('click'))\n\nexport {\n fnSendRenderedEvent,\n fnSendViewableEvent,\n fnSendClickEvent\n}\n","/* global Image */\n\nfunction sendBeacon (url) {\n return new Promise((resolve, reject) => {\n var beacon = new Image()\n\n beacon.onerror = (ignore) => reject(sendBeacon.defaultReject(url))\n beacon.onload = (ignore) => resolve(sendBeacon.defaultResolve(url))\n\n beacon.src = url\n })\n}\n\nsendBeacon.defaultResolve = (url) => ({ src: url })\n\nsendBeacon.defaultReject = (url) => new Error('Beacon cannot sent', { url })\n\nexport default sendBeacon\n","import logger from './logger'\n\nconst logFn = logger('notify-error')\n\nexport default function notifyError (err) {\n logFn('----- ERROR LOG START -----')\n logFn(err)\n logFn('----- ERROR LOG END -----')\n}\n","\"use strict\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n// eslint-disable-next-line complexity\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n return true;\n } // Internet Explorer and Edge do not support colors.\n\n\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n } // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\n\nfunction formatArgs(args) {\n args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\n if (!this.useColors) {\n return;\n }\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit'); // The final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if (match === '%%') {\n return;\n }\n\n index++;\n\n if (match === '%c') {\n // We only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\n\nfunction log() {\n var _console;\n\n // This hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\n\nfunction save(namespaces) {\n try {\n if (namespaces) {\n exports.storage.setItem('debug', namespaces);\n } else {\n exports.storage.removeItem('debug');\n }\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\n\nfunction load() {\n var r;\n\n try {\n r = exports.storage.getItem('debug');\n } catch (error) {} // Swallow\n // XXX (@Qix-) should we be logging these?\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\n\nfunction localstorage() {\n try {\n // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n // The Browser also has localStorage in the global context.\n return localStorage;\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n\nmodule.exports = require('./common')(exports);\nvar formatters = module.exports.formatters;\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n try {\n return JSON.stringify(v);\n } catch (error) {\n return '[UnexpectedJSONParseError]: ' + error.message;\n }\n};\n\n","\"use strict\";\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\nfunction setup(env) {\n createDebug.debug = createDebug;\n createDebug.default = createDebug;\n createDebug.coerce = coerce;\n createDebug.disable = disable;\n createDebug.enable = enable;\n createDebug.enabled = enabled;\n createDebug.humanize = require('ms');\n Object.keys(env).forEach(function (key) {\n createDebug[key] = env[key];\n });\n /**\n * Active `debug` instances.\n */\n\n createDebug.instances = [];\n /**\n * The currently active debug mode names, and names to skip.\n */\n\n createDebug.names = [];\n createDebug.skips = [];\n /**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\n createDebug.formatters = {};\n /**\n * Selects a color for a debug namespace\n * @param {String} namespace The namespace string for the for the debug instance to be colored\n * @return {Number|String} An ANSI color code for the given namespace\n * @api private\n */\n\n function selectColor(namespace) {\n var hash = 0;\n\n for (var i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n }\n\n createDebug.selectColor = selectColor;\n /**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\n function createDebug(namespace) {\n var prevTime;\n\n function debug() {\n // Disabled?\n if (!debug.enabled) {\n return;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var self = debug; // Set `diff` timestamp\n\n var curr = Number(new Date());\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n args[0] = createDebug.coerce(args[0]);\n\n if (typeof args[0] !== 'string') {\n // Anything else let's inspect with %O\n args.unshift('%O');\n } // Apply any `formatters` transformations\n\n\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n // If we encounter an escaped % then don't increase the array index\n if (match === '%%') {\n return match;\n }\n\n index++;\n var formatter = createDebug.formatters[format];\n\n if (typeof formatter === 'function') {\n var val = args[index];\n match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`\n\n args.splice(index, 1);\n index--;\n }\n\n return match;\n }); // Apply env-specific formatting (colors, etc.)\n\n createDebug.formatArgs.call(self, args);\n var logFn = self.log || createDebug.log;\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = createDebug.enabled(namespace);\n debug.useColors = createDebug.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n debug.extend = extend; // Debug.formatArgs = formatArgs;\n // debug.rawLog = rawLog;\n // env-specific initialization logic for debug instances\n\n if (typeof createDebug.init === 'function') {\n createDebug.init(debug);\n }\n\n createDebug.instances.push(debug);\n return debug;\n }\n\n function destroy() {\n var index = createDebug.instances.indexOf(this);\n\n if (index !== -1) {\n createDebug.instances.splice(index, 1);\n return true;\n }\n\n return false;\n }\n\n function extend(namespace, delimiter) {\n return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n }\n /**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\n\n function enable(namespaces) {\n createDebug.save(namespaces);\n createDebug.names = [];\n createDebug.skips = [];\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue;\n }\n\n namespaces = split[i].replace(/\\*/g, '.*?');\n\n if (namespaces[0] === '-') {\n createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n createDebug.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < createDebug.instances.length; i++) {\n var instance = createDebug.instances[i];\n instance.enabled = createDebug.enabled(instance.namespace);\n }\n }\n /**\n * Disable debug output.\n *\n * @api public\n */\n\n\n function disable() {\n createDebug.enable('');\n }\n /**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\n\n function enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n\n var i;\n var len;\n\n for (i = 0, len = createDebug.skips.length; i < len; i++) {\n if (createDebug.skips[i].test(name)) {\n return false;\n }\n }\n\n for (i = 0, len = createDebug.names.length; i < len; i++) {\n if (createDebug.names[i].test(name)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\n\n function coerce(val) {\n if (val instanceof Error) {\n return val.stack || val.message;\n }\n\n return val;\n }\n\n createDebug.enable(createDebug.load());\n return createDebug;\n}\n\nmodule.exports = setup;\n\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","import noop from './helper/noop'\n\nexport default function createViewableInstance (element, {\n VIEWABLE_CONTINUOUS_TIME = 1000,\n VIEWABLE_THRESHOLD = 50\n} = {}) {\n return function (onLoadCallback) {\n onLoadCallback = onLoadCallback || noop\n\n const canUseIntersectionObserver =\n 'IntersectionObserver' in window &&\n 'IntersectionObserverEntry' in window\n\n const threshold = VIEWABLE_THRESHOLD / 100\n const viewableInstance = {\n _instance: null\n }\n\n if (canUseIntersectionObserver) {\n let isFiredViewableEvent = false\n let visibleTimeout = null\n\n const _isViewable = (bcr, icr) => ((icr.width * icr.height) / (bcr.width * bcr.height) >= threshold)\n\n const _visibleTimerCallback = function (element, observer) {\n _processChanges(observer.takeRecords(), observer)\n\n if ('isVisible' in element && element.isVisible) {\n delete element.isVisible\n if (!isFiredViewableEvent) {\n isFiredViewableEvent = true\n onLoadCallback(element)\n _releaseTimer(element)\n _releaseInstance(element, observer)\n }\n }\n }\n\n const _releaseTimer = function (element) {\n if ('isVisible' in element) {\n delete element.isVisible\n }\n\n if (visibleTimeout) {\n clearTimeout(visibleTimeout)\n visibleTimeout = null\n }\n }\n\n const _releaseInstance = function (element, observer) {\n observer.unobserve(element)\n observer.disconnect()\n }\n\n const _processChanges = function (changes, observer) {\n changes.forEach(function (changeRecord) {\n const element = changeRecord.target\n element.isVisible = (_isViewable(changeRecord.boundingClientRect, changeRecord.intersectionRect))\n if ('isVisible' in element && element.isVisible && !isFiredViewableEvent) {\n visibleTimeout = setTimeout(_visibleTimerCallback, VIEWABLE_CONTINUOUS_TIME, element, observer)\n } else {\n _releaseTimer(element)\n }\n })\n }\n\n viewableInstance._instance = new window.IntersectionObserver(function (entries, observer) {\n _processChanges(entries, observer)\n }, {\n threshold: [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],\n trackVisibility: true,\n delay: 100\n })\n\n viewableInstance.start = () => viewableInstance._instance.observe(element)\n viewableInstance.destroy = () => _releaseInstance(element, viewableInstance._instance)\n } else {\n viewableInstance._instance = new ViewableChecker({\n target: element,\n percentOfPixels: VIEWABLE_THRESHOLD,\n minimumAmountOfTime: VIEWABLE_CONTINUOUS_TIME,\n successCallback: function () {\n onLoadCallback(element)\n }\n })\n\n viewableInstance.start = () => viewableInstance._instance.measure()\n viewableInstance.destroy = () => viewableInstance._instance.destroy()\n }\n\n return viewableInstance\n }\n}\n\nfunction ViewableChecker () {\n // TODO: IE 트레픽을 위해서 구현하거나 IntersectionObserver Polyfill 해야 함\n return {\n measure: function () {\n // console.error(\"NOT IMPLEMENTED\")\n },\n destroy: function () {\n // console.error(\"NOT IMPLEMENTED\")\n }\n }\n}\n","export default function uuid4 () {\n var dt = new Date().getTime()\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (dt + Math.random() * 16) % 16 | 0\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16)\n })\n}\n"],"sourceRoot":""}