@aarondrabeck/web-component-analyzer
v0.0.1
Published
A fork of web-component-analyzer with experimental json output geared towards web component storybook
Downloads
4
Maintainers
Readme
web-component-analyzer
is a CLI that makes it possible to easily analyze web components. It analyzes your code and jsdoc in order to extract properties
, attributes
, methods
, events
, slots
, css shadow parts
and css custom properties
. Works with both javascript and typescript.
Try the online playground here
In addition to vanilla web components this tool supports web components built with the following libraries:
➤ Installation
$ npm install -g web-component-analyzer
Analyze
The analyze command analyses an optional input glob
and emits the output to the console as default. When the input glob
is omitted it will find all components excluding node_modules
. The default format is markdown
.
$ wca analyze
$ wca analyze src --format markdown
$ wca analyze "src/**/*.{js,ts}" --outDir components
$ wca analyze my-element.js --outFile custom-elements.json
Options
| Option | Type | Description |
| -------------------- | -------------------------------- | ---------------------------------------------------------------------------- |
| --format FORMAT
| markdown
| json
| vscode
| Specify output format. |
| --outFile FILE
| file path
| Concatenate and emit output to a single file. |
| --outDir DIRECTORY
| directory path
| Direct output to a directory where each file corresponds to a web component. |
Output Formats
json
wca analyze src --format json --outFile custom-elements.json
Try the online playground here
This json format is for experimental and demo purposes, and is still being actively discussed. You can expect changes to this format. Please follow and contribute to the discussion at:
- https://github.com/webcomponents/custom-elements-json
- https://github.com/w3c/webcomponents/issues/776
markdown
wca analyze src --format markdown --outDir readme
Try the online playground here
Web Component Analyzer can output markdown documentation of your web components. This can either be output into a single file using --outFile
or into multiple files using --outDir
.
vscode
wca analyze src --format vscode --outFile vscode-html-custom-data.json
VSCode supports a JSON format called vscode custom data for the built in html editor which is set using html.customData
vscode setting. Web Component Analyzer can output this format.
➤ API
You can also use the underlying functionality of this tool if you don't want to use the CLI. Documentation will be added as soon as the API is considered stable.
import { analyzeComponents } from "web-component-analyzer";
analyzeComponents(sourceFile, { checker });
➤ How does this tool analyze my components?
This tool extract information about your components by looking at your code directly and by looking at your JSDoc comments.
Code: Web Component Analyzer supports multiple libraries. Click here for an overview of how each library is analyzed.
JSDoc: Read next section to learn more about how JSDoc is analyzed.
➤ How to document your components using JSDoc
In addition to analyzing the code of your components, this library also use JSDoc to construct the documentation. It's especially a good idea to use JSDoc for documenting slots
, events
, css custom properties
and css shadow parts
as these not analyzed statically by this tool as of now (except when constructing a CustomEvent within your component).
Here's an example including all supported JSDoc tags. All JSDoc tags are on the the form @tag {type} name - comment
.
/**
* Here is a description of my web component.
*
* @element my-element
*
* @fires change - This jsdoc tag makes it possible to document events.
* @fires submit
*
* @attr {Boolean} disabled - This jsdoc tag documents an attribute.
* @attr {on|off} switch - Here is an attribute with either the "on" or "off" value.
* @attr my-attr
*
* @prop {String} myProp - You can use this jsdoc tag to document properties.
* @prop value
*
* @slot - This is an unnamed slot (the default slot)
* @slot start - This is a slot named "start".
* @slot end
*
* @cssprop --main-bg-color - This jsdoc tag can be used to document css custom properties.
* @cssprop --main-color
* @csspart container
*/
class MyElement extends HTMLElement {
/**
* This is a description of a property with an attribute with exactly the same name: "color".
* @type {"red"|"green"|"blue"}
* @attr
*/
color = "red";
/**
* This is a description of a property with an attribute called "my-prop".
* @type {number}
* @deprecated
* @attr my-prop
*/
myProp = 10
}
Overview of supported JSDoc tags
| JSDoc Tag | Description |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| @element
| Gives your component a tag name. This JSDoc tag is useful if your 'customElements.defineis called dynamically eg. using a custom function. |
|
@fires | Documents events. |
|
@slot | Documents slots. Using an empty name here documents the unnamed (default) slot. |
|
@attror
@attribute | Documents an attribute on your component. |
|
@propor
@property | Documents a property on your component. |
|
@csspropor
@cssproperty| Documents a css custom property on your component. |
|
@csspart` | Documents a css shadow part on your component. |
➤ Contributors
| | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Rune Mehlsen |
➤ License
Licensed under MIT.