From 0ef92e2ce57b4c2a927e982cf3f0603d75dc87c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 30 Jun 2023 09:53:03 +0200 Subject: [PATCH] Bump core frontend to a09d712 nad simplify build scripts (#671) --- homeassistant-frontend | 2 +- package.json | 20 ++-- script/gulp/app.js | 4 +- script/gulp/bundle.cjs | 88 +------------- script/gulp/entry-html.js | 5 +- script/gulp/gather-static.js | 4 + script/gulp/gen-icons-json.js | 19 ---- script/gulp/locale-data.js | 60 ---------- script/gulp/webpack.cjs | 174 +++++----------------------- yarn.lock | 208 +++++++++++++++------------------- 10 files changed, 142 insertions(+), 442 deletions(-) delete mode 100644 script/gulp/gen-icons-json.js delete mode 100644 script/gulp/locale-data.js diff --git a/homeassistant-frontend b/homeassistant-frontend index bf18deb8..a09d7129 160000 --- a/homeassistant-frontend +++ b/homeassistant-frontend @@ -1 +1 @@ -Subproject commit bf18deb83cde79ad84e281ee236af785dc156518 +Subproject commit a09d71291b957a1a658e76693f0682c3cd83c24a diff --git a/package.json b/package.json index df3bb2ff..ccff77d9 100644 --- a/package.json +++ b/package.json @@ -47,8 +47,8 @@ "@types/sortablejs": "1.15.1", "@types/tar": "6.1.5", "@types/webspeechapi": "0.0.29", - "@typescript-eslint/eslint-plugin": "5.59.11", - "@typescript-eslint/parser": "5.59.11", + "@typescript-eslint/eslint-plugin": "5.60.0", + "@typescript-eslint/parser": "5.60.0", "@web/dev-server": "0.1.38", "@web/dev-server-rollup": "0.4.1", "babel-loader": "9.1.2", @@ -69,7 +69,7 @@ "esprima": "4.0.1", "fancy-log": "2.0.0", "fs-extra": "11.1.1", - "glob": "10.2.7", + "glob": "10.3.0", "gulp": "4.0.2", "gulp-flatmap": "1.0.2", "gulp-json-transform": "0.4.8", @@ -96,7 +96,7 @@ "rollup-plugin-terser": "7.0.2", "rollup-plugin-visualizer": "5.9.2", "serve-handler": "6.1.5", - "sinon": "15.1.2", + "sinon": "15.2.0", "source-map-url": "0.4.1", "systemjs": "6.14.1", "tar": "6.1.15", @@ -105,7 +105,7 @@ "typescript": "5.1.3", "vinyl-buffer": "1.0.1", "vinyl-source-stream": "2.0.0", - "webpack": "5.87.0", + "webpack": "5.88.0", "webpack-cli": "5.1.4", "webpack-dev-server": "4.15.1", "webpack-manifest-plugin": "5.0.0", @@ -115,13 +115,13 @@ "dependencies": { "@babel/runtime": "7.22.5", "@braintree/sanitize-url": "6.0.2", - "@codemirror/autocomplete": "6.8.0", + "@codemirror/autocomplete": "6.8.1", "@codemirror/commands": "6.2.4", "@codemirror/language": "6.8.0", "@codemirror/legacy-modes": "6.3.2", "@codemirror/search": "6.5.0", "@codemirror/state": "6.2.1", - "@codemirror/view": "6.13.2", + "@codemirror/view": "6.14.0", "@egjs/hammerjs": "2.0.17", "@formatjs/intl-datetimeformat": "6.10.0", "@formatjs/intl-displaynames": "6.5.0", @@ -140,7 +140,7 @@ "@lit-labs/context": "0.3.3", "@lit-labs/motion": "1.0.3", "@lit-labs/virtualizer": "2.0.3", - "@lrnwebcomponents/simple-tooltip": "7.0.2", + "@lrnwebcomponents/simple-tooltip": "7.0.5", "@material/chips": "=14.0.0-canary.53b3cad2f.0", "@material/data-table": "=14.0.0-canary.53b3cad2f.0", "@material/mwc-button": "0.27.0", @@ -166,7 +166,7 @@ "@material/mwc-top-app-bar": "0.27.0", "@material/mwc-top-app-bar-fixed": "0.27.0", "@material/top-app-bar": "=14.0.0-canary.53b3cad2f.0", - "@material/web": "=1.0.0-pre.10", + "@material/web": "=1.0.0-pre.11", "@mdi/js": "7.2.96", "@mdi/svg": "7.2.96", "@polymer/app-layout": "3.1.0", @@ -201,7 +201,7 @@ "fuse.js": "6.6.2", "google-timezones-json": "1.1.0", "hls.js": "1.4.6", - "home-assistant-js-websocket": "8.0.1", + "home-assistant-js-websocket": "8.1.0", "idb-keyval": "6.2.1", "intl-messageformat": "10.5.0", "js-yaml": "4.1.0", diff --git a/script/gulp/app.js b/script/gulp/app.js index 102f2dbf..7a374f21 100644 --- a/script/gulp/app.js +++ b/script/gulp/app.js @@ -4,8 +4,8 @@ import "./clean.js"; import "../../homeassistant-frontend/build-scripts/gulp/compress.js"; import "./entry-html.js"; import "./gather-static.js"; -import "./gen-icons-json.js"; -import "./locale-data.js"; +import "../../homeassistant-frontend/build-scripts/gulp/gen-icons-json.js"; +import "../../homeassistant-frontend/build-scripts/gulp/locale-data.js"; import "./paths.cjs"; import "./webpack.cjs"; diff --git a/script/gulp/bundle.cjs b/script/gulp/bundle.cjs index b69af634..32042c91 100644 --- a/script/gulp/bundle.cjs +++ b/script/gulp/bundle.cjs @@ -1,90 +1,6 @@ const path = require("path"); const paths = require("./paths.cjs"); -const haBundle = require("../../homeassistant-frontend/build-scripts/bundle.cjs"); - -module.exports.ignorePackages = ({ latestBuild }) => haBundle.ignorePackages({ latestBuild }); -module.exports.htmlMinifierOptions = haBundle.htmlMinifierOptions; -module.exports.terserOptions = ({ latestBuild, isTestBuild }) => - haBundle.terserOptions({ latestBuild, isTestBuild }); - -// Files from NPM packages that we should replace with empty file -module.exports.emptyPackages = ({ latestBuild }) => - [ - // Contains all color definitions for all material color sets. - // We don't use it - require.resolve("@polymer/paper-styles/color.js"), - require.resolve("@polymer/paper-styles/default-theme.js"), - // Loads stuff from a CDN - require.resolve("@polymer/font-roboto/roboto.js"), - require.resolve("@vaadin/vaadin-material-styles/typography.js"), - require.resolve("@vaadin/vaadin-material-styles/font-icons.js"), - // Compatibility not needed for latest builds - latestBuild && - // wrapped in require.resolve so it blows up if file no longer exists - require.resolve( - path.resolve(paths.home_assistant_frontend_root, "src/resources/compatibility.ts") - ), - // This polyfill is loaded in workers to support ES5, filter it out. - latestBuild && require.resolve("proxy-polyfill/src/index.js"), - // Icons in supervisor conflict with icons in HA so we don't load. - require.resolve(path.resolve(paths.home_assistant_frontend_root, "src/components/ha-icon.ts")), - require.resolve( - path.resolve(paths.home_assistant_frontend_root, "src/components/ha-icon-picker.ts") - ), - ].filter(Boolean); - -module.exports.definedVars = ({ isProdBuild, latestBuild }) => ({ - ...haBundle.definedVars({ isProdBuild, latestBuild }), - // While this is not the supervisor, it functions in the same maner and we use this to signal components to behave differently. - __SUPERVISOR__: true, - __STATIC_PATH__: `"${paths.app_publicPath}/static/"`, -}); - -module.exports.babelOptions = ({ latestBuild, isProdBuild, isTestBuild }) => ({ - ...haBundle.babelOptions({ latestBuild, isProdBuild, isTestBuild }), - plugins: [ - [ - path.resolve( - paths.home_assistant_frontend_root, - "build-scripts/babel-plugins/inline-constants-plugin.cjs" - ), - { - modules: ["@mdi/js"], - ignoreModuleNotFound: true, - }, - ], - // Minify template literals for production - isProdBuild && [ - "template-html-minifier", - { - modules: { - lit: [ - "html", - { name: "svg", encapsulation: "svg" }, - { name: "css", encapsulation: "style" }, - ], - "@polymer/polymer/lib/utils/html-tag": ["html"], - }, - strictCSS: true, - htmlMinifier: module.exports.htmlMinifierOptions, - failOnError: true, // we can turn this off in case of false positives - }, - ], - // Import helpers and regenerator from runtime package - [ - "@babel/plugin-transform-runtime", - { - version: require(path.resolve(paths.root_dir, "package.json")).dependencies[ - "@babel/runtime" - ], - }, - ], - // Support some proposals still in TC39 process - ["@babel/plugin-proposal-decorators", { decoratorsBeforeExport: true }], - ].filter(Boolean), -}); - const nameSuffix = (latestBuild) => (latestBuild ? "-latest" : "-es5"); const outputPath = (outputRoot, latestBuild) => @@ -106,6 +22,10 @@ module.exports.config = { latestBuild, isStatsBuild, isTestBuild, + defineOverlay: { + __SUPERVISOR__: true, + __STATIC_PATH__: `"${paths.app_publicPath}/static/"`, + }, }; }, }; diff --git a/script/gulp/entry-html.js b/script/gulp/entry-html.js index f3460ffa..3ec57b5b 100644 --- a/script/gulp/entry-html.js +++ b/script/gulp/entry-html.js @@ -5,7 +5,10 @@ import gulp from "gulp"; import { minify } from "html-minifier-terser"; import template from "lodash.template"; import path from "path"; -import { htmlMinifierOptions, terserOptions } from "./bundle.cjs"; +import { + htmlMinifierOptions, + terserOptions, +} from "../../homeassistant-frontend/build-scripts/bundle.cjs"; import env from "./env.cjs"; import paths from "./paths.cjs"; diff --git a/script/gulp/gather-static.js b/script/gulp/gather-static.js index 1811a72e..9a33d9f9 100644 --- a/script/gulp/gather-static.js +++ b/script/gulp/gather-static.js @@ -3,6 +3,8 @@ import gulp from "gulp"; import path from "path"; import paths from "./paths.cjs"; +const haBuildPath = (...parts) => + path.resolve(paths.home_assistant_frontend_root, "build", ...parts); const npmPath = (...parts) => path.resolve(paths.root_dir, "node_modules", ...parts); const rootPath = (...parts) => path.resolve(paths.root_dir, ...parts); const buildPath = (...parts) => path.resolve(paths.root_dir, "build", ...parts); @@ -28,6 +30,8 @@ function copyFonts(staticDir) { gulp.task("copy-static-app", async () => { const staticDir = paths.app_output_static; fs.copySync(rootPath("public"), paths.app_output_root); + fs.copySync(rootPath("public"), paths.app_output_root); + fs.copySync(buildPath("mdi"), haBuildPath("mdi")); copyFonts(staticDir); copyLocaleData(staticDir); diff --git a/script/gulp/gen-icons-json.js b/script/gulp/gen-icons-json.js deleted file mode 100644 index f2451a40..00000000 --- a/script/gulp/gen-icons-json.js +++ /dev/null @@ -1,19 +0,0 @@ -import fs from "fs"; -import gulp from "gulp"; -import path from "path"; -import paths from "./paths.cjs"; - -gulp.task("gen-dummy-icons-json", (done) => { - for (const output of [ - path.resolve(paths.build_dir, "mdi"), - path.resolve(paths.home_assistant_frontend_root, "build/mdi"), - ]) { - if (!fs.existsSync(output)) { - fs.mkdirSync(output, { recursive: true }); - } - - fs.writeFileSync(path.resolve(output, "iconList.json"), "[]"); - } - - done(); -}); diff --git a/script/gulp/locale-data.js b/script/gulp/locale-data.js deleted file mode 100644 index 77475ba8..00000000 --- a/script/gulp/locale-data.js +++ /dev/null @@ -1,60 +0,0 @@ -import { deleteSync } from "del"; -import fs from "fs"; -import gulp from "gulp"; -import path from "path"; -import paths from "./paths.cjs"; - -const outDir = "build/locale-data"; - -gulp.task("clean-locale-data", async () => deleteSync([outDir])); - -gulp.task("ensure-locale-data-build-dir", async () => { - fs.mkdirSync(outDir, { recursive: true }); -}); - -const modules = { - "intl-relativetimeformat": "RelativeTimeFormat", - "intl-datetimeformat": "DateTimeFormat", - "intl-numberformat": "NumberFormat", - "intl-displaynames": "DisplayNames", - "intl-listformat": "ListFormat", -}; - -gulp.task("create-locale-data", (done) => { - const translationMeta = JSON.parse( - fs.readFileSync(path.join(paths.translations_src, "translationMetadata.json")) - ); - Object.entries(modules).forEach(([module, className]) => { - Object.keys(translationMeta).forEach((lang) => { - try { - const localeData = fs - .readFileSync( - path.resolve(paths.root_dir, `node_modules/@formatjs/${module}/locale-data/${lang}.js`), - "utf-8" - ) - .replace( - new RegExp( - `\\/\\*\\s*@generated\\s*\\*\\/\\s*\\/\\/\\s*prettier-ignore\\s*if\\s*\\(Intl\\.${className}\\s*&&\\s*typeof\\s*Intl\\.${className}\\.__addLocaleData\\s*===\\s*'function'\\)\\s*{\\s*Intl\\.${className}\\.__addLocaleData\\(`, - "im" - ), - "" - ) - .replace(/\)\s*}/im, ""); - // make sure we have valid JSON - JSON.parse(localeData); - fs.mkdirSync(path.join(outDir, module), { recursive: true }); - fs.writeFileSync(path.join(outDir, `${module}/${lang}.json`), localeData); - } catch (e) { - if (e.code !== "ENOENT") { - throw e; - } - } - }); - done(); - }); -}); - -gulp.task( - "build-locale-data", - gulp.series("clean-locale-data", "ensure-locale-data-build-dir", "create-locale-data") -); diff --git a/script/gulp/webpack.cjs b/script/gulp/webpack.cjs index 499f6f7e..93ea0ebe 100644 --- a/script/gulp/webpack.cjs +++ b/script/gulp/webpack.cjs @@ -1,29 +1,14 @@ +const haWebpack = require("../../homeassistant-frontend/build-scripts/webpack.cjs"); +const haPaths = require("../../homeassistant-frontend/build-scripts/paths.cjs"); const webpack = require("webpack"); const path = require("path"); -const TerserPlugin = require("terser-webpack-plugin"); -const { WebpackManifestPlugin } = require("webpack-manifest-plugin"); const log = require("fancy-log"); -const WebpackBar = require("webpackbar"); const paths = require("./paths.cjs"); const bundle = require("./bundle.cjs"); const fs = require("fs-extra"); const gulp = require("gulp"); const env = require("./env.cjs"); -class LogStartCompilePlugin { - ignoredFirst = false; - - apply(compiler) { - compiler.hooks.beforeCompile.tap("LogStartCompilePlugin", () => { - if (!this.ignoredFirst) { - this.ignoredFirst = true; - return; - } - log("Changes detected. Starting compilation"); - }); - } -} - const createWebpackConfig = ({ name, entry, @@ -39,136 +24,25 @@ const createWebpackConfig = ({ if (!dontHash) { dontHash = new Set(); } - const ignorePackages = bundle.ignorePackages({ latestBuild }); - return { + haPaths.polymer_dir = paths.home_assistant_frontend_root; + const haWebpackContents = haWebpack.createWebpackConfig({ name, - mode: isProdBuild ? "production" : "development", - target: `browserslist:${latestBuild ? "modern" : "legacy"}`, - // For tests/CI, source maps are skipped to gain build speed - // For production, generate source maps for accurate stack traces without source code - // For development, generate "cheap" versions that can map to original line numbers - devtool: isTestBuild - ? false - : isProdBuild - ? "nosources-source-map" - : "eval-cheap-module-source-map", entry, - node: false, - module: { - rules: [ - { - test: /\.m?js$|\.ts$/, - use: { - loader: "babel-loader", - options: { - ...bundle.babelOptions({ latestBuild, isProdBuild, isTestBuild }), - cacheDirectory: !isProdBuild, - cacheCompression: false, - }, - }, - resolve: { - fullySpecified: false, - }, - }, - { - test: /\.css$/, - type: "asset/source", - }, - ], - }, - optimization: { - minimizer: [ - new TerserPlugin({ - parallel: true, - extractComments: true, - terserOptions: bundle.terserOptions({ latestBuild, isTestBuild }), - }), - ], - moduleIds: isProdBuild && !isStatsBuild ? "deterministic" : "named", - chunkIds: isProdBuild && !isStatsBuild ? "deterministic" : "named", - splitChunks: { - // Disable splitting for web workers with ESM output - // Imports of external chunks are broken - chunks: latestBuild - ? (chunk) => !chunk.canBeInitial() && !/^.+-worker$/.test(chunk.name) - : undefined, - }, - }, - plugins: [ - !isStatsBuild && new WebpackBar({ fancy: !isProdBuild }), - new WebpackManifestPlugin({ - // Only include the JS of entrypoints - filter: (file) => file.isInitial && !file.name.endsWith(".map"), - }), - new webpack.DefinePlugin(bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })), - new webpack.IgnorePlugin({ - checkResource(resource, context) { - // Only use ignore to intercept imports that we don't control - // inside node_module dependencies. - if ( - !context.includes("/node_modules/") || - // calling define.amd will call require("!!webpack amd options") - resource.startsWith("!!webpack") || - // loaded by webpack dev server but doesn't exist. - resource === "webpack/hot" - ) { - return false; - } - let fullPath; - try { - fullPath = resource.startsWith(".") - ? path.resolve(context, resource) - : require.resolve(resource); - } catch (err) { - console.error("Error in Home Assistant ignore plugin", resource, context); - throw err; - } - - return ignorePackages.some((toIgnorePath) => fullPath.startsWith(toIgnorePath)); - }, - }), - new webpack.NormalModuleReplacementPlugin( - new RegExp(bundle.emptyPackages({ latestBuild }).join("|")), - path.resolve(paths.home_assistant_frontend_root, "src/util/empty.js") - ), - !isProdBuild && new LogStartCompilePlugin(), - ].filter(Boolean), - resolve: { - extensions: [".ts", ".js", ".json"], - alias: { - "lit/decorators$": "lit/decorators.js", - "lit/directive$": "lit/directive.js", - "lit/directives/until$": "lit/directives/until.js", - "lit/directives/class-map$": "lit/directives/class-map.js", - "lit/directives/style-map$": "lit/directives/style-map.js", - "lit/directives/if-defined$": "lit/directives/if-defined.js", - "lit/directives/guard$": "lit/directives/guard.js", - "lit/directives/cache$": "lit/directives/cache.js", - "lit/directives/repeat$": "lit/directives/repeat.js", - "lit/polyfill-support$": "lit/polyfill-support.js", - "@lit-labs/virtualizer/layouts/grid": "@lit-labs/virtualizer/layouts/grid.js", - "@lit-labs/virtualizer/polyfills/resize-observer-polyfill/ResizeObserver": - "@lit-labs/virtualizer/polyfills/resize-observer-polyfill/ResizeObserver.js", - }, - }, + outputPath, + publicPath, + defineOverlay, + isProdBuild, + latestBuild, + isStatsBuild, + isTestBuild, + isHassioBuild: true, + dontHash, + }); + haPaths.polymer_dir = paths.root_dir; + return { + ...haWebpackContents, output: { - module: latestBuild, - filename: ({ chunk }) => - !isProdBuild || isStatsBuild || dontHash.has(chunk.name) - ? "[name].js" - : "[name]-[contenthash].js", - chunkFilename: isProdBuild && !isStatsBuild ? "[id]-[contenthash].js" : "[name].js", - assetModuleFilename: isProdBuild && !isStatsBuild ? "[id]-[contenthash][ext]" : "[id][ext]", - hashFunction: "xxhash64", - hashDigest: "base64url", - hashDigestLength: 11, // full length of 64 bit base64url - path: outputPath, - publicPath, - // To silence warning in worker plugin - globalObject: "self", - // Since production source maps don't include sources, we need to point to them elsewhere - // For dependencies, just provide the path (no source in browser) - // Otherwise, point to the raw code on GitHub for browser to load + ...haWebpackContents.output, devtoolModuleFilenameTemplate: !isTestBuild && isProdBuild ? (info) => { @@ -188,14 +62,18 @@ const createWebpackConfig = ({ } : undefined, }, - experiments: { - outputModule: true, - }, }; }; const createHacsConfig = ({ isProdBuild, latestBuild, isStatsBuild, isTestBuild }) => - createWebpackConfig(bundle.config.hacs({ isProdBuild, latestBuild, isStatsBuild, isTestBuild })); + createWebpackConfig( + bundle.config.hacs({ + isProdBuild, + latestBuild, + isStatsBuild, + isTestBuild, + }) + ); const bothBuilds = (createConfigFunc, params) => [ createConfigFunc({ ...params, latestBuild: true }), diff --git a/yarn.lock b/yarn.lock index 045b0f4f..b5cce761 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1450,9 +1450,9 @@ __metadata: languageName: node linkType: hard -"@codemirror/autocomplete@npm:6.8.0": - version: 6.8.0 - resolution: "@codemirror/autocomplete@npm:6.8.0" +"@codemirror/autocomplete@npm:6.8.1": + version: 6.8.1 + resolution: "@codemirror/autocomplete@npm:6.8.1" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 @@ -1463,7 +1463,7 @@ __metadata: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: b251a21065a954be7a4a9cf6fd1dce6027bd79ac7006728c0fde364b50c75ee4079bd53acf9890fdfdca78453c863f0c010010c26010cd9acdede3480273ad23 + checksum: 8599cd91defa3fea5276a7f9aff43ced323d9c4401dfb867e43608ba72ded48cb458256c5c784949a6332c0c20ba2fedac16a5708335cd809d269e4ea5076957 languageName: node linkType: hard @@ -1520,18 +1520,7 @@ __metadata: languageName: node linkType: hard -"@codemirror/view@npm:6.13.2": - version: 6.13.2 - resolution: "@codemirror/view@npm:6.13.2" - dependencies: - "@codemirror/state": ^6.1.4 - style-mod: ^4.0.0 - w3c-keyname: ^2.2.4 - checksum: db0d638fbbe2f9a832674f06512ca55cdb7576a265c01ab8a7b6715d2a50ddf53200f597637b146adebe1df51255fe5bd2d2c74cf1fa539b0434764c0550d3a5 - languageName: node - linkType: hard - -"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0": +"@codemirror/view@npm:6.14.0, @codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.6.0": version: 6.14.0 resolution: "@codemirror/view@npm:6.14.0" dependencies: @@ -2118,12 +2107,12 @@ __metadata: languageName: node linkType: hard -"@lrnwebcomponents/simple-tooltip@npm:7.0.2": - version: 7.0.2 - resolution: "@lrnwebcomponents/simple-tooltip@npm:7.0.2" +"@lrnwebcomponents/simple-tooltip@npm:7.0.5": + version: 7.0.5 + resolution: "@lrnwebcomponents/simple-tooltip@npm:7.0.5" dependencies: - lit: ^2.7.4 - checksum: 2f8642c7b503e6093d01b5fcadea461de062c9380df6454f04a08e5b8f4ef36e0cbd52a9f0842238554f6881802895fb442f21c0a4b6345bebd99b43f18a366c + lit: ^2.7.5 + checksum: 57a50ed30be103f8fbe37fbef33bb4071f8c2bbecba6964643404532883f3479fe034ee64b1d71d11d7ea60ee63e39bb5ef5f53dc0b9c88d6ec525627135602b languageName: node linkType: hard @@ -3152,14 +3141,14 @@ __metadata: languageName: node linkType: hard -"@material/web@npm:=1.0.0-pre.10": - version: 1.0.0-pre.10 - resolution: "@material/web@npm:1.0.0-pre.10" +"@material/web@npm:=1.0.0-pre.11": + version: 1.0.0-pre.11 + resolution: "@material/web@npm:1.0.0-pre.11" dependencies: lit: ^2.7.4 safevalues: ^0.4.3 tslib: ^2.4.0 - checksum: 977ef988279c96b93f7e20761595b71cd8a07cb0b59969e374fcc003293e9353b948cc9f0dbf43b407e49ab4b11fdc566d3daa693d5a26482e48e0351be20ecb + checksum: 6c08d5d1b159472032d8a274eb29c22229dbcd29a80c478bbf680906903a9542dab9916d547e40c3b607a0ecfe51484bc8681b8c2f1fcd521b2b20fe23d84a66 languageName: node linkType: hard @@ -4047,7 +4036,7 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^10.0.2, @sinonjs/fake-timers@npm:^10.1.0": +"@sinonjs/fake-timers@npm:^10.0.2, @sinonjs/fake-timers@npm:^10.3.0": version: 10.3.0 resolution: "@sinonjs/fake-timers@npm:10.3.0" dependencies: @@ -4682,14 +4671,14 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/eslint-plugin@npm:5.59.11" +"@typescript-eslint/eslint-plugin@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.60.0" dependencies: "@eslint-community/regexpp": ^4.4.0 - "@typescript-eslint/scope-manager": 5.59.11 - "@typescript-eslint/type-utils": 5.59.11 - "@typescript-eslint/utils": 5.59.11 + "@typescript-eslint/scope-manager": 5.60.0 + "@typescript-eslint/type-utils": 5.60.0 + "@typescript-eslint/utils": 5.60.0 debug: ^4.3.4 grapheme-splitter: ^1.0.4 ignore: ^5.2.0 @@ -4702,43 +4691,43 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ff03eaa65a9fa4415cc1a14c2d4382289b9483f11dd3e0746233c2148d941cdbef421c1693304502f42307c72e049d4c3f3b58d30ce5d2ae452f31906e394e62 + checksum: 61dd70a1ea9787e69d0d4cd14f6a4c94ba786b535a3f519ade7926d965ee1d4f8fefa8bf0224ee57c5c6517eec3674c0fd06f9226536aa428c2bdddeed1e70f4 languageName: node linkType: hard -"@typescript-eslint/parser@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/parser@npm:5.59.11" +"@typescript-eslint/parser@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/parser@npm:5.60.0" dependencies: - "@typescript-eslint/scope-manager": 5.59.11 - "@typescript-eslint/types": 5.59.11 - "@typescript-eslint/typescript-estree": 5.59.11 + "@typescript-eslint/scope-manager": 5.60.0 + "@typescript-eslint/types": 5.60.0 + "@typescript-eslint/typescript-estree": 5.60.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 75eb6e60577690e3c9dd66fde83c9b4e9e5fd818fe9673e532052d5ba8fa21a5f7a69aad19be99e6ef5825e9f52036262b25e918e51f96e1dc26e862448d2d3a + checksum: 94e7931a5b356b16638b281b8e1d661f8b1660f0c75a323537f68b311dae91b7a575a0a019d4ea05a79cc5d42b5cb41cc367205691cdfd292ef96a3b66b1e58b languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/scope-manager@npm:5.59.11" +"@typescript-eslint/scope-manager@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/scope-manager@npm:5.60.0" dependencies: - "@typescript-eslint/types": 5.59.11 - "@typescript-eslint/visitor-keys": 5.59.11 - checksum: f5c4e6d26da0a983b8f0c016f3ae63b3462442fe9c04d7510ca397461e13f6c48332b09b584258a7f336399fa7cd866f3ab55eaad89c5096a411c0d05d296475 + "@typescript-eslint/types": 5.60.0 + "@typescript-eslint/visitor-keys": 5.60.0 + checksum: b21ee1ef57be948a806aa31fd65a9186766b3e1a727030dc47025edcadc54bd1aa6133a439acd5f44a93e2b983dd55bc5571bb01cb834461dab733682d66256a languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/type-utils@npm:5.59.11" +"@typescript-eslint/type-utils@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/type-utils@npm:5.60.0" dependencies: - "@typescript-eslint/typescript-estree": 5.59.11 - "@typescript-eslint/utils": 5.59.11 + "@typescript-eslint/typescript-estree": 5.60.0 + "@typescript-eslint/utils": 5.60.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -4746,23 +4735,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 3570ba21af35e7e0a916b606c1af311c00d20fe354a5837e0e937191b5e99ceb0076a5ba2924eaa028d4614e03981b20cfdd83a2be780c39e02be3b3bd365b63 + checksum: b90ce97592f2db899d88d7a325fec4d2ea11a7b8b4306787310890c27fb51862a6c003675252e9dc465908f791ad5320ea7307260ecd10e89ca1d209fbf8616d languageName: node linkType: hard -"@typescript-eslint/types@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/types@npm:5.59.11" - checksum: 4bb667571a7254f8c2b0dc3e37100e7290f9be14978722cc31c7204dfababd8a346bed4125e70dcafd15d07be386fb55bb9738bd86662ac10b98a6c964716396 +"@typescript-eslint/types@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/types@npm:5.60.0" + checksum: 48f29e5c084c5663cfed1a6c4458799a6690a213e7861a24501f9b96698ae59e89a1df1c77e481777e4da78f1b0a5573a549f7b8880e3f4071a7a8b686254db8 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/typescript-estree@npm:5.59.11" +"@typescript-eslint/typescript-estree@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.60.0" dependencies: - "@typescript-eslint/types": 5.59.11 - "@typescript-eslint/visitor-keys": 5.59.11 + "@typescript-eslint/types": 5.60.0 + "@typescript-eslint/visitor-keys": 5.60.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -4771,35 +4760,35 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 516a828884e6939000aac17a27208088055670b0fd9bd22d137a7b2d359a8db9ce9cd09eedffed6f498f968be90ce3c2695a91d46abbd4049f87fd3b7bb986b5 + checksum: 0f4f342730ead42ba60b5fca4bf1950abebd83030010c38b5df98ff9fd95d0ce1cfc3974a44c90c65f381f4f172adcf1a540e018d7968cc845d937bf6c734dae languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/utils@npm:5.59.11" +"@typescript-eslint/utils@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/utils@npm:5.60.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.59.11 - "@typescript-eslint/types": 5.59.11 - "@typescript-eslint/typescript-estree": 5.59.11 + "@typescript-eslint/scope-manager": 5.60.0 + "@typescript-eslint/types": 5.60.0 + "@typescript-eslint/typescript-estree": 5.60.0 eslint-scope: ^5.1.1 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: a61f3e761dbdc5d0bdb6c78bca7b2e628f7a1920192286d002219cc3acb516757613c2ec2a4adc416858ba1751ecbe2784457d6ebcec6bbb109cfc2ca210572b + checksum: cbe56567f0b53e24ad7ef7d2fb4cdc8596e2559c21ee639aa0560879b6216208550e51e9d8ae4b388ff21286809c6dc985cec66738294871051396a8ae5bccbc languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.59.11": - version: 5.59.11 - resolution: "@typescript-eslint/visitor-keys@npm:5.59.11" +"@typescript-eslint/visitor-keys@npm:5.60.0": + version: 5.60.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.60.0" dependencies: - "@typescript-eslint/types": 5.59.11 + "@typescript-eslint/types": 5.60.0 eslint-visitor-keys: ^3.3.0 - checksum: 4894ec4b2b8da773b1f44398c836fcacb7f5a0c81f9404ecd193920e88d618091a7328659e0aa24697edda10479534db30bec7c8b0ba9fa0fce43f78222d5619 + checksum: d39b2485d030f9755820d0f6f3748a8ec44e1ca23cb36ddcba67a9eb1f258c8ec83c61fc015c50e8f4a00d05df62d719dbda445625e3e71a64a659f1d248157e languageName: node linkType: hard @@ -9167,9 +9156,9 @@ __metadata: languageName: node linkType: hard -"glob@npm:10.2.7": - version: 10.2.7 - resolution: "glob@npm:10.2.7" +"glob@npm:10.3.0, glob@npm:^10.2.2": + version: 10.3.0 + resolution: "glob@npm:10.3.0" dependencies: foreground-child: ^3.1.0 jackspeak: ^2.0.3 @@ -9178,7 +9167,7 @@ __metadata: path-scurry: ^1.7.0 bin: glob: dist/cjs/src/bin.js - checksum: 555205a74607d6f8d9874ba888924b305b5ea1abfaa2e9ccb11ac713d040aac7edbf7d8702a2f4a1cd81b2d7666412170ce7ef061d33cddde189dae8c1a1a054 + checksum: 6fa4ac0a86ffec1c5715a2e6fbdd63e1e7f1c2c8f5db08cc3256cdfcb81093678e7c80a3d100b502a1b9d141369ecf87bc24fe2bcb72acec7b14626d358a4eb0 languageName: node linkType: hard @@ -9196,21 +9185,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2": - version: 10.3.0 - resolution: "glob@npm:10.3.0" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.0.3 - minimatch: ^9.0.1 - minipass: ^5.0.0 || ^6.0.2 - path-scurry: ^1.7.0 - bin: - glob: dist/cjs/src/bin.js - checksum: 6fa4ac0a86ffec1c5715a2e6fbdd63e1e7f1c2c8f5db08cc3256cdfcb81093678e7c80a3d100b502a1b9d141369ecf87bc24fe2bcb72acec7b14626d358a4eb0 - languageName: node - linkType: hard - "glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -9491,13 +9465,13 @@ __metadata: "@babel/preset-typescript": 7.22.5 "@babel/runtime": 7.22.5 "@braintree/sanitize-url": 6.0.2 - "@codemirror/autocomplete": 6.8.0 + "@codemirror/autocomplete": 6.8.1 "@codemirror/commands": 6.2.4 "@codemirror/language": 6.8.0 "@codemirror/legacy-modes": 6.3.2 "@codemirror/search": 6.5.0 "@codemirror/state": 6.2.1 - "@codemirror/view": 6.13.2 + "@codemirror/view": 6.14.0 "@egjs/hammerjs": 2.0.17 "@formatjs/intl-datetimeformat": 6.10.0 "@formatjs/intl-displaynames": 6.5.0 @@ -9517,7 +9491,7 @@ __metadata: "@lit-labs/context": 0.3.3 "@lit-labs/motion": 1.0.3 "@lit-labs/virtualizer": 2.0.3 - "@lrnwebcomponents/simple-tooltip": 7.0.2 + "@lrnwebcomponents/simple-tooltip": 7.0.5 "@material/chips": =14.0.0-canary.53b3cad2f.0 "@material/data-table": =14.0.0-canary.53b3cad2f.0 "@material/mwc-button": 0.27.0 @@ -9543,7 +9517,7 @@ __metadata: "@material/mwc-top-app-bar": 0.27.0 "@material/mwc-top-app-bar-fixed": 0.27.0 "@material/top-app-bar": =14.0.0-canary.53b3cad2f.0 - "@material/web": =1.0.0-pre.10 + "@material/web": =1.0.0-pre.11 "@mdi/js": 7.2.96 "@mdi/svg": 7.2.96 "@octokit/auth-oauth-device": 5.0.2 @@ -9583,8 +9557,8 @@ __metadata: "@types/sortablejs": 1.15.1 "@types/tar": 6.1.5 "@types/webspeechapi": 0.0.29 - "@typescript-eslint/eslint-plugin": 5.59.11 - "@typescript-eslint/parser": 5.59.11 + "@typescript-eslint/eslint-plugin": 5.60.0 + "@typescript-eslint/parser": 5.60.0 "@vaadin/combo-box": 24.1.1 "@vaadin/vaadin-themable-mixin": 24.1.1 "@vibrant/color": 3.2.1-alpha.1 @@ -9623,7 +9597,7 @@ __metadata: fancy-log: 2.0.0 fs-extra: 11.1.1 fuse.js: 6.6.2 - glob: 10.2.7 + glob: 10.3.0 google-timezones-json: 1.1.0 gulp: 4.0.2 gulp-flatmap: 1.0.2 @@ -9632,7 +9606,7 @@ __metadata: gulp-rename: 2.0.0 gulp-zopfli-green: 6.0.1 hls.js: 1.4.6 - home-assistant-js-websocket: 8.0.1 + home-assistant-js-websocket: 8.1.0 html-minifier-terser: 7.2.0 husky: 8.0.3 idb-keyval: 6.2.1 @@ -9669,7 +9643,7 @@ __metadata: rollup-plugin-visualizer: 5.9.2 rrule: 2.7.2 serve-handler: 6.1.5 - sinon: 15.1.2 + sinon: 15.2.0 sortablejs: 1.15.0 source-map-url: 0.4.1 superstruct: 1.0.3 @@ -9688,7 +9662,7 @@ __metadata: vis-network: 9.1.6 vue: 2.7.14 vue2-daterange-picker: 0.6.8 - webpack: 5.87.0 + webpack: 5.88.0 webpack-cli: 5.1.4 webpack-dev-server: 4.15.1 webpack-manifest-plugin: 5.0.0 @@ -9836,10 +9810,10 @@ __metadata: languageName: node linkType: hard -"home-assistant-js-websocket@npm:8.0.1": - version: 8.0.1 - resolution: "home-assistant-js-websocket@npm:8.0.1" - checksum: e8b2204d58b2b1fbdf26ca1ad196fcc02ec5d18e6d867179f27246a9f2d4fe5f91de9dbbe7b82806c19dcb0af0e2b77fb48d393668b5c8c0844c201a16832023 +"home-assistant-js-websocket@npm:8.1.0": + version: 8.1.0 + resolution: "home-assistant-js-websocket@npm:8.1.0" + checksum: 74f9afc5affe491921d7fd9e743c1a6841cb0409c2c5454fff266d14ea893f5be476cb85f584ff1836722de77cfe2777d4133890f00fc1983ad448eba50f6240 languageName: node linkType: hard @@ -11429,7 +11403,7 @@ __metadata: languageName: node linkType: hard -"lit@npm:2.7.5, lit@npm:^2.0.0, lit@npm:^2.0.0-rc.2, lit@npm:^2.2.1, lit@npm:^2.7.0, lit@npm:^2.7.4": +"lit@npm:2.7.5, lit@npm:^2.0.0, lit@npm:^2.0.0-rc.2, lit@npm:^2.2.1, lit@npm:^2.7.0, lit@npm:^2.7.4, lit@npm:^2.7.5": version: 2.7.5 resolution: "lit@npm:2.7.5" dependencies: @@ -14264,17 +14238,17 @@ __metadata: languageName: node linkType: hard -"sinon@npm:15.1.2": - version: 15.1.2 - resolution: "sinon@npm:15.1.2" +"sinon@npm:15.2.0": + version: 15.2.0 + resolution: "sinon@npm:15.2.0" dependencies: "@sinonjs/commons": ^3.0.0 - "@sinonjs/fake-timers": ^10.1.0 + "@sinonjs/fake-timers": ^10.3.0 "@sinonjs/samsam": ^8.0.0 diff: ^5.1.0 nise: ^5.1.4 supports-color: ^7.2.0 - checksum: 4484235fe4e84cc142cb8810a3a80f5b016178d739c1e2cc0b5eb1f0e05e05dd2dffaf53878826ac40743791acabb7265297affced727b0480c8bfe9abead8e8 + checksum: 1641b9af8a73ba57c73c9b6fd955a2d062a5d78cce719887869eca45faf33b0fd20cabfeffdfd856bb35bfbd3d49debb2d954ff6ae5e9825a3da5ff4f604ab6c languageName: node linkType: hard @@ -16161,9 +16135,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.87.0": - version: 5.87.0 - resolution: "webpack@npm:5.87.0" +"webpack@npm:5.88.0": + version: 5.88.0 + resolution: "webpack@npm:5.88.0" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.0 @@ -16194,7 +16168,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: b7d0e390f9d30627e303d54b17cb87b62f49ecffe2d35481f830679904993bae208e23748ffe0e6091b6dd4810562b2f2e88bb0f23b96515d74fb1e3c2898210 + checksum: 9fd1568b34ec2e99ba97c8509a15ab2576ec80c396e7015551ec814b24cfc11de173acba3e114dafe95f1a6d460781b09d6201e6a1fb15110e1d01a09f61a283 languageName: node linkType: hard