UNPKG

metax

Version:

Add SEO and other metadata tags to your Gatsby website.

1,307 lines (1,166 loc) 38.3 kB
(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 }); })));