0.0.18 • Published 2 months ago

tsx-to-html v0.0.18

Weekly downloads
-
License
-
Repository
gitlab
Last release
2 months ago

tsx-to-html

A simple jsx runtime to transform your tsx into html strings.

Features

  • small code base
  • sensible expansions to HTML that are possible with jsx (style declarations, etc.)
  • represents HTML as closely as possible
    • no className hacks
    • no extraneous properties that HTML actually doesn't support
  • utilizes the hast ecosystem

Usage

// tsconfig.json
{
  "jsx": "react-jsx",
  "jsxImportSource": "tsx-to-html"
}
import { toHtml } from "tsx-to-html"

toHtml(<div class="foo"></div>) // '<div class="foo"></div>'

Transformers

You can influence how jsx elements (hast elements) are being transformed into strings by pushing a properties transformer (Properties -> Properties) into the propertiesTransformers array.

In fact that's what this library is doing to transform class and style objects to strings:

import * as TSX from "tsx-to-html";

TSX.propertiesTransformers.push((properties) => {
  if ("class" in properties && isObject(properties["class"])) {
    properties["class"] = Object.entries(properties["class"])
      .filter(([, enabled]) => enabled)
      .map(([key]) => key)
      .join(" ");
  }
  return properties;
});

Differences to regular HTML

Class expansion

You can use a Record<string, boolean> to define which classes will be included in the output

toHtml(<div class={{foo: true, bar: false}}></div>) // '<div class="foo"></div>'

Style declarations

Inline styles can be given via a CSSStyleDeclaration object, similar to react.

toHtml(<div style={{display: "flex", flexDirection: "column"}}></div>) // '<div style="display:flex;flex-direction:column"></div>'`

Why another jsx transformation lib?

Every other lib I've seen writes a lot of pre-existing logic themselves. Why not just re-use libraries like hastscript who have millions of downloads per week and will probably do their job better and faster?

0.0.18

2 months ago

0.0.16

2 months ago

0.0.17

2 months ago

0.0.15

3 months ago

0.0.11

3 months ago

0.0.12

3 months ago

0.0.13

3 months ago

0.0.14

3 months ago

0.0.10

3 months ago

0.0.9

3 months ago

0.0.8

3 months ago

0.0.7

3 months ago

0.0.3

3 months ago

0.0.5

3 months ago

0.0.4

3 months ago

0.0.6

3 months ago

0.0.2

4 months ago

0.0.1

4 months ago

0.0.0

4 months ago