Initial boiler plate project

This commit is contained in:
2024-09-24 03:52:46 +00:00
parent 6120b2d6c3
commit 154b93e267
10034 changed files with 2079352 additions and 2 deletions

View File

@ -0,0 +1,172 @@
import { resolveAsArrayOrUndefined } from "../generate/utils";
import { resolveAbsoluteUrlWithPathname } from "./resolve-url";
function resolveAlternateUrl(url, metadataBase, metadataContext) {
// If alter native url is an URL instance,
// we treat it as a URL base and resolve with current pathname
if (url instanceof URL) {
url = new URL(metadataContext.pathname, url);
}
return resolveAbsoluteUrlWithPathname(url, metadataBase, metadataContext);
}
export const resolveThemeColor = (themeColor)=>{
var _resolveAsArrayOrUndefined;
if (!themeColor) return null;
const themeColorDescriptors = [];
(_resolveAsArrayOrUndefined = resolveAsArrayOrUndefined(themeColor)) == null ? void 0 : _resolveAsArrayOrUndefined.forEach((descriptor)=>{
if (typeof descriptor === "string") themeColorDescriptors.push({
color: descriptor
});
else if (typeof descriptor === "object") themeColorDescriptors.push({
color: descriptor.color,
media: descriptor.media
});
});
return themeColorDescriptors;
};
function resolveUrlValuesOfObject(obj, metadataBase, metadataContext) {
if (!obj) return null;
const result = {};
for (const [key, value] of Object.entries(obj)){
if (typeof value === "string" || value instanceof URL) {
result[key] = [
{
url: resolveAlternateUrl(value, metadataBase, metadataContext)
}
];
} else {
result[key] = [];
value == null ? void 0 : value.forEach((item, index)=>{
const url = resolveAlternateUrl(item.url, metadataBase, metadataContext);
result[key][index] = {
url,
title: item.title
};
});
}
}
return result;
}
function resolveCanonicalUrl(urlOrDescriptor, metadataBase, metadataContext) {
if (!urlOrDescriptor) return null;
const url = typeof urlOrDescriptor === "string" || urlOrDescriptor instanceof URL ? urlOrDescriptor : urlOrDescriptor.url;
// Return string url because structureClone can't handle URL instance
return {
url: resolveAlternateUrl(url, metadataBase, metadataContext)
};
}
export const resolveAlternates = (alternates, metadataBase, context)=>{
if (!alternates) return null;
const canonical = resolveCanonicalUrl(alternates.canonical, metadataBase, context);
const languages = resolveUrlValuesOfObject(alternates.languages, metadataBase, context);
const media = resolveUrlValuesOfObject(alternates.media, metadataBase, context);
const types = resolveUrlValuesOfObject(alternates.types, metadataBase, context);
const result = {
canonical,
languages,
media,
types
};
return result;
};
const robotsKeys = [
"noarchive",
"nosnippet",
"noimageindex",
"nocache",
"notranslate",
"indexifembedded",
"nositelinkssearchbox",
"unavailable_after",
"max-video-preview",
"max-image-preview",
"max-snippet"
];
const resolveRobotsValue = (robots)=>{
if (!robots) return null;
if (typeof robots === "string") return robots;
const values = [];
if (robots.index) values.push("index");
else if (typeof robots.index === "boolean") values.push("noindex");
if (robots.follow) values.push("follow");
else if (typeof robots.follow === "boolean") values.push("nofollow");
for (const key of robotsKeys){
const value = robots[key];
if (typeof value !== "undefined" && value !== false) {
values.push(typeof value === "boolean" ? key : `${key}:${value}`);
}
}
return values.join(", ");
};
export const resolveRobots = (robots)=>{
if (!robots) return null;
return {
basic: resolveRobotsValue(robots),
googleBot: typeof robots !== "string" ? resolveRobotsValue(robots.googleBot) : null
};
};
const VerificationKeys = [
"google",
"yahoo",
"yandex",
"me",
"other"
];
export const resolveVerification = (verification)=>{
if (!verification) return null;
const res = {};
for (const key of VerificationKeys){
const value = verification[key];
if (value) {
if (key === "other") {
res.other = {};
for(const otherKey in verification.other){
const otherValue = resolveAsArrayOrUndefined(verification.other[otherKey]);
if (otherValue) res.other[otherKey] = otherValue;
}
} else res[key] = resolveAsArrayOrUndefined(value);
}
}
return res;
};
export const resolveAppleWebApp = (appWebApp)=>{
var _resolveAsArrayOrUndefined;
if (!appWebApp) return null;
if (appWebApp === true) {
return {
capable: true
};
}
const startupImages = appWebApp.startupImage ? (_resolveAsArrayOrUndefined = resolveAsArrayOrUndefined(appWebApp.startupImage)) == null ? void 0 : _resolveAsArrayOrUndefined.map((item)=>typeof item === "string" ? {
url: item
} : item) : null;
return {
capable: "capable" in appWebApp ? !!appWebApp.capable : true,
title: appWebApp.title || null,
startupImage: startupImages,
statusBarStyle: appWebApp.statusBarStyle || "default"
};
};
export const resolveAppLinks = (appLinks)=>{
if (!appLinks) return null;
for(const key in appLinks){
// @ts-ignore // TODO: type infer
appLinks[key] = resolveAsArrayOrUndefined(appLinks[key]);
}
return appLinks;
};
export const resolveItunes = (itunes, metadataBase, context)=>{
if (!itunes) return null;
return {
appId: itunes.appId,
appArgument: itunes.appArgument ? resolveAlternateUrl(itunes.appArgument, metadataBase, context) : undefined
};
};
export const resolveFacebook = (facebook)=>{
if (!facebook) return null;
return {
appId: facebook.appId,
admins: resolveAsArrayOrUndefined(facebook.admins)
};
};
//# sourceMappingURL=resolve-basics.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/resolvers/resolve-basics.ts"],"names":["resolveAsArrayOrUndefined","resolveAbsoluteUrlWithPathname","resolveAlternateUrl","url","metadataBase","metadataContext","URL","pathname","resolveThemeColor","themeColor","themeColorDescriptors","forEach","descriptor","push","color","media","resolveUrlValuesOfObject","obj","result","key","value","Object","entries","item","index","title","resolveCanonicalUrl","urlOrDescriptor","resolveAlternates","alternates","context","canonical","languages","types","robotsKeys","resolveRobotsValue","robots","values","follow","join","resolveRobots","basic","googleBot","VerificationKeys","resolveVerification","verification","res","other","otherKey","otherValue","resolveAppleWebApp","appWebApp","capable","startupImages","startupImage","map","statusBarStyle","resolveAppLinks","appLinks","resolveItunes","itunes","appId","appArgument","undefined","resolveFacebook","facebook","admins"],"mappings":"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"}

View File

@ -0,0 +1,34 @@
import { resolveAsArrayOrUndefined } from "../generate/utils";
import { isStringOrURL } from "./resolve-url";
import { IconKeys } from "../constants";
export function resolveIcon(icon) {
if (isStringOrURL(icon)) return {
url: icon
};
else if (Array.isArray(icon)) return icon;
return icon;
}
export const resolveIcons = (icons)=>{
if (!icons) {
return null;
}
const resolved = {
icon: [],
apple: []
};
if (Array.isArray(icons)) {
resolved.icon = icons.map(resolveIcon).filter(Boolean);
} else if (isStringOrURL(icons)) {
resolved.icon = [
resolveIcon(icons)
];
} else {
for (const key of IconKeys){
const values = resolveAsArrayOrUndefined(icons[key]);
if (values) resolved[key] = values.map(resolveIcon);
}
}
return resolved;
};
//# sourceMappingURL=resolve-icons.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/resolvers/resolve-icons.ts"],"names":["resolveAsArrayOrUndefined","isStringOrURL","IconKeys","resolveIcon","icon","url","Array","isArray","resolveIcons","icons","resolved","apple","map","filter","Boolean","key","values"],"mappings":"AAGA,SAASA,yBAAyB,QAAQ,oBAAmB;AAC7D,SAASC,aAAa,QAAQ,gBAAe;AAC7C,SAASC,QAAQ,QAAQ,eAAc;AAEvC,OAAO,SAASC,YAAYC,IAAU;IACpC,IAAIH,cAAcG,OAAO,OAAO;QAAEC,KAAKD;IAAK;SACvC,IAAIE,MAAMC,OAAO,CAACH,OAAO,OAAOA;IACrC,OAAOA;AACT;AAEA,OAAO,MAAMI,eAAuC,CAACC;IACnD,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IAEA,MAAMC,WAAsC;QAC1CN,MAAM,EAAE;QACRO,OAAO,EAAE;IACX;IACA,IAAIL,MAAMC,OAAO,CAACE,QAAQ;QACxBC,SAASN,IAAI,GAAGK,MAAMG,GAAG,CAACT,aAAaU,MAAM,CAACC;IAChD,OAAO,IAAIb,cAAcQ,QAAQ;QAC/BC,SAASN,IAAI,GAAG;YAACD,YAAYM;SAAO;IACtC,OAAO;QACL,KAAK,MAAMM,OAAOb,SAAU;YAC1B,MAAMc,SAAShB,0BAA0BS,KAAK,CAACM,IAAI;YACnD,IAAIC,QAAQN,QAAQ,CAACK,IAAI,GAAGC,OAAOJ,GAAG,CAACT;QACzC;IACF;IACA,OAAOO;AACT,EAAC"}

View File

@ -0,0 +1,152 @@
import { resolveAsArrayOrUndefined } from "../generate/utils";
import { getSocialImageFallbackMetadataBase, isStringOrURL, resolveUrl, resolveAbsoluteUrlWithPathname } from "./resolve-url";
import { resolveTitle } from "./resolve-title";
import { isFullStringUrl } from "../../url";
import { warnOnce } from "../../../build/output/log";
const OgTypeFields = {
article: [
"authors",
"tags"
],
song: [
"albums",
"musicians"
],
playlist: [
"albums",
"musicians"
],
radio: [
"creators"
],
video: [
"actors",
"directors",
"writers",
"tags"
],
basic: [
"emails",
"phoneNumbers",
"faxNumbers",
"alternateLocale",
"audio",
"videos"
]
};
function resolveAndValidateImage(item, metadataBase, isMetadataBaseMissing, isStandaloneMode) {
if (!item) return undefined;
const isItemUrl = isStringOrURL(item);
const inputUrl = isItemUrl ? item : item.url;
if (!inputUrl) return undefined;
const isNonVercelDeployment = !process.env.VERCEL && process.env.NODE_ENV === "production";
// Validate url in self-host standalone mode or non-Vercel deployment
if (isStandaloneMode || isNonVercelDeployment) {
validateResolvedImageUrl(inputUrl, metadataBase, isMetadataBaseMissing);
}
return isItemUrl ? {
url: resolveUrl(inputUrl, metadataBase)
} : {
...item,
// Update image descriptor url
url: resolveUrl(inputUrl, metadataBase)
};
}
export function resolveImages(images, metadataBase, isStandaloneMode) {
const resolvedImages = resolveAsArrayOrUndefined(images);
if (!resolvedImages) return resolvedImages;
const { isMetadataBaseMissing, fallbackMetadataBase } = getSocialImageFallbackMetadataBase(metadataBase);
const nonNullableImages = [];
for (const item of resolvedImages){
const resolvedItem = resolveAndValidateImage(item, fallbackMetadataBase, isMetadataBaseMissing, isStandaloneMode);
if (!resolvedItem) continue;
nonNullableImages.push(resolvedItem);
}
return nonNullableImages;
}
const ogTypeToFields = {
article: OgTypeFields.article,
book: OgTypeFields.article,
"music.song": OgTypeFields.song,
"music.album": OgTypeFields.song,
"music.playlist": OgTypeFields.playlist,
"music.radio_station": OgTypeFields.radio,
"video.movie": OgTypeFields.video,
"video.episode": OgTypeFields.video
};
function getFieldsByOgType(ogType) {
if (!ogType || !(ogType in ogTypeToFields)) return OgTypeFields.basic;
return ogTypeToFields[ogType].concat(OgTypeFields.basic);
}
function validateResolvedImageUrl(inputUrl, fallbackMetadataBase, isMetadataBaseMissing) {
// Only warn on the image url that needs to be resolved with metadataBase
if (typeof inputUrl === "string" && !isFullStringUrl(inputUrl) && isMetadataBaseMissing) {
warnOnce(`metadataBase property in metadata export is not set for resolving social open graph or twitter images, using "${fallbackMetadataBase.origin}". See https://nextjs.org/docs/app/api-reference/functions/generate-metadata#metadatabase`);
}
}
export const resolveOpenGraph = (openGraph, metadataBase, metadataContext, titleTemplate)=>{
if (!openGraph) return null;
function resolveProps(target, og) {
const ogType = og && "type" in og ? og.type : undefined;
const keys = getFieldsByOgType(ogType);
for (const k of keys){
const key = k;
if (key in og && key !== "url") {
const value = og[key];
if (value) {
const arrayValue = resolveAsArrayOrUndefined(value);
target[key] = arrayValue;
}
}
}
target.images = resolveImages(og.images, metadataBase, metadataContext.isStandaloneMode);
}
const resolved = {
...openGraph,
title: resolveTitle(openGraph.title, titleTemplate)
};
resolveProps(resolved, openGraph);
resolved.url = openGraph.url ? resolveAbsoluteUrlWithPathname(openGraph.url, metadataBase, metadataContext) : null;
return resolved;
};
const TwitterBasicInfoKeys = [
"site",
"siteId",
"creator",
"creatorId",
"description"
];
export const resolveTwitter = (twitter, metadataBase, metadataContext, titleTemplate)=>{
var _resolved_images;
if (!twitter) return null;
let card = "card" in twitter ? twitter.card : undefined;
const resolved = {
...twitter,
title: resolveTitle(twitter.title, titleTemplate)
};
for (const infoKey of TwitterBasicInfoKeys){
resolved[infoKey] = twitter[infoKey] || null;
}
resolved.images = resolveImages(twitter.images, metadataBase, metadataContext.isStandaloneMode);
card = card || (((_resolved_images = resolved.images) == null ? void 0 : _resolved_images.length) ? "summary_large_image" : "summary");
resolved.card = card;
if ("card" in resolved) {
switch(resolved.card){
case "player":
{
resolved.players = resolveAsArrayOrUndefined(resolved.players) || [];
break;
}
case "app":
{
resolved.app = resolved.app || {};
break;
}
default:
break;
}
}
return resolved;
};
//# sourceMappingURL=resolve-opengraph.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/resolvers/resolve-opengraph.ts"],"names":["resolveAsArrayOrUndefined","getSocialImageFallbackMetadataBase","isStringOrURL","resolveUrl","resolveAbsoluteUrlWithPathname","resolveTitle","isFullStringUrl","warnOnce","OgTypeFields","article","song","playlist","radio","video","basic","resolveAndValidateImage","item","metadataBase","isMetadataBaseMissing","isStandaloneMode","undefined","isItemUrl","inputUrl","url","isNonVercelDeployment","process","env","VERCEL","NODE_ENV","validateResolvedImageUrl","resolveImages","images","resolvedImages","fallbackMetadataBase","nonNullableImages","resolvedItem","push","ogTypeToFields","book","getFieldsByOgType","ogType","concat","origin","resolveOpenGraph","openGraph","metadataContext","titleTemplate","resolveProps","target","og","type","keys","k","key","value","arrayValue","resolved","title","TwitterBasicInfoKeys","resolveTwitter","twitter","card","infoKey","length","players","app"],"mappings":"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"}

View File

@ -0,0 +1,30 @@
function resolveTitleTemplate(template, title) {
return template ? template.replace(/%s/g, title) : title;
}
export function resolveTitle(title, stashedTemplate) {
let resolved;
const template = typeof title !== "string" && title && "template" in title ? title.template : null;
if (typeof title === "string") {
resolved = resolveTitleTemplate(stashedTemplate, title);
} else if (title) {
if ("default" in title) {
resolved = resolveTitleTemplate(stashedTemplate, title.default);
}
if ("absolute" in title && title.absolute) {
resolved = title.absolute;
}
}
if (title && typeof title !== "string") {
return {
template,
absolute: resolved || ""
};
} else {
return {
absolute: resolved || title || "",
template
};
}
}
//# sourceMappingURL=resolve-title.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/resolvers/resolve-title.ts"],"names":["resolveTitleTemplate","template","title","replace","resolveTitle","stashedTemplate","resolved","default","absolute"],"mappings":"AAGA,SAASA,qBACPC,QAAmC,EACnCC,KAAa;IAEb,OAAOD,WAAWA,SAASE,OAAO,CAAC,OAAOD,SAASA;AACrD;AAEA,OAAO,SAASE,aACdF,KAAwB,EACxBG,eAA0C;IAE1C,IAAIC;IACJ,MAAML,WACJ,OAAOC,UAAU,YAAYA,SAAS,cAAcA,QAChDA,MAAMD,QAAQ,GACd;IAEN,IAAI,OAAOC,UAAU,UAAU;QAC7BI,WAAWN,qBAAqBK,iBAAiBH;IACnD,OAAO,IAAIA,OAAO;QAChB,IAAI,aAAaA,OAAO;YACtBI,WAAWN,qBAAqBK,iBAAiBH,MAAMK,OAAO;QAChE;QACA,IAAI,cAAcL,SAASA,MAAMM,QAAQ,EAAE;YACzCF,WAAWJ,MAAMM,QAAQ;QAC3B;IACF;IAEA,IAAIN,SAAS,OAAOA,UAAU,UAAU;QACtC,OAAO;YACLD;YACAO,UAAUF,YAAY;QACxB;IACF,OAAO;QACL,OAAO;YAAEE,UAAUF,YAAYJ,SAAS;YAAID;QAAS;IACvD;AACF"}

View File

@ -0,0 +1,100 @@
import path from "../../../shared/lib/isomorphic/path";
function isStringOrURL(icon) {
return typeof icon === "string" || icon instanceof URL;
}
function createLocalMetadataBase() {
return new URL(`http://localhost:${process.env.PORT || 3000}`);
}
function getPreviewDeploymentUrl() {
const origin = process.env.VERCEL_BRANCH_URL || process.env.VERCEL_URL;
return origin ? new URL(`https://${origin}`) : undefined;
}
function getProductionDeploymentUrl() {
const origin = process.env.VERCEL_PROJECT_PRODUCTION_URL;
return origin ? new URL(`https://${origin}`) : undefined;
}
// For deployment url for metadata routes, prefer to use the deployment url if possible
// as these routes are unique to the deployments url.
export function getSocialImageFallbackMetadataBase(metadataBase) {
const isMetadataBaseMissing = !metadataBase;
const defaultMetadataBase = createLocalMetadataBase();
const previewDeploymentUrl = getPreviewDeploymentUrl();
const productionDeploymentUrl = getProductionDeploymentUrl();
let fallbackMetadataBase;
if (process.env.NODE_ENV === "development") {
fallbackMetadataBase = defaultMetadataBase;
} else {
fallbackMetadataBase = process.env.NODE_ENV === "production" && previewDeploymentUrl && process.env.VERCEL_ENV === "preview" ? previewDeploymentUrl : metadataBase || productionDeploymentUrl || defaultMetadataBase;
}
return {
fallbackMetadataBase,
isMetadataBaseMissing
};
}
function resolveUrl(url, metadataBase) {
if (url instanceof URL) return url;
if (!url) return null;
try {
// If we can construct a URL instance from url, ignore metadataBase
const parsedUrl = new URL(url);
return parsedUrl;
} catch {}
if (!metadataBase) {
metadataBase = createLocalMetadataBase();
}
// Handle relative or absolute paths
const basePath = metadataBase.pathname || "";
const joinedPath = path.posix.join(basePath, url);
return new URL(joinedPath, metadataBase);
}
// Resolve with `pathname` if `url` is a relative path.
function resolveRelativeUrl(url, pathname) {
if (typeof url === "string" && url.startsWith("./")) {
return path.posix.resolve(pathname, url);
}
return url;
}
// The regex is matching logic from packages/next/src/lib/load-custom-routes.ts
const FILE_REGEX = /^(?:\/((?!\.well-known(?:\/.*)?)(?:[^/]+\/)*[^/]+\.\w+))(\/?|$)/i;
function isFilePattern(pathname) {
return FILE_REGEX.test(pathname);
}
// Resolve `pathname` if `url` is a relative path the compose with `metadataBase`.
function resolveAbsoluteUrlWithPathname(url, metadataBase, { trailingSlash, pathname }) {
// Resolve url with pathname that always starts with `/`
url = resolveRelativeUrl(url, pathname);
// Convert string url or URL instance to absolute url string,
// if there's case needs to be resolved with metadataBase
let resolvedUrl = "";
const result = metadataBase ? resolveUrl(url, metadataBase) : url;
if (typeof result === "string") {
resolvedUrl = result;
} else {
resolvedUrl = result.pathname === "/" ? result.origin : result.href;
}
// Add trailing slash if it's enabled for urls matches the condition
// - Not external, same origin with metadataBase
// - Doesn't have query
if (trailingSlash && !resolvedUrl.endsWith("/")) {
let isRelative = resolvedUrl.startsWith("/");
let hasQuery = resolvedUrl.includes("?");
let isExternal = false;
let isFileUrl = false;
if (!isRelative) {
try {
const parsedUrl = new URL(resolvedUrl);
isExternal = metadataBase != null && parsedUrl.origin !== metadataBase.origin;
isFileUrl = isFilePattern(parsedUrl.pathname);
} catch {
// If it's not a valid URL, treat it as external
isExternal = true;
}
if (// Do not apply trailing slash for file like urls, aligning with the behavior with `trailingSlash`
!isFileUrl && !isExternal && !hasQuery) return `${resolvedUrl}/`;
}
}
return resolvedUrl;
}
export { isStringOrURL, resolveUrl, resolveRelativeUrl, resolveAbsoluteUrlWithPathname, };
//# sourceMappingURL=resolve-url.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["../../../../src/lib/metadata/resolvers/resolve-url.ts"],"names":["path","isStringOrURL","icon","URL","createLocalMetadataBase","process","env","PORT","getPreviewDeploymentUrl","origin","VERCEL_BRANCH_URL","VERCEL_URL","undefined","getProductionDeploymentUrl","VERCEL_PROJECT_PRODUCTION_URL","getSocialImageFallbackMetadataBase","metadataBase","isMetadataBaseMissing","defaultMetadataBase","previewDeploymentUrl","productionDeploymentUrl","fallbackMetadataBase","NODE_ENV","VERCEL_ENV","resolveUrl","url","parsedUrl","basePath","pathname","joinedPath","posix","join","resolveRelativeUrl","startsWith","resolve","FILE_REGEX","isFilePattern","test","resolveAbsoluteUrlWithPathname","trailingSlash","resolvedUrl","result","href","endsWith","isRelative","hasQuery","includes","isExternal","isFileUrl"],"mappings":"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"}