metax
Version:
Add SEO and other metadata tags to your Gatsby website.
1,307 lines (1,166 loc) • 38.3 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('prop-types'), require('react-helmet')) :
typeof define === 'function' && define.amd ? define(['exports', 'react', 'prop-types', 'react-helmet'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.metax = {}, global.React, global.PropTypes, global.Helmet));
}(this, (function (exports, React, PropTypes, reactHelmet) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
var defaultProps$f = {
name: "application-name"
};
var nameTypes$3 = ["application-name", "apple-mobile-web-app-title"];
/**
* Defines the name of the site application instance
* @see https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/samples/gg491732(v=vs.85)
*
* @param {string} content
* @param {"application-name"|"apple-mobile-web-app-title"} name
* @return {{name: (*|string), content: *}}
*/
var applicationNameMeta = function applicationNameMeta(_ref) {
var content = _ref.content,
_ref$name = _ref.name,
name = _ref$name === void 0 ? defaultProps$f.name : _ref$name;
return {
content: content,
name: content && nameTypes$3.includes(name) ? name : defaultProps$f.name
};
};
applicationNameMeta.propTypes = {
content: PropTypes__default['default'].string.isRequired,
name: PropTypes__default['default'].oneOf(nameTypes$3)
};
var contentTypes$2 = ["no"];
/**
* Link highlighting
*
* Can be used to disable automatic highlighting of tapped links
* @see https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/dev-guides/bg182645(v=vs.85)#tapHighlight
*
* @param {'no'} content
* @return {{name: string, content: string}}
*
* @example
* <meta name="msapplication-tap-highlight" content="no" />
*/
var applicationTapHighlightMeta = function applicationTapHighlightMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: content && "msapplication-tap-highlight"
};
};
applicationTapHighlightMeta.propTypes = {
content: PropTypes__default['default'].oneOf(contentTypes$2)
};
/**
* The path to an image to be used as background for a tile
* @param content
* @return {{name: (*|string), content: *}}
*
* @example
* <meta name="msapplication-TileImage" content="images/tile-144.png" />
*/
var applicationTileImageMeta = function applicationTileImageMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: content && "msapplication-TileImage"
};
};
applicationTileImageMeta.propTypes = {
content: PropTypes__default['default'].object.isRequired
};
/**
* Additional tooltip text
* @see https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/samples/gg491732(v=vs.85)
*
* @param content
* @return {{name: (*|string), content: *}}
*
* @example
* <meta name="msapplication-tooltip" content="Channel 9 Podcasts" />
*/
var applicationTooltipMeta = function applicationTooltipMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: content && "msapplication-tooltip"
};
};
applicationTooltipMeta.propTypes = {
content: PropTypes__default['default'].string.isRequired
};
var articleSectionMeta = function articleSectionMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "article:section"
};
};
var authorMeta = function authorMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "author"
};
};
authorMeta.propTypes = {
content: PropTypes__default['default'].string
};
var dcTitleMeta = function dcTitleMeta(_ref) {
var content = _ref.content,
lang = _ref.lang;
return {
content: content,
lang: content && lang,
name: content && "dcterms.title"
};
};
dcTitleMeta.propTypes = {
content: PropTypes__default['default'].string,
lang: PropTypes__default['default'].string
};
var descriptionMeta = function descriptionMeta(_ref) {
var content = _ref.content;
return {
content: content,
itemProp: "description",
name: "description",
property: "og:description"
};
};
descriptionMeta.propTypes = {
content: PropTypes__default['default'].string.isRequired
};
var defaultProps$e = {
content: "Global"
};
/**
* @param {"Global"|"Local"|"IU"} content The level or degree of distribution
* @return {{name: string, content: "Global"|"Local"|"IU"}}
*/
var distributionMeta = function distributionMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$e,
content = _ref.content;
return {
content: content,
name: "distribution"
};
};
var fbAppIdMeta = function fbAppIdMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "fb:app_id"
};
};
var fbProfileIdMeta = function fbProfileIdMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "fb:profile_id"
};
};
var defaultProps$d = {
value: "yes"
};
/**
* @type {string[]}
*/
var keyTypes = ["address", "date", "email", "telephone"];
var valueTypes = ["no", "yes"];
/**
* Enables or disables automatic detection of possible phone numbers in a page
*
* @see https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html
*
* @param {"address"|"date"|"email"|"telephone"} key
* @param {"no"|"yes"} value
* @return {{}}
*/
var formatDetectionMeta = function formatDetectionMeta(_ref) {
var key = _ref.key,
_ref$value = _ref.value,
value = _ref$value === void 0 ? defaultProps$d.value : _ref$value;
var content = keyTypes.includes(key) && valueTypes.includes(value) && "".concat(key, "=").concat(value);
return {
content: content,
name: content && "format-detection"
};
};
formatDetectionMeta.defaultProps = defaultProps$d;
/**
* @type {string[]}
*/
formatDetectionMeta.keyTypes = keyTypes;
formatDetectionMeta.propTypes = {
key: PropTypes__default['default'].oneOf(keyTypes),
value: PropTypes__default['default'].oneOf(valueTypes)
};
var geoPlaceName = function geoPlaceName(_ref) {
var content = _ref.content;
return {
content: content,
name: "geo.placename"
};
};
var geoPositionMeta = function geoPositionMeta(_ref) {
var latitude = _ref.latitude,
longitude = _ref.longitude;
return {
content: "".concat(latitude, ";").concat(longitude),
name: "geo.position"
};
};
var geoRegionMeta = function geoRegionMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "geo.region"
};
};
var defaultProps$c = {
schema: "og"
};
/**
* @param content
* @param {"og"|"twitter"} schema
* @return {{property: string, content}}
*/
var imageAltMeta = function imageAltMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$c,
content = _ref.content,
schema = _ref.schema;
return {
content: content,
name: "".concat(schema, ":image:alt"),
property: "".concat(schema, ":image:alt")
};
};
imageAltMeta.defaultProps = defaultProps$c;
var imageMeta = function imageMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "image",
property: "og:image"
};
};
var defaultProps$b = {
type: "image"
};
/**
* @param {number|string} content
* @param {"height"|"width"} property
* @param {"image"|"video"} type
* @return {{property: string, content}}
*/
var ogObjectDimensionMeta = function ogObjectDimensionMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$b,
content = _ref.content,
property = _ref.property,
type = _ref.type;
return {
content: isNaN(content) ? parseInt(content) : content,
property: "og:".concat(type, ":").concat(property)
};
};
ogObjectDimensionMeta.defaultProps = defaultProps$b;
var defaultProps$a = {
type: "image"
};
/**
* @param {string} content The mime type
* @param {"audio"|"image"|"video"} type The object type
* @return {{property: string, content}}
*/
var ogObjectTypeMeta = function ogObjectTypeMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$a,
content = _ref.content,
type = _ref.type;
return {
content: content,
property: "og:".concat(type, ":type")
};
};
ogObjectTypeMeta.defaultProps = defaultProps$a;
var getImageMetaProps = function getImageMetaProps(image, index) {
var key = "image".concat(key);
var metaProps = {};
image.alt && (metaProps["".concat(key, "Alt")] = imageAltMeta({
content: image.alt,
schema: "og"
}));
image.height && (metaProps["".concat(key, "Height")] = ogObjectDimensionMeta({
content: image.height,
property: "height",
type: "image"
}));
image.url && (metaProps["".concat(key, "Url")] = imageMeta({
content: image.url
}));
image.type && (metaProps["".concat(key, "Type")] = ogObjectTypeMeta({
content: image.type,
type: "image"
}));
image.width && (metaProps["".concat(key, "Width")] = ogObjectDimensionMeta({
content: image.width,
property: "width",
type: "image"
}));
return metaProps;
};
var ogVideoMeta = function ogVideoMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "og:video"
};
};
var getVideoProps = function getVideoProps(video, index) {
var metaProps = {};
var key = "ogVideo".concat(index);
video.height && (metaProps["".concat(key, "Height")] = ogObjectDimensionMeta({
content: video.height,
property: "height",
type: "video"
}));
video.url && (metaProps.ogVideo = ogVideoMeta({
content: video.url
}));
video.width && (metaProps["".concat(key, "Width")] = ogObjectDimensionMeta({
content: video.width,
property: "width",
type: "video"
}));
return metaProps;
};
var googleSiteVerificationMeta = function googleSiteVerificationMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "google-site-verification"
};
};
var icbmMeta = function icbmMeta(_ref) {
var latitude = _ref.latitude,
longitude = _ref.longitude;
return {
content: "".concat(latitude, ", ").concat(longitude),
name: "ICBM"
};
};
/**
* @param {Array|string} content
*/
var keywordsMeta = function keywordsMeta(_ref) {
var content = _ref.content,
type = _ref.type;
var allowedTypes = ["article", "book"];
return {
content: Array.isArray(content) ? content.join(",") : content,
name: "keywords",
property: allowedTypes.includes(type) && "".concat(type, ":tag")
};
};
var defaultProps$9 = {
content: "yes",
name: "mobile-web-app-capable"
};
var contentTypes$1 = ["yes"];
var nameTypes$2 = ["apple-mobile-web-app-capable", "mobile-web-app-capable"];
/**
* Sets whether a web application runs in full-screen mode.
*
* @see https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html
*
* @param {'yes'} content
* @param {'apple-mobile-web-app-capable'|'mobile-web-app-capable'} name
* @return {{name: string, content: string}}
*/
var mobileWebAppCapableMeta = function mobileWebAppCapableMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$9,
content = _ref.content,
name = _ref.name;
content = contentTypes$1.includes(content) && content;
return {
content: content,
name: content && nameTypes$2.includes(name) ? name : defaultProps$9.name
};
};
mobileWebAppCapableMeta.propTypes = {
content: PropTypes__default['default'].oneOf(contentTypes$1),
name: PropTypes__default['default'].oneOf(nameTypes$2)
};
var ogAudioMeta = function ogAudioMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "og:audio"
};
};
var ogDeterminerMeta = function ogDeterminerMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "og:determiner"
};
};
var defaultProps$8 = {
alternate: false
};
var ogLocaleMeta = function ogLocaleMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$8,
content = _ref.content,
alternate = _ref.alternate;
return {
content: content,
property: alternate ? "og:locale" : "og:locale:alternate"
};
};
ogLocaleMeta.defaultProps = defaultProps$8;
var ogSiteNameMeta = function ogSiteNameMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "og:site_name"
};
};
var defaultProps$7 = {
content: "website"
};
/**
* @param {"actor"|"article"|"author"|"blog"|"book"|"city"|"company"|"country"|"food"|"game"|"hotel"|"movie"|"music:song"|"music.album"|"music.playlist"|"music.radio_station"|"politician"|"profile"|"restaurant"|"video.movie"|"video.episode"|"video.tv_show"|"video.other"|"website"} content
*/
var ogTypeMeta = function ogTypeMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$7,
content = _ref.content;
return {
content: content,
property: "og:type"
};
};
ogTypeMeta.defaultProps = defaultProps$7;
var ogUrlMeta = function ogUrlMeta(_ref) {
var content = _ref.content;
return {
content: content,
property: "og:url"
};
};
var revisitAfterMeta = function revisitAfterMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "revisit-after"
};
};
var contentTypes = [
/**
* The black setting has a black background and black text and symbols
*/
"black",
/**
* The black-translucent setting has white text and symbols,
* and will take the same background color as the body of your web app.
*
* The text color will remain white even if you use a light background color.
*/
"black-translucent",
/**
* The default setting has a white background with black text and symbols.
*/
"default"];
var defaultProps$6 = {
content: "default"
};
/**
* @see https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html
*
* @param content
* @return {{name: string, content}}
*/
var statusBarStyleMeta = function statusBarStyleMeta(_ref) {
var _ref$content = _ref.content,
content = _ref$content === void 0 ? defaultProps$6.content : _ref$content;
return {
content: contentTypes.includes(content) ? content : defaultProps$6.content,
name: content && "apple-mobile-web-app-status-bar-style"
};
};
statusBarStyleMeta.defaultProps = defaultProps$6;
statusBarStyleMeta.propTypes = {
content: PropTypes__default['default'].oneOf(contentTypes)
};
var defaultProps$5 = {
name: "theme-color"
};
var nameTypes$1 = ["msapplication-navbutton-color", "msapplication-TileColor", "theme-color"];
/**
* Indicates a color associated with the web site's theme.
*
* Web browsers might use this color to theme their UI to be consistent with
* the web site's color scheme.
*
* @see https://html.spec.whatwg.org/multipage/semantics.html#meta-theme-color
*
* @param {string} content
* @param {string} name
* @return {{name: string, content: string}}
*
* @example
* <meta name="theme-color" content="#3c790a"/>
*/
var themeColorMeta = function themeColorMeta(_ref) {
var content = _ref.content,
_ref$name = _ref.name,
name = _ref$name === void 0 ? defaultProps$5.name : _ref$name;
return {
content: content,
name: content && nameTypes$1.includes(name) ? name : defaultProps$5.name
};
};
themeColorMeta.propTypes = {
content: PropTypes__default['default'].string.isRequired,
name: PropTypes__default['default'].oneOf(nameTypes$1)
};
var titleMeta = function titleMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "title",
property: "og:title"
};
};
var defaultProps$4 = {
content: "summary"
};
/**
* @param {"app"|"player"|"summary"|"summary_large_image"} content
* @return {{name: string, content}}
*/
var twitterCardMeta = function twitterCardMeta() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$4,
content = _ref.content;
return {
content: content,
name: "twitter:card",
property: "twitter:card"
};
};
twitterCardMeta.defaultProps = defaultProps$4;
var twitterCreatorMeta = function twitterCreatorMeta(_ref) {
var content = _ref.content;
var property = isNaN(content) ? "twitter:creator" : "twitter:creator:id";
return {
content: content,
name: property,
property: property
};
};
var twitterDescriptionMeta = function twitterDescriptionMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "twitter:description",
property: "twitter:description"
};
};
var twitterImageMeta = function twitterImageMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "twitter:image",
property: "twitter:image"
};
};
var twitterSiteMeta = function twitterSiteMeta(_ref) {
var content = _ref.content;
var property = isNaN(content) ? "twitter:site" : "twitter:site:id";
return {
content: content,
name: property,
property: property
};
};
var twitterTitleMeta = function twitterTitleMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "twitter:title",
property: "twitter:title"
};
};
var twitterUrlMeta = function twitterUrlMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: "twitter:url",
property: "twitter:url"
};
};
/**
* The version of a web application according to the Semantic Versioning spec
* @see https://github.com/dvorapa/meta-version
*
* @param {string} content
* @return {{name, content: *}}
*
* @example
* <meta name="version" content="0.1.0+1" />
*/
var versionMeta = function versionMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: content && "version"
};
};
versionMeta.propTypes = {
content: PropTypes__default['default'].string.isRequired
};
var appStoreAppMeta = function appStoreAppMeta(_ref) {
var content = _ref.content;
return {
content: content,
name: content && 'apple-itunes-app'
};
};
appStoreAppMeta.propTypes = {
content: PropTypes__default['default'].string.isRequired
};
var defaultProps$3 = {
name: "application-url"
};
var nameTypes = ["application-url", "msapplication-starturl"];
/**
* Start URL of web apps
*
* Can be used to specify the start URL of pinned web apps
*
* @param {string} content
* @param {"application-url"|"msapplication-starturl"} name
* @return {{name: string, content: string}}
*
* @example
* <meta name="application-url" content="https://gmail.com/">
*/
var applicationUrlMeta = function applicationUrlMeta(_ref) {
var content = _ref.content,
_ref$name = _ref.name,
name = _ref$name === void 0 ? defaultProps$3.name : _ref$name;
return {
content: content,
name: content && nameTypes.includes(name) ? name : "application-url"
};
};
applicationUrlMeta.defaultProps = defaultProps$3;
applicationUrlMeta.propTypes = {
content: PropTypes__default['default'].string.isRequired,
name: PropTypes__default['default'].oneOf(nameTypes)
};
var getMetaProps = function getMetaProps() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var metaProps = {};
var appStoreApp = props.appStoreApp,
applicationName = props.applicationName,
_props$applicationUrl = props.applicationUrl,
applicationUrl = _props$applicationUrl === void 0 ? props.siteUrl : _props$applicationUrl,
applicationTileImage = props.applicationTileImage,
_props$applicationToo = props.applicationTooltip,
applicationTooltip = _props$applicationToo === void 0 ? props.siteDescription : _props$applicationToo,
articleSection = props.articleSection,
audio = props.audio,
author = props.author,
_props$dcTitle = props.dcTitle,
dcTitle = _props$dcTitle === void 0 ? props.title : _props$dcTitle,
description = props.description,
determiner = props.determiner,
distribution = props.distribution,
fbAppId = props.fbAppId,
fbProfileId = props.fbProfileId,
geoPlaceName$1 = props.geoPlaceName,
geoPosition = props.geoPosition,
geoRegion = props.geoRegion,
_props$images = props.images,
images = _props$images === void 0 ? [] : _props$images,
keywords = props.keywords,
googleSiteVerification = props.googleSiteVerification,
lang = props.lang,
locale = props.locale,
_props$localeAlternat = props.localeAlternate,
localeAlternate = _props$localeAlternat === void 0 ? [] : _props$localeAlternat,
revisitAfter = props.revisitAfter,
siteName = props.siteName,
statusBarStyle = props.statusBarStyle,
themeColor = props.themeColor,
title = props.title,
twitterCard = props.twitterCard,
twitterCreator = props.twitterCreator,
_props$twitterDescrip = props.twitterDescription,
twitterDescription = _props$twitterDescrip === void 0 ? props.description : _props$twitterDescrip,
_props$twitterImage = props.twitterImage,
twitterImage = _props$twitterImage === void 0 ? images && images[0] : _props$twitterImage,
twitterSite = props.twitterSite,
_props$twitterTitle = props.twitterTitle,
twitterTitle = _props$twitterTitle === void 0 ? props.title : _props$twitterTitle,
_props$type = props.type,
type = _props$type === void 0 ? "website" : _props$type,
url = props.url,
version = props.version,
_props$videos = props.videos,
videos = _props$videos === void 0 ? [] : _props$videos;
if (applicationName) {
metaProps.appleMobileWebCapable = mobileWebAppCapableMeta({
content: "yes",
name: "apple-mobile-web-app-capable"
});
metaProps.applicationName = applicationNameMeta({
content: applicationName
});
metaProps.applicationTapHighlight = applicationTapHighlightMeta({
content: "no"
});
formatDetectionMeta.keyTypes.forEach(function (key) {
metaProps["".concat(key, "FormatDetection")] = formatDetectionMeta({
key: key,
value: "no"
});
});
metaProps.mobileWebAppTitle = applicationNameMeta({
content: applicationName,
name: "apple-mobile-web-app-title"
});
metaProps.mobileWebAppCapable = mobileWebAppCapableMeta({
content: "yes"
});
metaProps.statusBarStyle = statusBarStyleMeta({
content: statusBarStyle
});
}
if (applicationUrl) {
metaProps.applicationStartUrl = applicationUrlMeta({
content: applicationUrl,
name: "msapplication-starturl"
});
metaProps.applicationUrl = applicationUrlMeta({
content: applicationUrl
});
}
applicationTileImage && (metaProps.applicationTileImage = applicationTileImageMeta({
content: applicationTileImage
}));
applicationTooltip && (metaProps.applicationTooltip = applicationTooltipMeta({
content: applicationTooltip
}));
appStoreApp && (metaProps.appStoreApp = appStoreAppMeta({
content: appStoreApp
}));
if (audio) {
audio.url && (metaProps.ogAudio = ogAudioMeta({
content: audio.url
}));
audio.type && (metaProps.ogAudioType = ogObjectTypeMeta({
content: audio.type,
type: "audio"
}));
}
author && (metaProps.author = authorMeta({
content: author
}));
dcTitle && (metaProps.dcTitle = dcTitleMeta({
content: dcTitle,
lang: lang
}));
description && (metaProps.description = descriptionMeta({
content: description
}));
determiner && (metaProps.ogDeterminer = ogDeterminerMeta({
content: determiner
}));
distribution && (metaProps.distribution = distributionMeta({
content: distribution
}));
fbAppId && (metaProps.fbAppId = fbAppIdMeta({
content: fbAppId
}));
fbProfileId && (metaProps.fbProfileId = fbProfileIdMeta({
content: fbProfileId
}));
geoPlaceName$1 && (metaProps.geoPlaceName = geoPlaceName({
content: geoPlaceName$1
}));
if (geoPosition) {
metaProps.geoPosition = geoPositionMeta(geoPosition);
metaProps.icbm = icbmMeta(geoPosition);
}
geoRegion && (metaProps.geoRegion = geoRegionMeta({
content: geoRegion
}));
googleSiteVerification && (metaProps.googleSiteVerification = googleSiteVerificationMeta({
content: googleSiteVerification
}));
keywords && (metaProps.keywords = keywordsMeta({
content: keywords,
type: type
}));
images && Object.assign(metaProps, images.forEach(getImageMetaProps));
if (locale) {
metaProps.ogLocale = ogLocaleMeta({
alternate: false,
content: locale
});
localeAlternate && localeAlternate.forEach(function (content, index) {
return metaProps["ogLocaleAlternate".concat(index)] = ogLocaleMeta({
alternate: true,
content: content
});
});
}
revisitAfter && (metaProps.revisitAfter = revisitAfterMeta({
content: revisitAfter
}));
siteName && (metaProps.ogSiteName = ogSiteNameMeta({
content: siteName
}));
if (themeColor) {
metaProps.applicationNavButtonColor = themeColorMeta({
content: themeColor,
name: "msapplication-navbutton-color"
});
metaProps.applicationTileColor = themeColorMeta({
content: themeColor,
name: "msapplication-TileColor"
});
metaProps.themeColor = themeColorMeta({
content: themeColor
});
}
title && (metaProps.title = titleMeta({
content: title
}));
twitterCard && (metaProps.twitterCard = twitterCardMeta({
content: twitterCard
}));
twitterCreator && (metaProps.twitterCreator = twitterCreatorMeta({
content: twitterCreator
}));
twitterDescription && (metaProps.twitterDescription = twitterDescriptionMeta({
content: twitterDescription
}));
if (twitterImage) {
twitterImage.alt && (metaProps.twitterImageAlt = imageAltMeta({
content: twitterImage.alt,
schema: "twitter"
}));
twitterImage.url && (metaProps.twitterImage = twitterImageMeta({
content: twitterImage.url
}));
}
twitterSite && (metaProps.twitterSite = twitterSiteMeta({
content: twitterSite
}));
if (type) {
metaProps.ogType = ogTypeMeta({
content: type
});
articleSection && (metaProps.articleSection = articleSectionMeta({
content: articleSection
}));
}
twitterTitle && (metaProps.twitterTitle = twitterTitleMeta({
content: twitterTitle
}));
if (url) {
metaProps.ogUrl = ogUrlMeta({
content: url
});
metaProps.twitterUrl = twitterUrlMeta({
content: url
});
}
version && (metaProps.version = versionMeta({
content: version
}));
videos && Object.assign(metaProps, videos.forEach(getVideoProps));
return metaProps;
};
var _excluded$1 = ["siteMetadata"];
var defaultProps$2 = {
siteMetadata: {}
};
/**
* @param {Object} siteMetadata
* @param {Object} props
*/
var mergeProps = function mergeProps() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$2,
siteMetadata = _ref.siteMetadata,
props = _objectWithoutProperties(_ref, _excluded$1);
return _objectSpread2(_objectSpread2(_objectSpread2({}, siteMetadata), props), {}, {
siteDescription: siteMetadata && siteMetadata.hasOwnProperty("description") && siteMetadata.description,
siteName: siteMetadata && siteMetadata.hasOwnProperty("siteName") ? siteMetadata.siteName : props.title
});
};
mergeProps.defaultProps = defaultProps$2;
mergeProps.propTypes = {
author: PropTypes__default['default'].string,
siteMetadata: PropTypes__default['default'].shape({
description: PropTypes__default['default'].string.isRequired,
siteName: PropTypes__default['default'].string,
siteUrl: PropTypes__default['default'].string.isRequired
}),
title: PropTypes__default['default'].string.isRequired
};
var defaultProps$1 = {
itemScope: true,
itemType: "https://schema.org/WebSite"
};
var htmlAttributes = function htmlAttributes() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps$1,
itemScope = _ref.itemScope,
itemType = _ref.itemType,
lang = _ref.lang;
return {
itemScope: itemScope,
itemType: itemType,
lang: lang
};
};
htmlAttributes.defaultProps = defaultProps$1;
/**
* @todo Set itemType to an enum of items at https://schema.org/docs/full.html
* @todo Set lang to an enum of valid codes (ex: en, en-us, pt, pt-br, pt-pt)
*/
htmlAttributes.propTypes = {
itemScope: PropTypes__default['default'].bool,
itemType: PropTypes__default['default'].string,
lang: PropTypes__default['default'].string
};
var defaultProps = {
itemProp: "name"
};
var titleAttributes = function titleAttributes() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultProps,
itemProp = _ref.itemProp,
lang = _ref.lang;
return {
lang: lang,
itemProp: itemProp
};
};
titleAttributes.defaultProps = defaultProps;
titleAttributes.propTypes = {
itemProp: PropTypes__default['default'].string,
lang: PropTypes__default['default'].string
};
/**
* @see http://humanstxt.org/Standard.html
* @param {string} href
* @return {{rel: (*|string), href: *}}
*/
var humansLink = function humansLink(_ref) {
var href = _ref.href;
return {
href: href,
rel: href && "author"
};
};
humansLink.propTypes = {
href: PropTypes__default['default'].string
};
/**
* @see https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/pinnedTabs/pinnedTabs.html
* @param {string?} color Sets the display color of the image
* @param {string} href URL of SVG file with no background and viewBox 0 0 16 16
* @return {{color: *, rel: (*|string), href: *}}
*/
var maskIconLink = function maskIconLink(_ref) {
var color = _ref.color,
href = _ref.href;
return {
color: href && color,
href: href,
rel: href && "mask-icon"
};
};
maskIconLink.propTypes = {
color: PropTypes__default['default'].string,
href: PropTypes__default['default'].string.isRequired
};
var fluidIconLink = function fluidIconLink(_ref) {
var href = _ref.href,
title = _ref.title;
return {
href: href,
rel: (href || title) && "fluid-icon",
title: title
};
};
fluidIconLink.propTypes = {
href: PropTypes__default['default'].string,
title: PropTypes__default['default'].string
};
var getLinkProps = function getLinkProps() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var linkProps = {};
var fluidIcon = props.fluidIcon,
humans = props.humans,
maskIcon = props.maskIcon,
siteName = props.siteName,
themeColor = props.themeColor;
fluidIcon && (linkProps.fluidIcon = fluidIconLink({
href: fluidIcon,
title: siteName
}));
humans && (linkProps.humans = humansLink({
href: humans
}));
maskIcon && (linkProps.maskIcon = maskIconLink({
color: themeColor,
href: maskIcon
}));
return linkProps;
};
var _excluded = ["siteMetadata"];
/**
* SEO component that returns Helmet component with metadata
*
* @param {Object} siteMetadata
* @param {Object} props
*
* @return {*}
* @constructor
*/
var SEO = function SEO(_ref) {
var siteMetadata = _ref.siteMetadata,
props = _objectWithoutProperties(_ref, _excluded);
var mergedProps = mergeProps(_objectSpread2({
siteMetadata: siteMetadata
}, props));
var linkProps = getLinkProps(mergedProps);
var metaProps = getMetaProps(mergedProps);
var lang = mergedProps.lang,
link = mergedProps.link,
meta = mergedProps.meta,
itemScope = mergedProps.itemScope,
itemType = mergedProps.itemType,
title = mergedProps.title,
titleItemProp = mergedProps.titleItemProp,
titleTemplate = mergedProps.titleTemplate;
var helmetLinkProps = Object.values(linkProps).concat(link || []);
var helmetMetaProps = Object.values(metaProps).concat(meta || []);
return /*#__PURE__*/React__default['default'].createElement(reactHelmet.Helmet, {
defer: false,
htmlAttributes: htmlAttributes({
lang: lang,
itemScope: itemScope,
itemType: itemType
}),
link: helmetLinkProps,
meta: helmetMetaProps,
title: title,
titleAttributes: titleAttributes({
lang: lang,
itemProp: titleItemProp
}),
titleTemplate: titleTemplate
});
};
SEO.defaultProps = {
images: [],
itemType: htmlAttributes.defaultProps.itemType,
link: [],
meta: [],
siteMetadata: {},
type: ogTypeMeta.defaultProps.content,
videos: []
};
SEO.propTypes = {
author: authorMeta.propTypes.content,
description: descriptionMeta.propTypes.content,
images: PropTypes__default['default'].arrayOf(PropTypes__default['default'].object),
itemType: htmlAttributes.propTypes.itemType,
lang: htmlAttributes.propTypes.lang,
locale: PropTypes__default['default'].string,
meta: PropTypes__default['default'].arrayOf(PropTypes__default['default'].object),
siteMetadata: PropTypes__default['default'].object,
title: PropTypes__default['default'].string.isRequired,
titleTemplate: PropTypes__default['default'].string,
type: PropTypes__default['default'].string
};
exports.SEO = SEO;
Object.defineProperty(exports, '__esModule', { value: true });
})));