This is a plugin maps custom JSDoc tags on your component classes to properties in Custom Elements Manifest using the Custom Element Manifest Analyzer.
npm i -D @wc-toolkit/jsdoc-tagsAdd the information you would like to include with you component in the class's JSDoc comment using custom tags. In this example, the @dependency, @since, @status, and @spec tags are all custom.
// my-component.js
/**
*
* My custom element does some amazing things
*
* @tag my-element
*
* @dependency icon
* @dependency button
*
* @since 1.2.5
*
* @status beta - not ready for production
*
* @spec https://www.figma.com/...
*
*/
export class MyElement extends HTMLElement {
...
}In the CEM analyzer config, import the plugin and add the mappings for the new tags.
// custom-elements-manifest.config.mjs
import { jsDocTagsPlugin } from "@wc-toolkit/jsdoc-tags";
export default {
...
/** Provide custom plugins */
plugins: [
jsDocTagsPlugin({
tags: {
// finds the values for the `@since` tag
since: {},
// finds the values for the `@status` tag
status: {},
// finds the values for the `@spec` tag
spec: {},
// finds the values for the `@dependency` tag
dependency: {
// maps the values to the `dependencies` property in the CEM
mappedName: 'dependencies',
// ensures the values are always in an array (even if there is only 1)
isArray: true,
},
}
}),
],
};You can also add custom JSDoc tags to class properties. These will be extracted and included in the Custom Elements Manifest under the member's field for each property.
export class MyComponent extends HTMLElement {
/**
* The greeting to display
* @myCustomTag important
*/
greeting = "Hello, World!";
}Add your custom property tag to the plugin config:
jsDocTagsPlugin({
tags: {
myCustomTag: {
description: "A custom property tag",
mappedName: "myCustomTag"
}
}
}){
"kind": "field",
"name": "greeting",
"type": { "text": "string" },
"myCustomTag": "important"
}This allows you to document and extract custom metadata for properties in a structured way.
The data should now be included in the Custom Elements Manifest.
// custom-elements.json
{
"kind": "class",
"description": "My custom element does some amazing things",
"name": "MyElement",
"tagName": "my-element",
"since": {
"name": "1.2.5",
"description": ""
},
"status": {
"name": "beta",
"description": "not ready for production"
},
"spec": {
"name": "https://www.figma.com/...",
"description": ""
},
"dependencies": [
{
"name": "icon",
"description": ""
},
{
"name": "button",
"description": ""
}
],
"customTags": {
"myCustomTag": "important"
}
}Be sure to check out the official docs for more information on how to use this.
