@pittica/gatsby-plugin-seo
Version:
SEO optimization plugin for GatsbyJS.
121 lines (104 loc) • 4.78 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = Seo;
var _react = _interopRequireWildcard(require("react"));
var _reactHelmetAsync = require("react-helmet-async");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _gatsbyPluginUtils = require("@pittica/gatsby-plugin-utils");
var _socialContext = _interopRequireDefault(require("../context/social-context"));
var _openGraph = _interopRequireDefault(require("./open-graph"));
var _twitterCard = _interopRequireDefault(require("./twitter-card"));
var _webpage = _interopRequireDefault(require("./ld-json/webpage"));
var _breadcrumb = _interopRequireDefault(require("./ld-json/breadcrumb"));
var _links = _interopRequireDefault(require("./links"));
var _pageMeta = _interopRequireDefault(require("./page-meta"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function Seo({
image,
isBlogPost,
title,
path,
description,
keywords,
author,
locale,
next,
previous,
breadcrumb,
datePublished
}) {
const context = (0, _react.useContext)(_socialContext.default);
const postTitle = title || context.title;
const postDescription = description || context.description;
const url = (0, _gatsbyPluginUtils.withUrl)(path, context.siteUrl);
const postLocale = locale ? locale : context.locale;
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactHelmetAsync.Helmet, {
htmlAttributes: {
lang: postLocale === null || postLocale === void 0 ? void 0 : postLocale.language
},
title: postTitle,
titleTemplate: title != context.title ? postTitle ? `%s | ${context.title}` : context.title : null
}, keywords && keywords.length > 0 && /*#__PURE__*/_react.default.createElement("meta", {
name: "keywords",
content: keywords.join(", "),
key: "html-keywords"
})), /*#__PURE__*/_react.default.createElement(_pageMeta.default, {
siteUrl: context.siteUrl,
description: postDescription,
image: image
}), /*#__PURE__*/_react.default.createElement(_links.default, {
siteUrl: context.siteUrl,
path: path,
next: next,
previous: previous
}), /*#__PURE__*/_react.default.createElement(_openGraph.default, {
url: url,
article: isBlogPost,
title: postTitle,
description: postDescription,
image: image,
locale: postLocale
}), /*#__PURE__*/_react.default.createElement(_twitterCard.default, {
title: postTitle,
description: postDescription,
image: image
}), /*#__PURE__*/_react.default.createElement(_webpage.default, {
isBlogPost: isBlogPost,
url: url,
title: postTitle,
image: image,
description: postDescription,
datePublished: datePublished,
siteUrl: context.siteUrl,
author: author || context.author,
organization: context.organization,
defaultTitle: context.title
}), /*#__PURE__*/_react.default.createElement(_breadcrumb.default, {
url: url,
title: postTitle,
image: image,
items: breadcrumb
}));
}
Seo.propTypes = {
title: _propTypes.default.string,
image: _propTypes.default.string,
path: _propTypes.default.string,
description: _propTypes.default.string,
keywords: _propTypes.default.arrayOf(_propTypes.default.string),
author: _propTypes.default.string,
isBlogPost: _propTypes.default.bool,
locale: _propTypes.default.any,
next: _propTypes.default.string,
previous: _propTypes.default.string,
breadcrumb: _propTypes.default.array,
datePublished: _propTypes.default.string
};
Seo.defaultProps = {
isBlogPost: false,
image: null,
title: null,
breadcrumb: []
};