Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
babel-plugin-htm
Advanced tools
Babel plugin to compile htm's Tagged Template syntax to hyperscript or inline VNodes.
babel-plugin-htm
A Babel plugin that compiles htm syntax to hyperscript, React.createElement, or just plain objects.
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)
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
] }
FAQs
Babel plugin to compile htm's Tagged Template syntax to hyperscript or inline VNodes.
The npm package babel-plugin-htm receives a total of 230 weekly downloads. As such, babel-plugin-htm popularity was classified as not popular.
We found that babel-plugin-htm demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
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.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.