UNPKG

social-link-parser

Version:

Extract usernames, IDs, and metadata from social media URLs across 100+ platforms

59 lines 2.34 kB
import { registry } from '../platforms/index.js'; export function parse(url) { let processedUrl = url.trim(); if (!processedUrl.match(/^https?:\/\//i) && !processedUrl.startsWith('mailto:') && !processedUrl.startsWith('tel:')) { const isEmail = /^[^@]+@[^@]+\.[^@]+$/.test(processedUrl); if (processedUrl.includes('.') && !isEmail) { processedUrl = `https://${processedUrl}`; } } const result = { isValid: false, originalUrl: url, normalizedUrl: processedUrl, platform: null, ids: {}, metadata: {}, }; for (const [, module] of registry) { if (module.detect(processedUrl)) { result.platform = module.id; result.platformName = module.name; const extractedData = module.extract(processedUrl); if (extractedData) { if (extractedData.username) result.username = extractedData.username; if (extractedData.userId) result.userId = extractedData.userId; if (extractedData.ids) { result.ids = { ...result.ids, ...extractedData.ids }; } if (extractedData.metadata) { result.metadata = { ...result.metadata, ...extractedData.metadata }; } result.normalizedUrl = module.normalizeUrl(processedUrl); result.isValid = true; if (module.getEmbedInfo) { const embedInfo = module.getEmbedInfo(processedUrl); if (embedInfo) { result.embedData = { platform: module.id, type: embedInfo.type || 'iframe', contentId: result.ids.videoId || result.ids.postId || result.ids.trackId || '', embedUrl: embedInfo.embedUrl, options: embedInfo.options, }; if (embedInfo.isEmbedAlready) { result.metadata.isEmbed = true; } } } } break; } } return result; } //# sourceMappingURL=parser.js.map