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) |