diff --git a/.gitignore b/.gitignore index 58e4ef0e88..bd9866db34 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +web-types.json node_modules *.js !web-test-runner.config.js diff --git a/package-lock.json b/package-lock.json index 65c7fa10bb..b59de04842 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,13 +16,16 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@lit-labs/analyzer": "^0.12.1", + "@lit-labs/analyzer": "npm:@maicol07/lit-labs-analyzer@0.13.0-1", + "@lit-labs/gen-manifest": "npm:@maicol07/lit-labs-gen-manifest", "@rollup/plugin-multi-entry": "^6.0.1", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@types/jasmine": "^4.0.3", "@web/test-runner": "^0.18.2", "@web/test-runner-playwright": "^0.11.0", + "custom-element-jet-brains-integration": "^1.6.2", + "custom-elements-manifest-inheritance": "^1.1.1", "element-internals-polyfill": "^1.3.12", "jasmine": "^4.5.0", "playwright": "^1.49.0", @@ -811,19 +814,20 @@ } }, "node_modules/@lit-labs/analyzer": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@lit-labs/analyzer/-/analyzer-0.12.1.tgz", - "integrity": "sha512-V3bp3jSZAfsCCMRAp0JdiScyWbJgnmArgSdiNHS3jfV9WGf6IFckrOV3zsKj0OZlP0QJAmsgDno2AP4niCYjBg==", + "name": "@maicol07/lit-labs-analyzer", + "version": "0.13.0-1", + "resolved": "https://registry.npmjs.org/@maicol07/lit-labs-analyzer/-/lit-labs-analyzer-0.13.0-1.tgz", + "integrity": "sha512-03AVDLfkmt8iKwR18P+Eay2hPuLhJEejRjkxfhKEp2VW0Y5fZCcYOIdlY/qpfLbL0tjosoXs6Wr/fhNMQ5yruw==", "dev": true, "dependencies": { "package-json-type": "^1.0.3", - "typescript": "~5.3.3" + "typescript": "~5.5.0" } }, "node_modules/@lit-labs/analyzer/node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -846,6 +850,79 @@ "node": ">=12.16.0" } }, + "node_modules/@lit-labs/gen-manifest": { + "name": "@maicol07/lit-labs-gen-manifest", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@maicol07/lit-labs-gen-manifest/-/lit-labs-gen-manifest-0.4.1.tgz", + "integrity": "sha512-jhAOgx7AVbU7bQNHlHYRIgphvPmBplwaCB0OnSg2x04rNRsCeBdmnFLLjViJZnuW3K3GESo1XKsSWlXLvHtrAg==", + "dev": true, + "dependencies": { + "@lit-labs/analyzer": "^0.13.0", + "@lit-labs/gen-utils": "^0.3.0", + "custom-elements-manifest": "^2.0.0" + }, + "engines": { + "node": ">=14.8.0" + } + }, + "node_modules/@lit-labs/gen-manifest/node_modules/@lit-labs/analyzer": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@lit-labs/analyzer/-/analyzer-0.13.0.tgz", + "integrity": "sha512-KEf6NwZOdKSdY4yIzqqQklNFeESBKD1U7c/dpzjcLL1dHw3KE64X5PBFmDtyLOqWqxhW4viLgXCvhgNUzZRWnA==", + "dev": true, + "dependencies": { + "package-json-type": "^1.0.3", + "typescript": "~5.5.0" + } + }, + "node_modules/@lit-labs/gen-manifest/node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@lit-labs/gen-utils": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@lit-labs/gen-utils/-/gen-utils-0.3.3.tgz", + "integrity": "sha512-AEhWAHEEPalH3NnmaMrwVAy/d0rbxS+L8mtHy84Kic20e1HchHrIxgopT6Q8dVFZyIXe3Q1+j6tRdXR/C3fPvA==", + "dev": true, + "dependencies": { + "@lit-labs/analyzer": "^0.13.0" + }, + "engines": { + "node": ">=14.8.0" + } + }, + "node_modules/@lit-labs/gen-utils/node_modules/@lit-labs/analyzer": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@lit-labs/analyzer/-/analyzer-0.13.0.tgz", + "integrity": "sha512-KEf6NwZOdKSdY4yIzqqQklNFeESBKD1U7c/dpzjcLL1dHw3KE64X5PBFmDtyLOqWqxhW4viLgXCvhgNUzZRWnA==", + "dev": true, + "dependencies": { + "package-json-type": "^1.0.3", + "typescript": "~5.5.0" + } + }, + "node_modules/@lit-labs/gen-utils/node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@lit-labs/motion": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@lit-labs/motion/-/motion-1.0.3.tgz", @@ -1457,6 +1534,21 @@ "url": "https://opencollective.com/preact" } }, + "node_modules/@prettier/sync": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.5.2.tgz", + "integrity": "sha512-Yb569su456XNx5BsH/Vyem7xD6g/y9iLmLUzRKM1a/dhU/D7HqqvkAG72znulXlMXztbV0iiu9O5AL8K98TzZQ==", + "dev": true, + "dependencies": { + "make-synchronized": "^0.2.8" + }, + "funding": { + "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" + }, + "peerDependencies": { + "prettier": "*" + } + }, "node_modules/@puppeteer/browsers": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", @@ -3937,6 +4029,45 @@ "node": ">=0.10.0" } }, + "node_modules/custom-element-jet-brains-integration": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/custom-element-jet-brains-integration/-/custom-element-jet-brains-integration-1.6.2.tgz", + "integrity": "sha512-V3jixEhQG+dg+uwn7bfb+q49MWQmWMCxGw6uT5mwHEEuIxAwtv46xf9Co1WP5h31n8yVJReEl3b7qCNvZPqcpA==", + "dev": true, + "dependencies": { + "@prettier/sync": "^0.5.2" + } + }, + "node_modules/custom-elements-manifest": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/custom-elements-manifest/-/custom-elements-manifest-2.1.0.tgz", + "integrity": "sha512-4TU+YhBQpCGYWonsZVTOPx6aYJXenOiSRT7TNGvDB7ipa4SZSJKed1DYXG77XKL9JFZ86sDSDVkwgv1mqw3V3A==", + "dev": true + }, + "node_modules/custom-elements-manifest-inheritance": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/custom-elements-manifest-inheritance/-/custom-elements-manifest-inheritance-1.1.1.tgz", + "integrity": "sha512-Z/eYNKLDB68axdUQllSrSZftAMaLQijJRCx9XRgR/2xQq+zeJgWM0orbbxJQrxFvlxtmKnFZJDr/HL4332Clkw==", + "dev": true, + "dependencies": { + "prettier": "^2.8.0" + } + }, + "node_modules/custom-elements-manifest-inheritance/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -6168,6 +6299,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-synchronized": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/make-synchronized/-/make-synchronized-0.2.9.tgz", + "integrity": "sha512-4wczOs8SLuEdpEvp3vGo83wh8rjJ78UsIk7DIX5fxdfmfMJGog4bQzxfvOwq7Q3yCHLC4jp1urPHIxRS/A93gA==", + "dev": true, + "funding": { + "url": "https://github.com/fisker/make-synchronized?sponsor=1" + } + }, "node_modules/markdown-it": { "version": "13.0.1", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", @@ -7190,6 +7330,22 @@ "node": ">= 4" } }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", diff --git a/package.json b/package.json index b5fa3851ad..e00d07daa0 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "update-docs": "wireit", "update-size": "wireit" }, + "customElement": "custom-elements.json", "type": "module", "files": [ "**/*.js", @@ -41,6 +42,8 @@ "**/*.scss", "**/*.css", "**/*.css.map", + "custom-elements.json", + "web-types.json", "!web-test-runner.config.js", "!commitlint.config.js", "!**/test/**", @@ -52,21 +55,22 @@ "testing/harness.{js,js.map,d.ts}", "testing/transform-pseudo-classes.{js,js.map,d.ts}" ], - "workspaces": [ - "catalog" - ], + "workspaces": ["catalog"], "dependencies": { "lit": "^2.8.0 || ^3.0.0", "tslib": "^2.4.0" }, "devDependencies": { - "@lit-labs/analyzer": "^0.12.1", + "@lit-labs/analyzer": "npm:@maicol07/lit-labs-analyzer@0.13.0-1", + "@lit-labs/gen-manifest": "npm:@maicol07/lit-labs-gen-manifest", "@rollup/plugin-multi-entry": "^6.0.1", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-terser": "^0.4.4", "@types/jasmine": "^4.0.3", "@web/test-runner": "^0.18.2", "@web/test-runner-playwright": "^0.11.0", + "custom-element-jet-brains-integration": "^1.6.2", + "custom-elements-manifest-inheritance": "^1.1.1", "element-internals-polyfill": "^1.3.12", "jasmine": "^4.5.0", "playwright": "^1.49.0", @@ -79,9 +83,7 @@ }, "wireit": { "build": { - "dependencies": [ - "build:ts" - ] + "dependencies": ["build:ts"] }, "build:ts": { "command": "tsc --pretty", @@ -105,51 +107,27 @@ "!scripts/" ], "clean": "if-file-deleted", - "dependencies": [ - "build:css-to-ts" - ] + "dependencies": ["build:css-to-ts"] }, "build:css-to-ts": { "command": "find . \\( -path ./.wireit -o -path ./node_modules -o -path ./catalog \\) -prune -o -name '*-styles.css' -print | xargs -L1 node scripts/css-to-ts.js", - "files": [ - "**/*-styles.css", - "!catalog/" - ], - "output": [ - "**/*-styles.ts", - "!catalog/" - ], - "dependencies": [ - "build:scripts", - "build:sass" - ] + "files": ["**/*-styles.css", "!catalog/"], + "output": ["**/*-styles.ts", "!catalog/"], + "dependencies": ["build:scripts", "build:sass"] }, "build:sass": { "command": "sass --style=compressed --load-path=node_modules --load-path=node_modules/sass-true/sass $(ls -d */ | grep -vE 'node_modules|catalog')", - "files": [ - "**/*.scss", - "!catalog/" - ], - "output": [ - "**/*.css", - "**/*.css.map", - "!catalog/" - ] + "files": ["**/*.scss", "!catalog/"], + "output": ["**/*.css", "**/*.css.map", "!catalog/"] }, "test": { "command": "wtr", - "dependencies": [ - "build:ts" - ], - "files": [ - "web-test-runner.config.js" - ], + "dependencies": ["build:ts"], + "files": ["web-test-runner.config.js"], "output": [] }, "build:catalog": { - "dependencies": [ - "./catalog:build:prod" - ] + "dependencies": ["./catalog:build:prod"] }, "build:scripts": { "command": "tsc -b scripts/tsconfig.json --pretty", @@ -178,17 +156,13 @@ "!scripts/", "scripts/analyzer/update-docs.js" ], - "output": [], - "dependencies": [ - "build:scripts" - ] + "output": ["custom-elements.json", "web-types.json"], + "dependencies": ["build:scripts"] }, "update-size": { "command": "node scripts/size/update-size.js", - "dependencies": [ - "build:scripts", - "build" - ] + "dependencies": ["build:scripts", "build"] } - } + }, + "web-types": "./web-types.json" } diff --git a/scripts/analyzer/update-docs.ts b/scripts/analyzer/update-docs.ts index c74712a543..95dd715141 100644 --- a/scripts/analyzer/update-docs.ts +++ b/scripts/analyzer/update-docs.ts @@ -20,6 +20,9 @@ import { } from './analyze-element.js'; import {docsToElementMapping} from './element-docs-map.js'; import {MarkdownTable} from './markdown-tree-builder.js'; +import {generateJetBrainsWebTypes} from 'custom-element-jet-brains-integration'; +import {generateManifest} from '@lit-labs/gen-manifest'; +import {updateCemInheritance} from 'custom-elements-manifest-inheritance'; interface MarkdownTableSection { name: string; @@ -45,7 +48,9 @@ interface ElementTableSection { async function updateApiDocs() { const packagePath = path.resolve('.'); // Analyzes the entire material-web repository. - const analyzer = createPackageAnalyzer(packagePath as AbsolutePath); + const analyzer = createPackageAnalyzer(packagePath as AbsolutePath, { + exclude: ['**/demo/**', 'testing/**', '**/harness*'] + }); const documentationFileNames = Object.keys(docsToElementMapping); const filesWritten: Array> = []; @@ -59,6 +64,14 @@ async function updateApiDocs() { // Wait for all the files to be written await Promise.all(filesWritten); + + // Generate CEM manifest + const file = await generateManifest(analyzer.getPackage()); + const cem = JSON.parse(file['custom-elements.json'] as string); + await fs.writeFile('custom-elements.json', JSON.stringify(cem, null, 2)); + updateCemInheritance(cem); + + generateJetBrainsWebTypes(cem, {packageJson: true}); } /** diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index 220c38ec18..c2daacf3f5 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -4,7 +4,8 @@ "types": ["node"], "allowSyntheticDefaultImports": true, "target": "ES2022", - "module": "ES2022" + "module": "ES2022", + "skipLibCheck": true }, "exclude": [ "catalog",