UNPKG

react-seomatic

Version:
433 lines (410 loc) 12.9 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); 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 = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); 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; } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } var _excluded = ["children", "Head"]; /** * Renders SEOmatic `<head>` and `<body>` tags. * * @example * <body> * <!-- ... --> * <Seomatic {...pageProps.entry.seomatic} /> * </body> * * @example * // Next.js * <body> * <!-- ... --> * <Seomatic Head={Head} {...pageProps.entry.seomatic} /> * </body> * * @param {Class|function|null} Head * @param {string|null} metaJsonLdContainer * @param {string|null} metaLinkContainer * @param {string|null} metaScriptContainer * @param {string|null} metaTagContainer * @param {string|null} metaTitleContainer * @returns {JSX.Element} * @constructor */ function Seomatic(_ref) { var Head = _ref.Head, metaJsonLdContainer = _ref.metaJsonLdContainer, metaLinkContainer = _ref.metaLinkContainer, metaScriptContainer = _ref.metaScriptContainer, metaTagContainer = _ref.metaTagContainer, metaTitleContainer = _ref.metaTitleContainer; return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(SeomaticHead, { Head: Head, metaJsonLdContainer: metaJsonLdContainer, metaLinkContainer: metaLinkContainer, metaScriptContainer: metaScriptContainer, metaTagContainer: metaTagContainer, metaTitleContainer: metaTitleContainer }), /*#__PURE__*/React__default["default"].createElement(SeomaticBody, { metaScriptContainer: metaScriptContainer })); } /** * Renders SEOmatic `<head>` tags. * * @example * <head> * <SeomaticHead {...pageProps.entry.seomatic} /> * </head> * * @example * // Next.js * <SeomaticHead Head={Head} {...pageProps.entry.seomatic} /> * * @param {Class|function|null} Head * @param {string|null} metaJsonLdContainer * @param {string|null} metaLinkContainer * @param {string|null} metaScriptContainer * @param {string|null} metaTagContainer * @param {string|null} metaTitleContainer * @returns {JSX.Element} * @constructor */ function SeomaticHead(_ref2) { var Head = _ref2.Head, metaJsonLdContainer = _ref2.metaJsonLdContainer, metaLinkContainer = _ref2.metaLinkContainer, metaScriptContainer = _ref2.metaScriptContainer, metaTagContainer = _ref2.metaTagContainer, metaTitleContainer = _ref2.metaTitleContainer; return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(SeomaticMetaJsonLd, { Head: Head, metaJsonLdContainer: metaJsonLdContainer }), /*#__PURE__*/React__default["default"].createElement(SeomaticMetaLinks, { Head: Head, metaLinkContainer: metaLinkContainer }), /*#__PURE__*/React__default["default"].createElement(SeomaticMetaScripts, { Head: Head, metaScriptContainer: metaScriptContainer }), /*#__PURE__*/React__default["default"].createElement(SeomaticMetaTags, { Head: Head, metaTagContainer: metaTagContainer }), /*#__PURE__*/React__default["default"].createElement(SeomaticMetaTitle, { Head: Head, metaTitleContainer: metaTitleContainer })); } /** * Renders SEOmatic `<body>` tags. * * @example * <body> * <!-- ... --> * <SeomaticBody {...pageProps.entry.seomatic} /> * </body> * * @param {string|null} metaScriptContainer * @returns {JSX.Element} * @constructor */ function SeomaticBody(_ref3) { var metaScriptContainer = _ref3.metaScriptContainer; return /*#__PURE__*/React__default["default"].createElement(SeomaticMetaBodyScripts, { metaScriptContainer: metaScriptContainer }); } /** * Renders SEOmatic’s `metaJsonLdContainer` value. * @param {Class|function|null} Head * @param {string|null} metaJsonLdContainer * @returns {JSX.Element|null} * @constructor */ function SeomaticMetaJsonLd(_ref4) { var Head = _ref4.Head, metaJsonLdContainer = _ref4.metaJsonLdContainer; if (!metaJsonLdContainer) { return null; } var container = JSON.parse(metaJsonLdContainer); if (!container.mainEntityOfPage) { return null; } return /*#__PURE__*/React__default["default"].createElement(HeadWrapper, { Head: Head }, /*#__PURE__*/React__default["default"].createElement("script", { key: "metaJsonLdContainer.mainEntityOfPage", type: "application/ld+json", dangerouslySetInnerHTML: { __html: JSON.stringify(container.mainEntityOfPage) } })); } /** * Renders SEOmatic’s `metaLinkContainer` value. * @param {Class|function|null} Head * @param {string|null} metaLinkContainer * @returns {JSX.Element|null} * @constructor */ function SeomaticMetaLinks(_ref5) { var Head = _ref5.Head, metaLinkContainer = _ref5.metaLinkContainer; if (!metaLinkContainer) { return null; } return /*#__PURE__*/React__default["default"].createElement(HeadTagsWrapper, { container: JSON.parse(metaLinkContainer), Head: Head, type: "link" }); } /** * Renders SEOmatic’s `metaScriptContainer` value. * @param {Class|function|null} Head * @param {string|null} metaScriptContainer * @returns {JSX.Element[]|null} * @constructor */ function SeomaticMetaScripts(_ref6) { var Head = _ref6.Head, metaScriptContainer = _ref6.metaScriptContainer; if (!metaScriptContainer) { return null; } var container = JSON.parse(metaScriptContainer); return Object.entries(container).map(function (entry, index) { if (!entry[0] || !entry[1]) { return null; } var key = entry[0]; var script = entry[1].script; if (!script) { return null; } return /*#__PURE__*/React__default["default"].createElement(HeadWrapper, { key: index, Head: Head }, /*#__PURE__*/React__default["default"].createElement("script", { key: key, dangerouslySetInnerHTML: { __html: script } })); }); } /** * Renders SEOmatic’s `metaScriptContainer` value. * @param {string|null} metaScriptContainer * @returns {JSX.Element[]|null} * @constructor */ function SeomaticMetaBodyScripts(_ref7) { var metaScriptContainer = _ref7.metaScriptContainer; if (!metaScriptContainer) { return null; } var container = JSON.parse(metaScriptContainer); return Object.entries(container).map(function (entry) { if (!entry[0] || !entry[1]) { return null; } var key = entry[0]; var bodyScript = entry[1].bodyScript; if (!bodyScript) { return null; } return /*#__PURE__*/React__default["default"].createElement("div", { key: key, style: { display: "none !important" }, dangerouslySetInnerHTML: { __html: bodyScript } }); }); } /** * Renders SEOmatic’s `metaTagContainer` value. * @param {Class|function|null} Head * @param {string|null} metaTagContainer * @returns {JSX.Element|null} * @constructor */ function SeomaticMetaTags(_ref8) { var Head = _ref8.Head, metaTagContainer = _ref8.metaTagContainer; if (!metaTagContainer) { return null; } return /*#__PURE__*/React__default["default"].createElement(HeadTagsWrapper, { container: JSON.parse(metaTagContainer), Head: Head, type: "meta" }); } /** * Renders SEOmatic’s `metaTitleContainer` value. * @param {Class|function|null} Head * @param {string|null} metaTitleContainer * @returns {JSX.Element|null} * @constructor */ function SeomaticMetaTitle(_ref9) { var Head = _ref9.Head, metaTitleContainer = _ref9.metaTitleContainer; if (!metaTitleContainer) { return null; } var container = JSON.parse(metaTitleContainer); if (!container || !container.title || !container.title.title) { return null; } return /*#__PURE__*/React__default["default"].createElement(HeadWrapper, { Head: Head }, /*#__PURE__*/React__default["default"].createElement("title", null, container.title.title)); } /** * Enables support for `next/head` via the `Head` property. * @param children * @param Head * @param props * @returns {JSX.Element|*} * @constructor */ function HeadWrapper(_ref10) { var children = _ref10.children, Head = _ref10.Head, props = _objectWithoutProperties(_ref10, _excluded); if (Head) { return /*#__PURE__*/React__default["default"].createElement(Head, props, children); } return children; } /** * Parses a container object and renders out head tags (i.e. `link` or `meta`). * @param {Class|function|null} Head * @param {Object} container * @param string|null type * @returns {Object[]} * @constructor */ function HeadTagsWrapper(_ref11) { var Head = _ref11.Head, container = _ref11.container, type = _ref11.type; return Object.entries(container).flatMap(function (entry) { var key = entry[0]; var props = entry[1]; // Check that we actually have values before proceeding if (!key && !props) { return null; } // If `props` isn’t an array we can assume it’s an object if (!Array.isArray(props)) { return _objectSpread2({ key: key }, props); } // If `props` is an array, make sure that there’s at least 1 to process if (props.length === 0) { return null; } // Loop through and create index suffixed keys for each return props.map(function (props, index) { return _objectSpread2({ key: "".concat(key).concat(index) }, props); }); }).map(function (props, index) { return props && /*#__PURE__*/React__default["default"].createElement(HeadWrapper, { key: index, Head: Head }, /*#__PURE__*/React__default["default"].createElement(type, props)); }); } exports.Seomatic = Seomatic; exports.SeomaticBody = SeomaticBody; exports.SeomaticHead = SeomaticHead; exports.SeomaticMetaBodyScripts = SeomaticMetaBodyScripts; exports.SeomaticMetaJsonLd = SeomaticMetaJsonLd; exports.SeomaticMetaLinks = SeomaticMetaLinks; exports.SeomaticMetaScripts = SeomaticMetaScripts; exports.SeomaticMetaTags = SeomaticMetaTags; exports.SeomaticMetaTitle = SeomaticMetaTitle; //# sourceMappingURL=index.js.map