import { jsx } from './jsx.js';
const out = jsx(`
const App = props => (
<div class="app">
<h1>Hello {"World"}</h1>
<ul>{['a','b','c'].map(item => <li>{item}</li>)}</ul>
</div>
);
`);
console.log(out);
/*
const App = props => (
html`<div class="app">
<h1>Hello ${"World"}</h1>
<ul>${['a','b','c'].map(item => html`<li>${item}</li>`)}</ul>
</div>`
);
*/
To run the code, prepend an import of html
. You can import{html}from'htm/preact'
, or set up the binding manually:
const HTM = `
import htm from'https://unpkg.com/htm/dist/htm.mjs';
function html(){return (html=self.html||(self.html=htm.bind(h))).apply(this,arguments)}
`;
code = HTM + jsx(code);
import polka from 'polka';
import sirv from 'sirv';
import { jsx } from './jsx.js';
const app = polka();
app.use(jsxMiddleware());
app.use(sirv({ dev: true }));
app.listen();
function jsxMiddleware() {
return (req, res, next) => {
if (!/\.m?jsx?$/i.test(req.path)) return next();
let buf = '', { end, write, setHeader, writeHead } = res;
res.write = chunk => buf += chunk;
res.setHeader = (k, v) => /^content-length$/i.test(k) || setHeader.call(res, k, v);
res.writeHead = (status, headers, h) => {
for (let k in (h={},headers)) if (!/^content-length$/i.test(k)) h[k] = headers[k];
return writeHead.call(res, status, h);
};
res.end = chunk => end.call(res, jsx(buf + (chunk || '')));
next();
};
}