babel-plugin-transform-iotadeprecated

Transforms iota() calls into ever-increasing literals.

Usage no npm install needed!

<script type="module">
  import babelPluginTransformIota from 'https://cdn.skypack.dev/babel-plugin-transform-iota';
</script>

README

Babel transform: iota

License: ISC Travis CI Test Status Code of Conduct

Transforms iota() calls into ever-increasing literals, à la Go.

Installation

$ npm install babel-plugin-transform-iota

Usage

Via .babelrc (Recommended)

.babelrc

{
  "plugins": ["transform-iota"]
}

Via CLI

$ babel --plugins transform-iota script.js

Via Node API

require("babel-core").transform("code", {
  plugins: ["transform-iota"]
});

Synopsis

Input

var foo = iota()
let bar = iota()
bar.baz = iota()
const qux = {
  a: iota(),
  [iota()]: 'b'
}

Output

var foo = [1]
let bar = [2]
bar.baz = [3]
const qux = {
  a: [4],
  [[5]]: 'b'
}

([5] coerces to "5", which becomes a valid key. We cannot directly use "5" as iota, because we want to support the case where we add properties to an iota, and we can't do that on string literals.)

Also removes all functions named iota(), so you can still define them and have a working implementation without Babel (and so your code lints without /* global iota */ overrides). Here's a working example:

function iota () {
  if (!this.i) { this.i = 0 }
  return [this.i += 1]
}

About

Made by Félix Saparelli. Licensed under ISC. Inspired by Go.