swc_plugin_jsx_attrs

Crates.ioswc_plugin_jsx_attrs
lib.rsswc_plugin_jsx_attrs
version0.2.0
sourcesrc
created_at2023-06-13 17:30:55.024845
updated_at2023-06-14 15:57:39.940599
descriptionSWC plugin for JSX attrs
homepage
repository
max_upload_size
id889305
size24,994
何乐 (imhele)

documentation

README

swc-plugin-jsx-attrs

swc 插件用于为符合条件的 jsx element 注入参数。

babel 版本 UNDERCOVERj/babel-plugins

示例

基础用法

单个组件可以注入多个属性,默认前置追加,也可以通过配置 rule: append 追加到尾部。

{
  "@fixture/my-components": {
    "Button": [{ "name": "type", "value": "primary" }],
    "Link": [{ "name": "type", "rule": "append", "value": "primary" }]
  }
}
  import { Button, Link } from "@fixture/my-components";

  export function MyPage() {
    return (
      <>
-       <Button onClick={console.log} />
+       <Button type={"primary"} onClick={console.log} />
-       <Link href="/" />
+       <Link href="/" type={"primary"} />
      </>
    );
  }

支持属性访问语法

{
  "@fixture/my-components": {
    "Dropdown.Link": [{ "name": "type", "value": "primary" }]
  }
}
  import { Dropdown, Noop } from "@fixture/my-components";
  import * as components from "@fixture/my-components";

  export function MyPage() {
    return (
      <>
        <Noop />
-       <Dropdown.Link />
+       <Dropdown.Link type={"primary"} />
        <components.Noop />
-       <components.Dropdown.Link />
+       <components.Dropdown.Link type={"primary"} />
      </>
    );
  }

支持基于 swc 内置的 id 引用分析

{
  "@fixture/my-components": {
    "Button": [{ "name": "type", "value": "primary" }],
    "Link": [{ "name": "type", "value": "primary" }]
  }
}
  import { Button } from "@fixture/another-components";
  import { Button as MyButton, Link } from "@fixture/my-components";

  export function MyPage() {
    return (
      <>
-       <Link />
+       <Link type={"primary"} />
-       <MyButton />
+       <MyButton type={"primary"} />
      </>
    );
  }

  export function createPage() {
    function Link() {
      return null;
    }

    return () => (
      <>
        <Link />
        <Button />
      </>
    );
  }
Commit count: 0

cargo fmt