npm.io
0.3.0 • Published 4 years ago

transformer-open-graph

Licence
MIT
Version
0.3.0
Deps
2
Size
10 kB
Vulns
0
Weekly
0
Stars
23

transformer-open-graph

A transformer for @remark-embedder/core that extracts Open Graph metadata from a URL and create an HTML preview.

Want to see an example? Check out https://donavon.com/blog/markdown#social-links

Usage

import remarkEmbedder from '@remark-embedder/core';
import transformerOpenGraph from 'transformer-open-graph';
import remark from 'remark';
import html from 'remark-html';

const exampleMarkdown = `
This is my website:

https://donavon.com
`;

async function go() {
  const result = await remark()
    .use(remarkEmbedder, {
      transformers: [transformerOpenGraph],
    })
    .use(html)
    .process(exampleMarkdown);

  console.log(result.toString());
  // logs:
  // <p>This is my website:</p>
  // <div class="ogn-outer-container">
  //   <a class="ogn-container" href="https://donavon.com/" target="_blank" rel="noopener noreferrer" data-twitter-card="summary">
  //     <img class="ogn-image" src="https://donavon.com/img/donavon-avatar.jpeg" alt="Donavon West's website">
  //     <div class="ogn-content">
  //       <p class="ogn-content-title">Donavon West's website</p>
  //       <p class="ogn-content-description">Donavon West is a full-stack software engineer living in the New York City area.</p>
  //       <p class="ogn-content-url">donavon.com</p>
  //     </div>
  //   </a>
  // </div>
}

go();

Config options

You can pass the following config options

Options name description
render A custom render function that accepts one argument, data of type OpenGraphNinja, and returns an HTML string.
Example custom render
const exampleMarkdown = `
This is my website:

https://donavon.com
`;

const customRender: OpenGraphRender = (data) =>
  `<h2>Hello ${data.hostname}</h2>`;

const config: OpenGraphConfig = { render: customRender };

const result = await remark()
  .use(remarkEmbedder, {
    transformers: [transformerOpenGraph, config],
  })
  .use(html)
  .process(exampleMarkdown);
// <p>This is my website:</p>
// <h2>Hello donavon.com</h2>

Example output

You'll need to B.Y.O. CSS, but you can get beautiful web page preview output like this.

sample screen

Getting Started

Install the library with your package manager of choice, e.g.:

$ npm i transformer-open-graph
# or
$ yarn add transformer-open-graph

License

2022 Donavon West. Released under MIT license.

Keywords