react-headless-yoast
Version:
A React component that handles Yoast SEO in a Headless WordPress site.
145 lines (138 loc) • 12.9 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, {get: all[name], enumerable: true});
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
};
// src/Seo.js
__markAsModule(exports);
__export(exports, {
default: () => Seo,
postToSeoOptions: () => postToSeoOptions,
toTwitter: () => toTwitter
});
var import_react = __toModule(require("react"));
// node_modules/mintility/dist/helpers.js
var objString = Object.prototype.toString.call.bind(Object.prototype.toString);
// node_modules/mintility/dist/isFunction.js
function isFunction(value) {
return typeof value === "function" && objString(value) == "[object Function]";
}
var isFunction_default = isFunction;
// node_modules/mintility/dist/isObject.js
function isObject(value) {
return value != null && typeof value === "object";
}
var isObject_default = isObject;
// node_modules/mintility/dist/isString.js
function isString(value) {
return typeof value === "string" || isObject_default(value) && objString(value) === "[object String]";
}
var isString_default = isString;
// src/Seo.js
function toTwitter(str) {
if (!isString_default(str)) {
return str;
}
if (str[0] === "@") {
return str;
}
return `@${str}`;
}
function postToSeoOptions(page, pageSchema, siteSchema) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
const {seo} = page;
let pageSchemaObject = isString_default(pageSchema) ? JSON.parse(pageSchema) : pageSchema;
if (!isObject_default(pageSchemaObject) && isString_default((_a = seo === null || seo === void 0 ? void 0 : seo.schema) === null || _a === void 0 ? void 0 : _a.raw)) {
pageSchemaObject = JSON.parse((_c = (_b = seo === null || seo === void 0 ? void 0 : seo.schema) === null || _b === void 0 ? void 0 : _b.raw) !== null && _c !== void 0 ? _c : "");
}
const siteSchemaObject = isString_default(siteSchema) ? JSON.parse(siteSchema) : siteSchema;
const title = page.title || (seo === null || seo === void 0 ? void 0 : seo.title) || (seo === null || seo === void 0 ? void 0 : seo.opengraphTitle) || (seo === null || seo === void 0 ? void 0 : seo.twitterTitle) || (siteSchemaObject === null || siteSchemaObject === void 0 ? void 0 : siteSchemaObject.siteName) || "";
const description = (seo === null || seo === void 0 ? void 0 : seo.metaDesc) || (seo === null || seo === void 0 ? void 0 : seo.opengraphDescription) || (seo === null || seo === void 0 ? void 0 : seo.twitterDescription) || "";
const canonical = (seo === null || seo === void 0 ? void 0 : seo.canonical) || (seo === null || seo === void 0 ? void 0 : seo.opengraphUrl);
const locale = page.locale || "en_US";
const cornerstone = seo === null || seo === void 0 ? void 0 : seo.cornerstone;
const focusKeyword = seo === null || seo === void 0 ? void 0 : seo.focuskw;
const keywords = seo === null || seo === void 0 ? void 0 : seo.metaKeywords;
const readingTime = seo === null || seo === void 0 ? void 0 : seo.readingTime;
const robotsIndex = (seo === null || seo === void 0 ? void 0 : seo.metaRobotsNoindex) === "noindex" ? "noindex" : "index";
const robotsFollow = (seo === null || seo === void 0 ? void 0 : seo.metaRobotsNofollow) === "nofollow" ? "nofollow" : "follow";
const image = {
sourceUrl: ((_d = seo === null || seo === void 0 ? void 0 : seo.opengraphImage) === null || _d === void 0 ? void 0 : _d.sourceUrl) || ((_e = seo === null || seo === void 0 ? void 0 : seo.twitterImage) === null || _e === void 0 ? void 0 : _e.sourceUrl) || ((_f = siteSchemaObject === null || siteSchemaObject === void 0 ? void 0 : siteSchemaObject.companyLogo) === null || _f === void 0 ? void 0 : _f.sourceUrl),
altText: ((_g = seo === null || seo === void 0 ? void 0 : seo.opengraphImage) === null || _g === void 0 ? void 0 : _g.altText) || ((_h = seo === null || seo === void 0 ? void 0 : seo.twitterImage) === null || _h === void 0 ? void 0 : _h.altText) || ((_j = siteSchemaObject === null || siteSchemaObject === void 0 ? void 0 : siteSchemaObject.companyLogo) === null || _j === void 0 ? void 0 : _j.altText),
srcSet: ((_k = seo === null || seo === void 0 ? void 0 : seo.opengraphImage) === null || _k === void 0 ? void 0 : _k.srcSet) || ((_l = seo === null || seo === void 0 ? void 0 : seo.twitterImage) === null || _l === void 0 ? void 0 : _l.srcSet) || ((_m = siteSchemaObject === null || siteSchemaObject === void 0 ? void 0 : siteSchemaObject.companyLogo) === null || _m === void 0 ? void 0 : _m.srcSet)
};
return {
title,
description,
locale,
canonical,
cornerstone,
focusKeyword,
keywords,
pageSchema: pageSchemaObject,
siteSchema: siteSchemaObject,
readingTime,
robots: {
index: robotsIndex,
follow: robotsFollow
},
og: {
title: (seo === null || seo === void 0 ? void 0 : seo.opengraphTitle) || title,
description: (seo === null || seo === void 0 ? void 0 : seo.opengraphDescription) || description,
image: (seo === null || seo === void 0 ? void 0 : seo.opengraphImage) || image,
type: (seo === null || seo === void 0 ? void 0 : seo.opengraphType) || "website",
url: (seo === null || seo === void 0 ? void 0 : seo.opengraphUrl) || (seo === null || seo === void 0 ? void 0 : seo.canonical),
author: seo === null || seo === void 0 ? void 0 : seo.opengraphAuthor,
publisher: seo === null || seo === void 0 ? void 0 : seo.opengraphPublisher,
modifiedTime: seo === null || seo === void 0 ? void 0 : seo.opengraphModifiedTime,
publishedTime: seo === null || seo === void 0 ? void 0 : seo.opengraphPublishedTime
},
twitter: {
title: (seo === null || seo === void 0 ? void 0 : seo.twitterTitle) || title,
description: (seo === null || seo === void 0 ? void 0 : seo.twitterDescription) || description,
image: (seo === null || seo === void 0 ? void 0 : seo.twitterImage) || image,
creator: (_r = (_q = (_p = (_o = page === null || page === void 0 ? void 0 : page.author) === null || _o === void 0 ? void 0 : _o.node) === null || _p === void 0 ? void 0 : _p.seo) === null || _q === void 0 ? void 0 : _q.social) === null || _r === void 0 ? void 0 : _r.twitter
}
};
}
function Seo({meta, page, pageSchema, siteSchema, MetaRenderElement, processSchema}) {
var _a, _b, _c, _d, _e, _f, _g, _h;
const seoOptions = postToSeoOptions(page || {}, pageSchema, siteSchema);
const {title, description, canonical, locale, keywords, robots, og, twitter} = seoOptions;
let {pageSchema: pageSchemaObj, siteSchema: siteSchemaObj} = seoOptions;
let pageSchemaStr = isObject_default(pageSchemaObj) ? JSON.stringify(pageSchemaObj) : void 0;
let siteSchemaStr = isObject_default(siteSchemaObj) ? JSON.stringify(siteSchemaObj) : void 0;
if (isFunction_default(processSchema)) {
if (isString_default(pageSchemaStr)) {
pageSchemaStr = processSchema(pageSchemaStr);
pageSchemaObj = JSON.parse(pageSchemaStr);
}
if (isString_default(siteSchemaStr)) {
siteSchemaStr = processSchema(siteSchemaStr);
siteSchemaObj = JSON.parse(siteSchemaStr);
}
}
return import_react.default.createElement(MetaRenderElement, null, meta, import_react.default.createElement("title", null, title), import_react.default.createElement("meta", {name: "robots", content: `max-snippet:-1, max-image-preview:large, max-video-preview:-1, ${robots.index}, ${robots.follow}`}), isString_default(canonical) && import_react.default.createElement("link", {rel: "canonical", href: canonical}), isString_default(description) && import_react.default.createElement("meta", {name: "description", content: description}), isString_default(keywords) && import_react.default.createElement("meta", {name: "keywords", content: keywords}), import_react.default.createElement("meta", {property: "og:locale", content: locale}), import_react.default.createElement("meta", {property: "og:type", content: og === null || og === void 0 ? void 0 : og.type}), isString_default(siteSchemaObj === null || siteSchemaObj === void 0 ? void 0 : siteSchemaObj.siteName) && import_react.default.createElement("meta", {property: "og:site_name", content: siteSchemaObj === null || siteSchemaObj === void 0 ? void 0 : siteSchemaObj.siteName}), isString_default(og === null || og === void 0 ? void 0 : og.title) && import_react.default.createElement("meta", {property: "og:title", content: og === null || og === void 0 ? void 0 : og.title}), isString_default(og === null || og === void 0 ? void 0 : og.description) && import_react.default.createElement("meta", {property: "og:description", content: og === null || og === void 0 ? void 0 : og.description}), isString_default(og === null || og === void 0 ? void 0 : og.author) && import_react.default.createElement("meta", {property: "og:author", content: og === null || og === void 0 ? void 0 : og.author}), isString_default(og === null || og === void 0 ? void 0 : og.url) && import_react.default.createElement("meta", {property: "og:url", content: og === null || og === void 0 ? void 0 : og.url}), isString_default(og === null || og === void 0 ? void 0 : og.publishedTime) && import_react.default.createElement("meta", {property: "article.published_time", content: og === null || og === void 0 ? void 0 : og.publishedTime}), isString_default(og === null || og === void 0 ? void 0 : og.modifiedTime) && import_react.default.createElement("meta", {property: "article.modified_time", content: og === null || og === void 0 ? void 0 : og.modifiedTime}), isString_default((_a = og === null || og === void 0 ? void 0 : og.image) === null || _a === void 0 ? void 0 : _a.sourceUrl) && import_react.default.createElement(import_react.default.Fragment, null, import_react.default.createElement("meta", {property: "og:image", content: (_b = og === null || og === void 0 ? void 0 : og.image) === null || _b === void 0 ? void 0 : _b.sourceUrl}), isString_default((_c = og === null || og === void 0 ? void 0 : og.image) === null || _c === void 0 ? void 0 : _c.altText) && import_react.default.createElement("meta", {property: "og:image:alt", content: (_d = og === null || og === void 0 ? void 0 : og.image) === null || _d === void 0 ? void 0 : _d.altText})), isString_default(twitter === null || twitter === void 0 ? void 0 : twitter.title) && import_react.default.createElement("meta", {name: "twitter:title", content: twitter === null || twitter === void 0 ? void 0 : twitter.title}), isString_default(twitter === null || twitter === void 0 ? void 0 : twitter.description) && import_react.default.createElement("meta", {name: "twitter:description", content: twitter === null || twitter === void 0 ? void 0 : twitter.description}), isString_default((_e = twitter === null || twitter === void 0 ? void 0 : twitter.image) === null || _e === void 0 ? void 0 : _e.sourceUrl) && import_react.default.createElement(import_react.default.Fragment, null, import_react.default.createElement("meta", {name: "twitter:image", content: (_f = twitter === null || twitter === void 0 ? void 0 : twitter.image) === null || _f === void 0 ? void 0 : _f.sourceUrl}), isString_default((_g = twitter === null || twitter === void 0 ? void 0 : twitter.image) === null || _g === void 0 ? void 0 : _g.altText) && import_react.default.createElement("meta", {name: "twitter:image:alt", content: (_h = twitter === null || twitter === void 0 ? void 0 : twitter.image) === null || _h === void 0 ? void 0 : _h.altText})), isString_default(twitter === null || twitter === void 0 ? void 0 : twitter.creator) && import_react.default.createElement("meta", {name: "twitter:creator", content: toTwitter(twitter === null || twitter === void 0 ? void 0 : twitter.creator)}), isString_default(pageSchemaStr) && import_react.default.createElement("script", {type: "application/ld+json"}, pageSchemaStr));
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
postToSeoOptions,
toTwitter
});