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

babel-plugin-htm

Package Overview
Dependencies
Maintainers
2
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

babel-plugin-htm

Babel plugin to compile htm's Tagged Template syntax to hyperscript or inline VNodes.

  • 3.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
281
decreased by-62.58%
Maintainers
2
Weekly downloads
 
Created
Source

babel-plugin-htm

A Babel plugin that compiles htm syntax to hyperscript, React.createElement, or just plain objects.

Usage

In your Babel configuration (.babelrc, babel.config.js, "babel" field in package.json, etc), add the plugin:

{
  "plugins": [
    ["htm", {
      "pragma": "React.createElement"
    }]
  ]
}
// input:
html`<div id="foo">hello ${you}</div>`

// output:
React.createElement("div", { id: "foo" }, "hello ", you)

options

pragma

The target "hyperscript" function to compile elements to (see Babel docs). Defaults to: "h".

tag=html

By default, babel-plugin-htm will process all Tagged Templates with a tag function named html. To use a different name, use the tag option in your Babel configuration:

{"plugins":[
  ["babel-plugin-htm", {
    "tag": "myCustomHtmlFunction"
  }]
]}

import=false (experimental)

Auto-import the pragma function, off by default.

false (default)

Don't auto-import anything.

String

Import the pragma like import {<pragma>} from '<import>'.

With Babel config:

"plugins": [
  ["babel-plugin-htm", {
    "tag": "$$html",
    "import": "preact"
  }]
]
import { html as $$html } from 'htm/preact';

export default $$html`<div id="foo">hello ${you}</div>`

The above will produce files that look like:

import { h } from 'preact';
import { html as $$html } from 'htm/preact';

export default h("div", { id: "foo" }, "hello ", you)
{module: String, export: String}

Import the pragma like import {<import.export> as <pragma>} from '<import.module>'.

With Babel config:

"plugins": [
  ["babel-plugin-htm", {
    "pragma": "React.createElement",
    "tag": "$$html",
    "import": {
      // the module to import:
      "module": "react",
      // a named export to use from that module:
      "export": "default"
    }
  }]
]
import { html as $$html } from 'htm/react';

export default $$html`<div id="foo">hello ${you}</div>`

The above will produce files that look like:

import React from 'react';
import { html as $$html } from 'htm/react';

export default React.createElement("div", { id: "foo" }, "hello ", you)

useBuiltIns=false

babel-plugin-htm transforms prop spreads (<a ...${b}>) into Object.assign() calls. For browser support reasons, Babel's standard _extends helper is used by default. To use native Object.assign directly, pass {useBuiltIns:true}.

useNativeSpread=false

babel-plugin-htm transforms prop spreads (<a ...${b} x=y>) into { ...b, x: 'y' } object spread syntax. For browser support reasons, Babel's standard _extends helper is used by default. To use object spread syntax, pass {useNativeSpread:true}. This option takes precedence over the useBuiltIns option.

variableArity=true

By default, babel-plugin-htm transpiles to the same output as JSX would, which assumes a target function of the form h(type, props, ...children). If, for the purposes of optimization or simplification, you would like all calls to h() to be passed exactly 3 arguments, specify {variableArity:false} in your Babel config:

html`<div />`  // h('div', null, [])
html`<div a />`  // h('div', { a: true }, [])
html`<div>b</div>`  // h('div', null, ['b'])
html`<div a>b</div>`  // h('div', { a: true }, ['b'])

pragma=false (experimental)

Setting pragma to false changes the output to be plain objects instead of h() function calls:

// input:
html`<div id="foo">hello ${you}</div>`
// output:
{ tag:"div", props:{ id: "foo" }, children:["hello ", you] }

monomorphic (experimental)

Like pragma=false but converts all inline text to objects, resulting in the same object shape being used:

// input:
html`<div id="foo">hello ${you}</div>`
// output:
{ type: 1, tag:"div", props:{ id: "foo" }, text: null, children:[
  { type: 3, tag: null, props: null, text: "hello ", children: null },
  you
] }

Keywords

FAQs

Package last updated on 21 Jan 2020

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