diff --git a/package-lock.json b/package-lock.json index 3f3fcd3..e40868d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,12 +24,12 @@ "@web/dev-server-core": "^0.6.3", "arraybuffer-to-string": "^1.0.2", "cross-env": "^7.0.3", - "cz-conventional-changelog": "^3.1.0", + "cz-conventional-changelog": "^3.3.0", "esbuild": "^0.19.5", "esbuild-plugin-alias": "^0.2.1", "esm": "^3.2.25", "globby": "^13.2.2", - "lit": "^3.0.0", + "lit": "^3.0.1", "memfs": "^3.5.0", "nodemon": "^2.0.22", "npm-run-all": "^4.1.5", @@ -37,12 +37,12 @@ "postcss-nesting": "^10.2.0", "rollup": "^2.79.1", "rollup-plugin-alias": "^2.2.0", - "sass": "^1.69.4", + "sass": "^1.69.5", "semantic-release": "^19.0.5", "tap-spec": "^5.0.0", "tap-summary": "^4.0.0", - "tape": "^5.7.1", - "typescript": "^4.9.5", + "tape": "^5.7.2", + "typescript": "^5.2.2", "webpack": "^5.89.0", "wsrun": "^5.2.4" }, @@ -2937,14 +2937,12 @@ "node_modules/@lit-labs/ssr-dom-shim": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", - "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==", - "dev": true + "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" }, "node_modules/@lit/reactive-element": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.0.tgz", "integrity": "sha512-wn+2+uDcs62ROBmVAwssO4x5xue/uKD3MGGZOXL2sMxReTRIT0JXKyMXeu7gh0aJ4IJNEIG/3aOnUaQvM7BMzQ==", - "dev": true, "dependencies": { "@lit-labs/ssr-dom-shim": "^1.1.2-pre.0" } @@ -3340,9 +3338,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", + "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -3352,7 +3350,7 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -3931,8 +3929,7 @@ "node_modules/@types/trusted-types": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.5.tgz", - "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==", - "dev": true + "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==" }, "node_modules/@types/uglify-js": { "version": "3.17.1", @@ -4642,7 +4639,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7742,7 +7738,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8120,7 +8115,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -8231,6 +8225,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -8519,8 +8525,7 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inquirer": { "version": "8.2.5", @@ -8752,7 +8757,6 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -9131,8 +9135,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/issue-parser": { "version": "6.0.0", @@ -9480,7 +9483,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -9628,10 +9630,9 @@ "dev": true }, "node_modules/lit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.0.0.tgz", - "integrity": "sha512-nQ0teRzU1Kdj++VdmttS2WvIen8M79wChJ6guRKIIym2M3Ansg3Adj9O6yuQh2IpjxiUXlNuS81WKlQ4iL3BmA==", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.0.1.tgz", + "integrity": "sha512-CYFv7/gwrs6bfPm299O9LD/HB4dgHvsEf/yqUOI//fi469i2OrT4xaptUcmhr05DNQEgsBFecFH8EJnN5So8oQ==", "dependencies": { "@lit/reactive-element": "^2.0.0", "lit-element": "^4.0.0", @@ -9646,7 +9647,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.0.tgz", "integrity": "sha512-N6+f7XgusURHl69DUZU6sTBGlIN+9Ixfs3ykkNDfgfTkDYGGOWwHAYBhDqVswnFGyWgQYR2KiSpu4J76Kccs/A==", - "dev": true, "dependencies": { "@lit-labs/ssr-dom-shim": "^1.1.2-pre.0", "@lit/reactive-element": "^2.0.0", @@ -9657,7 +9657,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.0.0.tgz", "integrity": "sha512-DNJIE8dNY0dQF2Gs0sdMNUppMQT2/CvV4OVnSdg7BXAsGqkVwsE5bqQ04POfkYH5dBIuGnJYdFz5fYYyNnOxiA==", - "dev": true, "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -13181,9 +13180,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13555,6 +13554,18 @@ "typescript": "^2.9.2 || ^3.0.0 || ^4.0.0" } }, + "node_modules/parse-literals/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/parse-ms": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz", @@ -13639,8 +13650,7 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-type": { "version": "4.0.0", @@ -14399,7 +14409,6 @@ "version": "1.22.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", - "dev": true, "dependencies": { "is-core-module": "^2.12.0", "path-parse": "^1.0.7", @@ -14672,9 +14681,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.69.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", - "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -15482,7 +15491,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15591,7 +15599,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -15852,28 +15859,28 @@ } }, "node_modules/tape": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.7.1.tgz", - "integrity": "sha512-5U2nU0PbvWXXtJxE0hFv78VSyhJiyEPq1wNtMCWUxt17SZbeBqs9V5zcyDqkyguYN39d8qAjZxfFkjJ1+kB4yA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.7.2.tgz", + "integrity": "sha512-cvSyprYahyOYXbtBwV/B7nrx7kINeZ3VZ9fKoSywoPwZN3oQ1WVLvt+Vl0XCz/gi37CDrY3dlW790nzviIzoPw==", "dev": true, "dependencies": { "@ljharb/resumer": "^0.0.1", "@ljharb/through": "^2.3.11", "array.prototype.every": "^1.1.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "deep-equal": "^2.2.2", "defined": "^1.0.1", "dotignore": "^0.1.2", "for-each": "^0.3.3", "get-package-type": "^0.1.0", "glob": "^7.2.3", - "has": "^1.0.3", "has-dynamic-import": "^2.0.1", + "hasown": "^2.0.0", "inherits": "^2.0.4", "is-regex": "^1.1.4", "minimist": "^1.2.8", - "mock-property": "^1.0.0", - "object-inspect": "^1.12.3", + "mock-property": "^1.0.2", + "object-inspect": "^1.13.1", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", @@ -16187,6 +16194,162 @@ } } }, + "node_modules/ts-patch": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ts-patch/-/ts-patch-3.0.2.tgz", + "integrity": "sha512-iTg8euqiNsNM1VDfOsVIsP0bM4kAVXU38n7TGQSkky7YQX/syh6sDPIRkvSS0HjT8ZOr0pq1h+5Le6jdB3hiJQ==", + "peer": true, + "dependencies": { + "chalk": "^4.1.2", + "global-prefix": "^3.0.0", + "minimist": "^1.2.8", + "resolve": "^1.22.2", + "semver": "^7.3.8", + "strip-ansi": "^6.0.1" + }, + "bin": { + "ts-patch": "bin/ts-patch.js", + "tspc": "bin/tspc.js" + } + }, + "node_modules/ts-patch/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-patch/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-patch/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-patch/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/ts-patch/node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "peer": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-patch/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-patch/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-patch/node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ts-patch/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-patch/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-patch/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/ts-patch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true + }, "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -16459,17 +16622,21 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, + "node_modules/typescript-transform-lit-css": { + "resolved": "packages/typescript-transform-lit-css", + "link": true + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -17253,17 +17420,18 @@ } }, "packages/esbuild-plugin-lit-css": { - "version": "2.0.4", + "version": "2.0.5", "license": "ISC", "dependencies": { "@pwrs/lit-css": "^2.0.0" }, "peerDependencies": { - "esbuild": "^0.16.17 || ^0.17.16 || ^0.18.1 || ^0.19.5" + "esbuild": "^0.16.17 || ^0.17.16 || ^0.18.1 || ^0.19.5", + "lit": "^2.7.2 || ^3.0.0" } }, "packages/esbuild-plugin-minify-html-literals": { - "version": "1.0.5", + "version": "1.0.6", "license": "ISC", "dependencies": { "minify-html-literals": "^1.3.5" @@ -17294,7 +17462,19 @@ "license": "ISC", "dependencies": { "@pwrs/lit-css": "^2.0.0", - "@rollup/pluginutils": "^5.0.2" + "@rollup/pluginutils": "^5.0.5" + } + }, + "packages/typescript-transform-lit-css": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@pwrs/lit-css": "^2.0.0" + }, + "peerDependencies": { + "lit": "^2.7.2 || ^3.0.0", + "ts-patch": "^3.0", + "typescript": "^5" } }, "packages/web-dev-server-plugin-lit-css": { @@ -17302,14 +17482,14 @@ "license": "ISC", "dependencies": { "@pwrs/lit-css": "^2.0.0", - "@rollup/pluginutils": "^5.0.2" + "@rollup/pluginutils": "^5.0.5" } }, "test": { "version": "1.0.10", "license": "MIT", "dependencies": { - "esbuild-plugin-lit-css": "2.0.4", + "esbuild-plugin-lit-css": "2.0.5", "lit-css-loader": "2.0.1", "rollup-plugin-lit-css": "4.0.1" } @@ -19336,14 +19516,12 @@ "@lit-labs/ssr-dom-shim": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", - "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==", - "dev": true + "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" }, "@lit/reactive-element": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.0.tgz", "integrity": "sha512-wn+2+uDcs62ROBmVAwssO4x5xue/uKD3MGGZOXL2sMxReTRIT0JXKyMXeu7gh0aJ4IJNEIG/3aOnUaQvM7BMzQ==", - "dev": true, "requires": { "@lit-labs/ssr-dom-shim": "^1.1.2-pre.0" } @@ -19668,9 +19846,9 @@ } }, "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", + "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", "requires": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -20185,8 +20363,7 @@ "@types/trusted-types": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.5.tgz", - "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==", - "dev": true + "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==" }, "@types/uglify-js": { "version": "3.17.1", @@ -20739,8 +20916,7 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "3.2.1", @@ -23092,8 +23268,7 @@ "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { "version": "1.1.6", @@ -23385,7 +23560,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -23459,6 +23633,15 @@ "has-symbols": "^1.0.2" } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -23672,8 +23855,7 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { "version": "8.2.5", @@ -23844,7 +24026,6 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -24091,8 +24272,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "issue-parser": { "version": "6.0.0", @@ -24358,8 +24538,7 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "kleur": { "version": "4.1.5", @@ -24488,10 +24667,9 @@ "dev": true }, "lit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.0.0.tgz", - "integrity": "sha512-nQ0teRzU1Kdj++VdmttS2WvIen8M79wChJ6guRKIIym2M3Ansg3Adj9O6yuQh2IpjxiUXlNuS81WKlQ4iL3BmA==", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.0.1.tgz", + "integrity": "sha512-CYFv7/gwrs6bfPm299O9LD/HB4dgHvsEf/yqUOI//fi469i2OrT4xaptUcmhr05DNQEgsBFecFH8EJnN5So8oQ==", "requires": { "@lit/reactive-element": "^2.0.0", "lit-element": "^4.0.0", @@ -24509,7 +24687,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.0.tgz", "integrity": "sha512-N6+f7XgusURHl69DUZU6sTBGlIN+9Ixfs3ykkNDfgfTkDYGGOWwHAYBhDqVswnFGyWgQYR2KiSpu4J76Kccs/A==", - "dev": true, "requires": { "@lit-labs/ssr-dom-shim": "^1.1.2-pre.0", "@lit/reactive-element": "^2.0.0", @@ -24520,7 +24697,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.0.0.tgz", "integrity": "sha512-DNJIE8dNY0dQF2Gs0sdMNUppMQT2/CvV4OVnSdg7BXAsGqkVwsE5bqQ04POfkYH5dBIuGnJYdFz5fYYyNnOxiA==", - "dev": true, "requires": { "@types/trusted-types": "^2.0.2" } @@ -27035,9 +27211,9 @@ "dev": true }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true }, "object-is": { @@ -27304,6 +27480,13 @@ "integrity": "sha512-Ml0w104Ph2wwzuRdxrg9booVWsngXbB4bZ5T2z6WyF8b5oaNkUmBiDtahi34yUIpXD8Y13JjAK6UyIyApJ73RQ==", "requires": { "typescript": "^2.9.2 || ^3.0.0 || ^4.0.0" + }, + "dependencies": { + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + } } }, "parse-ms": { @@ -27371,8 +27554,7 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-type": { "version": "4.0.0", @@ -27925,7 +28107,6 @@ "version": "1.22.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", - "dev": true, "requires": { "is-core-module": "^2.12.0", "path-parse": "^1.0.7", @@ -28053,7 +28234,7 @@ "version": "file:packages/rollup-plugin-lit-css", "requires": { "@pwrs/lit-css": "^2.0.0", - "@rollup/pluginutils": "^5.0.2" + "@rollup/pluginutils": "^5.0.5" } }, "run-async": { @@ -28116,9 +28297,9 @@ "dev": true }, "sass": { - "version": "1.69.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", - "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -28787,7 +28968,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -28864,8 +29044,7 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "tap-out": { "version": "2.1.0", @@ -29086,28 +29265,28 @@ "dev": true }, "tape": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.7.1.tgz", - "integrity": "sha512-5U2nU0PbvWXXtJxE0hFv78VSyhJiyEPq1wNtMCWUxt17SZbeBqs9V5zcyDqkyguYN39d8qAjZxfFkjJ1+kB4yA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.7.2.tgz", + "integrity": "sha512-cvSyprYahyOYXbtBwV/B7nrx7kINeZ3VZ9fKoSywoPwZN3oQ1WVLvt+Vl0XCz/gi37CDrY3dlW790nzviIzoPw==", "dev": true, "requires": { "@ljharb/resumer": "^0.0.1", "@ljharb/through": "^2.3.11", "array.prototype.every": "^1.1.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "deep-equal": "^2.2.2", "defined": "^1.0.1", "dotignore": "^0.1.2", "for-each": "^0.3.3", "get-package-type": "^0.1.0", "glob": "^7.2.3", - "has": "^1.0.3", "has-dynamic-import": "^2.0.1", + "hasown": "^2.0.0", "inherits": "^2.0.4", "is-regex": "^1.1.4", "minimist": "^1.2.8", - "mock-property": "^1.0.0", - "object-inspect": "^1.12.3", + "mock-property": "^1.0.2", + "object-inspect": "^1.13.1", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", @@ -29195,7 +29374,7 @@ "test": { "version": "file:test", "requires": { - "esbuild-plugin-lit-css": "2.0.4", + "esbuild-plugin-lit-css": "2.0.5", "lit-css-loader": "2.0.1", "rollup-plugin-lit-css": "4.0.1" } @@ -29319,6 +29498,121 @@ "yn": "3.1.1" } }, + "ts-patch": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ts-patch/-/ts-patch-3.0.2.tgz", + "integrity": "sha512-iTg8euqiNsNM1VDfOsVIsP0bM4kAVXU38n7TGQSkky7YQX/syh6sDPIRkvSS0HjT8ZOr0pq1h+5Le6jdB3hiJQ==", + "peer": true, + "requires": { + "chalk": "^4.1.2", + "global-prefix": "^3.0.0", + "minimist": "^1.2.8", + "resolve": "^1.22.2", + "semver": "^7.3.8", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "peer": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "peer": true + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "peer": true + } + } + }, "tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -29520,9 +29814,15 @@ } }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" + }, + "typescript-transform-lit-css": { + "version": "file:packages/typescript-transform-lit-css", + "requires": { + "@pwrs/lit-css": "^2.0.0" + } }, "uglify-js": { "version": "3.17.4", @@ -29720,7 +30020,7 @@ "version": "file:packages/web-dev-server-plugin-lit-css", "requires": { "@pwrs/lit-css": "^2.0.0", - "@rollup/pluginutils": "^5.0.2" + "@rollup/pluginutils": "^5.0.5" } }, "webidl-conversions": { diff --git a/package.json b/package.json index 438b136..df68f96 100644 --- a/package.json +++ b/package.json @@ -39,12 +39,12 @@ "@web/dev-server-core": "^0.6.3", "arraybuffer-to-string": "^1.0.2", "cross-env": "^7.0.3", - "cz-conventional-changelog": "^3.1.0", + "cz-conventional-changelog": "^3.3.0", "esbuild": "^0.19.5", "esbuild-plugin-alias": "^0.2.1", "esm": "^3.2.25", "globby": "^13.2.2", - "lit": "^3.0.0", + "lit": "^3.0.1", "memfs": "^3.5.0", "nodemon": "^2.0.22", "npm-run-all": "^4.1.5", @@ -52,13 +52,13 @@ "postcss-nesting": "^10.2.0", "rollup": "^2.79.1", "rollup-plugin-alias": "^2.2.0", - "sass": "^1.69.4", + "sass": "^1.69.5", "semantic-release": "^19.0.5", "tap-spec": "^5.0.0", "tap-summary": "^4.0.0", - "tape": "^5.7.1", - "typescript": "^4.9.5", + "tape": "^5.7.2", + "typescript": "^5.2.2", "webpack": "^5.89.0", "wsrun": "^5.2.4" } -} \ No newline at end of file +} diff --git a/packages/esbuild-plugin-lit-css/README.md b/packages/esbuild-plugin-lit-css/README.md index cb07d57..f3c2ef2 100644 --- a/packages/esbuild-plugin-lit-css/README.md +++ b/packages/esbuild-plugin-lit-css/README.md @@ -141,3 +141,4 @@ await esbuild.build({ Looking for webpack? [lit-css-loader](../lit-css-loader) Looking for rollup? [rollup-plugin-lit-css](../rollup-plugin-lit-css) +Looking for typescript? [typescript-transform-lit-css](../typescript-transform-lit-css) diff --git a/packages/esbuild-plugin-lit-css/package.json b/packages/esbuild-plugin-lit-css/package.json index 31fbc88..5438a76 100644 --- a/packages/esbuild-plugin-lit-css/package.json +++ b/packages/esbuild-plugin-lit-css/package.json @@ -38,4 +38,4 @@ "esbuild": "^0.16.17 || ^0.17.16 || ^0.18.1 || ^0.19.5", "lit": "^2.7.2 || ^3.0.0" } -} \ No newline at end of file +} diff --git a/packages/esbuild-plugin-minify-html-literals/package.json b/packages/esbuild-plugin-minify-html-literals/package.json index 0b5e459..c3f6b86 100644 --- a/packages/esbuild-plugin-minify-html-literals/package.json +++ b/packages/esbuild-plugin-minify-html-literals/package.json @@ -37,4 +37,4 @@ "peerDependencies": { "esbuild": "^0.16.17 || ^0.17.16 || ^0.18.1 || ^0.19.5" } -} \ No newline at end of file +} diff --git a/packages/lit-css-loader/README.md b/packages/lit-css-loader/README.md index 562cda6..6d13d6f 100644 --- a/packages/lit-css-loader/README.md +++ b/packages/lit-css-loader/README.md @@ -118,3 +118,4 @@ module.exports = { Looking for rollup? [rollup-plugin-lit-css](../rollup-plugin-lit-css) Looking for esbuild? [esbuild-plugin-lit-css](../esbuild-plugin-lit-css) +Looking for typescript? [typescript-transform-lit-css](../typescript-transform-lit-css) diff --git a/packages/rollup-plugin-lit-css/README.md b/packages/rollup-plugin-lit-css/README.md index c247fff..3df5caa 100644 --- a/packages/rollup-plugin-lit-css/README.md +++ b/packages/rollup-plugin-lit-css/README.md @@ -177,3 +177,7 @@ export default { ] } ``` + +Looking for webpack? [lit-css-loader](../lit-css-loader) +Looking for esbuild? [esbuild-plugin-lit-css](../esbuild-plugin-lit-css) +Looking for typescript? [typescript-transform-lit-css](../typescript-transform-lit-css) diff --git a/packages/rollup-plugin-lit-css/package.json b/packages/rollup-plugin-lit-css/package.json index 470857a..cf05c9a 100644 --- a/packages/rollup-plugin-lit-css/package.json +++ b/packages/rollup-plugin-lit-css/package.json @@ -32,6 +32,6 @@ ], "dependencies": { "@pwrs/lit-css": "^2.0.0", - "@rollup/pluginutils": "^5.0.2" + "@rollup/pluginutils": "^5.0.5" } } diff --git a/packages/typescript-transform-lit-css/README.md b/packages/typescript-transform-lit-css/README.md new file mode 100644 index 0000000..6e73785 --- /dev/null +++ b/packages/typescript-transform-lit-css/README.md @@ -0,0 +1,105 @@ +# typescript-transform-lit-css + +TypeScript transformer to import css files as JavaScript tagged-template literal objects. +Use it with [ts-patch](https://npm.im/ts-patch) + +> _The "Lit" stands for "Literal"_ + +You can use it to import CSS for various libraries like `lit-element`, `@microsoft/fast-element`, or others. + +## Do I Need This? + +No. This is an optional package who's sole purpose is to make it easier to write CSS-in-CSS while working on lit-element projects. You can just as easily write your CSS in some '`styles.css.js`' modules a la: + +```js +import { css } from 'lit-element'; +export default css`:host { display: block; }`; +``` + +And this may actually be preferred. + +Hopefully this package will become quickly obsolete when the [CSS Modules Proposal](https://github.com/w3c/webcomponents/issues/759) (or something like it) is accepted and implemented. + +In the mean time, enjoy importing your CSS into your component files. + +## Options + +| Name | Accepts | Default | +| ----------- | ------------------------------------------------------------------ | ------- | +| `uglify` | Boolean, whether to minify css. | `false` | +| `inline` | Boolean, whether to inline css imports into the typescript source. | `false` | +| `specifier` | Package to import `css` from | `lit` | +| `tag` | Name of the template-tag function | `css` | + +## Usage + +```json5 +{ + "compilerOptions": { + "plugins": [ + { + "transform": "typescript-transform-lit-css", + }, + ] + } +} +``` + +Then import your CSS: + +```css +:host { + display: block; +} + +h1 { + color: hotpink; +} +``` + +```ts +import { LitElement, customElement, html } from 'lit-element'; + +import style from './css-in-css.css'; + +@customElement('css-in-css') +class CSSInCSS extends LitElement { + static get styles() { + return [style]; + } + + render() { + return html`

It's Lit!

`; + } +} +``` + +### Usage with FAST + +```json5 +{ + "compilerOptions": { + "plugins": [ + { + "transform": "typescript-transform-lit-css", + "specifier": "@microsoft/fast-element", + }, + ] + } +} +``` + +```ts +import { FASTElement, customElement, html } from '@microsoft/fast-element'; + +import styles from './css-in-css.css'; + +const template = html`

It's Lit!

`; + +@customElement({ name: 'css-in-css', template, styles }) +class CSSinCSS extends FASTElement {} +``` + +Looking for esbuild? [esbuild-plugin-lit-css](../esbuild-plugin-lit-css) +Looking for webpack? [lit-css-loader](../lit-css-loader) +Looking for rollup? [rollup-plugin-lit-css](../rollup-plugin-lit-css) diff --git a/packages/typescript-transform-lit-css/package.json b/packages/typescript-transform-lit-css/package.json new file mode 100644 index 0000000..5780ded --- /dev/null +++ b/packages/typescript-transform-lit-css/package.json @@ -0,0 +1,42 @@ +{ + "name": "typescript-transform-lit-css", + "description": "import CSS files as tagged template literals", + "version": "1.0.0", + "type": "module", + "main": "typescript-transform-lit-css.js", + "types": "typescript-transform-lit-css.d.ts", + "exports": { + "import": "./typescript-transform-lit-css.js", + "require": "./typescript-transform-lit-css.cjs" + }, + "author": "Benny Powers ", + "license": "ISC", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/bennypowers/lit-css.git", + "directory": "packages/typescript-transform-lit-css" + }, + "bugs": { + "url": "https://github.com/bennypowers/lit-css/issues" + }, + "keywords": [ + "typescript", + "transform", + "lit", + "css", + "webcomponents" + ], + "files": [ + "typescript-transform-lit-css.cjs", + "typescript-transform-lit-css.js", + "typescript-transform-lit-css.d.ts" + ], + "dependencies": { + "@pwrs/lit-css": "^2.0.0" + }, + "peerDependencies": { + "typescript": "^5", + "ts-patch": "^3.0", + "lit": "^2.7.2 || ^3.0.0" + } +} diff --git a/packages/typescript-transform-lit-css/typescript-transform-lit-css.ts b/packages/typescript-transform-lit-css/typescript-transform-lit-css.ts new file mode 100644 index 0000000..97f36cc --- /dev/null +++ b/packages/typescript-transform-lit-css/typescript-transform-lit-css.ts @@ -0,0 +1,187 @@ +import type { Options } from '@pwrs/lit-css/lit-css'; +import type { TransformerExtras, PluginConfig } from 'ts-patch'; + +import fs from 'node:fs'; +import { URL, pathToFileURL } from 'node:url'; + +import CleanCSS from 'clean-css'; + +import ts, { ImportDeclaration, SourceFile } from 'typescript'; + +export interface LitCSSOptions extends Pick { + filter: string; + uglify: boolean; + inline: boolean; +} + +const SEEN_SOURCES = new WeakSet(); + +function createLitCssImportStatement( + ctx: ts.CoreTransformationContext, + sourceFile: ts.SourceFile, + specifier: string, + tag: string, +) { + if (SEEN_SOURCES.has(sourceFile)) + return; + + // eslint-disable-next-line easy-loops/easy-loops + for (const statement of sourceFile.statements) { + if ( + ts.isImportDeclaration(statement) && + statement.moduleSpecifier.getText() === specifier) { + // eslint-disable-next-line easy-loops/easy-loops + for (const binding of statement.importClause?.namedBindings?.getChildren() ?? []) { + if (binding.getText() === tag) { + SEEN_SOURCES.add(sourceFile); + return; + } + } + } + } + + SEEN_SOURCES.add(sourceFile); + + return ctx.factory.createImportDeclaration( + undefined, + ctx.factory.createImportClause( + false, + undefined, + ctx.factory.createNamedImports([ + ctx.factory.createImportSpecifier( + false, + undefined, + ctx.factory.createIdentifier('css') + ), + ]), + ), + ctx.factory.createStringLiteral(specifier), + ); +} + +function createLitCssTaggedTemplateLiteral( + ctx: ts.CoreTransformationContext, + stylesheet: string, + name: string, + tag: string, +) { + return ctx.factory.createVariableStatement( + undefined, + ctx.factory.createVariableDeclarationList([ + ctx.factory.createVariableDeclaration( + name ?? 'style', + undefined, + undefined, + ctx.factory.createTaggedTemplateExpression( + ctx.factory.createIdentifier(tag), + undefined, + ctx.factory.createNoSubstitutionTemplateLiteral(stylesheet), + ) + ), + ], ts.NodeFlags.Const) + ); +} + +/** + * @param {string} stylesheet + * @param {string} filePath + */ +function minifyCss(stylesheet: string, filePath: string) { + try { + const clean = new CleanCSS({ returnPromise: false }); + const { styles } = clean.minify(stylesheet); + return styles; + } catch (e) { + // eslint-disable-next-line no-console + console.log('Could not minify ', filePath); + // eslint-disable-next-line no-console + console.error(e); + return stylesheet; + } +} + +/** + * Replace .css import specifiers with .css.js import specifiers + */ +export default function( + program: ts.Program, + pluginConfig: PluginConfig & LitCSSOptions, + extras: TransformerExtras, +) { + const tagPkgSpecifier = pluginConfig.specifier ?? 'lit'; + const tag = pluginConfig.tag ?? 'css'; + return (ctx: ts.TransformationContext) => { + function visitor(node: ts.Node) { + if (ts.isImportDeclaration(node) && !node.importClause?.isTypeOnly) { + const importedStyleSheetSpecifier = + node.moduleSpecifier.getText().replace(/^'(.*)'$/, '$1'); + if (importedStyleSheetSpecifier.endsWith('.css')) { + if (pluginConfig.inline) { + const { fileName } = node.getSourceFile(); + const dir = pathToFileURL(fileName); + const url = new URL(importedStyleSheetSpecifier, dir); + const content = fs.readFileSync(url, 'utf-8'); + const stylesheet = pluginConfig.uglify ? minifyCss(content, url.pathname) : content; + return [ + createLitCssImportStatement( + ctx, + node.getSourceFile(), + tagPkgSpecifier, + tag, + ), + createLitCssTaggedTemplateLiteral( + ctx, + stylesheet, + node.importClause?.name?.getText(), + tag, + ), + ]; + } else { + return ctx.factory.createImportDeclaration( + node.modifiers, + node.importClause, + ctx.factory.createStringLiteral(`${importedStyleSheetSpecifier}.js`) + ); + } + } + } + return ts.visitEachChild(node, visitor, ctx); + } + + return (sourceFile: SourceFile) => { + const children = sourceFile.getChildren(); + + const decl = (children.find(x => + !ts.isTypeOnlyImportOrExportDeclaration(x) && + !ts.isNamespaceImport(x) && + ts.isImportDeclaration(x) && + x.moduleSpecifier.getText() === tagPkgSpecifier && + x.importClause?.namedBindings + )) as ImportDeclaration; + + const litImportBindings = decl?.importClause?.namedBindings; + + const hasStyleImports = children.find(x => + ts.isImportDeclaration(x) && x.moduleSpecifier.getText().endsWith('.css')); + + if (hasStyleImports) { + if (litImportBindings && + ts.isNamedImports(litImportBindings) && + !litImportBindings.elements?.some(x => x.getText() === tag)) { + ctx.factory.updateNamedImports( + litImportBindings, + [ + ...litImportBindings.elements, + ctx.factory.createImportSpecifier( + false, + undefined, + ctx.factory.createIdentifier(tag), + ), + ] + ); + } + } + return ts.visitEachChild(sourceFile, visitor, ctx); + }; + }; +} diff --git a/packages/web-dev-server-plugin-lit-css/package.json b/packages/web-dev-server-plugin-lit-css/package.json index 35b25c8..4440c8e 100644 --- a/packages/web-dev-server-plugin-lit-css/package.json +++ b/packages/web-dev-server-plugin-lit-css/package.json @@ -32,6 +32,6 @@ ], "dependencies": { "@pwrs/lit-css": "^2.0.0", - "@rollup/pluginutils": "^5.0.2" + "@rollup/pluginutils": "^5.0.5" } }