New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@ryantate/react-html

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ryantate/react-html

Write type-safe React apps without JSX

latest
Source
npmnpm
Version
1.0.2
Version published
Maintainers
1
Created
Source

logo

CI Status codecov

react-html

Write react apps without JSX. Library exposes a function for each intrinsic HTML element and is more terse than JSX with corresponding closing tags.

Written in TypeScript with the appropriate type definitions for each element's attributes. Extensively tested with all valid element/attribute combinations per WHATWG. Applications and components built on these functions do not require the .tsx file extension or that a jsx setting be defined in tsconfig.json. Other JSX restrictions do not apply as well, for instance component names are free to start with a lower case letter.

Installation

npm i @ryantate/react-html

Usage

Syntax

element({attributes} | null, ...children)
import ReactDOM from 'react-dom';
import {div} from '@ryantate/react-html';

ReactDOM.render(
    document.getElementById('#root'),
    div({id: 'app'}) // OK
);

ReactDOM.render(
    document.getElementById('#root'),
    div({foo: 'bar'}) // Compile time error
);

// error TS2345: Argument of type '{ foo: string; }' is not assignable to parameter of type 'DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>'. 

Fragments

Fragments have a different signature in that they do not accept attributes. The function exposed from the library to render fragments is _. Keyed fragments are currently unsupported.

import ReactDOM from 'react-dom';
import {_, div, a, h1} from '@ryantate/react-html';

ReactDOM.render(
    document.getElementById('#root'),
    _(
        div({className: 'example'}, 'hello world'),
        a({href: 'https://github.com/ryantate13/react-html'}, 'react-html'),
        h1(null, 'hello world'),
    )
);

SVG Support

SVG support is currently a work in progress. There is adequate information in the sources this project is generated from to expose all SVG elements as functions, but there are cases where names conflict. An <a> tag is valid inside an <svg> element but takes props of a different type than those of an html anchor. Eventually the goal is to make all svg elements available for import from @ryantate/react-html/svg.

import {a} from '@ryantate/react-html';
import {a as svga} from '@ryantate/react-html/svg';

Regenerating Source Files

Sources are generated from WHATWG and @types/react. To regnerate the functions and test suites in the library, clone this repository and run npm run make.

git clone git@github.com:ryantate13/react-html.git
cd react-html
npm run make

Running the test suite

git clone git@github.com:ryantate13/react-html.git
cd react-html
npm run make && npm test

FAQs

Package last updated on 10 Apr 2021

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