main repo

This commit is contained in:
Basilosaurusrex
2025-11-24 18:09:40 +01:00
parent b636ee5e70
commit f027651f9b
34146 changed files with 4436636 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
import React from "react";
import { MetaFilter } from "./meta";
function AlternateLink({ descriptor, ...props }) {
if (!descriptor.url) return null;
return /*#__PURE__*/ React.createElement("link", {
...props,
...descriptor.title && {
title: descriptor.title
},
href: descriptor.url.toString()
});
}
export function AlternatesMetadata({ alternates }) {
if (!alternates) return null;
const { canonical, languages, media, types } = alternates;
return MetaFilter([
canonical ? AlternateLink({
rel: "canonical",
descriptor: canonical
}) : null,
languages ? Object.entries(languages).flatMap(([locale, descriptors])=>descriptors == null ? void 0 : descriptors.map((descriptor)=>AlternateLink({
rel: "alternate",
hrefLang: locale,
descriptor
}))) : null,
media ? Object.entries(media).flatMap(([mediaName, descriptors])=>descriptors == null ? void 0 : descriptors.map((descriptor)=>AlternateLink({
rel: "alternate",
media: mediaName,
descriptor
}))) : null,
types ? Object.entries(types).flatMap(([type, descriptors])=>descriptors == null ? void 0 : descriptors.map((descriptor)=>AlternateLink({
rel: "alternate",
type,
descriptor
}))) : null
]);
}
//# sourceMappingURL=alternate.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/generate/alternate.tsx"],"names":["React","MetaFilter","AlternateLink","descriptor","props","url","link","title","href","toString","AlternatesMetadata","alternates","canonical","languages","media","types","rel","Object","entries","flatMap","locale","descriptors","map","hrefLang","mediaName","type"],"mappings":"AAEA,OAAOA,WAAW,QAAO;AAEzB,SAASC,UAAU,QAAQ,SAAQ;AAEnC,SAASC,cAAc,EACrBC,UAAU,EACV,GAAGC,OAGwC;IAC3C,IAAI,CAACD,WAAWE,GAAG,EAAE,OAAO;IAC5B,qBACE,oBAACC;QACE,GAAGF,KAAK;QACR,GAAID,WAAWI,KAAK,IAAI;YAAEA,OAAOJ,WAAWI,KAAK;QAAC,CAAC;QACpDC,MAAML,WAAWE,GAAG,CAACI,QAAQ;;AAGnC;AAEA,OAAO,SAASC,mBAAmB,EACjCC,UAAU,EAGX;IACC,IAAI,CAACA,YAAY,OAAO;IAExB,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGJ;IAE/C,OAAOV,WAAW;QAChBW,YACIV,cAAc;YAAEc,KAAK;YAAab,YAAYS;QAAU,KACxD;QACJC,YACII,OAAOC,OAAO,CAACL,WAAWM,OAAO,CAAC,CAAC,CAACC,QAAQC,YAAY,GACtDA,+BAAAA,YAAaC,GAAG,CAAC,CAACnB,aAChBD,cAAc;oBAAEc,KAAK;oBAAaO,UAAUH;oBAAQjB;gBAAW,OAGnE;QACJW,QACIG,OAAOC,OAAO,CAACJ,OAAOK,OAAO,CAAC,CAAC,CAACK,WAAWH,YAAY,GACrDA,+BAAAA,YAAaC,GAAG,CAAC,CAACnB,aAChBD,cAAc;oBAAEc,KAAK;oBAAaF,OAAOU;oBAAWrB;gBAAW,OAGnE;QACJY,QACIE,OAAOC,OAAO,CAACH,OAAOI,OAAO,CAAC,CAAC,CAACM,MAAMJ,YAAY,GAChDA,+BAAAA,YAAaC,GAAG,CAAC,CAACnB,aAChBD,cAAc;oBAAEc,KAAK;oBAAaS;oBAAMtB;gBAAW,OAGvD;KACL;AACH"}

View File

@@ -0,0 +1,185 @@
import React from "react";
import { Meta, MetaFilter, MultiMeta } from "./meta";
export function BasicMetadata({ metadata }) {
var _metadata_keywords, _metadata_robots, _metadata_robots1;
return MetaFilter([
/*#__PURE__*/ React.createElement("meta", {
charSet: "utf-8"
}),
metadata.title !== null && metadata.title.absolute ? /*#__PURE__*/ React.createElement("title", null, metadata.title.absolute) : null,
Meta({
name: "description",
content: metadata.description
}),
Meta({
name: "application-name",
content: metadata.applicationName
}),
...metadata.authors ? metadata.authors.map((author)=>[
author.url ? /*#__PURE__*/ React.createElement("link", {
rel: "author",
href: author.url.toString()
}) : null,
Meta({
name: "author",
content: author.name
})
]) : [],
metadata.manifest ? /*#__PURE__*/ React.createElement("link", {
rel: "manifest",
href: metadata.manifest.toString()
}) : null,
Meta({
name: "generator",
content: metadata.generator
}),
Meta({
name: "keywords",
content: (_metadata_keywords = metadata.keywords) == null ? void 0 : _metadata_keywords.join(",")
}),
Meta({
name: "referrer",
content: metadata.referrer
}),
...metadata.themeColor ? metadata.themeColor.map((themeColor)=>Meta({
name: "theme-color",
content: themeColor.color,
media: themeColor.media
})) : [],
Meta({
name: "color-scheme",
content: metadata.colorScheme
}),
Meta({
name: "viewport",
content: metadata.viewport
}),
Meta({
name: "creator",
content: metadata.creator
}),
Meta({
name: "publisher",
content: metadata.publisher
}),
Meta({
name: "robots",
content: (_metadata_robots = metadata.robots) == null ? void 0 : _metadata_robots.basic
}),
Meta({
name: "googlebot",
content: (_metadata_robots1 = metadata.robots) == null ? void 0 : _metadata_robots1.googleBot
}),
Meta({
name: "abstract",
content: metadata.abstract
}),
...metadata.archives ? metadata.archives.map((archive)=>/*#__PURE__*/ React.createElement("link", {
rel: "archives",
href: archive
})) : [],
...metadata.assets ? metadata.assets.map((asset)=>/*#__PURE__*/ React.createElement("link", {
rel: "assets",
href: asset
})) : [],
...metadata.bookmarks ? metadata.bookmarks.map((bookmark)=>/*#__PURE__*/ React.createElement("link", {
rel: "bookmarks",
href: bookmark
})) : [],
Meta({
name: "category",
content: metadata.category
}),
Meta({
name: "classification",
content: metadata.classification
}),
...metadata.other ? Object.entries(metadata.other).map(([name, content])=>Meta({
name,
content: Array.isArray(content) ? content.join(",") : content
})) : []
]);
}
export function ItunesMeta({ itunes }) {
if (!itunes) return null;
const { appId, appArgument } = itunes;
let content = `app-id=${appId}`;
if (appArgument) {
content += `, app-argument=${appArgument}`;
}
return /*#__PURE__*/ React.createElement("meta", {
name: "apple-itunes-app",
content: content
});
}
const formatDetectionKeys = [
"telephone",
"date",
"address",
"email",
"url"
];
export function FormatDetectionMeta({ formatDetection }) {
if (!formatDetection) return null;
let content = "";
for (const key of formatDetectionKeys){
if (key in formatDetection) {
if (content) content += ", ";
content += `${key}=no`;
}
}
return /*#__PURE__*/ React.createElement("meta", {
name: "format-detection",
content: content
});
}
export function AppleWebAppMeta({ appleWebApp }) {
if (!appleWebApp) return null;
const { capable, title, startupImage, statusBarStyle } = appleWebApp;
return MetaFilter([
capable ? Meta({
name: "apple-mobile-web-app-capable",
content: "yes"
}) : null,
Meta({
name: "apple-mobile-web-app-title",
content: title
}),
startupImage ? startupImage.map((image)=>/*#__PURE__*/ React.createElement("link", {
href: image.url,
media: image.media,
rel: "apple-touch-startup-image"
})) : null,
statusBarStyle ? Meta({
name: "apple-mobile-web-app-status-bar-style",
content: statusBarStyle
}) : null
]);
}
export function VerificationMeta({ verification }) {
if (!verification) return null;
return MetaFilter([
MultiMeta({
namePrefix: "google-site-verification",
contents: verification.google
}),
MultiMeta({
namePrefix: "y_key",
contents: verification.yahoo
}),
MultiMeta({
namePrefix: "yandex-verification",
contents: verification.yandex
}),
MultiMeta({
namePrefix: "me",
contents: verification.me
}),
...verification.other ? Object.entries(verification.other).map(([key, value])=>MultiMeta({
namePrefix: key,
contents: value
})) : []
]);
}
//# sourceMappingURL=basic.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/generate/basic.tsx"],"names":["React","Meta","MetaFilter","MultiMeta","BasicMetadata","metadata","meta","charSet","title","absolute","name","content","description","applicationName","authors","map","author","url","link","rel","href","toString","manifest","generator","keywords","join","referrer","themeColor","color","media","colorScheme","viewport","creator","publisher","robots","basic","googleBot","abstract","archives","archive","assets","asset","bookmarks","bookmark","category","classification","other","Object","entries","Array","isArray","ItunesMeta","itunes","appId","appArgument","formatDetectionKeys","FormatDetectionMeta","formatDetection","key","AppleWebAppMeta","appleWebApp","capable","startupImage","statusBarStyle","image","VerificationMeta","verification","namePrefix","contents","google","yahoo","yandex","me","value"],"mappings":"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"}

View File

@@ -0,0 +1,50 @@
import React from "react";
import { MetaFilter } from "./meta";
function IconDescriptorLink({ icon }) {
const { url, rel = "icon", ...props } = icon;
return /*#__PURE__*/ React.createElement("link", {
rel: rel,
href: url.toString(),
...props
});
}
function IconLink({ rel, icon }) {
if (typeof icon === "object" && !(icon instanceof URL)) {
if (!icon.rel && rel) icon.rel = rel;
return IconDescriptorLink({
icon
});
} else {
const href = icon.toString();
return /*#__PURE__*/ React.createElement("link", {
rel: rel,
href: href
});
}
}
export function IconsMetadata({ icons }) {
if (!icons) return null;
const shortcutList = icons.shortcut;
const iconList = icons.icon;
const appleList = icons.apple;
const otherList = icons.other;
return MetaFilter([
shortcutList ? shortcutList.map((icon)=>IconLink({
rel: "shortcut icon",
icon
})) : null,
iconList ? iconList.map((icon)=>IconLink({
rel: "icon",
icon
})) : null,
appleList ? appleList.map((icon)=>IconLink({
rel: "apple-touch-icon",
icon
})) : null,
otherList ? otherList.map((icon)=>IconDescriptorLink({
icon
})) : null
]);
}
//# sourceMappingURL=icons.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/generate/icons.tsx"],"names":["React","MetaFilter","IconDescriptorLink","icon","url","rel","props","link","href","toString","IconLink","URL","IconsMetadata","icons","shortcutList","shortcut","iconList","appleList","apple","otherList","other","map"],"mappings":"AAGA,OAAOA,WAAW,QAAO;AACzB,SAASC,UAAU,QAAQ,SAAQ;AAEnC,SAASC,mBAAmB,EAAEC,IAAI,EAA4B;IAC5D,MAAM,EAAEC,GAAG,EAAEC,MAAM,MAAM,EAAE,GAAGC,OAAO,GAAGH;IAExC,qBAAO,oBAACI;QAAKF,KAAKA;QAAKG,MAAMJ,IAAIK,QAAQ;QAAK,GAAGH,KAAK;;AACxD;AAEA,SAASI,SAAS,EAAEL,GAAG,EAAEF,IAAI,EAAgC;IAC3D,IAAI,OAAOA,SAAS,YAAY,CAAEA,CAAAA,gBAAgBQ,GAAE,GAAI;QACtD,IAAI,CAACR,KAAKE,GAAG,IAAIA,KAAKF,KAAKE,GAAG,GAAGA;QACjC,OAAOH,mBAAmB;YAAEC;QAAK;IACnC,OAAO;QACL,MAAMK,OAAOL,KAAKM,QAAQ;QAC1B,qBAAO,oBAACF;YAAKF,KAAKA;YAAKG,MAAMA;;IAC/B;AACF;AAEA,OAAO,SAASI,cAAc,EAAEC,KAAK,EAAwC;IAC3E,IAAI,CAACA,OAAO,OAAO;IAEnB,MAAMC,eAAeD,MAAME,QAAQ;IACnC,MAAMC,WAAWH,MAAMV,IAAI;IAC3B,MAAMc,YAAYJ,MAAMK,KAAK;IAC7B,MAAMC,YAAYN,MAAMO,KAAK;IAE7B,OAAOnB,WAAW;QAChBa,eACIA,aAAaO,GAAG,CAAC,CAAClB,OAASO,SAAS;gBAAEL,KAAK;gBAAiBF;YAAK,MACjE;QACJa,WAAWA,SAASK,GAAG,CAAC,CAAClB,OAASO,SAAS;gBAAEL,KAAK;gBAAQF;YAAK,MAAM;QACrEc,YACIA,UAAUI,GAAG,CAAC,CAAClB,OAASO,SAAS;gBAAEL,KAAK;gBAAoBF;YAAK,MACjE;QACJgB,YAAYA,UAAUE,GAAG,CAAC,CAAClB,OAASD,mBAAmB;gBAAEC;YAAK,MAAM;KACrE;AACH"}

View File

@@ -0,0 +1,84 @@
import React from "react";
import { nonNullable } from "../../non-nullable";
export function Meta({ name, property, content, media }) {
if (typeof content !== "undefined" && content !== null && content !== "") {
return /*#__PURE__*/ React.createElement("meta", {
...name ? {
name
} : {
property
},
...media ? {
media
} : undefined,
content: typeof content === "string" ? content : content.toString()
});
}
return null;
}
export function MetaFilter(items) {
const acc = [];
for (const item of items){
if (Array.isArray(item)) {
acc.push(...item.filter(nonNullable));
} else if (nonNullable(item)) {
acc.push(item);
}
}
return acc;
}
function camelToSnake(camelCaseStr) {
return camelCaseStr.replace(/([A-Z])/g, function(match) {
return "_" + match.toLowerCase();
});
}
function getMetaKey(prefix, key) {
// Use `twitter:image` and `og:image` instead of `twitter:image:url` and `og:image:url`
// to be more compatible as it's a more common format
if ((prefix === "og:image" || prefix === "twitter:image") && key === "url") {
return prefix;
}
if (prefix.startsWith("og:") || prefix.startsWith("twitter:")) {
key = camelToSnake(key);
}
return prefix + ":" + key;
}
function ExtendMeta({ content, namePrefix, propertyPrefix }) {
if (!content) return null;
return MetaFilter(Object.entries(content).map(([k, v])=>{
return typeof v === "undefined" ? null : Meta({
...propertyPrefix && {
property: getMetaKey(propertyPrefix, k)
},
...namePrefix && {
name: getMetaKey(namePrefix, k)
},
content: typeof v === "string" ? v : v == null ? void 0 : v.toString()
});
}));
}
export function MultiMeta({ propertyPrefix, namePrefix, contents }) {
if (typeof contents === "undefined" || contents === null) {
return null;
}
return MetaFilter(contents.map((content)=>{
if (typeof content === "string" || typeof content === "number" || content instanceof URL) {
return Meta({
...propertyPrefix ? {
property: propertyPrefix
} : {
name: namePrefix
},
content
});
} else {
return ExtendMeta({
namePrefix,
propertyPrefix,
content
});
}
}));
}
//# sourceMappingURL=meta.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/generate/meta.tsx"],"names":["React","nonNullable","Meta","name","property","content","media","meta","undefined","toString","MetaFilter","items","acc","item","Array","isArray","push","filter","camelToSnake","camelCaseStr","replace","match","toLowerCase","getMetaKey","prefix","key","startsWith","ExtendMeta","namePrefix","propertyPrefix","Object","entries","map","k","v","MultiMeta","contents","URL"],"mappings":"AAAA,OAAOA,WAAW,QAAO;AACzB,SAASC,WAAW,QAAQ,qBAAoB;AAEhD,OAAO,SAASC,KAAK,EACnBC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,KAAK,EAMN;IACC,IAAI,OAAOD,YAAY,eAAeA,YAAY,QAAQA,YAAY,IAAI;QACxE,qBACE,oBAACE;YACE,GAAIJ,OAAO;gBAAEA;YAAK,IAAI;gBAAEC;YAAS,CAAC;YAClC,GAAIE,QAAQ;gBAAEA;YAAM,IAAIE,SAAS;YAClCH,SAAS,OAAOA,YAAY,WAAWA,UAAUA,QAAQI,QAAQ;;IAGvE;IACA,OAAO;AACT;AAEA,OAAO,SAASC,WACdC,KAAmB;IAEnB,MAAMC,MAAwB,EAAE;IAChC,KAAK,MAAMC,QAAQF,MAAO;QACxB,IAAIG,MAAMC,OAAO,CAACF,OAAO;YACvBD,IAAII,IAAI,IAAIH,KAAKI,MAAM,CAAChB;QAC1B,OAAO,IAAIA,YAAYY,OAAO;YAC5BD,IAAII,IAAI,CAACH;QACX;IACF;IACA,OAAOD;AACT;AAWA,SAASM,aAAaC,YAAoB;IACxC,OAAOA,aAAaC,OAAO,CAAC,YAAY,SAAUC,KAAK;QACrD,OAAO,MAAMA,MAAMC,WAAW;IAChC;AACF;AAEA,SAASC,WAAWC,MAAc,EAAEC,GAAW;IAC7C,uFAAuF;IACvF,qDAAqD;IACrD,IAAI,AAACD,CAAAA,WAAW,cAAcA,WAAW,eAAc,KAAMC,QAAQ,OAAO;QAC1E,OAAOD;IACT;IACA,IAAIA,OAAOE,UAAU,CAAC,UAAUF,OAAOE,UAAU,CAAC,aAAa;QAC7DD,MAAMP,aAAaO;IACrB;IACA,OAAOD,SAAS,MAAMC;AACxB;AAEA,SAASE,WAAW,EAClBtB,OAAO,EACPuB,UAAU,EACVC,cAAc,EAKf;IACC,IAAI,CAACxB,SAAS,OAAO;IACrB,OAAOK,WACLoB,OAAOC,OAAO,CAAC1B,SAAS2B,GAAG,CAAC,CAAC,CAACC,GAAGC,EAAE;QACjC,OAAO,OAAOA,MAAM,cAChB,OACAhC,KAAK;YACH,GAAI2B,kBAAkB;gBAAEzB,UAAUmB,WAAWM,gBAAgBI;YAAG,CAAC;YACjE,GAAIL,cAAc;gBAAEzB,MAAMoB,WAAWK,YAAYK;YAAG,CAAC;YACrD5B,SAAS,OAAO6B,MAAM,WAAWA,IAAIA,qBAAAA,EAAGzB,QAAQ;QAClD;IACN;AAEJ;AAEA,OAAO,SAAS0B,UAAU,EACxBN,cAAc,EACdD,UAAU,EACVQ,QAAQ,EAKT;IACC,IAAI,OAAOA,aAAa,eAAeA,aAAa,MAAM;QACxD,OAAO;IACT;IAEA,OAAO1B,WACL0B,SAASJ,GAAG,CAAC,CAAC3B;QACZ,IACE,OAAOA,YAAY,YACnB,OAAOA,YAAY,YACnBA,mBAAmBgC,KACnB;YACA,OAAOnC,KAAK;gBACV,GAAI2B,iBACA;oBAAEzB,UAAUyB;gBAAe,IAC3B;oBAAE1B,MAAMyB;gBAAW,CAAC;gBACxBvB;YACF;QACF,OAAO;YACL,OAAOsB,WAAW;gBAChBC;gBACAC;gBACAxB;YACF;QACF;IACF;AAEJ"}

View File

@@ -0,0 +1,448 @@
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 new Error(`Invalid OpenGraph type: ${_exhaustiveCheck}`);
}
}
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

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,17 @@
function resolveArray(value) {
if (Array.isArray(value)) {
return value;
}
return [
value
];
}
function resolveAsArrayOrUndefined(value) {
if (typeof value === "undefined" || value === null) {
return undefined;
}
return resolveArray(value);
}
export { resolveAsArrayOrUndefined, resolveArray };
//# sourceMappingURL=utils.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/generate/utils.ts"],"names":["resolveArray","value","Array","isArray","resolveAsArrayOrUndefined","undefined"],"mappings":"AAAA,SAASA,aAAgBC,KAAc;IACrC,IAAIC,MAAMC,OAAO,CAACF,QAAQ;QACxB,OAAOA;IACT;IACA,OAAO;QAACA;KAAM;AAChB;AAEA,SAASG,0BACPH,KAAiC;IAEjC,IAAI,OAAOA,UAAU,eAAeA,UAAU,MAAM;QAClD,OAAOI;IACT;IACA,OAAOL,aAAaC;AACtB;AAEA,SAASG,yBAAyB,EAAEJ,YAAY,GAAE"}