@mux/mux-active-viewer-count 0.2.0-alpha.7 → 0.2.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +2 -2
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +2 -2
- package/dist/mux-active-viewer-counts.js +2 -2
- package/dist/mux-active-viewer-counts.js.map +2 -2
- package/dist/mux-active-viewer-counts.mjs +2 -2
- package/dist/mux-active-viewer-counts.mjs.map +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
package/dist/index.cjs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var C=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var M=(e,n)=>{for(var t in n)C(e,t,{get:n[t],enumerable:!0})},W=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of q(n))!z.call(e,o)&&o!==t&&C(e,o,{get:()=>n[o],enumerable:!(i=H(n,o))||i.enumerable});return e};var J=e=>W(C({},"__esModule",{value:!0}),e);var _=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var a=(e,n,t)=>(_(e,n,"read from private field"),t?t.call(e):n.get(e)),l=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},u=(e,n,t,i)=>(_(e,n,"write to private field"),i?i.call(e,t):n.set(e,t),t);var d=(e,n,t)=>(_(e,n,"access private method"),t);var et={};M(et,{default:()=>tt,subscribeViewerCount:()=>U});module.exports=J(et);var h=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends h{}globalThis.DocumentFragment=e}var g=class extends h{},
|
|
1
|
+
"use strict";var C=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var M=(e,n)=>{for(var t in n)C(e,t,{get:n[t],enumerable:!0})},W=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of q(n))!z.call(e,o)&&o!==t&&C(e,o,{get:()=>n[o],enumerable:!(i=H(n,o))||i.enumerable});return e};var J=e=>W(C({},"__esModule",{value:!0}),e);var _=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var a=(e,n,t)=>(_(e,n,"read from private field"),t?t.call(e):n.get(e)),l=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},u=(e,n,t,i)=>(_(e,n,"write to private field"),i?i.call(e,t):n.set(e,t),t);var d=(e,n,t)=>(_(e,n,"access private method"),t);var et={};M(et,{default:()=>tt,subscribeViewerCount:()=>U});module.exports=J(et);var h=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends h{}globalThis.DocumentFragment=e}var g=class extends h{},N=class extends h{},O={get(e){},define(e,n,t){},getName(e){return null},upgrade(e){},whenDefined(e){return Promise.resolve(g)}},f,P=class{constructor(n,t={}){l(this,f,void 0);u(this,f,t==null?void 0:t.detail)}get detail(){return a(this,f)}initCustomEvent(){}};f=new WeakMap;function Q(e,n){return new g}var S={document:{createElement:Q},DocumentFragment,customElements:O,CustomEvent:P,EventTarget:h,HTMLElement:g,HTMLVideoElement:N},F=typeof window=="undefined"||typeof globalThis.customElements=="undefined",w=F?S:globalThis,st=F?S.document:globalThis.document;var U=(e,n,t,i)=>{let o=`https://stats.mux.com/counts?token=${e}`,R=new AbortController,B=R.signal,v,k=!1,x=()=>k?Promise.resolve():fetch(o,{signal:B}).then(s=>s.json()).then(s=>{var V,y,D;let p=(y=(V=s==null?void 0:s.data)==null?void 0:V[0])==null?void 0:y.views;return s!=null&&s.error||p==null?Promise.reject((D=s==null?void 0:s.error)!=null?D:"no data in response"):(t(p),p)}).catch(i).then(()=>new Promise(s=>{v=setTimeout(()=>{s(void 0)},n*1e3)})).then(x);return x(),()=>{k=!0,R.abort(),typeof v=="number"&&(clearTimeout(v),v=void 0)}},r={TOKEN:"token",POLL_INTERVAL:"poll-interval",DISABLED:"disabled"},X=20,Y=Object.freeze(Object.values(r)),Z="Viewer Count",j="??",$=({viewerCount:e})=>{let n=typeof e=="number"?`${e}`:"Unknown";return`${Z} ${n}`},G=document.createElement("template");G.innerHTML=`
|
|
2
2
|
<span id="viewer-count">
|
|
3
3
|
${j}
|
|
4
4
|
</span>
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/polyfills/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n", "/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n"],
|
|
5
|
-
"mappings": "8yBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,aAAAE,GAAA,yBAAAC,IAAA,eAAAC,EAAAJ,ICEA,IAAMK,EAAN,KAAkB,CAChB,kBAAmB,CAAC,CACpB,qBAAsB,CAAC,CACvB,cAAcC,EAAe,CAC3B,MAAO,EACT,CACF,EAGA,GAAI,OAAO,kBAAqB,YAAa,CAC3C,MAAMC,UAAyBF,CAAY,CAAC,CAE5C,WAAW,iBAAmBE,CAChC,CAEA,IAAMC,EAAN,cAA0BH,CAAY,CAAC,EACjCI,EAAN,cAA+BJ,CAAY,CAAC,EAEtCK,EAAwC,CAC5C,IAAIC,EAAe,CAEnB,EACA,OAAOA,EAAOC,EAAcC,EAAU,CAAC,EACvC,
|
|
4
|
+
"sourcesContent": ["import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n", "/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n getName(_constructor) {\n return null;\n },\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["src_exports", "__export", "src_default", "subscribeViewerCount", "__toCommonJS", "EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "internalGlobalThis", "internalDocument", "subscribeViewerCount", "token", "pollInterval", "callback", "errorCb", "url", "controller", "signal", "timeoutId", "aborted", "fetchViewerCountPoll", "resp", "respObj", "_a", "_b", "_c", "views", "resolve", "Attributes", "DEFAULT_POLL_INTERVAL", "AttributeValues", "ARIA_LABEL", "DEFAULT_VIEWER_COUNT_VALUE", "toAriaLabel", "viewerCount", "viewerCountStr", "template", "_unsubscribeViewerCount", "_viewerCountEl", "viewerCountEl_get", "_views", "_setupViewerCountPolling", "setupViewerCountPolling_fn", "_teardownViewerCountPolling", "teardownViewerCountPolling_fn", "MuxActiveViewerCountElement", "internalGlobalThis", "__privateAdd", "__privateGet", "value", "__privateSet", "temp", "__privateMethod", "attrName", "oldValue", "newValue", "errorMsg", "src_default"]
|
|
7
7
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var C=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var r=(e,n,t)=>(C(e,n,"read from private field"),t?t.call(e):n.get(e)),i=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},l=(e,n,t,u)=>(C(e,n,"write to private field"),u?u.call(e,t):n.set(e,t),t);var c=(e,n,t)=>(C(e,n,"access private method"),t);var d=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends d{}globalThis.DocumentFragment=e}var b=class extends d{},_=class extends d{},K={get(e){},define(e,n,t){},upgrade(e){},whenDefined(e){return Promise.resolve(b)}},g,
|
|
1
|
+
var C=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var r=(e,n,t)=>(C(e,n,"read from private field"),t?t.call(e):n.get(e)),i=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},l=(e,n,t,u)=>(C(e,n,"write to private field"),u?u.call(e,t):n.set(e,t),t);var c=(e,n,t)=>(C(e,n,"access private method"),t);var d=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends d{}globalThis.DocumentFragment=e}var b=class extends d{},_=class extends d{},K={get(e){},define(e,n,t){},getName(e){return null},upgrade(e){},whenDefined(e){return Promise.resolve(b)}},g,N=class{constructor(n,t={}){i(this,g,void 0);l(this,g,t==null?void 0:t.detail)}get detail(){return r(this,g)}initCustomEvent(){}};g=new WeakMap;function B(e,n){return new b}var D={document:{createElement:B},DocumentFragment,customElements:K,CustomEvent:N,EventTarget:d,HTMLElement:b,HTMLVideoElement:_},S=typeof window=="undefined"||typeof globalThis.customElements=="undefined",w=S?D:globalThis,O=S?D.document:globalThis.document;var H=(e,n,t,u)=>{let E=`https://stats.mux.com/counts?token=${e}`,I=new AbortController,G=I.signal,v,R=!1,k=()=>R?Promise.resolve():fetch(E,{signal:G}).then(s=>s.json()).then(s=>{var x,V,y;let p=(V=(x=s==null?void 0:s.data)==null?void 0:x[0])==null?void 0:V.views;return s!=null&&s.error||p==null?Promise.reject((y=s==null?void 0:s.error)!=null?y:"no data in response"):(t(p),p)}).catch(u).then(()=>new Promise(s=>{v=setTimeout(()=>{s(void 0)},n*1e3)})).then(k);return k(),()=>{R=!0,I.abort(),typeof v=="number"&&(clearTimeout(v),v=void 0)}},o={TOKEN:"token",POLL_INTERVAL:"poll-interval",DISABLED:"disabled"},q=20,z=Object.freeze(Object.values(o)),M="Viewer Count",W="??",F=({viewerCount:e})=>{let n=typeof e=="number"?`${e}`:"Unknown";return`${M} ${n}`},$=document.createElement("template");$.innerHTML=`
|
|
2
2
|
<span id="viewer-count">
|
|
3
3
|
${W}
|
|
4
4
|
</span>
|
|
5
|
-
`;var a,T,U,h,f,
|
|
5
|
+
`;var a,T,U,h,f,P,m,A,L=class extends w.HTMLElement{constructor(){super();i(this,T);i(this,f);i(this,m);i(this,a,void 0);i(this,h,void 0);this.attachShadow({mode:"open"}).appendChild($.content.cloneNode(!0))}static get observedAttributes(){return z}get views(){var t;return(t=r(this,h))!=null?t:Number.NaN}get token(){var t;return(t=this.getAttribute(o.TOKEN))!=null?t:""}set token(t){this.token!==t&&(l(this,h,void 0),this.setAttribute(o.TOKEN,t))}get pollInterval(){let t=this.hasAttribute(o.POLL_INTERVAL)?+this.getAttribute(o.POLL_INTERVAL):q;return t<15&&(console.warn("Poll interval must be at least 15 seconds, setting to 15."),t=15),t}set pollInterval(t){this.pollInterval!==t&&this.setAttribute(o.POLL_INTERVAL,`${t}`)}enable(){this.setAttribute("tabindex","0")}disable(){this.removeAttribute("tabindex")}connectedCallback(){this.hasAttribute("disabled")||this.enable(),this.setAttribute("aria-label",F({})),this.setAttribute("role","presentation"),c(this,f,P).call(this)}disconnectedCallback(){c(this,m,A).call(this)}attributeChangedCallback(t,u,E){t===o.POLL_INTERVAL||t===o.TOKEN?(c(this,m,A).call(this),c(this,f,P).call(this)):t===o.DISABLED&&u!==E&&(E?this.disable():this.enable())}};a=new WeakMap,T=new WeakSet,U=function(){return this.shadowRoot.querySelector("#viewer-count")},h=new WeakMap,f=new WeakSet,P=function(){this.token&&this.pollInterval&&!r(this,a)&&l(this,a,H(this.token,this.pollInterval,t=>{l(this,h,t),this.dispatchEvent(new CustomEvent("change",{detail:t})),r(this,T,U).textContent=`${this.views}`,this.setAttribute("aria-label",F({viewerCount:t}))},t=>{this.dispatchEvent(new CustomEvent("error",{detail:t})),console.warn("Failed to retrieve viewer count: Error - ",t),c(this,m,A).call(this)}))},m=new WeakSet,A=function(){var t;(t=r(this,a))==null||t.call(this),l(this,a,void 0)};w.customElements.get("mux-active-viewer-count")||w.customElements.define("mux-active-viewer-count",L);var Z=L;export{Z as default,H as subscribeViewerCount};
|
|
6
6
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/polyfills/index.ts", "../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n"],
|
|
5
|
-
"mappings": "qYAEA,IAAMA,EAAN,KAAkB,CAChB,kBAAmB,CAAC,CACpB,qBAAsB,CAAC,CACvB,cAAcC,EAAe,CAC3B,MAAO,EACT,CACF,EAGA,GAAI,OAAO,kBAAqB,YAAa,CAC3C,MAAMC,UAAyBF,CAAY,CAAC,CAE5C,WAAW,iBAAmBE,CAChC,CAEA,IAAMC,EAAN,cAA0BH,CAAY,CAAC,EACjCI,EAAN,cAA+BJ,CAAY,CAAC,EAEtCK,EAAwC,CAC5C,IAAIC,EAAe,CAEnB,EACA,OAAOA,EAAOC,EAAcC,EAAU,CAAC,EACvC,
|
|
4
|
+
"sourcesContent": ["/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n getName(_constructor) {\n return null;\n },\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "internalGlobalThis", "internalDocument", "subscribeViewerCount", "token", "pollInterval", "callback", "errorCb", "url", "controller", "signal", "timeoutId", "aborted", "fetchViewerCountPoll", "resp", "respObj", "_a", "_b", "_c", "views", "resolve", "Attributes", "DEFAULT_POLL_INTERVAL", "AttributeValues", "ARIA_LABEL", "DEFAULT_VIEWER_COUNT_VALUE", "toAriaLabel", "viewerCount", "viewerCountStr", "template", "_unsubscribeViewerCount", "_viewerCountEl", "viewerCountEl_get", "_views", "_setupViewerCountPolling", "setupViewerCountPolling_fn", "_teardownViewerCountPolling", "teardownViewerCountPolling_fn", "MuxActiveViewerCountElement", "internalGlobalThis", "__privateAdd", "__privateGet", "value", "__privateSet", "temp", "__privateMethod", "attrName", "oldValue", "newValue", "errorMsg", "src_default"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";(()=>{var C=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var r=(e,n,t)=>(C(e,n,"read from private field"),t?t.call(e):n.get(e)),i=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},l=(e,n,t,u)=>(C(e,n,"write to private field"),u?u.call(e,t):n.set(e,t),t);var c=(e,n,t)=>(C(e,n,"access private method"),t);var d=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends d{}globalThis.DocumentFragment=e}var b=class extends d{},_=class extends d{},K={get(e){},define(e,n,t){},upgrade(e){},whenDefined(e){return Promise.resolve(b)}},g,
|
|
1
|
+
"use strict";(()=>{var C=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var r=(e,n,t)=>(C(e,n,"read from private field"),t?t.call(e):n.get(e)),i=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},l=(e,n,t,u)=>(C(e,n,"write to private field"),u?u.call(e,t):n.set(e,t),t);var c=(e,n,t)=>(C(e,n,"access private method"),t);var d=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends d{}globalThis.DocumentFragment=e}var b=class extends d{},_=class extends d{},K={get(e){},define(e,n,t){},getName(e){return null},upgrade(e){},whenDefined(e){return Promise.resolve(b)}},g,N=class{constructor(n,t={}){i(this,g,void 0);l(this,g,t==null?void 0:t.detail)}get detail(){return r(this,g)}initCustomEvent(){}};g=new WeakMap;function B(e,n){return new b}var D={document:{createElement:B},DocumentFragment,customElements:K,CustomEvent:N,EventTarget:d,HTMLElement:b,HTMLVideoElement:_},S=typeof window=="undefined"||typeof globalThis.customElements=="undefined",w=S?D:globalThis,O=S?D.document:globalThis.document;var H=(e,n,t,u)=>{let E=`https://stats.mux.com/counts?token=${e}`,I=new AbortController,G=I.signal,v,R=!1,k=()=>R?Promise.resolve():fetch(E,{signal:G}).then(s=>s.json()).then(s=>{var x,V,y;let p=(V=(x=s==null?void 0:s.data)==null?void 0:x[0])==null?void 0:V.views;return s!=null&&s.error||p==null?Promise.reject((y=s==null?void 0:s.error)!=null?y:"no data in response"):(t(p),p)}).catch(u).then(()=>new Promise(s=>{v=setTimeout(()=>{s(void 0)},n*1e3)})).then(k);return k(),()=>{R=!0,I.abort(),typeof v=="number"&&(clearTimeout(v),v=void 0)}},o={TOKEN:"token",POLL_INTERVAL:"poll-interval",DISABLED:"disabled"},q=20,z=Object.freeze(Object.values(o)),M="Viewer Count",W="??",F=({viewerCount:e})=>{let n=typeof e=="number"?`${e}`:"Unknown";return`${M} ${n}`},$=document.createElement("template");$.innerHTML=`
|
|
2
2
|
<span id="viewer-count">
|
|
3
3
|
${W}
|
|
4
4
|
</span>
|
|
5
|
-
`;var a,T,U,h,f,
|
|
5
|
+
`;var a,T,U,h,f,P,m,A,L=class extends w.HTMLElement{constructor(){super();i(this,T);i(this,f);i(this,m);i(this,a,void 0);i(this,h,void 0);this.attachShadow({mode:"open"}).appendChild($.content.cloneNode(!0))}static get observedAttributes(){return z}get views(){var t;return(t=r(this,h))!=null?t:Number.NaN}get token(){var t;return(t=this.getAttribute(o.TOKEN))!=null?t:""}set token(t){this.token!==t&&(l(this,h,void 0),this.setAttribute(o.TOKEN,t))}get pollInterval(){let t=this.hasAttribute(o.POLL_INTERVAL)?+this.getAttribute(o.POLL_INTERVAL):q;return t<15&&(console.warn("Poll interval must be at least 15 seconds, setting to 15."),t=15),t}set pollInterval(t){this.pollInterval!==t&&this.setAttribute(o.POLL_INTERVAL,`${t}`)}enable(){this.setAttribute("tabindex","0")}disable(){this.removeAttribute("tabindex")}connectedCallback(){this.hasAttribute("disabled")||this.enable(),this.setAttribute("aria-label",F({})),this.setAttribute("role","presentation"),c(this,f,P).call(this)}disconnectedCallback(){c(this,m,A).call(this)}attributeChangedCallback(t,u,E){t===o.POLL_INTERVAL||t===o.TOKEN?(c(this,m,A).call(this),c(this,f,P).call(this)):t===o.DISABLED&&u!==E&&(E?this.disable():this.enable())}};a=new WeakMap,T=new WeakSet,U=function(){return this.shadowRoot.querySelector("#viewer-count")},h=new WeakMap,f=new WeakSet,P=function(){this.token&&this.pollInterval&&!r(this,a)&&l(this,a,H(this.token,this.pollInterval,t=>{l(this,h,t),this.dispatchEvent(new CustomEvent("change",{detail:t})),r(this,T,U).textContent=`${this.views}`,this.setAttribute("aria-label",F({viewerCount:t}))},t=>{this.dispatchEvent(new CustomEvent("error",{detail:t})),console.warn("Failed to retrieve viewer count: Error - ",t),c(this,m,A).call(this)}))},m=new WeakSet,A=function(){var t;(t=r(this,a))==null||t.call(this),l(this,a,void 0)};w.customElements.get("mux-active-viewer-count")||w.customElements.define("mux-active-viewer-count",L);var Z=L;})();
|
|
6
6
|
//# sourceMappingURL=mux-active-viewer-counts.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/polyfills/index.ts", "../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n"],
|
|
5
|
-
"mappings": "wZAEA,IAAMA,EAAN,KAAkB,CAChB,kBAAmB,CAAC,CACpB,qBAAsB,CAAC,CACvB,cAAcC,EAAe,CAC3B,MAAO,EACT,CACF,EAGA,GAAI,OAAO,kBAAqB,YAAa,CAC3C,MAAMC,UAAyBF,CAAY,CAAC,CAE5C,WAAW,iBAAmBE,CAChC,CAEA,IAAMC,EAAN,cAA0BH,CAAY,CAAC,EACjCI,EAAN,cAA+BJ,CAAY,CAAC,EAEtCK,EAAwC,CAC5C,IAAIC,EAAe,CAEnB,EACA,OAAOA,EAAOC,EAAcC,EAAU,CAAC,EACvC,
|
|
4
|
+
"sourcesContent": ["/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n getName(_constructor) {\n return null;\n },\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n"],
|
|
5
|
+
"mappings": "wZAEA,IAAMA,EAAN,KAAkB,CAChB,kBAAmB,CAAC,CACpB,qBAAsB,CAAC,CACvB,cAAcC,EAAe,CAC3B,MAAO,EACT,CACF,EAGA,GAAI,OAAO,kBAAqB,YAAa,CAC3C,MAAMC,UAAyBF,CAAY,CAAC,CAE5C,WAAW,iBAAmBE,CAChC,CAEA,IAAMC,EAAN,cAA0BH,CAAY,CAAC,EACjCI,EAAN,cAA+BJ,CAAY,CAAC,EAEtCK,EAAwC,CAC5C,IAAIC,EAAe,CAEnB,EACA,OAAOA,EAAOC,EAAcC,EAAU,CAAC,EACvC,QAAQD,EAAc,CACpB,OAAO,IACT,EACA,QAAQE,EAAO,CAAC,EAChB,YAAYH,EAAO,CACjB,OAAO,QAAQ,QAAQH,CAAkD,CAC3E,CACF,EAhCAO,EAkCMC,EAAN,KAAkB,CAKhB,YAAYC,EAAiBC,EAAiC,CAAC,EAAG,CAJlEC,EAAA,KAAAJ,EAAA,QAMEK,EAAA,KAAKL,EAAUG,GAAA,YAAAA,EAAe,OAChC,CANA,IAAI,QAAS,CACX,OAAOG,EAAA,KAAKN,EACd,CAKA,iBAAkB,CAAC,CACrB,EATEA,EAAA,YAWF,SAASO,EAAcC,EAAkBV,EAAgD,CACvF,OAAO,IAAIL,CACb,CAEA,IAAMgB,EAAiB,CACrB,SAAU,CACR,cAAAF,CACF,EACA,iBACA,eAAAZ,EACA,YAAAM,EACA,YAAAX,EACA,YAAAG,EACA,iBAAAC,CACF,EAOMgB,EAAW,OAAO,QAAW,aAAe,OAAO,WAAW,gBAAmB,YAEjFC,EAAkCD,EAAWD,EAAiB,WAC9DG,EAA8BF,EAAWD,EAAe,SAAW,WAAW,SCpE7E,IAAMI,EAAuB,CAClCC,EACAC,EACAC,EACAC,IACG,CACH,IAAMC,EAAM,sCAAsCJ,CAAK,GACjDK,EAAa,IAAI,gBACjBC,EAASD,EAAW,OACtBE,EACAC,EAAU,GACRC,EAA2C,IAG3CD,EAAgB,QAAQ,QAAQ,EAIlC,MAAMJ,EAAK,CAAE,OAAAE,CAAO,CAAC,EAElB,KAAMI,GAASA,EAAK,KAAK,CAAC,EAG1B,KAAMC,GAAY,CAzB3B,IAAAC,EAAAC,EAAAC,EA0BU,IAAMC,GAAQF,GAAAD,EAAAD,GAAA,YAAAA,EAAS,OAAT,YAAAC,EAAgB,KAAhB,YAAAC,EAAoB,MAClC,OAAMF,GAAA,MAAAA,EAAS,OAASI,GAAS,KAExB,QAAQ,QAAOD,EAAAH,GAAA,YAAAA,EAAS,QAAT,KAAAG,EAAkB,qBAAqB,GAI/DZ,EAASa,CAAK,EACPA,EACT,CAAC,EAIA,MAAMZ,CAAO,EAGb,KAAK,IACG,IAAI,QAASa,GAAY,CAC9BT,EAAY,WAAW,IAAM,CAC3BS,EAAQ,MAAS,CACnB,EAAGf,EAAe,GAAI,CACxB,CAAC,CACF,EAGA,KAAKQ,CAAoB,EAKhC,OAAAA,EAAqB,EAKd,IAAM,CACXD,EAAU,GACVH,EAAW,MAAM,EACb,OAAOE,GAAc,WACvB,aAAaA,CAAS,EACtBA,EAAY,OAEhB,CACF,EAEMU,EAAa,CACjB,MAAO,QACP,cAAe,gBACf,SAAU,UACZ,EAEMC,EAAwB,GAExBC,EAAkB,OAAO,OAAO,OAAO,OAAOF,CAAU,CAAC,EAEzDG,EAAa,eACbC,EAA6B,KAC7BC,EAAc,CAAC,CAAE,YAAAC,CAAY,IAAgC,CACjE,IAAMC,EAAiB,OAAOD,GAAgB,SAAW,GAAGA,CAAW,GAAK,UAC5E,MAAO,GAAGH,CAAU,IAAII,CAAc,EACxC,EAEMC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAY;AAAA;AAAA,EAEnBJ,CAA0B;AAAA;AAAA,EA3F5B,IAAAK,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EA+FMC,EAAN,cAA0CC,EAAW,WAAY,CAiB/D,aAAc,CACZ,MAAM,EAXRC,EAAA,KAAIT,GA8EJS,EAAA,KAAAN,GAgCAM,EAAA,KAAAJ,GAhHAI,EAAA,KAAAV,EAAA,QAMAU,EAAA,KAAAP,EAAA,QAQqB,KAAK,aAAa,CAAE,KAAM,MAAO,CAAC,EAC1C,YAAYJ,EAAS,QAAQ,UAAU,EAAI,CAAC,CACzD,CApBA,WAAW,oBAAqB,CAC9B,OAAON,CACT,CAUA,IAAI,OAAgB,CA5GtB,IAAAP,EA6GI,OAAOA,EAAAyB,EAAA,KAAKR,KAAL,KAAAjB,EAAe,OAAO,GAC/B,CAQA,IAAI,OAAQ,CAtHd,IAAAA,EAuHI,OAAOA,EAAA,KAAK,aAAaK,EAAW,KAAK,IAAlC,KAAAL,EAAuC,EAChD,CAEA,IAAI,MAAM0B,EAAe,CACnB,KAAK,QAAUA,IACnBC,EAAA,KAAKV,EAAS,QACd,KAAK,aAAaZ,EAAW,MAAOqB,CAAK,EAC3C,CAEA,IAAI,cAAe,CACjB,IAAIE,EAAO,KAAK,aAAavB,EAAW,aAAa,EACjD,CAAE,KAAK,aAAaA,EAAW,aAAa,EAC5CC,EACJ,OAAIsB,EAAO,KACT,QAAQ,KAAK,2DAA2D,EACxEA,EAAO,IAEFA,CACT,CAEA,IAAI,aAAaF,EAAe,CAC1B,KAAK,eAAiBA,GAC1B,KAAK,aAAarB,EAAW,cAAe,GAAGqB,CAAK,EAAE,CACxD,CAEA,QAAS,CACP,KAAK,aAAa,WAAY,GAAG,CACnC,CAEA,SAAU,CACR,KAAK,gBAAgB,UAAU,CACjC,CAEA,mBAAoB,CACb,KAAK,aAAa,UAAU,GAC/B,KAAK,OAAO,EAId,KAAK,aAAa,aAAchB,EAAY,CAAC,CAAC,CAAC,EAC/C,KAAK,aAAa,OAAQ,cAAc,EACxCmB,EAAA,KAAKX,EAAAC,GAAL,UACF,CAEA,sBAAuB,CACrBU,EAAA,KAAKT,EAAAC,GAAL,UACF,CAEA,yBAAyBS,EAAkBC,EAAyBC,EAAyB,CACvFF,IAAazB,EAAW,eAAiByB,IAAazB,EAAW,OACnEwB,EAAA,KAAKT,EAAAC,GAAL,WACAQ,EAAA,KAAKX,EAAAC,GAAL,YACSW,IAAazB,EAAW,UAAY0B,IAAaC,IACtDA,EACF,KAAK,QAAQ,EAEb,KAAK,OAAO,EAGlB,CAsCF,EApHElB,EAAA,YAEIC,EAAA,YAAAC,EAAc,UAAG,CACnB,OAAQ,KAAK,WAA0B,cAAc,eAAe,CACtE,EAEAC,EAAA,YA0EAC,EAAA,YAAAC,EAAwB,UAAG,CACrB,KAAK,OAAS,KAAK,cAAgB,CAACM,EAAA,KAAKX,IAC3Ca,EAAA,KAAKb,EAA0B3B,EAC7B,KAAK,MACL,KAAK,aAEJgB,GAAU,CACTwB,EAAA,KAAKV,EAASd,GACd,KAAK,cACH,IAAI,YAAY,SAAU,CACxB,OAAQA,CACV,CAAC,CACH,EACAsB,EAAA,KAAKV,EAAAC,GAAe,YAAc,GAAG,KAAK,KAAK,GAE/C,KAAK,aAAa,aAAcN,EAAY,CAAE,YAAaP,CAAM,CAAC,CAAC,CACrE,EAEC8B,GAAa,CACZ,KAAK,cACH,IAAI,YAAY,QAAS,CACvB,OAAQA,CACV,CAAC,CACH,EAEA,QAAQ,KAAK,4CAA6CA,CAAQ,EAClEJ,EAAA,KAAKT,EAAAC,GAAL,UACF,CACF,EAEJ,EAEAD,EAAA,YAAAC,EAA2B,UAAG,CApNhC,IAAArB,GAqNIA,EAAAyB,EAAA,KAAKX,KAAL,MAAAd,EAAA,WACA2B,EAAA,KAAKb,EAA0B,OACjC,EAGGS,EAAW,eAAe,IAAI,yBAAyB,GAC1DA,EAAW,eAAe,OAAO,0BAA2BD,CAA2B,EAGzF,IAAOY,EAAQZ",
|
|
6
6
|
"names": ["EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "internalGlobalThis", "internalDocument", "subscribeViewerCount", "token", "pollInterval", "callback", "errorCb", "url", "controller", "signal", "timeoutId", "aborted", "fetchViewerCountPoll", "resp", "respObj", "_a", "_b", "_c", "views", "resolve", "Attributes", "DEFAULT_POLL_INTERVAL", "AttributeValues", "ARIA_LABEL", "DEFAULT_VIEWER_COUNT_VALUE", "toAriaLabel", "viewerCount", "viewerCountStr", "template", "_unsubscribeViewerCount", "_viewerCountEl", "viewerCountEl_get", "_views", "_setupViewerCountPolling", "setupViewerCountPolling_fn", "_teardownViewerCountPolling", "teardownViewerCountPolling_fn", "MuxActiveViewerCountElement", "internalGlobalThis", "__privateAdd", "__privateGet", "value", "__privateSet", "temp", "__privateMethod", "attrName", "oldValue", "newValue", "errorMsg", "src_default"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var C=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var r=(e,n,t)=>(C(e,n,"read from private field"),t?t.call(e):n.get(e)),i=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},l=(e,n,t,u)=>(C(e,n,"write to private field"),u?u.call(e,t):n.set(e,t),t);var c=(e,n,t)=>(C(e,n,"access private method"),t);var d=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends d{}globalThis.DocumentFragment=e}var b=class extends d{},_=class extends d{},K={get(e){},define(e,n,t){},upgrade(e){},whenDefined(e){return Promise.resolve(b)}},g,
|
|
1
|
+
var C=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var r=(e,n,t)=>(C(e,n,"read from private field"),t?t.call(e):n.get(e)),i=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},l=(e,n,t,u)=>(C(e,n,"write to private field"),u?u.call(e,t):n.set(e,t),t);var c=(e,n,t)=>(C(e,n,"access private method"),t);var d=class{addEventListener(){}removeEventListener(){}dispatchEvent(n){return!0}};if(typeof DocumentFragment=="undefined"){class e extends d{}globalThis.DocumentFragment=e}var b=class extends d{},_=class extends d{},K={get(e){},define(e,n,t){},getName(e){return null},upgrade(e){},whenDefined(e){return Promise.resolve(b)}},g,N=class{constructor(n,t={}){i(this,g,void 0);l(this,g,t==null?void 0:t.detail)}get detail(){return r(this,g)}initCustomEvent(){}};g=new WeakMap;function B(e,n){return new b}var D={document:{createElement:B},DocumentFragment,customElements:K,CustomEvent:N,EventTarget:d,HTMLElement:b,HTMLVideoElement:_},S=typeof window=="undefined"||typeof globalThis.customElements=="undefined",w=S?D:globalThis,O=S?D.document:globalThis.document;var H=(e,n,t,u)=>{let E=`https://stats.mux.com/counts?token=${e}`,I=new AbortController,G=I.signal,v,R=!1,k=()=>R?Promise.resolve():fetch(E,{signal:G}).then(s=>s.json()).then(s=>{var x,V,y;let p=(V=(x=s==null?void 0:s.data)==null?void 0:x[0])==null?void 0:V.views;return s!=null&&s.error||p==null?Promise.reject((y=s==null?void 0:s.error)!=null?y:"no data in response"):(t(p),p)}).catch(u).then(()=>new Promise(s=>{v=setTimeout(()=>{s(void 0)},n*1e3)})).then(k);return k(),()=>{R=!0,I.abort(),typeof v=="number"&&(clearTimeout(v),v=void 0)}},o={TOKEN:"token",POLL_INTERVAL:"poll-interval",DISABLED:"disabled"},q=20,z=Object.freeze(Object.values(o)),M="Viewer Count",W="??",F=({viewerCount:e})=>{let n=typeof e=="number"?`${e}`:"Unknown";return`${M} ${n}`},$=document.createElement("template");$.innerHTML=`
|
|
2
2
|
<span id="viewer-count">
|
|
3
3
|
${W}
|
|
4
4
|
</span>
|
|
5
|
-
`;var a,T,U,h,f,
|
|
5
|
+
`;var a,T,U,h,f,P,m,A,L=class extends w.HTMLElement{constructor(){super();i(this,T);i(this,f);i(this,m);i(this,a,void 0);i(this,h,void 0);this.attachShadow({mode:"open"}).appendChild($.content.cloneNode(!0))}static get observedAttributes(){return z}get views(){var t;return(t=r(this,h))!=null?t:Number.NaN}get token(){var t;return(t=this.getAttribute(o.TOKEN))!=null?t:""}set token(t){this.token!==t&&(l(this,h,void 0),this.setAttribute(o.TOKEN,t))}get pollInterval(){let t=this.hasAttribute(o.POLL_INTERVAL)?+this.getAttribute(o.POLL_INTERVAL):q;return t<15&&(console.warn("Poll interval must be at least 15 seconds, setting to 15."),t=15),t}set pollInterval(t){this.pollInterval!==t&&this.setAttribute(o.POLL_INTERVAL,`${t}`)}enable(){this.setAttribute("tabindex","0")}disable(){this.removeAttribute("tabindex")}connectedCallback(){this.hasAttribute("disabled")||this.enable(),this.setAttribute("aria-label",F({})),this.setAttribute("role","presentation"),c(this,f,P).call(this)}disconnectedCallback(){c(this,m,A).call(this)}attributeChangedCallback(t,u,E){t===o.POLL_INTERVAL||t===o.TOKEN?(c(this,m,A).call(this),c(this,f,P).call(this)):t===o.DISABLED&&u!==E&&(E?this.disable():this.enable())}};a=new WeakMap,T=new WeakSet,U=function(){return this.shadowRoot.querySelector("#viewer-count")},h=new WeakMap,f=new WeakSet,P=function(){this.token&&this.pollInterval&&!r(this,a)&&l(this,a,H(this.token,this.pollInterval,t=>{l(this,h,t),this.dispatchEvent(new CustomEvent("change",{detail:t})),r(this,T,U).textContent=`${this.views}`,this.setAttribute("aria-label",F({viewerCount:t}))},t=>{this.dispatchEvent(new CustomEvent("error",{detail:t})),console.warn("Failed to retrieve viewer count: Error - ",t),c(this,m,A).call(this)}))},m=new WeakSet,A=function(){var t;(t=r(this,a))==null||t.call(this),l(this,a,void 0)};w.customElements.get("mux-active-viewer-count")||w.customElements.define("mux-active-viewer-count",L);var Z=L;export{Z as default,H as subscribeViewerCount};
|
|
6
6
|
//# sourceMappingURL=mux-active-viewer-counts.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/polyfills/index.ts", "../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n"],
|
|
5
|
-
"mappings": "qYAEA,IAAMA,EAAN,KAAkB,CAChB,kBAAmB,CAAC,CACpB,qBAAsB,CAAC,CACvB,cAAcC,EAAe,CAC3B,MAAO,EACT,CACF,EAGA,GAAI,OAAO,kBAAqB,YAAa,CAC3C,MAAMC,UAAyBF,CAAY,CAAC,CAE5C,WAAW,iBAAmBE,CAChC,CAEA,IAAMC,EAAN,cAA0BH,CAAY,CAAC,EACjCI,EAAN,cAA+BJ,CAAY,CAAC,EAEtCK,EAAwC,CAC5C,IAAIC,EAAe,CAEnB,EACA,OAAOA,EAAOC,EAAcC,EAAU,CAAC,EACvC,
|
|
4
|
+
"sourcesContent": ["/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n getName(_constructor) {\n return null;\n },\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "import { globalThis } from './polyfills';\n\nexport const subscribeViewerCount = (\n token: string,\n pollInterval: number,\n callback: (views: number) => void,\n errorCb: (errorMsg: string) => void\n) => {\n const url = `https://stats.mux.com/counts?token=${token}`;\n const controller = new AbortController();\n const signal = controller.signal;\n let timeoutId: number | undefined;\n let aborted = false;\n const fetchViewerCountPoll: () => Promise<any> = () => {\n // If the polling has been aborted (via an \"unsubscribe()\"),\n // we can simply bail on the recursion.\n if (aborted) return Promise.resolve();\n // GET the latest view count, providing an abort signal\n // for unsubscription.\n return (\n fetch(url, { signal })\n // Grab the JSON value of the response\n .then((resp) => resp.json())\n // Confirm that response wasn't an error and the JSON\n // has the expected data\n .then((respObj) => {\n const views = respObj?.data?.[0]?.views;\n if (!!respObj?.error || views == null) {\n // If not, treat as an error.\n return Promise.reject(respObj?.error ?? 'no data in response');\n }\n // Otherwise, we successfully retrieved the latest views, so\n // provide that info out via `callback()`.\n callback(views);\n return views;\n })\n // Catch and invoke errorCb before timeout + re-fetch. This allows\n // for re-fetching by default, but provides the opportunity\n // to unsubscribe externally via `errorCb` if desired (CJP)\n .catch(errorCb)\n // Wait the duration of the polling interval before restarting\n // the next fetch\n .then(() => {\n return new Promise((resolve) => {\n timeoutId = setTimeout(() => {\n resolve(undefined);\n }, pollInterval * 1000);\n });\n })\n // Restart process of re-fetching by invoking this method again\n // (async recursion)\n .then(fetchViewerCountPoll)\n );\n };\n\n // Kick off the polling functionality.\n fetchViewerCountPoll();\n\n // Return an \"unsubscribe()\" function. Invoking this will abort\n // any mid-flight fetches, clear any pending timeouts for\n // a re-fetch, and mark this process as \"aborted\".\n return () => {\n aborted = true;\n controller.abort();\n if (typeof timeoutId === 'number') {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n };\n};\n\nconst Attributes = {\n TOKEN: 'token',\n POLL_INTERVAL: 'poll-interval',\n DISABLED: 'disabled',\n};\n\nconst DEFAULT_POLL_INTERVAL = 20;\n\nconst AttributeValues = Object.freeze(Object.values(Attributes));\n\nconst ARIA_LABEL = 'Viewer Count';\nconst DEFAULT_VIEWER_COUNT_VALUE = '??';\nconst toAriaLabel = ({ viewerCount }: { viewerCount?: number }) => {\n const viewerCountStr = typeof viewerCount === 'number' ? `${viewerCount}` : 'Unknown';\n return `${ARIA_LABEL} ${viewerCountStr}`;\n};\n\nconst template = document.createElement('template');\ntemplate.innerHTML = `\n<span id=\"viewer-count\">\n${DEFAULT_VIEWER_COUNT_VALUE}\n</span>\n`;\n\nclass MuxActiveViewerCountElement extends globalThis.HTMLElement {\n static get observedAttributes() {\n return AttributeValues;\n }\n\n #unsubscribeViewerCount: (() => void) | undefined;\n\n get #viewerCountEl() {\n return (this.shadowRoot as ShadowRoot).querySelector('#viewer-count') as HTMLElement;\n }\n\n #views?: number;\n\n get views(): number {\n return this.#views ?? Number.NaN;\n }\n\n constructor() {\n super();\n const shadowRoot = this.attachShadow({ mode: 'open' });\n shadowRoot.appendChild(template.content.cloneNode(true));\n }\n\n get token() {\n return this.getAttribute(Attributes.TOKEN) ?? '';\n }\n\n set token(value: string) {\n if (this.token === value) return;\n this.#views = undefined;\n this.setAttribute(Attributes.TOKEN, value);\n }\n\n get pollInterval() {\n let temp = this.hasAttribute(Attributes.POLL_INTERVAL)\n ? +(this.getAttribute(Attributes.POLL_INTERVAL) as string)\n : DEFAULT_POLL_INTERVAL;\n if (temp < 15) {\n console.warn('Poll interval must be at least 15 seconds, setting to 15.');\n temp = 15;\n }\n return temp;\n }\n\n set pollInterval(value: number) {\n if (this.pollInterval === value) return;\n this.setAttribute(Attributes.POLL_INTERVAL, `${value}`);\n }\n\n enable() {\n this.setAttribute('tabindex', '0');\n }\n\n disable() {\n this.removeAttribute('tabindex');\n }\n\n connectedCallback() {\n if (!this.hasAttribute('disabled')) {\n this.enable();\n }\n\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({}));\n this.setAttribute('role', 'presentation');\n this.#setupViewerCountPolling();\n }\n\n disconnectedCallback() {\n this.#teardownViewerCountPolling();\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n if (attrName === Attributes.POLL_INTERVAL || attrName === Attributes.TOKEN) {\n this.#teardownViewerCountPolling();\n this.#setupViewerCountPolling();\n } else if (attrName === Attributes.DISABLED && oldValue !== newValue) {\n if (newValue) {\n this.disable();\n } else {\n this.enable();\n }\n }\n }\n\n #setupViewerCountPolling() {\n if (this.token && this.pollInterval && !this.#unsubscribeViewerCount) {\n this.#unsubscribeViewerCount = subscribeViewerCount(\n this.token,\n this.pollInterval,\n // Success callback\n (views) => {\n this.#views = views;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: views,\n })\n );\n this.#viewerCountEl.textContent = `${this.views}`;\n /** @TODO Update to use `viewerCount` prop when available (CJP) */\n this.setAttribute('aria-label', toAriaLabel({ viewerCount: views }));\n },\n // Error callback\n (errorMsg) => {\n this.dispatchEvent(\n new CustomEvent('error', {\n detail: errorMsg,\n })\n );\n /** @TODO Consider adding retry count/logic (CJP) */\n console.warn('Failed to retrieve viewer count: Error - ', errorMsg);\n this.#teardownViewerCountPolling();\n }\n );\n }\n }\n\n #teardownViewerCountPolling() {\n this.#unsubscribeViewerCount?.();\n this.#unsubscribeViewerCount = undefined;\n }\n}\n\nif (!globalThis.customElements.get('mux-active-viewer-count')) {\n globalThis.customElements.define('mux-active-viewer-count', MuxActiveViewerCountElement);\n}\n\nexport default MuxActiveViewerCountElement;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "internalGlobalThis", "internalDocument", "subscribeViewerCount", "token", "pollInterval", "callback", "errorCb", "url", "controller", "signal", "timeoutId", "aborted", "fetchViewerCountPoll", "resp", "respObj", "_a", "_b", "_c", "views", "resolve", "Attributes", "DEFAULT_POLL_INTERVAL", "AttributeValues", "ARIA_LABEL", "DEFAULT_VIEWER_COUNT_VALUE", "toAriaLabel", "viewerCount", "viewerCountStr", "template", "_unsubscribeViewerCount", "_viewerCountEl", "viewerCountEl_get", "_views", "_setupViewerCountPolling", "setupViewerCountPolling_fn", "_teardownViewerCountPolling", "teardownViewerCountPolling_fn", "MuxActiveViewerCountElement", "internalGlobalThis", "__privateAdd", "__privateGet", "value", "__privateSet", "temp", "__privateMethod", "attrName", "oldValue", "newValue", "errorMsg", "src_default"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2019.full.d.ts","../src/polyfills/index.ts","../src/index.ts","../../../types/media-chrome.d.ts"],"fileInfos":[{"version":"
|
|
1
|
+
{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.es2019.full.d.ts","../src/polyfills/index.ts","../src/index.ts","../../../types/media-chrome.d.ts"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7",{"version":"4af6b0c727b7a2896463d512fafd23634229adf69ac7c00e2ae15a09cb084fad","affectsGlobalScope":true},{"version":"9c00a480825408b6a24c63c1b71362232927247595d7c97659bc24dc68ae0757","affectsGlobalScope":true},{"version":"0c9e4447ddca10e8097a736ce41bb37ac3389ede46e419ee78c1161a14e9e8ba","affectsGlobalScope":true},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"08f6861df84fba9719c14d5adc3ba40be9f0c687639e6c4df3c05b9301b8ff94",{"version":"561a0545e4ce088251e89b294d0dd072099f35053b97ab589e71c6277e4b45c0","signature":"2f39ccc3f2cad7f2a1e0ad14a744877ed08dae4ae75510109ac981ceb783b566"},{"version":"f559ece2f436a53544cae205479cba596934de2fb54254b17ad3165dc9108dfd","signature":"7ad98c1bd272f1c6a67a6f9cf365eb43c9fdc4cc490eda9e9a54bd37deef4709"},"3cf4c7825a6c0ef1965e8906b85844aafdcdda9d95c8b4bcfcb3a20811cfd0b1"],"root":[[42,44]],"options":{"composite":true,"declaration":true,"emitDeclarationOnly":true,"esModuleInterop":true,"module":5,"noImplicitAny":true,"outDir":"./types","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":6},"fileIdsList":[[42]],"referencedMap":[[43,1]],"latestChangedDtsFile":"./types/index.d.ts"},"version":"5.5.4"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mux/mux-active-viewer-count",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.9",
|
|
4
4
|
"description": "A custom Mux element to show the current viewer count for the browser that Just Works™",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"analytics",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"scripts": {
|
|
43
43
|
"clean": "shx rm -rf dist/ && shx rm -rf src/polyfills",
|
|
44
|
-
"lint": "eslint src/ --ext .js,.jsx,.ts,.tsx",
|
|
44
|
+
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint src/ --ext .js,.jsx,.ts,.tsx",
|
|
45
45
|
"test": "web-test-runner **/*test.js --port 8006 --coverage --config test/web-test-runner.config.mjs --root-dir ../..",
|
|
46
46
|
"posttest": "replace 'SF:src/' 'SF:packages/mux-active-viewer-counts/src/' coverage/lcov.info --silent",
|
|
47
47
|
"dev:iife": "yarn build:iife --watch=forever",
|
|
@@ -62,19 +62,19 @@
|
|
|
62
62
|
"publish-release": "../../scripts/publish.sh"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@open-wc/testing": "^
|
|
66
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
67
|
-
"@typescript-eslint/parser": "^
|
|
68
|
-
"@web/dev-server-esbuild": "^0.
|
|
69
|
-
"@web/dev-server-import-maps": "^0.
|
|
70
|
-
"@web/test-runner": "^0.
|
|
65
|
+
"@open-wc/testing": "^4.0.0",
|
|
66
|
+
"@typescript-eslint/eslint-plugin": "^8.3.0",
|
|
67
|
+
"@typescript-eslint/parser": "^8.3.0",
|
|
68
|
+
"@web/dev-server-esbuild": "^1.0.2",
|
|
69
|
+
"@web/dev-server-import-maps": "^0.2.1",
|
|
70
|
+
"@web/test-runner": "^0.18.2",
|
|
71
71
|
"downlevel-dts": "^0.11.0",
|
|
72
72
|
"esbuild": "^0.19.8",
|
|
73
|
-
"eslint": "^
|
|
73
|
+
"eslint": "^9.9.1",
|
|
74
74
|
"npm-run-all": "^4.1.5",
|
|
75
75
|
"replace": "^1.2.1",
|
|
76
76
|
"shx": "^0.3.4",
|
|
77
|
-
"typescript": "^
|
|
77
|
+
"typescript": "^5.5.4"
|
|
78
78
|
},
|
|
79
|
-
"gitHead": "
|
|
79
|
+
"gitHead": "5ae58b9de16ae2dcd807276bb6539c1f8cfab800"
|
|
80
80
|
}
|