Path: blob/main/plugins/default-browser-emulator/lib/utils/parseNavigatorPlugins.ts
1030 views
export default function parseNavigatorPlugins(navigator: any) {1const mimesJson = readDomOutput(navigator.mimeTypes);2const mimeTypes: any[] = Object.entries(mimesJson)3.filter(x => x[0].match(/\d+/))4.map(x => x[1]);56const firstMimeType = (mimeTypes[0] as any).type;7const mimesListHasRefForTypeEntry =8typeof mimesJson[firstMimeType] === 'string' &&9(mimesJson[firstMimeType] as string).startsWith('REF: ');1011const pluginJson = readDomOutput(navigator.plugins);12const plugins: any[] = Object.entries(pluginJson)13.filter(x => x[0].match(/\d+/))14.map(x => x[1]);1516for (const plugin of plugins) {17delete plugin.length;18for (const [pluginKey, pluginProp] of Object.entries(plugin)) {19if (pluginKey.match(/\d+/)) {20const mimeType = (pluginProp as any).type as string;21delete plugin[pluginKey];22delete plugin[mimeType];23mimeTypes.find(x => x.type === mimeType).__pluginName = plugin.name;24}25}26}2728return {29mimeTypes,30mimesListHasRefForTypeEntry,31plugins,32};33}3435function readDomOutput(entry) {36if (entry._$type === 'object') {37const obj = {};38const props = Object.entries(entry);39for (const [prop, value] of props) {40if (prop.startsWith('_$')) continue;41obj[prop] = readDomOutput(value);42}43return obj;44}45if (entry._$value !== undefined) {46return entry._$value;47}48return entry;49}505152