UNPKG

transformer-open-graph

Version:

@remark-embedder transformer for URLs that support Open Graph

66 lines (53 loc) 2.54 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _path = _interopRequireDefault(require("path")); var _makeFetchHappen = _interopRequireDefault(require("make-fetch-happen")); var _openGraphNinja = require("./openGraphNinja"); var _encodeHtml = require("./encodeHtml"); const getImageHtml = data => { var _ref, _data$image$alt; return data != null && data.image ? `<img src="${(0, _encodeHtml.encodeHtml)(data.image.url)}" alt="${(0, _encodeHtml.encodeHtml)((_ref = (_data$image$alt = data.image.alt) != null ? _data$image$alt : data.title) != null ? _ref : '')}" class="ogn-image">` : ''; }; _makeFetchHappen.default.defaults({ cachePath: _path.default.join(process.cwd(), 'node_modules/.cache/donavon/transformer-open-graph/fetch') }); async function fetchOpenGraph(url) { try { const res = await (0, _makeFetchHappen.default)(`${_openGraphNinja.openGraphNinjaUrl}?url=${encodeURIComponent(url)}`); if (!res.ok) return null; const data = await res.json(); return data; } catch { return null; } } const transformer = { name: 'donavon/transformer-open-graph', shouldTransform: async url => { const result = await fetchOpenGraph(url); return !!result; }, getHTML: async urlString => { var _data$details$twitter, _data$details, _data$title, _data$description; const data = await fetchOpenGraph(urlString); // istanbul ignore if (shouldTransform prevents this, but if someone calls this directly then this would save them) if (!data) return null; return ` <div class="ogn-outer-container"> <a class="ogn-container" href="${(0, _encodeHtml.encodeHtml)(data.requestUrl)}" target="_blank" rel="noopener noreferrer" data-twitter-card="${(_data$details$twitter = (_data$details = data.details) == null ? void 0 : _data$details.twitterCard) != null ? _data$details$twitter : ''}"> ${getImageHtml(data)} <div class="ogn-content"> <p class="ogn-content-title">${(0, _encodeHtml.encodeHtml)((_data$title = data.title) != null ? _data$title : '')}</p> <p class="ogn-content-description">${(0, _encodeHtml.encodeHtml)((_data$description = data.description) != null ? _data$description : '')}</p> <p class="ogn-content-url">${(0, _encodeHtml.encodeHtml)(data.hostname)}</p> </div> </a> </div> `; } }; var _default = transformer; exports.default = _default;