Tooling to extract data regarding the properties / attributes of custom elements. And generate custom data for VSCode auto compilation for custom html tags.
Install
npm install --save-dev @pro-vision/custom-elements-data-extractor
Usage
Install module as local or global dependency and call as npm script or in the command line with:
pv-custom-data --components "src/components/**/*.ts" --iconsDir "resources/icons/" --outDir "data/"
npx @pro-vision/custom-elements-data-extractor --components "src/components/**/*.ts" --iconsDir "resources/icons/" --outDir "data/"
@tag("pva-e-icon")
class Icon extends Component {
@prop
iconId: string;
constructor() {
super({
props: {
ratio: { type: "number" }
}
});
}
{
"devServerPort": "8023",
"namespace": "pva"
}
:: /resources/icons/
|- pva-icon-close.svg
|- pva-icon-plus.svg
{
"version": 1.1,
"tags": [
{
"name": "pva-e-icon",
"description": "(lazy-loaded) icon element",
"attributes": [
{
"name": "icon-id",
"description": "svg file name without extension",
"valueSet": "pva-e-icon:icon-id"
},
{
"name": "ratio",
"description": "",
}
],
"references": [
{
"name": "Living Styleguide",
"url": "http://localhost:8023/styleguide/index.html#icon"
}
]
}
],
"valueSets": [
{
"name": "pva-e-icon:icon-id",
"values": [
{
"name": "pva-icon-close"
},
{
"name": "pva-icon-plus"
}
]
}
]
}
You have to reference the generated file in .vscode/settings.json
;
{
"html.customData": [
"./path/to/custom-elements.html-data.json"
]
}
CLI options
-c, --components <components>
Glob pattern to the directory containing the components. e.g. 'src/components/**/*.ts'.
-i, --iconsDir <iconsDir>
(Optional) relative path to the directory containing svg icons. These icons will be provided as the options for the icon-id
attribute. e.g. 'resources/icons'.
-o, --outDir [outDir]
Relative path to the directory were the generated HTML customData will be written to.
Use -o
without a value to generate the .json file to the current working directory. Omit the -o
flag and no json file will be written to disk.
Node API
Example
const CustomElementDataExtractor = require("@pro-vision/custom-elements-data-extractor");
const Extractor = class extends CustomElementDataExtractor {
getValues({ attributeName, elementName, propData }) {
if (elementName === "pva-user-card" && attributeName === "type") return [
{name: "Standard"},
{name: "PRO"},
{name: "PRO+", description: "will add additional badges"}
];
return super.getValues({ attributeName, elementName, propData });
}
getReferences(elementName) {
return [{name: "Documentation", url: `www.my.docs.com/${elementName}`}]
}
}
const extractor = new Extractor({
components: path.resolve(process.cwd(), "/src/components/**/*.ts"),
});
await extractor.extractAllCustomElementsData();
await extractor.writeHTMLCustomData(process.cwd());