# Jetifire - A fast Node implementation

[![npm version](https://badge.fury.io/js/jetifire.svg)](https://badge.fury.io/js/jetifire)

Jetifire tool migrates `support-library-dependent` libraries to rely on the equivalent `AndroidX` packages instead.

Created using `nodejs`, it is dependency free and read/writes files asynchronously, that means it is very fast ⚡

## Benchmark
s
This is a very fast `Node` port of [Mike Hardy](https://github.com/mikehardy)'s bash version (https://github.com/mikehardy/jetifier)

### Generating files

```bash
mkdir -p node_modules/testing
for i in {0..1000}
do
  echo "import android.arch.core.util.Function;" > node_modules/testing/file_$i.java
done
```

### Running benchmark

**Bash version**

```bash
npx jetify : 44.994 seconds
```

**This version**

```bash
npx jetifire : 2.325 seconds
```

## Install Jetifire

To install `jetifire`, run the following command:

```bash
npm install --save jetifire
```

## Usage

To process your libraries, simply run the `jetifire` command by putting it in an [npm script](https://docs.npmjs.com/misc/scripts) or as a [post install](https://docs.npmjs.com/misc/scripts) script.

1. Run the Jetifire

```bash
./node_modules/.bin/jetifire
```

**Reverse mode**

```bash
./node_modules/.bin/jetifire reverse
```

2. (Optional) add a `postinstall` script to your `package.json`: `"postinstall": "jetifire"`

## Usage notes

Jetifire reads all your `node_modules` folder and looks for `.java`, `.kt` and `.xml` files, and then changes any `android.support.*` imports to its corresponding `androidx.*`.

If there is a type in an `android.support.*` package that does not come from any support library artifact, Jetifire still migrates the type as long as there is a mapping for it. However, this migration is not guaranteed to work, as there might not be mapping rules general enough to cover all the custom types.

## Credits & Licence

### Credits

[Mike Hardy](https://github.com/mikehardy) - for the original [React Native Jetifier](https://github.com/mikehardy/jetifier) tool

### Licence

Licensed under the [CreativeCommons Attribution 2.5 License](https://creativecommons.org/licenses/by/2.5/)

* Free for use in both personal and commercial projects.
* Attribution requires leaving author name, author homepage link, and the license info intact.
