1.0.1 • Published 2 years ago

@devlulcas/rehype-base64-image-swapper v1.0.1

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

javascript

REHYPE BASE64 IMAGE SRC SWAPPER

Warning: Work in progress

USAGE

import { unified } from "unified";
import rehypeParse from "rehype-parse";
import rehypeStringify from "rehype-stringify";
import rehypeBase64ImageExtractor from "./index.js";

const html = `
<p>AVIF</p>
<p>
  <img
    src="data:image/avif;base64,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"
  />
</p>
`;

const virtualFile = unified()
  .use(rehypeParse, { fragment: true })
  .use(rehypeBase64ImageExtractor, {
    handler: async ({ mimetype, content }) => {
      const response = await fetch("https://my.api.com/send", {
        method: "POST",
        body: JSON.stringify({ mimetype, content }),
      });

      const data = await response.json();

      // Ex: https://my.api.com/images/example.avif
      return data.resourceUrl;
    },
  })
  .use(rehypeStringify)
  .process(html);

// Tranformed HTML
virtualFile.then((newHtmlVirtualFile) => {
  console.log(String(newHtmlVirtualFile));
});

ROADMAP

  • Migrate to Typescript
  • Add tests
  • Publish in NPM
  • Add documentation