You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					238 lines
				
				5.7 KiB
			
		
		
			
		
	
	
					238 lines
				
				5.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								[npm]: https://img.shields.io/npm/v/@rollup/pluginutils
							 | 
						||
| 
								 | 
							
								[npm-url]: https://www.npmjs.com/package/@rollup/pluginutils
							 | 
						||
| 
								 | 
							
								[size]: https://packagephobia.now.sh/badge?p=@rollup/pluginutils
							 | 
						||
| 
								 | 
							
								[size-url]: https://packagephobia.now.sh/result?p=@rollup/pluginutils
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[![npm][npm]][npm-url]
							 | 
						||
| 
								 | 
							
								[![size][size]][size-url]
							 | 
						||
| 
								 | 
							
								[](https://liberamanifesto.com)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# @rollup/pluginutils
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A set of utility functions commonly used by 🍣 Rollup plugins.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Requirements
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This plugin requires an [LTS](https://github.com/nodejs/Release) Node version (v8.0.0+) and Rollup v1.20.0+.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Install
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Using npm:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```console
							 | 
						||
| 
								 | 
							
								npm install @rollup/pluginutils --save-dev
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import utils from '@rollup/pluginutils';
							 | 
						||
| 
								 | 
							
								//...
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Available utility functions are listed below:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_Note: Parameter names immediately followed by a `?` indicate that the parameter is optional._
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### addExtension
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Adds an extension to a module ID if one does not exist.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Parameters: `(filename: String, ext?: String)`<br>
							 | 
						||
| 
								 | 
							
								Returns: `String`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Parameters: `(ast: Node, propertyName?: String)`<br>
							 | 
						||
| 
								 | 
							
								Returns: `Object`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								See [rollup-plugin-inject](https://github.com/rollup/rollup-plugin-inject) or [rollup-plugin-commonjs](https://github.com/rollup/rollup-plugin-commonjs) for an example of usage.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Constructs a filter function which can be used to determine whether or not certain modules should be operated upon.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Parameters: `(include?: <minmatch>, exclude?: <minmatch>, options?: Object)`<br>
							 | 
						||
| 
								 | 
							
								Returns: `String`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `include` and `exclude`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `String | RegExp | Array[...String|RegExp]`<br>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A valid [`minimatch`](https://www.npmjs.com/package/minimatch) pattern, or array of patterns. 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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `options`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##### `resolve`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `String | Boolean | null`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Optionally resolves the patterns against a directory other than `process.cwd()`. If a `String` is specified, then the value will be used as the base directory. Relative paths will be resolved against `process.cwd()` first. If `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.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import { createFilter } from '@rollup/pluginutils';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default function myPlugin(options = {}) {
							 | 
						||
| 
								 | 
							
								  // assume that the myPlugin accepts options of `options.include` and `options.exclude`
							 | 
						||
| 
								 | 
							
								  var filter = createFilter(options.include, options.exclude, {
							 | 
						||
| 
								 | 
							
								    resolve: '/my/base/dir'
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    transform(code, id) {
							 | 
						||
| 
								 | 
							
								      if (!filter(id)) return;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // proceed with the transformation...
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### dataToEsm
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Transforms objects into tree-shakable ES Module imports.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Parameters: `(data: Object)`<br>
							 | 
						||
| 
								 | 
							
								Returns: `String`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `data`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `Object`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								An object to transform into an ES module.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Extracts the names of all assignment targets based upon specified patterns.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Parameters: `(param: Node)`<br>
							 | 
						||
| 
								 | 
							
								Returns: `Array[...String]`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `param`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `Node`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								An `acorn` AST Node.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								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']
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### makeLegalIdentifier
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Constructs a bundle-safe identifier from a `String`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Parameters: `(str: String)`<br>
							 | 
						||
| 
								 | 
							
								Returns: `String`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import { makeLegalIdentifier } from '@rollup/pluginutils';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								makeLegalIdentifier('foo-bar'); // 'foo_bar'
							 | 
						||
| 
								 | 
							
								makeLegalIdentifier('typeof'); // '_typeof'
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Meta
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[CONTRIBUTING](/.github/CONTRIBUTING.md)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[LICENSE (MIT)](/LICENSE)
							 |