Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@mxck/mdx.macro

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mxck/mdx.macro

A babel-macro for transforming mdx files.

  • 0.2.8
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
decreased by-100%
Maintainers
1
Weekly downloads
 
Created
Source

mdx.macro

Babel Macro

npm version

A babel macro for converting mdx into components, using the @mdx-js/mdx package.

Installation

Just install mdx.macro. It includes @mdx-js/mdx and @mdx-js/tag as dependencies.

npm install mdx.macro --save

Usage

You have three options for importing your MDX:

  • Dynamic import: importMDX('./document.mdx')
  • Synchronous import: importMDX.sync('./document.mdx')
  • The mdx tag: mdx`Create a **component** from a template literal`

Dynamic import

Returns a promise to a component, which can be used with React.lazy()

import { importMDX } from './mdx.macro'

const MyDocument = React.lazy(() => importMDX('./my-document.mdx'))

ReactDOM.render(
  <React.Suspense fallback={<div>Loading...</div>}>
    <MyDocument />
  </React.Suspense>,
  document.getElementById('root')
)

Works by creating a temporary file under your project's node_modules/.cache/mdx.macro directory, and importing that.

import { importMDX } from './mdx.macro'

const promiseToMyDocument = importMDX('./my-document.mdx')

      ↓ ↓ ↓ ↓ ↓ ↓

const promiseToMyDocument = import('.cache/mdx.macro/my-document.hash1234.mdx.js')

Synchronous import

Returns a component that can be used directly.

import { importMDX } from './mdx.macro'

const MyDocument = importMDX.sync('./my-document.mdx')

ReactDOM.render(
  <MyDocument />,
  document.getElementById('root')
)

Works by creating a temporary file under your project's node_modules/.cache/mdx.macro directory, and importing that.

import { importMDX } from './mdx.macro'

const MyDocument = importMDX.sync('./my-document.mdx')

      ↓ ↓ ↓ ↓ ↓ ↓

import _MyDocument from '.cache/mdx.macro/my-document.hash1234.mdx.js'

const MyDocument = _MyDocument

Tagged Template Literals

Replaces an mdx tagged template literal with a document component. It also adds an import for MDXTag, but doesn't add an import for React.

import { mdx } from './mdx.macro'

const MyDocument = mdx`
# Don't Panic

Since we decided a few weeks ago to adopt the leaf as legal tender, we have, of course, all become immensely rich.
`

      ↓ ↓ ↓ ↓ ↓ ↓

import { MDXTag } from '@mdx-js/tag'

const MyDocument = ({ components, ...props }) => (
  <MDXTag name="wrapper" components={components}>
    <MDXTag name="h1" components={components}>{`Don't Panic`}</MDXTag>
    <MDXTag name="p" components={components}>
      <MDXTag
        name="em"
        components={components}
        parentName="p"
      >{`Since we decided a few weeks ago to adopt the leaf as legal tender, we have, of course, all become immensely rich.`}</MDXTag>
    </MDXTag>
  </MDXTag>
)

Caveats

Currently, changes to imported files aren't detected, even within create-react-app. Any PR that fixes this would be welcome!

License

MIT

Keywords

FAQs

Package last updated on 02 Sep 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc