vue-identify-network
Version:
Vue 3 component and composable for detecting network speed, connection type (4G, wifi, 2g, 3g), data saver, and Network Information API.
1 lines • 4.73 kB
Source Map (JSON)
{"version":3,"file":"index.js","names":["VueIdentifyNetwork"],"sources":["../src/components/VueIdentifyNetwork.vue","../src/utils/config/index.ts","../src/install.ts"],"sourcesContent":["<script setup lang=\"ts\">\n import { ref, computed, onBeforeUnmount, onMounted } from 'vue';\n\n export type NetworkType = null | 'Unknown' | '2g' | '3g' | '4g' | 'wifi';\n export type Evented = {\n currentTarget: {\n effectiveType: NetworkType;\n downlink: number;\n };\n };\n\n declare global {\n interface Navigator {\n connection: {\n onchange: null | ((e: Evented) => void);\n addEventListener(type: 'change', listener: (e: Evented) => void): void;\n removeEventListener(\n type: 'change',\n listener: (e: Evented) => void,\n ): void;\n effectiveType: NetworkType;\n rtt: number;\n downlink: number;\n saveData: boolean;\n };\n }\n }\n const unknownClass = defineModel<string | null>('unknownClass', {\n required: false,\n default: null,\n });\n const slowClass = defineModel<string | null>('slowClass', {\n required: false,\n default: null,\n });\n const fastClass = defineModel<string | null>('fastClass', {\n required: false,\n default: null,\n });\n\n const emits = defineEmits<{\n 'network-type': [e: NetworkType];\n 'network-speed': [e: number | 'Unknown'];\n }>();\n\n const type = ref<NetworkType | null>(null);\n const downLink = ref<'Unknown' | number>('Unknown');\n const vendor = computed(() =>\n typeof window === 'undefined' ? 'Unknown' : navigator.vendor,\n );\n\n onMounted(() => {\n if (vendor.value.includes('Google') && type.value !== 'Unknown') {\n type.value = navigator.connection.effectiveType;\n downLink.value = navigator.connection.downlink;\n } else {\n type.value = 'Unknown';\n downLink.value = 'Unknown';\n }\n emits('network-type', type.value);\n emits('network-speed', downLink.value);\n navigator.connection.addEventListener('change', updateConnection);\n });\n\n onBeforeUnmount(() => {\n navigator.connection.removeEventListener('change', updateConnection);\n });\n\n const updateConnection = (e: Evented): void => {\n type.value = e.currentTarget && e.currentTarget.effectiveType;\n downLink.value = e.currentTarget && e.currentTarget.downlink;\n emits('network-type', type.value);\n emits('network-speed', downLink.value);\n };\n</script>\n\n<template>\n <div v-if=\"type === 'Unknown'\" :class=\"unknownClass\">\n <slot name=\"unknown\" />\n </div>\n <div v-if=\"type === '2g'\" :class=\"slowClass\">\n <slot name=\"slow\" />\n </div>\n <div v-if=\"type !== '2g' && type !== 'Unknown'\" :class=\"fastClass\">\n <slot name=\"fast\" />\n </div>\n</template>\n","import { App as Application } from 'vue';\n\nconst config = {};\n\nexport let VueInstance: Application;\n\nexport { config as default };\n\nexport const setVueInstance = (instance: Application) => {\n VueInstance = instance;\n};\n","import { App as Application, Plugin } from 'vue';\nimport VueIdentifyNetwork from './components/VueIdentifyNetwork.vue';\nimport { setVueInstance } from './utils/config';\n\nlet installed = false;\n\nconst install: Exclude<Plugin['install'], undefined> = (app: Application) => {\n if (!installed) {\n setVueInstance(app);\n app.component('VueIdentifyNetwork', VueIdentifyNetwork);\n installed = true;\n }\n};\n\nexport default install;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BE,MAAM,eAAe,SAA0B,SAAC,eAG/C;EACD,MAAM,YAAY,SAA0B,SAAC,YAG5C;EACD,MAAM,YAAY,SAA0B,SAAC,YAG5C;EAED,MAAM,QAAQ;EAKd,MAAM,OAAO,IAAwB,KAAI;EACzC,MAAM,WAAW,IAAwB,UAAS;EAClD,MAAM,SAAS,eACb,OAAO,WAAW,cAAc,YAAY,UAAU,OACxD;EAEA,gBAAgB;GACd,IAAI,OAAO,MAAM,SAAS,SAAQ,IAAK,KAAK,UAAU,WAAW;IAC/D,KAAK,QAAQ,UAAU,WAAW;IAClC,SAAS,QAAQ,UAAU,WAAW;UACjC;IACL,KAAK,QAAQ;IACb,SAAS,QAAQ;;GAEnB,MAAM,gBAAgB,KAAK,MAAK;GAChC,MAAM,iBAAiB,SAAS,MAAK;GACrC,UAAU,WAAW,iBAAiB,UAAU,iBAAgB;IACjE;EAED,sBAAsB;GACpB,UAAU,WAAW,oBAAoB,UAAU,iBAAgB;IACpE;EAED,MAAM,oBAAoB,MAAqB;GAC7C,KAAK,QAAQ,EAAE,iBAAiB,EAAE,cAAc;GAChD,SAAS,QAAQ,EAAE,iBAAiB,EAAE,cAAc;GACpD,MAAM,gBAAgB,KAAK,MAAK;GAChC,MAAM,iBAAiB,SAAS,MAAK;;;;IAK5B,KAAA,UAAI,aAAA,WAAA,EAAf,mBAEM,OAAA;;KAF0B,OAAK,eAAE,aAAA,MAAY;QACjD,WAAuB,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;IAEd,KAAA,UAAI,QAAA,WAAA,EAAf,mBAEM,OAAA;;KAFqB,OAAK,eAAE,UAAA,MAAS;QACzC,WAAoB,KAAA,QAAA,OAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;IAEX,KAAA,UAAI,QAAa,KAAA,UAAI,aAAA,WAAA,EAAhC,mBAEM,OAAA;;KAF2C,OAAK,eAAE,UAAA,MAAS;QAC/D,WAAoB,KAAA,QAAA,OAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;;;;;;;AEhFxB,IAAI,YAAY;AAEhB,MAAM,WAAkD,QAAqB;CAC3E,IAAI,CAAC,WAAW;EAEd,IAAI,UAAU,sBAAsBA,UAAmB;EACvD,YAAY"}