GithubHelp home page GithubHelp logo

re-js / babel-plugin-jsx-wrapper Goto Github PK

View Code? Open in Web Editor NEW
9.0 2.0 1.0 112 KB

Babel plugin to automatic decorate jsx for Remini and Mobx

JavaScript 100.00%
mobx remini automatic babel babel-plugin jsx observe observer preact react

babel-plugin-jsx-wrapper's Introduction

babel-plugin-jsx-wrapper

npm version code coverage

Automatic decorate jsx arrow functions for smartify and purify your code ๐Ÿ‘

That plugin for babel wraps all not wrapped arrow functions (that contains JSX and defined in file global scope) to decorator function with easy configuring Remini, Mobx, and Realar (but possible for configure to custom one). Less code more effectiveness!

Remini

import { box, read, update } from 'remini';
/* import { component } from 'remini/react'; */

const $value = box(0);
const next = () => update($value, (v) => v + 1);

// const App = component(() => {
const App = () => (
  <>
    Ticker: {read($value)}
    <br />
    <button onClick={next}>Next</button>
  </>
);

See wrapped version on CodeSandbox.

You are no need more to wrap (decorate) JSX components to component function! It will be automatic.

// .babelrc.js
module.exports = {
  "plugins": [
    ["jsx-wrapper", {
      "decorator": "remini-react" // "remini-preact", "realar", "mobx-react", "mobx-react-lite", or some custom
    }]
  ]
};

Mobx

import { makeAutoObservable } from 'mobx';
/* import { observer } from 'mobx-react-lite'; */

class Ticker {
  value = 0;
  next = () => this.value += 1;

  constructor() {
    makeAutoObservable(this);
  }
}

const ticker = new Ticker();

// const App = observer(() => (
const App = () => (
  <>
    Ticker: {ticker.value}
    <br />
    <button onClick={ticker.next}>Next</button>
  </>
);

See wrapped version on CodeSandbox.

// .babelrc.js
module.exports = {
  "plugins": [
    ["jsx-wrapper", {
      "decorator": "mobx-react-lite" // "mobx-react", "remini-react", "remini-preact", "realar", or some custom
    }]
  ]
};

Options

decorator - function name that using to wrapping jsx arrow function component. (For example: "require('mobx-preact').observer") Or name of presetted vendor: "remini-react", "remini-preact", "realar", "mobx-react", and "mobx-react-lite".

ucfirst - boolean flag. Wrap only if first letter of the function name is uppercased. true by default.

root - string that provide root path for "exclude" and "include" options.

exclude - array of matcher patterns that needs to exclude.

include - array of matcher patterns that need to include, other ones will be excluded.

// .babelrc.js
module.exports = {
  "plugins": [
    ["jsx-wrapper", {
      "include": [
        "src/components/*",
        "src/pages/*"
      ],
      // "exclude": ["node_modules/*"]
    }]
  ]
};

Install

npm i --save-dev babel-plugin-jsx-wrapper
# or
yarn add babel-plugin-jsx-wrapper

And update your babel config:

// .babelrc
{
  "plugins": [
    ["jsx-wrapper", {
      "decorator": "remini-react"
    }]
  ]
}

Enjoy and happy coding!

babel-plugin-jsx-wrapper's People

Contributors

betula avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

bolasblack

babel-plugin-jsx-wrapper's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.