Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

rollup-pluginutils

rollup10.4mMIT2.8.2TypeScript support: included

Functionality commonly needed by Rollup plugins

rollup, utils

readme

rollup-pluginutils

A set of functions commonly used by Rollup plugins.

Installation

npm install --save rollup-pluginutils

Usage

addExtension

import { addExtension } from 'rollup-pluginutils';

export default function myPlugin ( options = {} ) {
  return {
    resolveId ( code, id ) {
      // only adds an extension if there isn't one already
      id = addExtension( id ); // `foo` -> `foo.js`, `foo.js -> foo.js`
      id = addExtension( id, '.myext' ); // `foo` -> `foo.myext`, `foo.js -> `foo.js`
    }
  };
}

attachScopes

This function attaches Scope objects to the relevant nodes of an AST. Each Scope object has a scope.contains(name) method that returns true if a given name is defined in the current scope or a parent scope.

See rollup-plugin-inject or rollup-plugin-commonjs for an example of usage.

import { attachScopes } from 'rollup-pluginutils';
import { walk } from 'estree-walker';

export default function myPlugin ( options = {} ) {
  return {
    transform ( code ) {
      const ast = this.parse( code );

      let scope = attachScopes( ast, 'scope' );

      walk( ast, {
        enter ( node ) {
          if ( node.scope ) scope = node.scope;

          if ( !scope.contains( 'foo' ) ) {
            // `foo` is not defined, so if we encounter it,
            // we assume it's a global
          }
        },
        leave ( node ) {
          if ( node.scope ) scope = scope.parent;
        }
      });
    }
  };
}

createFilter

import { createFilter } from 'rollup-pluginutils';

export default function myPlugin ( options = {} ) {
  // `options.include` and `options.exclude` can each be a minimatch
  // pattern, or an array of minimatch patterns, relative to process.cwd()
  var filter = createFilter( options.include, options.exclude );

  return {
    transform ( code, id ) {
      // if `options.include` is omitted or has zero length, filter
      // will return `true` by default. Otherwise, an ID must match
      // one or more of the minimatch patterns, and must not match
      // any of the `options.exclude` patterns.
      if ( !filter( id ) ) return;

      // proceed with the transformation...
    }
  };
}

If you want to resolve the patterns against a directory other than process.cwd(), you can additionally pass a resolve option:

var filter = createFilter( options.include, options.exclude, {resolve: '/my/base/dir'} )

If resolve is a string, then this value will be used as the base directory. Relative paths will be resolved against process.cwd() first. If resolve is false, then the patterns will not be resolved against any directory. This can be useful if you want to create a filter for virtual module names.

makeLegalIdentifier

import { makeLegalIdentifier } from 'rollup-pluginutils';

makeLegalIdentifier( 'foo-bar' ); // 'foo_bar'
makeLegalIdentifier( 'typeof' ); // '_typeof'

dataToEsm

Helper for treeshakable data imports

import { dataToEsm } from 'rollup-pluginutils';

const esModuleSource = dataToEsm({
  custom: 'data',
  to: ['treeshake']
}, {
  compact: false,
  indent: '\t',
  preferConst: false,
  objectShorthand: false,
  namedExports: true
});
/*
Outputs the string ES module source:
  export const custom = 'data';
  export const to = ['treeshake'];
  export default { custom, to };
*/

extractAssignedNames

Extract the names of all assignment targets from patterns.

import { extractAssignedNames } from 'rollup-pluginutils';
import { walk } from 'estree-walker';

export default function myPlugin ( options = {} ) {
  return {
    transform ( code ) {
      const ast = this.parse( code );

      walk( ast, {
        enter ( node ) {
          if ( node.type === 'VariableDeclarator' ) {
              const declaredNames = extractAssignedNames(node.id);
              // do something with the declared names
              // e.g. for `const {x, y: z} = ... => declaredNames = ['x', 'z']
          }
        }
      });
    }
  };
}

License

MIT

changelog

rollup-pluginutils changelog

2.8.2

2019-09-13

  • Handle optional catch parameter in attachScopes (#70)

2.8.1

2019-06-04

  • Support serialization of many edge cases (#64)

2.8.0

2019-05-30

  • Bundle updated micromatch dependency (#60)

2.7.1

2019-05-17

  • Do not ignore files with a leading "." in createFilter (#62)

2.7.0

2019-05-15

  • Add resolve option to createFilter (#59)

2.6.0

2019-04-04

  • Add extractAssignedNames (#59)
  • Provide dedicated TypeScript typings file (#58)

2.5.0

2019-03-18

  • Generalize dataToEsm type (#55)
  • Handle empty keys in dataToEsm (#56)

2.4.1

2019-02-16

  • Remove unnecessary dependency

2.4.0

2019-02-16 Update dependencies to solve micromatch vulnerability (#53)

2.3.3

2018-09-19

  • Revert micromatch update (#43)

2.3.2

2018-09-18

  • Bumb micromatch dependency (#36)
  • Bumb dependencies (#41)
  • Split up tests (#40)

2.3.1

2018-08-06

  • Fixed ObjectPattern scope in attachScopes to recognise { ...rest } syntax (#37)

2.3.0

2018-05-21

  • Add option to not generate named exports (#32)

2.2.1

2018-05-21

  • Support null serialization (#34)

2.2.0

2018-05-11

  • Improve white-space handling in dataToEsm and add prepare script (#31)

2.1.1

2018-05-09

  • Update dependencies

2.1.0

2018-05-08

  • Add dataToEsm helper to create named exports from objects (#29)
  • Support literal keys in object patterns (#27)
  • Support function declarations without id in attachScopes (#28)

2.0.1

2017-01-03

  • Don't add extension to file with trailing dot (#14)

2.0.0

2017-01-03

  • Use micromatch instead of minimatch (#19)
  • Allow createFilter to take regexes (#5)

1.5.2

2016-08-29

  • Treat arguments as a reserved word (#10)

1.5.1

2016-06-24

  • Add all declarators in a var declaration to scope, not just the first

1.5.0

2016-06-07

  • Exclude IDs with null character (\0)

1.4.0

2016-06-07

  • Workaround minimatch issue (#6)
  • Exclude non-string IDs in createFilter

1.3.1

2015-12-16

  • Build with Rollup directly, rather than via Gobble

1.3.0

2015-12-16

  • Use correct path separator on Windows

1.2.0

2015-11-02

  • Add attachScopes and makeLegalIdentifier

1.1.0

2015-10-24*

  • Add addExtension function

1.0.1

2015-10-24

  • Include dist files in package

1.0.0

2015-10-24

  • First release