AST utility module for statically analyzing JSX
npm install jsx-ast-utils-x










AST utility module for statically analyzing JSX.
- Installation
- Usage
- ESLint example
- API
- AST Resources
- hasProp
- Props
- Prop
- Options
- hasAnyProp
- Props
- Prop
- Options
- hasEveryProp
- Props
- Prop
- Options
- getProp
- Props
- Prop
- Options
- elementType
- Node
- getPropValue
- Prop
- getLiteralPropValue
- Prop
- propName
- Prop
- eventHandlers
- eventHandlersByType
- Sponsors and Backers
- Sponsors
- Backers
- Changelog
- License
``shnpm
npm i jsx-ast-utils-x --save
Usage
This is a utility module to evaluate AST objects for JSX syntax. This can be super useful when writing linting rules for JSX code. It was originally in the code for eslint-plugin-jsx-a11y, however I thought it could be useful to be extracted and maintained separately so you could write new interesting rules to statically analyze JSX.
$3
`js
import { hasProp } from 'jsx-ast-utils-x';
// OR: var hasProp = require('jsx-ast-utils-x').hasProp;
// OR: const hasProp = require('jsx-ast-utils-x/hasProp');
// OR: import hasProp from 'jsx-ast-utils-x/hasProp';module.exports = context => ({
JSXOpeningElement: node => {
const onChange = hasProp(node.attributes, 'onChange');
if (onChange) {
context.report({
node,
message:
No onChange!,
});
}
},
});
`API
$3
$3
`js
hasProp(props, prop, options);
`Returns boolean indicating whether an prop exists as an attribute on a JSX element node.
#### Props
Object - The attributes on the visited node. (Usually
node.attributes).#### Prop
String - A string representation of the prop you want to check for existence.
#### Options
Object - An object representing options for existence checking
1.
ignoreCase - automatically set to true.
2. spreadStrict - automatically set to true. This means if spread operator exists in
props, it will assume the prop you are looking for is not in the spread.
Example: looking for specific prop here will return false if spreadStrict is true.
$3
`js
hasAnyProp(props, prop, options);
`Returns a boolean indicating if any of props in
prop argument exist on the node.#### Props
Object - The attributes on the visited node. (Usually
node.attributes).#### Prop
Array - An array of strings representing the props you want to check for existence.
#### Options
Object - An object representing options for existence checking
1.
ignoreCase - automatically set to true.
2. spreadStrict - automatically set to true. This means if spread operator exists in
props, it will assume the prop you are looking for is not in the spread.
Example: looking for specific prop here will return false if spreadStrict is true.
$3
`js
hasEveryProp(props, prop, options);
`Returns a boolean indicating if all of props in
prop argument exist on the node.#### Props
Object - The attributes on the visited node. (Usually
node.attributes).#### Prop
Array - An array of strings representing the props you want to check for existence.
#### Options
Object - An object representing options for existence checking
1.
ignoreCase - automatically set to true.
2. spreadStrict - automatically set to true. This means if spread operator exists in
props, it will assume the prop you are looking for is not in the spread.
Example: looking for specific prop here will return false if spreadStrict is true.
$3
`js
getProp(props, prop, options);
`Returns the JSXAttribute itself or undefined, indicating the prop is not present on the JSXOpeningElement.
#### Props
Object - The attributes on the visited node. (Usually
node.attributes).#### Prop
String - A string representation of the prop you want to check for existence.
#### Options
Object - An object representing options for existence checking
1.
ignoreCase - automatically set to true.
$3
`js
elementType(node);
`Returns the tagName associated with a JSXElement.
#### Node
Object - The visited JSXElement node object.
$3
`js
getPropValue(prop);
`Returns the value of a given attribute. Different types of attributes have their associated values in different properties on the object.
This function should return the most _closely_ associated value with the intention of the JSX.
#### Prop
Object - The JSXAttribute collected by AST parser.
$3
`js
getLiteralPropValue(prop);
`Returns the value of a given attribute. Different types of attributes have their associated values in different properties on the object.
This function should return a value only if we can extract a literal value from its attribute (i.e. values that have generic types in JavaScript - strings, numbers, booleans, etc.)
#### Prop
Object - The JSXAttribute collected by AST parser.
$3
`js
propName(prop);
`Returns the name associated with a JSXAttribute. For example, given
and the JSXAttribute for foo, this will return the string "foo".#### Prop
Object - The JSXAttribute collected by AST parser.
$3
`js
console.log(eventHandlers);
/*
[
'onCopy',
'onCut',
'onPaste',
'onCompositionEnd',
'onCompositionStart',
'onCompositionUpdate',
'onKeyDown',
'onKeyPress',
'onKeyUp',
'onFocus',
'onBlur',
'onChange',
'onInput',
'onSubmit',
'onClick',
'onContextMenu',
'onDblClick',
'onDoubleClick',
'onDrag',
'onDragEnd',
'onDragEnter',
'onDragExit',
'onDragLeave',
'onDragOver',
'onDragStart',
'onDrop',
'onMouseDown',
'onMouseEnter',
'onMouseLeave',
'onMouseMove',
'onMouseOut',
'onMouseOver',
'onMouseUp',
'onSelect',
'onTouchCancel',
'onTouchEnd',
'onTouchMove',
'onTouchStart',
'onScroll',
'onWheel',
'onAbort',
'onCanPlay',
'onCanPlayThrough',
'onDurationChange',
'onEmptied',
'onEncrypted',
'onEnded',
'onError',
'onLoadedData',
'onLoadedMetadata',
'onLoadStart',
'onPause',
'onPlay',
'onPlaying',
'onProgress',
'onRateChange',
'onSeeked',
'onSeeking',
'onStalled',
'onSuspend',
'onTimeUpdate',
'onVolumeChange',
'onWaiting',
'onLoad',
'onError',
'onAnimationStart',
'onAnimationEnd',
'onAnimationIteration',
'onTransitionEnd',
]
*/
`Contains a flat list of common event handler props used in JSX to attach behaviors
to DOM events.
#### eventHandlersByType
The same list as
eventHandlers, grouped into types.`js
console.log(eventHandlersByType);
/*
{
clipboard: [ 'onCopy', 'onCut', 'onPaste' ],
composition: [ 'onCompositionEnd', 'onCompositionStart', 'onCompositionUpdate' ],
keyboard: [ 'onKeyDown', 'onKeyPress', 'onKeyUp' ],
focus: [ 'onFocus', 'onBlur' ],
form: [ 'onChange', 'onInput', 'onSubmit' ],
mouse: [ 'onClick', 'onContextMenu', 'onDblClick', 'onDoubleClick', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragExit', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp' ],
selection: [ 'onSelect' ],
touch: [ 'onTouchCancel', 'onTouchEnd', 'onTouchMove', 'onTouchStart' ],
ui: [ 'onScroll' ],
wheel: [ 'onWheel' ],
media: [ 'onAbort', 'onCanPlay', 'onCanPlayThrough', 'onDurationChange', 'onEmptied', 'onEncrypted', 'onEnded', 'onError', 'onLoadedData', 'onLoadedMetadata', 'onLoadStart', 'onPause', 'onPlay', 'onPlaying', 'onProgress', 'onRateChange', 'onSeeked', 'onSeeking', 'onStalled', 'onSuspend', 'onTimeUpdate', 'onVolumeChange', 'onWaiting' ],
image: [ 'onLoad', 'onError' ],
animation: [ 'onAnimationStart', 'onAnimationEnd', 'onAnimationIteration' ],
transition: [ 'onTransitionEnd' ],
}
*/
``
| 1stG | RxTS | UnTS |
| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|  |  |  |
| 1stG | RxTS | UnTS |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|  |  |  |
Detailed changes for each release are documented in CHANGELOG.md.
[MIT][] © [JounQin][]@[1stG.me][]
[1stG.me]: https://www.1stG.me
[JounQin]: https://github.com/JounQin
[MIT]: http://opensource.org/licenses/MIT