1. babel-plugin-annotate-pure-calls
Babel plugin for annotating automatically pure function calls.
babel-plugin-annotate-pure-calls
Package: babel-plugin-annotate-pure-calls
Created by: Andarist
Last modified: Mon, 11 Apr 2022 16:35:26 GMT
Version: 0.4.0
License: MIT
Downloads: 215,529
Repository: https://github.com/Andarist/babel-plugin-annotate-pure-calls

Install

npm install babel-plugin-annotate-pure-calls
yarn add babel-plugin-annotate-pure-calls

babel-plugin-annotate-pure-calls

npm version
Build Status
npm

This plugins helps with automatic #__PURE__ annotation insertion. It add the comment to
top level call expressions and new expressions in assignment contexts (those are considered by the
plugin as side effect free). This helps UglifyJS to perform dead code
elimination more efficiently and therefore reduces the bundle sizes for the consumers.

NOTE: It might break your code, so the caution is advised. Target audience for the plugin are libraries, which in
vast major of use cases do not introduce side effects in top level calls. That doesn't mean that application bundles
cannot benefit from the plugin.

Pure calls

 // pure call
var inc = add(1)

// clearly impure - no assignment context
mutate({ prop: 'value' })

Top level calls

Top level call (in terms of this plugin) is one that gets executed during script initialization. So it is every call
located at the root of a file, but also a call in an IIFE that gets executed at startup (including nested ones).

 var a = topLevelCall()

b = function() {
  noTopLevelCall()
}

topLevelIIFEs = (function() {
  var c = (function() {
    var d = (function() {
      var e = topLevelCall()
    })()
  })()
})()

Installation

 npm install --save-dev babel-plugin-annotate-pure-calls

Usage

Via .babelrc (Recommended)

.babelrc

 {
  "plugins": ["annotate-pure-calls"]
}

Via CLI

 babel --plugins annotate-pure-calls script.js

Via Node API

 require('babel-core').transform('var inc = add(1)', {
  plugins: ['annotate-pure-calls'],
})

Usage with babel@6

The plugin works with babel@6, you might see unmet peer dependency warning though. If you want to get rid of it, please
install @babel/[email protected].

Similar projects

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code