Customelements to webtypes (#681)

* (feat) generate web-types.json

* (feat) added doc ref

Co-authored-by: Matthias Guth <matthias.guth@vitagroup.ag>
This commit is contained in:
Matthias Guth
2022-02-16 21:51:44 +01:00
committed by GitHub
parent e41e08f2af
commit 4a0dbde6b7
4 changed files with 88 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ fs.mkdirSync(outdir, { recursive: true });
execSync(`node scripts/make-search.js --outdir "${outdir}"`, { stdio: 'inherit' });
execSync(`node scripts/make-react.js --outdir "${outdir}"`, { stdio: 'inherit' });
execSync(`node scripts/make-vscode-data.js --outdir "${outdir}"`, { stdio: 'inherit' });
execSync(`node scripts/make-webtypes.js --outdir "${outdir}"`, { stdio: 'inherit' });
execSync(`node scripts/make-themes.js --outdir "${outdir}"`, { stdio: 'inherit' });
execSync(`node scripts/make-icons.js --outdir "${outdir}"`, { stdio: 'inherit' });
if (types) {

68
scripts/make-webtypes.js Normal file
View File

@@ -0,0 +1,68 @@
//
// This script converts the custom-elements.json to generate web-types.json
//
import commandLineArgs from 'command-line-args';
import jsonata from 'jsonata';
import fs from 'fs';
import path from 'path';
const {outdir} = commandLineArgs({name: 'outdir', type: String});
const metadata = JSON.parse(fs.readFileSync(path.join(outdir, 'custom-elements.json'), 'utf8'));
const jsonataExprString = `{
"$schema": "http://json.schemastore.org/web-types",
"name": package.name,
"version": package.version,
"description-markup": "markdown",
"framework-config": {
"enable-when": {
"node-packages": [
package.name
]
}
},
"contributions": {
"html": {
"elements": [
modules.declarations.{
"name": tagName,
"description": description,
"doc-url": $join(["https://shoelace.style/components/", $substringAfter(tagName, 'sl-')]),
"js": {
"properties": [
members.{
"name": name,
"description": description,
"value": {
"type": type.text
}
}
],
"events": [
events.{
"name": name,
"description": description
}
]
},
"attributes": [
attributes.{
"name": name,
"description": description,
"value": {
"type": type.text
}
}
]
}
]
}
}
}`;
// Run the conversion
const expression = jsonata(jsonataExprString)
console.log('Generating web types');
fs.writeFileSync(path.join(outdir, 'web-types.json'), JSON.stringify(expression.evaluate(metadata), null, 2), 'utf8');