@pittica/gatsby-plugin-seo
Version:
SEO optimization plugin for GatsbyJS.
126 lines (106 loc) • 4.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.wrapPageElement = wrapPageElement;
exports.wrapRootElement = wrapRootElement;
var _react = _interopRequireWildcard(require("react"));
var _reactHelmetAsync = require("react-helmet-async");
var _gatsbyPluginUtils = require("@pittica/gatsby-plugin-utils");
var _socialContext = _interopRequireDefault(require("./context/social-context"));
var _organization = _interopRequireDefault(require("./components/ld-json/organization"));
var _website = _interopRequireDefault(require("./components/ld-json/website"));
var _twitterCard = _interopRequireDefault(require("./components/twitter-card"));
var _openGraph = _interopRequireDefault(require("./components/open-graph"));
var _extract = _interopRequireDefault(require("./utils/extract"));
var _links = _interopRequireDefault(require("./components/links"));
var _pageMeta = _interopRequireDefault(require("./components/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 wrapPageElement({
element,
props: {
location,
data
}
}, {
image,
description,
socials,
siteUrl,
title,
locale,
organization,
fields,
resolve,
debug
}) {
if (!organization.url) {
organization.url = siteUrl;
}
if (!organization.name) {
organization.name = title;
}
if (!organization.logo) {
organization.logo = image;
}
const {
facebook,
twitter
} = socials;
const seo = (0, _extract.default)(data, {
title,
description,
image,
fields,
resolve
});
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactHelmetAsync.Helmet, {
htmlAttributes: {
lang: locale.language
},
title: seo.title || title,
titleTemplate: seo.title != title ? seo.title ? `%s | ${title}` : title : null
}, facebook.app && /*#__PURE__*/_react.default.createElement("meta", {
property: "fb:app_id",
content: facebook.app,
key: "fb-app-id"
}), !debug && /*#__PURE__*/_react.default.createElement("base", {
href: siteUrl
})), /*#__PURE__*/_react.default.createElement(_pageMeta.default, {
siteUrl: siteUrl,
description: seo.description,
image: seo.image
}), /*#__PURE__*/_react.default.createElement(_links.default, {
siteUrl: siteUrl,
path: location.href || location.pathname,
next: (0, _gatsbyPluginUtils.searchArray)(fields.next, data),
previous: (0, _gatsbyPluginUtils.searchArray)(fields.previous, data)
}), /*#__PURE__*/_react.default.createElement(_openGraph.default, {
url: location.href || (0, _gatsbyPluginUtils.withUrl)(location.pathname, siteUrl),
title: seo.title,
description: seo.description,
image: seo.image,
locale: locale,
site: title
}), /*#__PURE__*/_react.default.createElement(_twitterCard.default, {
title: seo.title,
description: seo.description,
image: seo.image,
username: twitter.username,
site: twitter.site || twitter.username
}), /*#__PURE__*/_react.default.createElement(_website.default, {
url: siteUrl,
description: description,
name: title
}), /*#__PURE__*/_react.default.createElement(_organization.default, {
organization: organization,
socials: socials
}), element);
}
function wrapRootElement({
element
}, pluginOptions) {
return /*#__PURE__*/_react.default.createElement(_reactHelmetAsync.HelmetProvider, null, /*#__PURE__*/_react.default.createElement(_socialContext.default.Provider, {
value: pluginOptions
}, element));
}