transformer-open-graph
Version:
@remark-embedder transformer for URLs that support Open Graph
66 lines (53 loc) • 2.54 kB
JavaScript
;
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;