@mapbox/babel-plugin-transform-jsxtreme-markdown

3.1.0 • Public • Published

@mapbox/babel-plugin-transform-jsxtreme-markdown

Transform Markdown interpolated with JS expressions and JSX elements into pure JSX, at compile time.

Uses jsxtreme-markdown to compile the interpolated Markdown.

For more information about jsxtreme-markdown features, read the README at the root of this monorepo.

Installation

npm install @mapbox/babel-plugin-transform-jsxtreme-markdown

Usage

Transforms a special tagged template literal.

require or import the (fake) package '@mapbox/babel-plugin-transform-jsxtreme-markdown/md', or whatever you've specified as packageName in your Babel options. Then use that (fake) module's export as a template literal tag, marking the template literals you'd like to be compiled at run time.

If React is not already in the file's top-level scope, var React = require('react'); will be added to the beginning of the file.

// Input
const md = require('@mapbox/babel-plugin-transform-jsxtreme-markdown/md');
const foo = md`
  # Title

  This is **bold.**
  Here is a [link](/some/url).
`;

// Output
('use strict');

var React = require('react');
var foo = (
  <div>
    <h1>Title</h1>
    <p>
      This is <strong>bold.</strong>
      Here is a <a href="/some/url">link</a>.
    </p>
  </div>
);

Because this plugin uses jsxtreme-markdown, you can also interpolate JS expressions and JSX elements within special delimiters. Read more about this in the jsxtreme-markdown docs.

// Input
import md from '@mapbox/babel-plugin-transform-jsxtreme-markdown/md';
const text = md`
  This is a paragraph {{<span className="foo">}} with a **markdown** span inside {{</span>}}
  {{ <div style={{ margin: 70 }}> }}
  And here is a _paragraph_ inside a div.
  [Link](/some/url)
  {{ </div> }}
`;

// Output
('use strict');

var React = require('react');
var text = (
  <div>
    <p>
      This is a paragraph{' '}
      <span className="foo">
        {' '}
        with a <strong>markdown</strong> span inside{' '}
      </span>
    </p>
    <div style={{ margin: 70 }}>
      And here is a <em>paragraph</em> inside a div.
      <a href="/some/url">Link</a>
    </div>
  </div>
);

options

You can pass any of the options available to jsxtremeMarkdown.toJsx.

Additional options:

packageName

Type: string. Default: '@mapbox/babel-plugin-transform-jsxtreme-markdown/md'.

The name of the package that you will require or import to use this thing. For example, with the value 'xtreme-markdown' you should use

import md from 'xtreme-markdown';

Package Sidebar

Install

npm i @mapbox/babel-plugin-transform-jsxtreme-markdown

Weekly Downloads

31

Version

3.1.0

License

MIT

Unpacked Size

16.2 kB

Total Files

8

Last publish

Collaborators

  • mbx-npm-ci-production
  • mbx-npm-ci-staging
  • mbx-npm-advanced-actions-production
  • mbx-npm-advanced-actions-staging
  • mbx-npm-09-production
  • mbx-npm-08-production
  • mbx-npm-07-production
  • mbx-npm-06-production
  • mbx-npm-05-production
  • mbx-npm-04-production
  • mbx-npm-03-production
  • mbx-npm-02-production
  • mbx-npm-01-production
  • mbx-npm-02-staging
  • mapbox-npm-01
  • mapbox-npm-02
  • mapbox-npm-07
  • mapbox-npm-03
  • mapbox-npm-04
  • mapbox-npm-09
  • mapbox-npm-05
  • mapbox-npm-06
  • mapbox-npm-08
  • mapbox-npm-advanced-actions
  • mapbox-npm-ci
  • mapbox-npm
  • mapbox-admin
  • mapbox-machine-user