Skip to content

uiwjs/babel-plugin-transform-uiw-import

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Using my app is also a way to support me:
Scap: Screenshot & Markup Edit Screen Test Deskmark Keyzer Vidwall Hub VidCrop Vidwall Mousio Hint Mousio Musicer Audioer FileSentinel FocusCursor Videoer KeyClicker DayBar Iconed Menuist Quick RSS Quick RSS Web Serve Copybook Generator DevTutor for SwiftUI RegexMate Time Passage Iconize Folder Textsound Saver Create Custom Symbols DevHub Resume Revise Palette Genius Symbol Scribe

babel-plugin-transform-uiw-import

Buy me a coffee Follow On X NPM version Build Status Coverage Status

Modular import uiw plugin for babel. compatible with uiw, antd, lodash, material-ui, and so on.

Usage

npm install babel-plugin-transform-uiw-import --save-dev

Via .babelrc or babel-loader.

{
  "plugins": [
    ["babel-plugin-transform-uiw-import"]
  ]
}
// Input Code
import { Alert } from 'uiw';
import { CopyToClipboard } from 'uiw';
import { DateInput, DatePicker } from 'uiw';

// Output   ↓ ↓ ↓ ↓ ↓ ↓
import Alert from "uiw/lib/cjs/alert";
import CopyToClipboard from "uiw/lib/cjs/copy-to-clipboard";
import DateInput from "uiw/lib/cjs/date-input";
import DatePicker from "uiw/lib/cjs/date-picker";

Output Result

- import { Alert } from 'uiw';
+ import Alert from "uiw/lib/cjs/alert";
- import { CopyToClipboard } from 'uiw';
+ import CopyToClipboard from "uiw/lib/cjs/copy-to-clipboard";
- import { DateInput, DatePicker } from 'uiw';
+ import DateInput from "uiw/lib/cjs/date-input";
+ import DatePicker from "uiw/lib/cjs/date-picker";

Options

export interface Options {
  [key: string]: {
    transform: (importName: string) => void | string;
    preventFullImport?: boolean;
    skipDefaultConversion?: boolean;
  }
}

Default Options

/**
 * Camel conversion horizontal line interval
 * @param {String} name 
 * `CopyToClipboard` => `copy-to-clipboard`
 */
function toLine(name) {
  return name.replace(/\B([A-Z])/g, '-$1').toLowerCase()
}

// The default Options
{
  uiw: {
    transform: importName => `uiw/lib/cjs/${toLine(importName)}`,
  }
}

transform: string | function(importName: string): string

The library name to use instead of the one specified in the import statement. ${member} will be replaced with the import name, aka Grid/Row/Col/etc., and ${1-n} will be replaced by any matched regular expression groups. If using a JS Babel config file, a function may be passed directly. (see Programmatic Usage)

preventFullImport: boolean

default false

Whether or not to throw when an import is encountered which would cause the entire module to be imported.

skipDefaultConversion: boolean

default false

When set to true, will preserve import { X } syntax instead of converting to import X.

// Input Code
import { Grid as gird } from 'uiw';
// Output   ↓ ↓ ↓ ↓ ↓ ↓  ====> skipDefaultConversion: true
import { Grid as gird } from 'uiw/lib/Grid';
- import { Grid as gird } from 'uiw';
+ import { Grid as gird } from 'uiw/lib/Grid';

Programmatic Usage

import plugin from 'babel-plugin-transform-uiw-import'
import { transform } from 'babel-core'

// `CopyToClipboard` => `copy-to-clipboard`
function toLine(name) {
  return name.replace(/\B([A-Z])/g, '-$1').toLowerCase();
}
 
function replace (code) {
  return transform(code, {
    babelrc: false,
    plugins: [
      [plugin, {
        'date-fns': {
          transform: importName => `date-fns/${toLine(importName)}`,
          preventFullImport: true,
        },
      }]
    ],
  }).code;
}
 
replace("import { CopyToClipboard } from 'date-fns';")
//=> "import CopyToClipboard from "date-fns/copy-to-clipboard";"

License

MIT © Kenny Wong

Packages

 
 
 

Contributors