UNPKG

next

Version:

The React Framework

452 lines (451 loc) • 15.5 kB
import { Meta, MetaFilter, MultiMeta } from './meta'; export function OpenGraphMetadata({ openGraph }) { var _openGraph_title, _openGraph_url, _openGraph_ttl; if (!openGraph) { return null; } let typedOpenGraph; if ('type' in openGraph) { const openGraphType = openGraph.type; switch(openGraphType){ case 'website': typedOpenGraph = [ Meta({ property: 'og:type', content: 'website' }) ]; break; case 'article': var _openGraph_publishedTime, _openGraph_modifiedTime, _openGraph_expirationTime; typedOpenGraph = [ Meta({ property: 'og:type', content: 'article' }), Meta({ property: 'article:published_time', content: (_openGraph_publishedTime = openGraph.publishedTime) == null ? void 0 : _openGraph_publishedTime.toString() }), Meta({ property: 'article:modified_time', content: (_openGraph_modifiedTime = openGraph.modifiedTime) == null ? void 0 : _openGraph_modifiedTime.toString() }), Meta({ property: 'article:expiration_time', content: (_openGraph_expirationTime = openGraph.expirationTime) == null ? void 0 : _openGraph_expirationTime.toString() }), MultiMeta({ propertyPrefix: 'article:author', contents: openGraph.authors }), Meta({ property: 'article:section', content: openGraph.section }), MultiMeta({ propertyPrefix: 'article:tag', contents: openGraph.tags }) ]; break; case 'book': typedOpenGraph = [ Meta({ property: 'og:type', content: 'book' }), Meta({ property: 'book:isbn', content: openGraph.isbn }), Meta({ property: 'book:release_date', content: openGraph.releaseDate }), MultiMeta({ propertyPrefix: 'book:author', contents: openGraph.authors }), MultiMeta({ propertyPrefix: 'book:tag', contents: openGraph.tags }) ]; break; case 'profile': typedOpenGraph = [ Meta({ property: 'og:type', content: 'profile' }), Meta({ property: 'profile:first_name', content: openGraph.firstName }), Meta({ property: 'profile:last_name', content: openGraph.lastName }), Meta({ property: 'profile:username', content: openGraph.username }), Meta({ property: 'profile:gender', content: openGraph.gender }) ]; break; case 'music.song': var _openGraph_duration; typedOpenGraph = [ Meta({ property: 'og:type', content: 'music.song' }), Meta({ property: 'music:duration', content: (_openGraph_duration = openGraph.duration) == null ? void 0 : _openGraph_duration.toString() }), MultiMeta({ propertyPrefix: 'music:album', contents: openGraph.albums }), MultiMeta({ propertyPrefix: 'music:musician', contents: openGraph.musicians }) ]; break; case 'music.album': typedOpenGraph = [ Meta({ property: 'og:type', content: 'music.album' }), MultiMeta({ propertyPrefix: 'music:song', contents: openGraph.songs }), MultiMeta({ propertyPrefix: 'music:musician', contents: openGraph.musicians }), Meta({ property: 'music:release_date', content: openGraph.releaseDate }) ]; break; case 'music.playlist': typedOpenGraph = [ Meta({ property: 'og:type', content: 'music.playlist' }), MultiMeta({ propertyPrefix: 'music:song', contents: openGraph.songs }), MultiMeta({ propertyPrefix: 'music:creator', contents: openGraph.creators }) ]; break; case 'music.radio_station': typedOpenGraph = [ Meta({ property: 'og:type', content: 'music.radio_station' }), MultiMeta({ propertyPrefix: 'music:creator', contents: openGraph.creators }) ]; break; case 'video.movie': typedOpenGraph = [ Meta({ property: 'og:type', content: 'video.movie' }), MultiMeta({ propertyPrefix: 'video:actor', contents: openGraph.actors }), MultiMeta({ propertyPrefix: 'video:director', contents: openGraph.directors }), MultiMeta({ propertyPrefix: 'video:writer', contents: openGraph.writers }), Meta({ property: 'video:duration', content: openGraph.duration }), Meta({ property: 'video:release_date', content: openGraph.releaseDate }), MultiMeta({ propertyPrefix: 'video:tag', contents: openGraph.tags }) ]; break; case 'video.episode': typedOpenGraph = [ Meta({ property: 'og:type', content: 'video.episode' }), MultiMeta({ propertyPrefix: 'video:actor', contents: openGraph.actors }), MultiMeta({ propertyPrefix: 'video:director', contents: openGraph.directors }), MultiMeta({ propertyPrefix: 'video:writer', contents: openGraph.writers }), Meta({ property: 'video:duration', content: openGraph.duration }), Meta({ property: 'video:release_date', content: openGraph.releaseDate }), MultiMeta({ propertyPrefix: 'video:tag', contents: openGraph.tags }), Meta({ property: 'video:series', content: openGraph.series }) ]; break; case 'video.tv_show': typedOpenGraph = [ Meta({ property: 'og:type', content: 'video.tv_show' }) ]; break; case 'video.other': typedOpenGraph = [ Meta({ property: 'og:type', content: 'video.other' }) ]; break; default: const _exhaustiveCheck = openGraphType; throw Object.defineProperty(new Error(`Invalid OpenGraph type: ${_exhaustiveCheck}`), "__NEXT_ERROR_CODE", { value: "E237", enumerable: false, configurable: true }); } } return MetaFilter([ Meta({ property: 'og:determiner', content: openGraph.determiner }), Meta({ property: 'og:title', content: (_openGraph_title = openGraph.title) == null ? void 0 : _openGraph_title.absolute }), Meta({ property: 'og:description', content: openGraph.description }), Meta({ property: 'og:url', content: (_openGraph_url = openGraph.url) == null ? void 0 : _openGraph_url.toString() }), Meta({ property: 'og:site_name', content: openGraph.siteName }), Meta({ property: 'og:locale', content: openGraph.locale }), Meta({ property: 'og:country_name', content: openGraph.countryName }), Meta({ property: 'og:ttl', content: (_openGraph_ttl = openGraph.ttl) == null ? void 0 : _openGraph_ttl.toString() }), MultiMeta({ propertyPrefix: 'og:image', contents: openGraph.images }), MultiMeta({ propertyPrefix: 'og:video', contents: openGraph.videos }), MultiMeta({ propertyPrefix: 'og:audio', contents: openGraph.audio }), MultiMeta({ propertyPrefix: 'og:email', contents: openGraph.emails }), MultiMeta({ propertyPrefix: 'og:phone_number', contents: openGraph.phoneNumbers }), MultiMeta({ propertyPrefix: 'og:fax_number', contents: openGraph.faxNumbers }), MultiMeta({ propertyPrefix: 'og:locale:alternate', contents: openGraph.alternateLocale }), ...typedOpenGraph ? typedOpenGraph : [] ]); } function TwitterAppItem({ app, type }) { var _app_url_type, _app_url; return [ Meta({ name: `twitter:app:name:${type}`, content: app.name }), Meta({ name: `twitter:app:id:${type}`, content: app.id[type] }), Meta({ name: `twitter:app:url:${type}`, content: (_app_url = app.url) == null ? void 0 : (_app_url_type = _app_url[type]) == null ? void 0 : _app_url_type.toString() }) ]; } export function TwitterMetadata({ twitter }) { var _twitter_title; if (!twitter) return null; const { card } = twitter; return MetaFilter([ Meta({ name: 'twitter:card', content: card }), Meta({ name: 'twitter:site', content: twitter.site }), Meta({ name: 'twitter:site:id', content: twitter.siteId }), Meta({ name: 'twitter:creator', content: twitter.creator }), Meta({ name: 'twitter:creator:id', content: twitter.creatorId }), Meta({ name: 'twitter:title', content: (_twitter_title = twitter.title) == null ? void 0 : _twitter_title.absolute }), Meta({ name: 'twitter:description', content: twitter.description }), MultiMeta({ namePrefix: 'twitter:image', contents: twitter.images }), ...card === 'player' ? twitter.players.flatMap((player)=>[ Meta({ name: 'twitter:player', content: player.playerUrl.toString() }), Meta({ name: 'twitter:player:stream', content: player.streamUrl.toString() }), Meta({ name: 'twitter:player:width', content: player.width }), Meta({ name: 'twitter:player:height', content: player.height }) ]) : [], ...card === 'app' ? [ TwitterAppItem({ app: twitter.app, type: 'iphone' }), TwitterAppItem({ app: twitter.app, type: 'ipad' }), TwitterAppItem({ app: twitter.app, type: 'googleplay' }) ] : [] ]); } export function AppLinksMeta({ appLinks }) { if (!appLinks) return null; return MetaFilter([ MultiMeta({ propertyPrefix: 'al:ios', contents: appLinks.ios }), MultiMeta({ propertyPrefix: 'al:iphone', contents: appLinks.iphone }), MultiMeta({ propertyPrefix: 'al:ipad', contents: appLinks.ipad }), MultiMeta({ propertyPrefix: 'al:android', contents: appLinks.android }), MultiMeta({ propertyPrefix: 'al:windows_phone', contents: appLinks.windows_phone }), MultiMeta({ propertyPrefix: 'al:windows', contents: appLinks.windows }), MultiMeta({ propertyPrefix: 'al:windows_universal', contents: appLinks.windows_universal }), MultiMeta({ propertyPrefix: 'al:web', contents: appLinks.web }) ]); } //# sourceMappingURL=opengraph.js.map