Giter Club home page Giter Club logo

swc-plugin-static-jsx's Introduction

swc-plugin-static-jsx

npm Rust Node.js E2E

SWC plugin to transform JSX calls to static templates

Install

npm i -D @swc/core swc-plugin-static-jsx

From source

git clone https://github.com/Desdaemon/swc-plugin-static-jsx
cd swc-plugin-static-jsx
rustup target add wasm32-wasi
npm run dist
npm link

Usage

// In .swcrc:
{
  "jsc": {
    "experimental": {
      "plugins": [
        // All config values are optional.
        [
          "swc-plugin-static-jsx",
          {
            // If an identifier is supplied, it should not be an ambient global. Can be null.
            "template": "String.raw",
            // If supplied, template will be imported as `import { template } from 'my-library'`
            "importSource": "my-library",
            "spread": "$$spread",
            "child": "$$child",
            "children": "$$children"
          }
        ]
      ]
    }
  }
}

In your tsconfig.json, compilerOptions.jsx should be set to 'preserve'. You will also need to provide your own JSX-related types under namespace JSX.

Sample

let unsanitized = '<script>alert("You\'ve been pwned!")</script>';
// input
function MyComponent() {
  return (
    <div foo="bar" baz={true} {...spread} {...{ "std::string": "value" }}>
      The quick brown fox jumps over the <strong>lazy</strong> dog.
      {unsanitized}
      {...children}
    </div>
  );
}

// output (approximate)
function MyComponent() {
  return html`<div foo="bar" baz ${{ $$spread: spread }} std::string="value">
    The quick brown fox jumps over the<strong>lazy</strong>dog. ${{
      $$child: unsanitized,
    }} ${{ $$children: children }}
  </div>`;
}

Sample implementation of html:

function html(raw, ...children: Record<string, unknown>[]) {
  all: for (const child of children) {
    if ("$$spread" in child) {
      // ..
      continue all;
    }
    if ("$$child" in child) {
      // ..
      continue all;
    }
    if ("$$children" in child) {
      // ..
      continue all;
    }
    // ..
  }
}

License

SPDX Identifier: MIT OR Apache-2

swc-plugin-static-jsx's People

Contributors

desdaemon avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

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.