.
This commit is contained in:
+232
@@ -0,0 +1,232 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
resolveAlternates: null,
|
||||
resolveAppLinks: null,
|
||||
resolveAppleWebApp: null,
|
||||
resolveFacebook: null,
|
||||
resolveItunes: null,
|
||||
resolvePagination: null,
|
||||
resolveRobots: null,
|
||||
resolveThemeColor: null,
|
||||
resolveVerification: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
resolveAlternates: function() {
|
||||
return resolveAlternates;
|
||||
},
|
||||
resolveAppLinks: function() {
|
||||
return resolveAppLinks;
|
||||
},
|
||||
resolveAppleWebApp: function() {
|
||||
return resolveAppleWebApp;
|
||||
},
|
||||
resolveFacebook: function() {
|
||||
return resolveFacebook;
|
||||
},
|
||||
resolveItunes: function() {
|
||||
return resolveItunes;
|
||||
},
|
||||
resolvePagination: function() {
|
||||
return resolvePagination;
|
||||
},
|
||||
resolveRobots: function() {
|
||||
return resolveRobots;
|
||||
},
|
||||
resolveThemeColor: function() {
|
||||
return resolveThemeColor;
|
||||
},
|
||||
resolveVerification: function() {
|
||||
return resolveVerification;
|
||||
}
|
||||
});
|
||||
const _utils = require("../generate/utils");
|
||||
const _resolveurl = require("./resolve-url");
|
||||
function resolveAlternateUrl(url, metadataBase, pathname, 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) {
|
||||
const newUrl = new URL(pathname, url);
|
||||
url.searchParams.forEach((value, key)=>newUrl.searchParams.set(key, value));
|
||||
url = newUrl;
|
||||
}
|
||||
return (0, _resolveurl.resolveAbsoluteUrlWithPathname)(url, metadataBase, pathname, metadataContext);
|
||||
}
|
||||
const resolveThemeColor = (themeColor)=>{
|
||||
var _resolveAsArrayOrUndefined;
|
||||
if (!themeColor) return null;
|
||||
const themeColorDescriptors = [];
|
||||
(_resolveAsArrayOrUndefined = (0, _utils.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;
|
||||
};
|
||||
async function resolveUrlValuesOfObject(obj, metadataBase, pathname, metadataContext) {
|
||||
if (!obj) return null;
|
||||
const result = {};
|
||||
for (const [key, value] of Object.entries(obj)){
|
||||
if (typeof value === 'string' || value instanceof URL) {
|
||||
const pathnameForUrl = await pathname;
|
||||
result[key] = [
|
||||
{
|
||||
url: resolveAlternateUrl(value, metadataBase, pathnameForUrl, metadataContext)
|
||||
}
|
||||
];
|
||||
} else if (value && value.length) {
|
||||
result[key] = [];
|
||||
const pathnameForUrl = await pathname;
|
||||
value.forEach((item, index)=>{
|
||||
const url = resolveAlternateUrl(item.url, metadataBase, pathnameForUrl, metadataContext);
|
||||
result[key][index] = {
|
||||
url,
|
||||
title: item.title
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
async function resolveCanonicalUrl(urlOrDescriptor, metadataBase, pathname, metadataContext) {
|
||||
if (!urlOrDescriptor) return null;
|
||||
const url = typeof urlOrDescriptor === 'string' || urlOrDescriptor instanceof URL ? urlOrDescriptor : urlOrDescriptor.url;
|
||||
const pathnameForUrl = await pathname;
|
||||
// Return string url because structureClone can't handle URL instance
|
||||
return {
|
||||
url: resolveAlternateUrl(url, metadataBase, pathnameForUrl, metadataContext)
|
||||
};
|
||||
}
|
||||
const resolveAlternates = async (alternates, metadataBase, pathname, context)=>{
|
||||
if (!alternates) return null;
|
||||
const canonical = await resolveCanonicalUrl(alternates.canonical, metadataBase, pathname, context);
|
||||
const languages = await resolveUrlValuesOfObject(alternates.languages, metadataBase, pathname, context);
|
||||
const media = await resolveUrlValuesOfObject(alternates.media, metadataBase, pathname, context);
|
||||
const types = await resolveUrlValuesOfObject(alternates.types, metadataBase, pathname, context);
|
||||
return {
|
||||
canonical,
|
||||
languages,
|
||||
media,
|
||||
types
|
||||
};
|
||||
};
|
||||
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(', ');
|
||||
};
|
||||
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'
|
||||
];
|
||||
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 = (0, _utils.resolveAsArrayOrUndefined)(verification.other[otherKey]);
|
||||
if (otherValue) res.other[otherKey] = otherValue;
|
||||
}
|
||||
} else res[key] = (0, _utils.resolveAsArrayOrUndefined)(value);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
};
|
||||
const resolveAppleWebApp = (appWebApp)=>{
|
||||
var _resolveAsArrayOrUndefined;
|
||||
if (!appWebApp) return null;
|
||||
if (appWebApp === true) {
|
||||
return {
|
||||
capable: true
|
||||
};
|
||||
}
|
||||
const startupImages = appWebApp.startupImage ? (_resolveAsArrayOrUndefined = (0, _utils.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'
|
||||
};
|
||||
};
|
||||
const resolveAppLinks = (appLinks)=>{
|
||||
if (!appLinks) return null;
|
||||
for(const key in appLinks){
|
||||
// @ts-ignore // TODO: type infer
|
||||
appLinks[key] = (0, _utils.resolveAsArrayOrUndefined)(appLinks[key]);
|
||||
}
|
||||
return appLinks;
|
||||
};
|
||||
const resolveItunes = async (itunes, metadataBase, pathname, context)=>{
|
||||
if (!itunes) return null;
|
||||
return {
|
||||
appId: itunes.appId,
|
||||
appArgument: itunes.appArgument ? resolveAlternateUrl(itunes.appArgument, metadataBase, await pathname, context) : undefined
|
||||
};
|
||||
};
|
||||
const resolveFacebook = (facebook)=>{
|
||||
if (!facebook) return null;
|
||||
return {
|
||||
appId: facebook.appId,
|
||||
admins: (0, _utils.resolveAsArrayOrUndefined)(facebook.admins)
|
||||
};
|
||||
};
|
||||
const resolvePagination = async (pagination, metadataBase, pathname, context)=>{
|
||||
return {
|
||||
previous: (pagination == null ? void 0 : pagination.previous) ? resolveAlternateUrl(pagination.previous, metadataBase, await pathname, context) : null,
|
||||
next: (pagination == null ? void 0 : pagination.next) ? resolveAlternateUrl(pagination.next, metadataBase, await pathname, context) : null
|
||||
};
|
||||
};
|
||||
|
||||
//# sourceMappingURL=resolve-basics.js.map
|
||||
Reference in New Issue
Block a user