npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@joakimbeng/es6x

v2.1.0

Published

Implementation of jsx features in pure javascript

Downloads

4

Readme

@joakimbeng/es6x

NOTE: This is a fork of vasiliy-lector/es6x with these differences:

  • "..." is needed to mimic object spread of attributes, i.e. jsx`<div ...${attrs}></div>` instead of jsx`<div ${attrs}></div>`
  • this package supports dashes, underscores and $ in both tag names and attributes

Implementation of jsx features in pure javascript without the need to transpile.

Why do you need it?

The specification es2015 introduces a new feature called tagged template literals. Support of this feature now close to 100%. This standard allow for javascript expressions to be embedded within literal strings. This conception is very close to philosophy of jsx. And you can write code for react and other virtual dom frameworks using template literals instead of jsx. This library is very useful if you are not transpiling code in development environment. Excluding transpilation can speed up development and simplify debugging without dealing with source maps. The library is very tiny. Only 2kB minified and gzipped. The library support caching on the first execution. More information you can find in introduction article.

Install and usage

npm install es6x

Create file:

// file jsx.js
import jsx from 'es6x';
import React from 'react';
jsx.setOutputMethod(React.createElement);
export default jsx;

Inside any other file:

// file FormController.js
import {Component} from 'react';
import jsx from '../../jsx';
import Input from '../../input/Input';
import Form from '../../form/Form';

const value = 'some';
const props = {
  id: 'id1',
  style: {
    paddingLeft: 10
  }
};

export default class FormController extends Component {
  handleSubmit = () => {};

  render() {
    return jsx`<${Form} onSubmit=${this.handleSubmit}>
            <${Input}
                checked
                className='input'
                value=${value}
                ...${props}
            />
        </${Form}>`;
  }
}

The render method body is equal to this jsx code:

return (
  <Form onSubmit={this.handleSubmit}>
    <Input checked className="input" value={value} {...props} />
  </Form>
);

If you use hyperscript or any other virtual dom library:

// file jsx.js
import jsx from 'es6x';
import h from 'virtual-dom/h';
jsx.setOutputMethod(h);
export default jsx;