UNPKG

react-headless-yoast

Version:

A React component that handles Yoast SEO in a Headless WordPress site.

145 lines (138 loc) 12.9 kB
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 });