UNPKG

ima-ad-player

Version:

Yet another Google IMA video ad player.

1,566 lines (1,289 loc) 158 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["ImaAdPlayer"] = factory(); else root["ImaAdPlayer"] = factory(); })(self, () => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 6058: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { __webpack_require__(4185); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = _default; __webpack_require__(6031); // ima-loader.js function _default(cb) { var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6000; var debug = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var win = window, doc = document, el = 'script', timer = null; var onLoad = function onLoad(r) { win.clearTimeout(timer); if (typeof cb === 'function') cb(r); }; if (win.google && win.google.ima) { return onLoad(true); } var first = doc.getElementsByTagName(el)[0]; var script = doc.createElement(el); script.src = 'https://imasdk.googleapis.com/js/sdkloader/ima3' + (debug ? '_debug' : '') + '.js'; script.async = true; if (typeof cb === 'function') script.onload = function () { onLoad(true); }; first.parentNode.insertBefore(script, first); if (timeout) { timer = win.setTimeout(function () { onLoad(false); }, timeout); } } /***/ }), /***/ 3772: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { __webpack_require__(2675); __webpack_require__(9463); __webpack_require__(2259); __webpack_require__(3792); __webpack_require__(4185); __webpack_require__(6099); __webpack_require__(7764); __webpack_require__(2953); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; __webpack_require__(5700); __webpack_require__(9572); __webpack_require__(2892); __webpack_require__(6031); var _utils = __webpack_require__(5948); var _observable = _interopRequireDefault(__webpack_require__(9880)); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // ima-player.js /* global google */ var ImaPlayer = exports["default"] = /*#__PURE__*/function () { function ImaPlayer(options) { _classCallCheck(this, ImaPlayer); this._configure(options); this._evt = new _observable["default"](); this._adRequesting = false; this._adRequested = false; // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.ImaSdkSettings#setVpaidMode this._o.vpaidMode && google.ima.settings.setVpaidMode(this._resolvedVpaidMode); // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.ImaSdkSettings#setLocale this._o.locale && google.ima.settings.setLocale(this._o.locale); // Assumes the display container and video element are correctly positioned and sized // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side#html this._adDisplayContainer = new google.ima.AdDisplayContainer(this._o.displayContainer, this._o.video, this._o.clickTracking); this._adDisplayContainerInit = false; } return _createClass(ImaPlayer, [{ key: "_configure", value: function _configure(o) { this._o = { displayContainer: o.displayContainer, video: o.video, tag: o.tag }; // VPAID mode will be ima SDK default (if not set) if (o.vpaidMode) { this._o.vpaidMode = (0, _utils.makeNum)(o.vpaidMode, undefined); } if (o.maxDuration) { this._o.maxDuration = (0, _utils.makeNum)(o.maxDuration, undefined); } // Default is undefined this._o.locale = o.locale; // Default is undefined or alternative video ad click element // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdDisplayContainer this._o.clickTracking = o.clickTracking; // Default is undefined or object this._o.adsRequestOptions = o.adsRequestOptions; // Default is undefined or object this._o.adsRenderingOptions = o.adsRenderingOptions; // Default is to let IMA SDK handle non-linear display duration this._o.nonLinearMaxDuration = (0, _utils.makeNum)(o.nonLinearMaxDuration, -1); // Assumes by default that the playback is consented by user this._o.adWillAutoPlay = !!(0, _utils.makeDefault)(o.adWillAutoPlay, true); this._o.adWillPlayMuted = !!(0, _utils.makeDefault)(o.adWillPlayMuted, false); // Default is undefined this._o.continuousPlayback = o.continuousPlayback; // Default is to tell the SDK NOT to save and restore content video state this._o.restoreVideo = !!(0, _utils.makeDefault)(o.restoreVideo, false); } }, { key: "_setProperties", value: function _setProperties(target, properties) { for (var prop in properties) { if (typeof target[prop] !== 'undefined') { target[prop] = properties[prop]; } } } }, { key: "_resolvedVpaidMode", get: function get() { if (this._o.vpaidMode === ImaPlayer.vpaidMode.DISABLED) { return google.ima.ImaSdkSettings.VpaidMode.DISABLED; } if (this._o.vpaidMode === ImaPlayer.vpaidMode.INSECURE) { return google.ima.ImaSdkSettings.VpaidMode.INSECURE; } // Default to SECURE mode return google.ima.ImaSdkSettings.VpaidMode.ENABLED; } }, { key: "on", value: function on(name, cb) { this._evt.subscribe(name, cb); } }, { key: "off", value: function off(name) { var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (cb === null) { this._evt.unsubscribeAll(name); } else { this._evt.unsubscribe(name, cb); } } }, { key: "play", value: function play() { this._dispatch('ad_play_intent'); this._adPlayIntent = true; this.initAdDisplayContainer(); this._requestAd(); } }, { key: "request", value: function request(options) { this._dispatch('ad_request_intent', options); this._requestAd(options); } }, { key: "resize", value: function resize(width, height) { var viewMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (this._adsManager) { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#resize viewMode || (viewMode = google.ima.ViewMode.NORMAL); this._adsManager.resize(width, height, viewMode); } } }, { key: "setVolume", value: function setVolume(volume) { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#setVolume this._adsManager && this._adsManager.setVolume(volume); } }, { key: "getVolume", value: function getVolume() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#getVolume return this._adsManager ? this._adsManager.getVolume() : null; } }, { key: "discardAdBreak", value: function discardAdBreak() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#discardAdBreak this._adsManager && this._adsManager.discardAdBreak(); } }, { key: "pause", value: function pause() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#pause this._adsManager && this._adsManager.pause(); } }, { key: "resume", value: function resume() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#resume this._adsManager && this._adsManager.resume(); } }, { key: "skip", value: function skip() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#skip this._adsManager && this._adsManager.skip(); } }, { key: "updateAdsRenderingSettings", value: function updateAdsRenderingSettings(adsRenderingSettings) { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#updateAdsRenderingSettings this._adsManager && this._adsManager.updateAdsRenderingSettings(adsRenderingSettings); } }, { key: "configureAdsManager", value: function configureAdsManager(content, adsRenderingSettings) { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#configureAdsManager this._adsManager && this._adsManager.configureAdsManager(content, adsRenderingSettings); } }, { key: "focus", value: function focus() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#focus this._adsManager && this._adsManager.focus(); } }, { key: "getDisplayContainer", value: function getDisplayContainer() { return this._o.displayContainer; } }, { key: "getCuePoints", value: function getCuePoints() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#getCuePoints return this._adsManager ? this._adsManager.getCuePoints() : null; } }, { key: "getAdSkippableState", value: function getAdSkippableState() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#getAdSkippableState return this._adsManager ? this._adsManager.getAdSkippableState() : null; } }, { key: "getRemainingTime", value: function getRemainingTime() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#getRemainingTime return this._adsManager ? this._adsManager.getRemainingTime() : null; } }, { key: "isCustomClickTrackingUsed", value: function isCustomClickTrackingUsed() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#isCustomClickTrackingUsed return this._adsManager ? this._adsManager.isCustomClickTrackingUsed() : null; } }, { key: "isCustomPlaybackUsed", value: function isCustomPlaybackUsed() { // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsManager#isCustomPlaybackUsed return this._adsManager ? this._adsManager.isCustomPlaybackUsed() : null; } }, { key: "setAdWillAutoPlay", value: function setAdWillAutoPlay(autoPlay) { this._o.adWillAutoPlay = autoPlay; } }, { key: "setAdWillPlayMuted", value: function setAdWillPlayMuted(muted) { this._o.adWillPlayMuted = muted; } }, { key: "setContinuousPlayback", value: function setContinuousPlayback(continuousPlayback) { this._o.continuousPlayback = continuousPlayback; } }, { key: "stop", value: function stop() { this._dispatch('ad_stop_intent'); this._stop(); } }, { key: "ended", value: function ended() { // Signals the video content is finished. // This will allow to play post-roll ads (if any) this._adsLoader && this._adsLoader.contentComplete(); } }, { key: "initAdDisplayContainer", value: function initAdDisplayContainer() { // Must be done via a user interaction if (!this._adDisplayContainerInit) { this._adDisplayContainer.initialize(); this._adDisplayContainerInit = true; } } }, { key: "destroy", value: function destroy() { var unsubscribeEvents = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; this._adsManager && this._adsManager.stop(); this._endAd(); unsubscribeEvents && this._evt.unsubscribeAll(); this._destroyAdsManager(); this._destroyAdsLoader(); this._destroyAdDisplayContainer(); this._destroyOptions(); } }, { key: "_destroyAdsLoader", value: function _destroyAdsLoader() { if (this._adsLoader) { this._adsLoader.destroy(); this._adsLoader = null; delete this._adsLoader; } } }, { key: "_destroyAdsManager", value: function _destroyAdsManager() { if (this._adsManager) { this._adsManager.destroy(); this._adsManager = null; delete this._adsManager; } } }, { key: "_destroyAdDisplayContainer", value: function _destroyAdDisplayContainer() { if (this._adDisplayContainer) { this._adDisplayContainer.destroy(); this._adDisplayContainer = null; delete this._adDisplayContainer; } } }, { key: "_destroyOptions", value: function _destroyOptions() { this._o = null; delete this._o; } }, { key: "_stop", value: function _stop() { this._dispatch('ad_stop'); if (this._adsManager) { // Signal ads manager to stop and get back to content this._adsManager.stop(); } else { this._endAd(); } } }, { key: "_makeAdsLoader", value: function _makeAdsLoader() { var _this = this; this._adsLoader = new google.ima.AdsLoader(this._adDisplayContainer); this._adsLoader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, function (e) { _this._onAdsManagerLoaded(e); }); this._adsLoader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (e) { _this._adRequested = false; _this._onAdError(e); }); } }, { key: "_requestAd", value: function _requestAd(options) { // Check if ad request is pending if (this._adRequesting) { // Ad will autostart if play method called return; } // Check if ad already requested (pre-request) if (this._adRequested) { // Start ad only if play method called if (this._adPlayIntent) { this._playAd(); } return; } this._adRequesting = true; if (!this._adsLoader) { this._makeAdsLoader(); } var adsRequest = new google.ima.AdsRequest(); // Set ad request default settings adsRequest.adTagUrl = this._o.tag; adsRequest.linearAdSlotWidth = this._o.video.offsetWidth; adsRequest.linearAdSlotHeight = this._o.video.offsetHeight; adsRequest.nonLinearAdSlotWidth = this._o.video.offsetWidth; adsRequest.nonLinearAdSlotHeight = this._o.video.offsetHeight; adsRequest.setAdWillAutoPlay(this._o.adWillAutoPlay); adsRequest.setAdWillPlayMuted(this._o.adWillPlayMuted); if (this._o.continuousPlayback !== undefined) { // Internally set AdsRequest.videoContinuousPlay to "0" if undefined, "1" if false, "2" if true adsRequest.setContinuousPlayback(this._o.continuousPlayback); } // Assumes that ad request options is an object with ads request properties // defined in the IMA SDK documentation (will override default settings) // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsRequest var adsRequestOptions = options ? options : this._o.adsRequestOptions; if (adsRequestOptions) { this._setProperties(adsRequest, adsRequestOptions); } this._dispatch('ad_request', adsRequest); // The requestAds() method triggers _onAdsManagerLoaded() or _onAdError() this._adsLoader.requestAds(adsRequest); } }, { key: "_bindAdsManagerEvents", value: function _bindAdsManagerEvents() { var _this2 = this; this._adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (e) { _this2._onAdError(e); }); this._adsManager.addEventListener(google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, function (e) { _this2._adEnded = false; _this2._dispatch('content_pause_requested', e); _this2._dispatch('ad_begin'); // "content_pause_requested" event alias }); this._adsManager.addEventListener(google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, function (e) { _this2._dispatch('content_resume_requested', e); _this2._endAd(); }); this._adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, function (e) { _this2._dispatch('started', e); var ad = e.getAd(); if (ad.isLinear()) { _this2._o.maxDuration && _this2._startMaxDurationTimer(); } else { // Signal non-linear ad scenario var duration = _this2._o.nonLinearMaxDuration; _this2._dispatch('ad_non_linear', { ad: ad, duration: duration }); // By default, IMA SDK will automatically close non-linear ad (after 45 seconds ?) if (_this2._o.nonLinearMaxDuration > 0) { setTimeout(function () { _this2._adsManager && _this2._adsManager.stop(); }, _this2._o.nonLinearMaxDuration); } // Ends to play/resume content video _this2._endAd(); } }); this._adsManager.addEventListener(google.ima.AdEvent.Type.ALL_ADS_COMPLETED, function (e) { _this2._adRequested = false; _this2._dispatch('all_ads_completed', e); }); var adEvents = { 'ad_break_ready': google.ima.AdEvent.Type.AD_BREAK_READY, 'ad_buffering': google.ima.AdEvent.Type.AD_BUFFERING, 'ad_metadata': google.ima.AdEvent.Type.AD_METADATA, 'ad_progress': google.ima.AdEvent.Type.AD_PROGRESS, 'click': google.ima.AdEvent.Type.CLICK, 'complete': google.ima.AdEvent.Type.COMPLETE, 'duration_change': google.ima.AdEvent.Type.DURATION_CHANGE, 'first_quartile': google.ima.AdEvent.Type.FIRST_QUARTILE, 'impression': google.ima.AdEvent.Type.IMPRESSION, 'interaction': google.ima.AdEvent.Type.INTERACTION, 'linear_changed': google.ima.AdEvent.Type.LINEAR_CHANGED, 'loaded': google.ima.AdEvent.Type.LOADED, 'log': google.ima.AdEvent.Type.LOG, 'midpoint': google.ima.AdEvent.Type.MIDPOINT, 'paused': google.ima.AdEvent.Type.PAUSED, 'resumed': google.ima.AdEvent.Type.RESUMED, 'skippable_state_changed': google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED, 'skipped': google.ima.AdEvent.Type.SKIPPED, 'third_quartile': google.ima.AdEvent.Type.THIRD_QUARTILE, 'user_close': google.ima.AdEvent.Type.USER_CLOSE, 'video_clicked': google.ima.AdEvent.Type.VIDEO_CLICKED, 'video_icon_clicked': google.ima.AdEvent.Type.VIDEO_ICON_CLICKED, 'volume_changed': google.ima.AdEvent.Type.VOLUME_CHANGED, 'volume_muted': google.ima.AdEvent.Type.VOLUME_MUTED }; // Not documented, may be unavailable in the future google.ima.AdEvent.Type.AD_CAN_PLAY && (adEvents.ad_can_play = google.ima.AdEvent.Type.AD_CAN_PLAY); google.ima.AdEvent.Type.VIEWABLE_IMPRESSION && (adEvents.viewable_impression = google.ima.AdEvent.Type.VIEWABLE_IMPRESSION); var _loop = function _loop(adEvent) { _this2._adsManager.addEventListener(adEvents[adEvent], function (e) { _this2._dispatch(adEvent, e); }); }; for (var adEvent in adEvents) { _loop(adEvent); } } }, { key: "_onAdsManagerLoaded", value: function _onAdsManagerLoaded(adsManagerLoadedEvent) { this._dispatch('ads_manager_loaded', adsManagerLoadedEvent); // Create default ads rendering settings var adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = this._o.restoreVideo; // Assumes that ads rendering options is an object with ads rendering settings properties // defined in the IMA SDK documentation (will override default settings) // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdsRenderingSettings if (this._o.adsRenderingOptions) { this._setProperties(adsRenderingSettings, this._o.adsRenderingOptions); } this._dispatch('ads_rendering_settings', adsRenderingSettings); this._destroyAdsManager(); this._adsManager = adsManagerLoadedEvent.getAdsManager(this._o.video, adsRenderingSettings); this._bindAdsManagerEvents(); this._dispatch('ads_manager', this._adsManager); // Ad is ready to be played this._adRequesting = false; this._adRequested = true; if (this._adPlayIntent) { this._playAd(); } } }, { key: "_onMaxDuration", value: function _onMaxDuration() { this._dispatch('error', new Error('Maximum duration of ' + this._o.maxDuration + ' ms reached')); this._stop(); } }, { key: "_startMaxDurationTimer", value: function _startMaxDurationTimer() { var _this3 = this; this._maxDurationTimer = setTimeout(function () { _this3._onMaxDuration(); }, this._o.maxDuration); } }, { key: "_resetMaxDurationTimer", value: function _resetMaxDurationTimer() { if (typeof this._maxDurationTimer === 'number') { clearTimeout(this._maxDurationTimer); this._maxDurationTimer = undefined; } } }, { key: "_onAdError", value: function _onAdError(adErrorEvent) { // google.ima.AdErrorEvent : https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdErrorEvent // google.ima.AdError : https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.AdError // console.log('onAdError: ' + adErrorEvent.getError()) this._dispatch('ad_error', adErrorEvent); this._endAd(); } }, { key: "_playAd", value: function _playAd() { try { this._dispatch('ad_play'); this._adEnded = false; this._adsManager.init(this._o.video.offsetWidth, this._o.video.offsetHeight, google.ima.ViewMode.NORMAL); this._adsManager.start(); } catch (e) { // console.log('adsManager catched error', e) this._dispatch('error', e); this._endAd(); } } }, { key: "_dispatch", value: function _dispatch(name, e) { this._evt.notify(name, { name: name, data: e, target: this }); } }, { key: "_endAd", value: function _endAd() { if (this._adEnded) { return; } this._adEnded = true; this._adPlayIntent = false; this._adRequesting = false; this._resetMaxDurationTimer(); this._dispatch('ad_end'); } }], [{ key: "vpaidMode", get: function get() { return { DISABLED: 0, ENABLED: 1, INSECURE: 2 }; } }]); }(); /***/ }), /***/ 9880: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { __webpack_require__(2675); __webpack_require__(9463); __webpack_require__(2259); __webpack_require__(3792); __webpack_require__(4185); __webpack_require__(7764); __webpack_require__(2953); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; __webpack_require__(5700); __webpack_require__(1629); __webpack_require__(5276); __webpack_require__(4554); __webpack_require__(9572); __webpack_require__(2892); __webpack_require__(6099); __webpack_require__(3500); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // observable.js var Observable = exports["default"] = /*#__PURE__*/function () { function Observable() { _classCallCheck(this, Observable); this.unsubscribeAll(); } return _createClass(Observable, [{ key: "subscribe", value: function subscribe(n, f) { if (!this.observers[n]) { this.observers[n] = []; } this.observers[n].push(f); } }, { key: "unsubscribe", value: function unsubscribe(n, f) { if (!this.observers[n]) { return; } var i = this.observers[n].indexOf(f); if (i == -1) { return; } this.observers[n].splice(i, 1); } }, { key: "unsubscribeAll", value: function unsubscribeAll() { var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (n === null) { this.observers = null; this.observers = {}; } else if (this.observers[n]) { this.observers[n] = null; delete this.observers[n]; } } }, { key: "notify", value: function notify(n, e) { if (this.observers[n]) { this.observers[n].forEach(function (o) { return o(e); }); } } }]); }(); /***/ }), /***/ 5948: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { __webpack_require__(4185); Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isNumeric = isNumeric; exports.makeDefault = makeDefault; exports.makeNum = makeNum; __webpack_require__(8459); // utils.js function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); } function makeNum(value, fallback) { return isNumeric(value) ? value + 0 : fallback; } function makeDefault(value, defaultValue) { return value === undefined ? defaultValue : value; } /***/ }), /***/ 9306: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isCallable = __webpack_require__(4901); var tryToString = __webpack_require__(6823); var $TypeError = TypeError; // `Assert: IsCallable(argument) is true` module.exports = function (argument) { if (isCallable(argument)) return argument; throw new $TypeError(tryToString(argument) + ' is not a function'); }; /***/ }), /***/ 3506: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isPossiblePrototype = __webpack_require__(3925); var $String = String; var $TypeError = TypeError; module.exports = function (argument) { if (isPossiblePrototype(argument)) return argument; throw new $TypeError("Can't set " + $String(argument) + ' as a prototype'); }; /***/ }), /***/ 6469: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var wellKnownSymbol = __webpack_require__(8227); var create = __webpack_require__(2360); var defineProperty = (__webpack_require__(4913).f); var UNSCOPABLES = wellKnownSymbol('unscopables'); var ArrayPrototype = Array.prototype; // Array.prototype[@@unscopables] // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables if (ArrayPrototype[UNSCOPABLES] === undefined) { defineProperty(ArrayPrototype, UNSCOPABLES, { configurable: true, value: create(null) }); } // add a key to Array.prototype[@@unscopables] module.exports = function (key) { ArrayPrototype[UNSCOPABLES][key] = true; }; /***/ }), /***/ 8551: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isObject = __webpack_require__(34); var $String = String; var $TypeError = TypeError; // `Assert: Type(argument) is Object` module.exports = function (argument) { if (isObject(argument)) return argument; throw new $TypeError($String(argument) + ' is not an object'); }; /***/ }), /***/ 5652: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it var fails = __webpack_require__(9039); module.exports = fails(function () { if (typeof ArrayBuffer == 'function') { var buffer = new ArrayBuffer(8); // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 }); } }); /***/ }), /***/ 235: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var $forEach = (__webpack_require__(9213).forEach); var arrayMethodIsStrict = __webpack_require__(4598); var STRICT_METHOD = arrayMethodIsStrict('forEach'); // `Array.prototype.forEach` method implementation // https://tc39.es/ecma262/#sec-array.prototype.foreach module.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) { return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); // eslint-disable-next-line es/no-array-prototype-foreach -- safe } : [].forEach; /***/ }), /***/ 9617: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var toIndexedObject = __webpack_require__(5397); var toAbsoluteIndex = __webpack_require__(5610); var lengthOfArrayLike = __webpack_require__(6198); // `Array.prototype.{ indexOf, includes }` methods implementation var createMethod = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIndexedObject($this); var length = lengthOfArrayLike(O); if (length === 0) return !IS_INCLUDES && -1; var index = toAbsoluteIndex(fromIndex, length); var value; // Array#includes uses SameValueZero equality algorithm // eslint-disable-next-line no-self-compare -- NaN check if (IS_INCLUDES && el !== el) while (length > index) { value = O[index++]; // eslint-disable-next-line no-self-compare -- NaN check if (value !== value) return true; // Array#indexOf ignores holes, Array#includes - not } else for (;length > index; index++) { if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; } return !IS_INCLUDES && -1; }; }; module.exports = { // `Array.prototype.includes` method // https://tc39.es/ecma262/#sec-array.prototype.includes includes: createMethod(true), // `Array.prototype.indexOf` method // https://tc39.es/ecma262/#sec-array.prototype.indexof indexOf: createMethod(false) }; /***/ }), /***/ 9213: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var bind = __webpack_require__(6080); var uncurryThis = __webpack_require__(9504); var IndexedObject = __webpack_require__(7055); var toObject = __webpack_require__(8981); var lengthOfArrayLike = __webpack_require__(6198); var arraySpeciesCreate = __webpack_require__(1469); var push = uncurryThis([].push); // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation var createMethod = function (TYPE) { var IS_MAP = TYPE === 1; var IS_FILTER = TYPE === 2; var IS_SOME = TYPE === 3; var IS_EVERY = TYPE === 4; var IS_FIND_INDEX = TYPE === 6; var IS_FILTER_REJECT = TYPE === 7; var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; return function ($this, callbackfn, that, specificCreate) { var O = toObject($this); var self = IndexedObject(O); var length = lengthOfArrayLike(self); var boundFunction = bind(callbackfn, that); var index = 0; var create = specificCreate || arraySpeciesCreate; var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; var value, result; for (;length > index; index++) if (NO_HOLES || index in self) { value = self[index]; result = boundFunction(value, index, O); if (TYPE) { if (IS_MAP) target[index] = result; // map else if (result) switch (TYPE) { case 3: return true; // some case 5: return value; // find case 6: return index; // findIndex case 2: push(target, value); // filter } else switch (TYPE) { case 4: return false; // every case 7: push(target, value); // filterReject } } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; }; }; module.exports = { // `Array.prototype.forEach` method // https://tc39.es/ecma262/#sec-array.prototype.foreach forEach: createMethod(0), // `Array.prototype.map` method // https://tc39.es/ecma262/#sec-array.prototype.map map: createMethod(1), // `Array.prototype.filter` method // https://tc39.es/ecma262/#sec-array.prototype.filter filter: createMethod(2), // `Array.prototype.some` method // https://tc39.es/ecma262/#sec-array.prototype.some some: createMethod(3), // `Array.prototype.every` method // https://tc39.es/ecma262/#sec-array.prototype.every every: createMethod(4), // `Array.prototype.find` method // https://tc39.es/ecma262/#sec-array.prototype.find find: createMethod(5), // `Array.prototype.findIndex` method // https://tc39.es/ecma262/#sec-array.prototype.findIndex findIndex: createMethod(6), // `Array.prototype.filterReject` method // https://github.com/tc39/proposal-array-filtering filterReject: createMethod(7) }; /***/ }), /***/ 597: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var fails = __webpack_require__(9039); var wellKnownSymbol = __webpack_require__(8227); var V8_VERSION = __webpack_require__(9519); var SPECIES = wellKnownSymbol('species'); module.exports = function (METHOD_NAME) { // We can't use this feature detection in V8 since it causes // deoptimization and serious performance degradation // https://github.com/zloirock/core-js/issues/677 return V8_VERSION >= 51 || !fails(function () { var array = []; var constructor = array.constructor = {}; constructor[SPECIES] = function () { return { foo: 1 }; }; return array[METHOD_NAME](Boolean).foo !== 1; }); }; /***/ }), /***/ 4598: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var fails = __webpack_require__(9039); module.exports = function (METHOD_NAME, argument) { var method = [][METHOD_NAME]; return !!method && fails(function () { // eslint-disable-next-line no-useless-call -- required for testing method.call(null, argument || function () { return 1; }, 1); }); }; /***/ }), /***/ 4527: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var DESCRIPTORS = __webpack_require__(3724); var isArray = __webpack_require__(4376); var $TypeError = TypeError; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; // Safari < 13 does not throw an error in this case var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () { // makes no sense without proper strict mode support if (this !== undefined) return true; try { // eslint-disable-next-line es/no-object-defineproperty -- safe Object.defineProperty([], 'length', { writable: false }).length = 1; } catch (error) { return error instanceof TypeError; } }(); module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) { if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) { throw new $TypeError('Cannot set read only .length'); } return O.length = length; } : function (O, length) { return O.length = length; }; /***/ }), /***/ 7680: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var uncurryThis = __webpack_require__(9504); module.exports = uncurryThis([].slice); /***/ }), /***/ 7433: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isArray = __webpack_require__(4376); var isConstructor = __webpack_require__(3517); var isObject = __webpack_require__(34); var wellKnownSymbol = __webpack_require__(8227); var SPECIES = wellKnownSymbol('species'); var $Array = Array; // a part of `ArraySpeciesCreate` abstract operation // https://tc39.es/ecma262/#sec-arrayspeciescreate module.exports = function (originalArray) { var C; if (isArray(originalArray)) { C = originalArray.constructor; // cross-realm fallback if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined; else if (isObject(C)) { C = C[SPECIES]; if (C === null) C = undefined; } } return C === undefined ? $Array : C; }; /***/ }), /***/ 1469: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var arraySpeciesConstructor = __webpack_require__(7433); // `ArraySpeciesCreate` abstract operation // https://tc39.es/ecma262/#sec-arrayspeciescreate module.exports = function (originalArray, length) { return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); }; /***/ }), /***/ 2195: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var uncurryThis = __webpack_require__(9504); var toString = uncurryThis({}.toString); var stringSlice = uncurryThis(''.slice); module.exports = function (it) { return stringSlice(toString(it), 8, -1); }; /***/ }), /***/ 6955: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var TO_STRING_TAG_SUPPORT = __webpack_require__(2140); var isCallable = __webpack_require__(4901); var classofRaw = __webpack_require__(2195); var wellKnownSymbol = __webpack_require__(8227); var TO_STRING_TAG = wellKnownSymbol('toStringTag'); var $Object = Object; // ES3 wrong here var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; // fallback for IE11 Script Access Denied error var tryGet = function (it, key) { try { return it[key]; } catch (error) { /* empty */ } }; // getting tag from ES6+ `Object.prototype.toString` module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { var O, tag, result; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag // builtinTag case : CORRECT_ARGUMENTS ? classofRaw(O) // ES3 arguments fallback : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; }; /***/ }), /***/ 7740: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var hasOwn = __webpack_require__(9297); var ownKeys = __webpack_require__(5031); var getOwnPropertyDescriptorModule = __webpack_require__(7347); var definePropertyModule = __webpack_require__(4913); module.exports = function (target, source, exceptions) { var keys = ownKeys(source); var defineProperty = definePropertyModule.f; var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { defineProperty(target, key, getOwnPropertyDescriptor(source, key)); } } }; /***/ }), /***/ 2211: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var fails = __webpack_require__(9039); module.exports = !fails(function () { function F() { /* empty */ } F.prototype.constructor = null; // eslint-disable-next-line es/no-object-getprototypeof -- required for testing return Object.getPrototypeOf(new F()) !== F.prototype; }); /***/ }), /***/ 2529: /***/ ((module) => { // `CreateIterResultObject` abstract operation // https://tc39.es/ecma262/#sec-createiterresultobject module.exports = function (value, done) { return { value: value, done: done }; }; /***/ }), /***/ 6699: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var DESCRIPTORS = __webpack_require__(3724); var definePropertyModule = __webpack_require__(4913); var createPropertyDescriptor = __webpack_require__(6980); module.exports = DESCRIPTORS ? function (object, key, value) { return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); } : function (object, key, value) { object[key] = value; return object; }; /***/ }), /***/ 6980: /***/ ((module) => { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /***/ 4659: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var DESCRIPTORS = __webpack_require__(3724); var definePropertyModule = __webpack_require__(4913); var createPropertyDescriptor = __webpack_require__(6980); module.exports = function (object, key, value) { if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); else object[key] = value; }; /***/ }), /***/ 3640: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var anObject = __webpack_require__(8551); var ordinaryToPrimitive = __webpack_require__(4270); var $TypeError = TypeError; // `Date.prototype[@@toPrimitive](hint)` method implementation // https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive module.exports = function (hint) { anObject(this); if (hint === 'string' || hint === 'default') hint = 'string'; else if (hint !== 'number') throw new $TypeError('Incorrect hint'); return ordinaryToPrimitive(this, hint); }; /***/ }), /***/ 2106: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var makeBuiltIn = __webpack_require__(283); var defineProperty = __webpack_require__(4913); module.exports = function (target, name, descriptor) { if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true }); if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true }); return defineProperty.f(target, name, descriptor); }; /***/ }), /***/ 6840: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var isCallable = __webpack_require__(4901); var definePropertyModule = __webpack_require__(4913); var makeBuiltIn = __webpack_require__(283); var defineGlobalProperty = __webpack_require__(9433); module.exports = function (O, key, value, options) { if (!options) options = {}; var simple = options.enumerable; var name = options.name !== undefined ? options.name : key; if (isCallable(value)) makeBuiltIn(value, name, options); if (options.global) { if (simple) O[key] = value; else defineGlobalProperty(key, value); } else { try { if (!options.unsafe) delete O[key]; else if (O[key]) simple = true; } catch (error) { /* empty */ } if (simple) O[key] = value; else definePropertyModule.f(O, key, { value: value, enumerable: false, configurable: !options.nonConfigurable, writable: !options.nonWritable }); } return O; }; /***/ }), /***/ 9433: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var globalThis = __webpack_require__(4576); // eslint-disable-next-line es/no-object-defineproperty -- safe var defineProperty = Object.defineProperty; module.exports = function (key, value) { try { defineProperty(globalThis, key, { value: value, configurable: true, writable: true }); } catch (error) { globalThis[key] = value; } return value; }; /***/ }), /***/ 4606: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var tryToString = __webpack_require__(6823); var $TypeError = TypeError; module.exports = function (O, P) { if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O)); }; /***/ }), /***/ 3724: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var fails = __webpack_require__(9039); // Detect IE8's incomplete defineProperty implementation module.exports = !fails(function () { // eslint-disable-next-line es/no-object-defineproperty -- required for testing return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; }); /***/ }), /***/ 4055: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var globalThis = __webpack_require__(4576); var isObject = __webpack_require__(34); var document = globalThis.document; // typeof document.createElement is 'object' in old IE var EXISTS = isObject(document) && isObject(document.createElement); module.exports = function (it) { return EXISTS ? document.createElement(it) : {}; }; /***/ }), /***/ 6837: /***/ ((module) => { var $TypeError = TypeError; var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991 module.exports = function (it) { if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded'); return it; }; /***/ }), /***/ 7400: /***/ ((module) => { // iterable DOM collections // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods module.exports = { CSSRuleList: 0, CSSStyleDeclaration: 0, CSSValueList: 0, ClientRectList: 0, DOMRectList: 0, DOMStringList: 0, DOMTokenList: 1, DataTransferItemList: 0, FileList: 0, HTMLAllCollection: 0, HTMLCollection: 0, HTMLFormElement: 0, HTMLSelectElement: 0, MediaList: 0, MimeTypeArray: 0, NamedNodeMap: 0, NodeList: 1, PaintRequestList: 0, Plugin: 0, PluginArray: 0, SVGLengthList: 0, SVGNumberList: 0, SVGPathSegList: 0, SVGPointList: 0, SVGStringList: 0, SVGTransformList: 0, SourceBufferList: 0, StyleSheetList: 0, TextTrackCueList: 0, TextTrackList: 0, TouchList: 0 }; /***/ }), /***/ 9296: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList` var documentCreateElement = __webpack_require__(4055); var classList = documentCreateElement('span').classList; var DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype; module.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype; /***/ }), /***/ 8727: /***/ ((module) => { // IE8- don't enum bug keys module.exports = [ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf' ]; /***/ }), /***/ 2839: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var globalThis = __webpack_require__(4576); var navigator = globalThis.navigator; var userAgent = navigator && navigator.userAgent; module.exports = userAgent ? String(userAgent) : ''; /***/ }), /***/ 9519: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var globalThis = __webpack_require__(4576); var userAgent = __webpack_require__(2839); var process = globalThis.process; var Deno = globalThis.Deno; var versions = process && process.versions || Deno && Deno.version; var v8 = versions && versions.v8; var match, version; if (v8) { match = v8.split('.'); // in old Chrome, versions of V8 isn't V8 = Chrome / 10 // but their correct versions are not interesting for us version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); } // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` // so check `userAgent` even if `.v8` exists, but 0 if (!version && userAgent) { match = userAgent.match(/Edge\/(\d+)/); if (!match || match[1] >= 74) { match = userAgent.match(/Chrome\/(\d+)/); if (match) version = +match[1]; } } module.exports = version; /***/ }), /***/ 4215: /***/ ((module, __unused_webpack_exports