diff --git a/ui/app/README.md b/ui/app/README.md index f8a36354b..774b731bd 100644 --- a/ui/app/README.md +++ b/ui/app/README.md @@ -1 +1,22 @@ -Custom UI apps can be added here use the manager UI app as a template. +# Custom UI apps + +In this folder, you can add custom (web) applications that will be shipped along with OpenRemote. +For example, special mobile apps for end users, or apps for less-technical consumers are widespread. + +Developing these custom apps is pretty straightforward, thanks to the built-in packages we provide. +These make communicating with OpenRemote easier, and allows developers to quickly set up an user interface. + +## Example apps + +We provided several example apps to get familiar with the architecture. +All apps can be ran using `npm run serve`, and visited at http://localhost:9000/custom/. +Here's a list of the apps, and what they do; + +### /custom +This is an example web application built with [Lit Web Components](https://lit.dev) and [Webpack](https://webpack.js.org). +Apps in our main OpenRemote [repository](https://github.com/openremote/openremote) are built with these technologies as well. +It can be used as a template to add your own pages on top of it. + +### /custom-react +This is an example web application built with [React 19](https://react.dev) and [RSPack](https://rspack.rs). +*(more information soon)* \ No newline at end of file diff --git a/ui/app/custom-react/.gitignore b/ui/app/custom-react/.gitignore new file mode 100644 index 000000000..38d7344c8 --- /dev/null +++ b/ui/app/custom-react/.gitignore @@ -0,0 +1,13 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea diff --git a/ui/app/custom-react/build.gradle b/ui/app/custom-react/build.gradle new file mode 100644 index 000000000..797533f42 --- /dev/null +++ b/ui/app/custom-react/build.gradle @@ -0,0 +1,12 @@ +buildDir = "dist" + +tasks.register('clean') { + dependsOn npmClean +} + +tasks.register('installDist', Copy) { + dependsOn npmBuild + mustRunAfter(resolveTask(":manager:installDist")) + from project.buildDir + into "${project(':deployment').buildDir}/image/manager/app/${projectDir.name}" +} diff --git a/ui/app/custom-react/index.html b/ui/app/custom-react/index.html new file mode 100644 index 000000000..569dd752f --- /dev/null +++ b/ui/app/custom-react/index.html @@ -0,0 +1,12 @@ + + + + + + + Custom app example using React + + +
+ + diff --git a/ui/app/custom-react/package.json b/ui/app/custom-react/package.json new file mode 100644 index 000000000..b0a9cda80 --- /dev/null +++ b/ui/app/custom-react/package.json @@ -0,0 +1,30 @@ +{ + "name": "@openremote/custom-react", + "version": "1.0.0", + "description": "OpenRemote Custom App using React", + "author": "OpenRemote", + "license": "AGPL-3.0-or-later", + "private": true, + "scripts": { + "clean": "npx tsc -b --clean && npx shx rm -rf dist", + "build": "npx cross-env NODE_ENV=production NODE_OPTIONS=--max_old_space_size=4096 rspack build", + "serve": "npx cross-env NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 rspack serve" + }, + "dependencies": { + "@openremote/core": "^1.9.0", + "@openremote/model": "^1.9.0", + "@openremote/or-mwc-components": "^1.9.0", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@rspack/cli": "^1.5.8", + "@rspack/core": "^1.5.8", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "cross-env": "^10.1.0", + "react-refresh": "^0.18.0", + "ts-node": "^10.9.2", + "typescript": "^5.9.3" + } +} diff --git a/ui/app/custom-react/rspack.config.ts b/ui/app/custom-react/rspack.config.ts new file mode 100644 index 000000000..596b7ec43 --- /dev/null +++ b/ui/app/custom-react/rspack.config.ts @@ -0,0 +1,74 @@ +import { defineConfig } from "@rspack/cli"; +import { rspack } from "@rspack/core"; + +const isDev = process.env.NODE_ENV === "development"; + +// Target browsers, see: https://github.com/browserslist/browserslist +const targets = ["chrome >= 87", "edge >= 88", "firefox >= 78", "safari >= 14"]; + +export default defineConfig({ + context: __dirname, + devServer: { + host: "0.0.0.0", + port: 9000, + open: false + }, + entry: { + main: "./src/main.tsx" + }, + resolve: { + extensions: ["...", ".ts", ".tsx", ".jsx"] + }, + module: { + rules: [ + { + test: /\.svg$/, + type: "asset" + }, + { + test: /(maplibre|mapbox|@material|gridstack|@mdi).*\.css$/, //output css as strings + type: "asset/source" + }, + { + test: /\.tsx$/, + type: "javascript/auto", + use: [ + { + loader: "builtin:swc-loader", + options: { + jsc: { + parser: { + syntax: "typescript", + tsx: true + } + } + } + } + ] + } + ] + }, + plugins: [ + new rspack.HtmlRspackPlugin({ + template: "./index.html" + }), + // Define MANAGER_URL as a global variable + new rspack.DefinePlugin({ + MANAGER_URL: JSON.stringify(process.env.MANAGER_URL ?? (isDev ? "http://localhost:8080" : undefined)) + }) + ], + optimization: { + minimizer: [ + new rspack.SwcJsMinimizerRspackPlugin(), + new rspack.LightningCssMinimizerRspackPlugin({ + minimizerOptions: { targets } + }) + ] + }, + output: { + publicPath: isDev ? "/custom-react/" : "/", + }, + experiments: { + css: true + } +}); diff --git a/ui/app/custom-react/src/App.css b/ui/app/custom-react/src/App.css new file mode 100644 index 000000000..6f883249c --- /dev/null +++ b/ui/app/custom-react/src/App.css @@ -0,0 +1,10 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 12em; +} diff --git a/ui/app/custom-react/src/App.tsx b/ui/app/custom-react/src/App.tsx new file mode 100644 index 000000000..e97bd4968 --- /dev/null +++ b/ui/app/custom-react/src/App.tsx @@ -0,0 +1,23 @@ +import React from "react"; +import openremoteLogo from "./assets/openremote.svg"; +import {InputType} from "@openremote/or-mwc-components/or-mwc-input"; +import type {} from "@openremote/or-mwc-components/jsx"; +import "./App.css"; + +function App() { + return ( +
+ +

"A React template for your custom app."

+
+ + + +
+
+ ); +} + +export default App; \ No newline at end of file diff --git a/ui/app/custom-react/src/assets/openremote.svg b/ui/app/custom-react/src/assets/openremote.svg new file mode 100644 index 000000000..8bed2c961 --- /dev/null +++ b/ui/app/custom-react/src/assets/openremote.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ui/app/custom-react/src/index.css b/ui/app/custom-react/src/index.css new file mode 100644 index 000000000..c5795d5bb --- /dev/null +++ b/ui/app/custom-react/src/index.css @@ -0,0 +1,31 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } +} diff --git a/ui/app/custom-react/src/main.tsx b/ui/app/custom-react/src/main.tsx new file mode 100644 index 000000000..c905efc99 --- /dev/null +++ b/ui/app/custom-react/src/main.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.tsx"; +import {manager} from "@openremote/core"; +import {ManagerConfig} from "@openremote/model"; +import "./index.css"; + +declare const MANAGER_URL: string | undefined; + +/** + * Define the Manager configuration to talk with OpenRemote. + * For example, defining the realm and URL to communicate with. (these will be consumed with HTTP API calls for example) + * We also enable autoLogin to prompt a Keycloak login before the app appears. + */ +const managerConfig: ManagerConfig = { + realm: "master", + managerUrl: MANAGER_URL ?? "", + autoLogin: true +}; + +/** + * Initialize the Manager connection. + * Afterward, we can start rendering the React DOM UI. + */ +manager.init(managerConfig).then(() => { + + /** + * Render your React application to the DOM. + */ + ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( + + + + ); +}); diff --git a/ui/app/custom-react/src/react-env.d.ts b/ui/app/custom-react/src/react-env.d.ts new file mode 100644 index 000000000..49c347bae --- /dev/null +++ b/ui/app/custom-react/src/react-env.d.ts @@ -0,0 +1,213 @@ +// CSS modules +type CSSModuleClasses = { readonly [key: string]: string }; + +declare module "*.module.css" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.scss" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.sass" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.less" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.styl" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.stylus" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.pcss" { + const classes: CSSModuleClasses; + export default classes; +} +declare module "*.module.sss" { + const classes: CSSModuleClasses; + export default classes; +} + +// CSS +declare module "*.css" { + /** + * @deprecated Use `import style from './style.css?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.scss" { + /** + * @deprecated Use `import style from './style.scss?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.sass" { + /** + * @deprecated Use `import style from './style.sass?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.less" { + /** + * @deprecated Use `import style from './style.less?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.styl" { + /** + * @deprecated Use `import style from './style.styl?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.stylus" { + /** + * @deprecated Use `import style from './style.stylus?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.pcss" { + /** + * @deprecated Use `import style from './style.pcss?inline'` instead. + */ + const css: string; + export default css; +} +declare module "*.sss" { + /** + * @deprecated Use `import style from './style.sss?inline'` instead. + */ + const css: string; + export default css; +} + +// images +declare module "*.png" { + const src: string; + export default src; +} +declare module "*.jpg" { + const src: string; + export default src; +} +declare module "*.jpeg" { + const src: string; + export default src; +} +declare module "*.jfif" { + const src: string; + export default src; +} +declare module "*.pjpeg" { + const src: string; + export default src; +} +declare module "*.pjp" { + const src: string; + export default src; +} +declare module "*.gif" { + const src: string; + export default src; +} +declare module "*.svg" { + const ReactComponent: React.FC>; + const content: string; + + export { ReactComponent }; + export default content; +} +declare module "*.ico" { + const src: string; + export default src; +} +declare module "*.webp" { + const src: string; + export default src; +} +declare module "*.avif" { + const src: string; + export default src; +} + +// media +declare module "*.mp4" { + const src: string; + export default src; +} +declare module "*.webm" { + const src: string; + export default src; +} +declare module "*.ogg" { + const src: string; + export default src; +} +declare module "*.mp3" { + const src: string; + export default src; +} +declare module "*.wav" { + const src: string; + export default src; +} +declare module "*.flac" { + const src: string; + export default src; +} +declare module "*.aac" { + const src: string; + export default src; +} + +declare module "*.opus" { + const src: string; + export default src; +} + +// fonts +declare module "*.woff" { + const src: string; + export default src; +} +declare module "*.woff2" { + const src: string; + export default src; +} +declare module "*.eot" { + const src: string; + export default src; +} +declare module "*.ttf" { + const src: string; + export default src; +} +declare module "*.otf" { + const src: string; + export default src; +} + +// other +declare module "*.webmanifest" { + const src: string; + export default src; +} +declare module "*.pdf" { + const src: string; + export default src; +} +declare module "*.txt" { + const src: string; + export default src; +} diff --git a/ui/app/custom-react/tsconfig.json b/ui/app/custom-react/tsconfig.json new file mode 100644 index 000000000..3c7419370 --- /dev/null +++ b/ui/app/custom-react/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["DOM", "ES2020"], + "module": "ESNext", + "jsx": "react-jsx", + "strict": true, + "noEmit": true, + "skipLibCheck": true, + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "useDefineForClassFields": true, + "allowImportingTsExtensions": true + }, + "include": ["src"], + "ts-node": { + "compilerOptions": { + "module": "CommonJS" + } + } +} diff --git a/yarn.lock b/yarn.lock index 323ed0a6d..846dacca4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1348,6 +1348,15 @@ __metadata: languageName: node linkType: hard +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10/b6e38a1712fab242c86a241c229cf562195aad985d0564bd352ac404be583029e89e93028ffd2c251d2c407ecac5fb0cbdca94a2d5c10f29ac806ede0508b3ff + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:0.5.7, @discoveryjs/json-ext@npm:^0.5.0, @discoveryjs/json-ext@npm:^0.5.7": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -1365,6 +1374,16 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.5.0": + version: 1.6.0 + resolution: "@emnapi/core@npm:1.6.0" + dependencies: + "@emnapi/wasi-threads": "npm:1.1.0" + tslib: "npm:^2.4.0" + checksum: 10/72e99690772a1eca8e6b2bcf1819ddc6867151b15fc650ca39ca03d43d9efaea46d731a2bf2659f5b31a1a8823367f5203fcb873bfacbcbe52f92a5574c7995a + languageName: node + linkType: hard + "@emnapi/runtime@npm:^1.4.5": version: 1.4.5 resolution: "@emnapi/runtime@npm:1.4.5" @@ -1374,6 +1393,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/runtime@npm:^1.5.0": + version: 1.6.0 + resolution: "@emnapi/runtime@npm:1.6.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/88f685ecb23df070a61447bf61b12a113b7edecc248969e1dc18e4637ee8519389cde8b95c22b2144de41490b42aedc6a791fe1b00940a02fdeaadac1352bbf6 + languageName: node + linkType: hard + "@emnapi/wasi-threads@npm:1.0.4": version: 1.0.4 resolution: "@emnapi/wasi-threads@npm:1.0.4" @@ -1383,6 +1411,22 @@ __metadata: languageName: node linkType: hard +"@emnapi/wasi-threads@npm:1.1.0": + version: 1.1.0 + resolution: "@emnapi/wasi-threads@npm:1.1.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/0d557e75262d2f4c95cb2a456ba0785ef61f919ce488c1d76e5e3acfd26e00c753ef928cd80068363e0c166ba8cc0141305daf0f81aad5afcd421f38f11e0f4e + languageName: node + linkType: hard + +"@epic-web/invariant@npm:^1.0.0": + version: 1.0.0 + resolution: "@epic-web/invariant@npm:1.0.0" + checksum: 10/28b36a7447f60b84f9d6a23571480042170ef4239a577577ad8447f64a2e4f1a4e57e6fe1b592e61534c5ab53ff67776130e6c88a68cbd997eb6e9c9759a5934 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -1509,7 +1553,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.1.0": +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" checksum: 10/97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d @@ -1540,6 +1584,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10/83deafb8e7a5ca98993c2c6eeaa93c270f6f647a4c0dc00deb38c9cf9b2d3b7bf15e8839540155247ef034a052c0ec4466f980bf0c9e2ab63b97d16c0cedd3ff + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -2373,6 +2427,13 @@ __metadata: languageName: node linkType: hard +"@module-federation/error-codes@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/error-codes@npm:0.18.0" + checksum: 10/ccd00f6b2504ec2e685bda6d175ed86df27e21994b36869140a18059595716e9ea7db5d0b516a095891ec9e6c90e702f42a366743df3652bf91ff3bb4f895991 + languageName: node + linkType: hard + "@module-federation/runtime-core@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/runtime-core@npm:0.17.1" @@ -2383,6 +2444,16 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime-core@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/runtime-core@npm:0.18.0" + dependencies: + "@module-federation/error-codes": "npm:0.18.0" + "@module-federation/sdk": "npm:0.18.0" + checksum: 10/82af795408f2e92bea9c801a2057f1a6ed85eaf131195d5deaa4ef9a6a88db9e2cb851b4416e6e43a841459986b5ebb84e98b4625fb9bbd98cee11929f1ede6b + languageName: node + linkType: hard + "@module-federation/runtime-tools@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/runtime-tools@npm:0.17.1" @@ -2393,6 +2464,16 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime-tools@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/runtime-tools@npm:0.18.0" + dependencies: + "@module-federation/runtime": "npm:0.18.0" + "@module-federation/webpack-bundler-runtime": "npm:0.18.0" + checksum: 10/c6b1483899865e4c73be0ae77e6e1a5f517798f7ab3b8c6df2bb7ed22463e7a471f68d5f9528b2aff5b45e2db67596805028206f3956aafec5a36dcefb94afd2 + languageName: node + linkType: hard + "@module-federation/runtime@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/runtime@npm:0.17.1" @@ -2404,6 +2485,17 @@ __metadata: languageName: node linkType: hard +"@module-federation/runtime@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/runtime@npm:0.18.0" + dependencies: + "@module-federation/error-codes": "npm:0.18.0" + "@module-federation/runtime-core": "npm:0.18.0" + "@module-federation/sdk": "npm:0.18.0" + checksum: 10/6164597782b21840e3b8f159000338d8e20a817a60909015c11402e9e6442d60d9c3b4b6f25d92d7261011ef1fc0e8caafbb91f25c29b372f28764cbea8ef9eb + languageName: node + linkType: hard + "@module-federation/sdk@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/sdk@npm:0.17.1" @@ -2411,6 +2503,13 @@ __metadata: languageName: node linkType: hard +"@module-federation/sdk@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/sdk@npm:0.18.0" + checksum: 10/f397dc53c705ad1f1e19530a8ff79116bb5aeeef92a79b3acaaa6140ae4e5784b42e81d1445eabf536c007c9383857f6764506ed725a6352464fe1ce581af89a + languageName: node + linkType: hard + "@module-federation/webpack-bundler-runtime@npm:0.17.1": version: 0.17.1 resolution: "@module-federation/webpack-bundler-runtime@npm:0.17.1" @@ -2421,6 +2520,16 @@ __metadata: languageName: node linkType: hard +"@module-federation/webpack-bundler-runtime@npm:0.18.0": + version: 0.18.0 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.18.0" + dependencies: + "@module-federation/runtime": "npm:0.18.0" + "@module-federation/sdk": "npm:0.18.0" + checksum: 10/c80f26e02d497948a0864283bedf13118d5c188ac8165e71edce5da72776091db6da2dc5da5d47a53fbb6914bfbff1ddfce16a6b9c18485a9a41a04bc4060e34 + languageName: node + linkType: hard + "@napi-rs/wasm-runtime@npm:^1.0.1": version: 1.0.3 resolution: "@napi-rs/wasm-runtime@npm:1.0.3" @@ -2432,6 +2541,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^1.0.5": + version: 1.0.7 + resolution: "@napi-rs/wasm-runtime@npm:1.0.7" + dependencies: + "@emnapi/core": "npm:^1.5.0" + "@emnapi/runtime": "npm:^1.5.0" + "@tybys/wasm-util": "npm:^0.10.1" + checksum: 10/6bc32d32d486d07b83220a9b7b2b715e39acacbacef0011ebca05c00b41d80a0535123da10fea7a7d6d7e206712bb50dc50ac3cf88b770754d44378570fb5c05 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -2481,7 +2601,7 @@ __metadata: languageName: node linkType: hard -"@openremote/core@npm:1.9.0": +"@openremote/core@npm:1.9.0, @openremote/core@npm:^1.9.0": version: 1.9.0 resolution: "@openremote/core@npm:1.9.0" dependencies: @@ -2498,6 +2618,26 @@ __metadata: languageName: node linkType: hard +"@openremote/custom-react@workspace:ui/app/custom-react": + version: 0.0.0-use.local + resolution: "@openremote/custom-react@workspace:ui/app/custom-react" + dependencies: + "@openremote/core": "npm:^1.9.0" + "@openremote/model": "npm:^1.9.0" + "@openremote/or-mwc-components": "npm:^1.9.0" + "@rspack/cli": "npm:^1.5.8" + "@rspack/core": "npm:^1.5.8" + "@types/react": "npm:^19.2.2" + "@types/react-dom": "npm:^19.2.2" + cross-env: "npm:^10.1.0" + react: "npm:^19.2.0" + react-dom: "npm:^19.2.0" + react-refresh: "npm:^0.18.0" + ts-node: "npm:^10.9.2" + typescript: "npm:^5.9.3" + languageName: unknown + linkType: soft + "@openremote/custom@workspace:ui/app/custom": version: 0.0.0-use.local resolution: "@openremote/custom@workspace:ui/app/custom" @@ -2556,7 +2696,7 @@ __metadata: languageName: node linkType: hard -"@openremote/model@npm:1.9.0": +"@openremote/model@npm:1.9.0, @openremote/model@npm:^1.9.0": version: 1.9.0 resolution: "@openremote/model@npm:1.9.0" checksum: 10/77bb0b5649137ecd202aae1fe25bb9bcb660df5649e5544a53dcc7c74c8c3c26d63611212e47eaee3dc19fcdf6137928e7b3a21d32af87f11972cdc9518a38fe @@ -2820,7 +2960,7 @@ __metadata: languageName: node linkType: hard -"@openremote/or-mwc-components@npm:1.9.0": +"@openremote/or-mwc-components@npm:1.9.0, @openremote/or-mwc-components@npm:^1.9.0": version: 1.9.0 resolution: "@openremote/or-mwc-components@npm:1.9.0" dependencies: @@ -3037,6 +3177,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-darwin-arm64@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-darwin-arm64@npm:1.5.8" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rspack/binding-darwin-x64@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-darwin-x64@npm:1.4.11" @@ -3044,6 +3191,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-darwin-x64@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-darwin-x64@npm:1.5.8" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rspack/binding-linux-arm64-gnu@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-arm64-gnu@npm:1.4.11" @@ -3051,6 +3205,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-arm64-gnu@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.5.8" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rspack/binding-linux-arm64-musl@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-arm64-musl@npm:1.4.11" @@ -3058,6 +3219,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-arm64-musl@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.5.8" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rspack/binding-linux-x64-gnu@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-x64-gnu@npm:1.4.11" @@ -3065,6 +3233,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-x64-gnu@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.5.8" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rspack/binding-linux-x64-musl@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-linux-x64-musl@npm:1.4.11" @@ -3072,6 +3247,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-linux-x64-musl@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-linux-x64-musl@npm:1.5.8" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rspack/binding-wasm32-wasi@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-wasm32-wasi@npm:1.4.11" @@ -3081,6 +3263,15 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-wasm32-wasi@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-wasm32-wasi@npm:1.5.8" + dependencies: + "@napi-rs/wasm-runtime": "npm:^1.0.5" + conditions: cpu=wasm32 + languageName: node + linkType: hard + "@rspack/binding-win32-arm64-msvc@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-win32-arm64-msvc@npm:1.4.11" @@ -3088,6 +3279,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-win32-arm64-msvc@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.5.8" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rspack/binding-win32-ia32-msvc@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-win32-ia32-msvc@npm:1.4.11" @@ -3095,6 +3293,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-win32-ia32-msvc@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.5.8" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rspack/binding-win32-x64-msvc@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding-win32-x64-msvc@npm:1.4.11" @@ -3102,6 +3307,13 @@ __metadata: languageName: node linkType: hard +"@rspack/binding-win32-x64-msvc@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.5.8" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rspack/binding@npm:1.4.11": version: 1.4.11 resolution: "@rspack/binding@npm:1.4.11" @@ -3141,6 +3353,64 @@ __metadata: languageName: node linkType: hard +"@rspack/binding@npm:1.5.8": + version: 1.5.8 + resolution: "@rspack/binding@npm:1.5.8" + dependencies: + "@rspack/binding-darwin-arm64": "npm:1.5.8" + "@rspack/binding-darwin-x64": "npm:1.5.8" + "@rspack/binding-linux-arm64-gnu": "npm:1.5.8" + "@rspack/binding-linux-arm64-musl": "npm:1.5.8" + "@rspack/binding-linux-x64-gnu": "npm:1.5.8" + "@rspack/binding-linux-x64-musl": "npm:1.5.8" + "@rspack/binding-wasm32-wasi": "npm:1.5.8" + "@rspack/binding-win32-arm64-msvc": "npm:1.5.8" + "@rspack/binding-win32-ia32-msvc": "npm:1.5.8" + "@rspack/binding-win32-x64-msvc": "npm:1.5.8" + dependenciesMeta: + "@rspack/binding-darwin-arm64": + optional: true + "@rspack/binding-darwin-x64": + optional: true + "@rspack/binding-linux-arm64-gnu": + optional: true + "@rspack/binding-linux-arm64-musl": + optional: true + "@rspack/binding-linux-x64-gnu": + optional: true + "@rspack/binding-linux-x64-musl": + optional: true + "@rspack/binding-wasm32-wasi": + optional: true + "@rspack/binding-win32-arm64-msvc": + optional: true + "@rspack/binding-win32-ia32-msvc": + optional: true + "@rspack/binding-win32-x64-msvc": + optional: true + checksum: 10/8185f3d77f71f210f182799fd41edead264aa8819c354aa13744635869734722b056a958fd94f770c05cab2a501cb8f0c217626098f9b4ec82afed3c6c3b53f4 + languageName: node + linkType: hard + +"@rspack/cli@npm:^1.5.8": + version: 1.5.8 + resolution: "@rspack/cli@npm:1.5.8" + dependencies: + "@discoveryjs/json-ext": "npm:^0.5.7" + "@rspack/dev-server": "npm:~1.1.4" + colorette: "npm:2.0.20" + exit-hook: "npm:^4.0.0" + pirates: "npm:^4.0.7" + webpack-bundle-analyzer: "npm:4.10.2" + yargs: "npm:17.7.2" + peerDependencies: + "@rspack/core": ^1.0.0-alpha || ^1.x + bin: + rspack: bin/rspack.js + checksum: 10/13eb3d0c2d6f4b49777b5c1e1b07c37bcf72872f38d791e284c1fcd564ca43ab6f6aa2f481c4d11ea5e3a0ce3266df17fcecdcb4dd5bf73b5a8c12f2c0f06a15 + languageName: node + linkType: hard + "@rspack/cli@npm:~1.4.11": version: 1.4.11 resolution: "@rspack/cli@npm:1.4.11" @@ -3161,6 +3431,22 @@ __metadata: languageName: node linkType: hard +"@rspack/core@npm:^1.5.8": + version: 1.5.8 + resolution: "@rspack/core@npm:1.5.8" + dependencies: + "@module-federation/runtime-tools": "npm:0.18.0" + "@rspack/binding": "npm:1.5.8" + "@rspack/lite-tapable": "npm:1.0.1" + peerDependencies: + "@swc/helpers": ">=0.5.1" + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10/269e691dbb83430179b89d9f10e115c5fb97cf54eb13c49ae6f6070468f3fcbee17ebe0968d8ab82dfdb7b5474e339f3fd9c945d5d20eb89333b53d8c1ad32cc + languageName: node + linkType: hard + "@rspack/core@npm:~1.4.11": version: 1.4.11 resolution: "@rspack/core@npm:1.4.11" @@ -3177,7 +3463,7 @@ __metadata: languageName: node linkType: hard -"@rspack/dev-server@npm:~1.1.3": +"@rspack/dev-server@npm:~1.1.3, @rspack/dev-server@npm:~1.1.4": version: 1.1.4 resolution: "@rspack/dev-server@npm:1.1.4" dependencies: @@ -3199,6 +3485,34 @@ __metadata: languageName: node linkType: hard +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10/51fe47d55fe1b80ec35e6e5ed30a13665fd3a531945350aa74a14a1e82875fb60b350c2f2a5e72a64831b1b6bc02acb6760c30b3738b54954ec2dea82db7a267 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10/5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10/19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10/202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.10.0": version: 0.10.0 resolution: "@tybys/wasm-util@npm:0.10.0" @@ -3208,6 +3522,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.10.1": + version: 0.10.1 + resolution: "@tybys/wasm-util@npm:0.10.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/7fe0d239397aebb002ac4855d30c197c06a05ea8df8511350a3a5b1abeefe26167c60eda8a5508337571161e4c4b53d7c1342296123f9607af8705369de9fa7f + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" @@ -3486,6 +3809,24 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^19.2.2": + version: 19.2.2 + resolution: "@types/react-dom@npm:19.2.2" + peerDependencies: + "@types/react": ^19.2.0 + checksum: 10/73d5671e57ab73cb3f2acd7992faee8f90d5b4d155b972e76e91fa13e5871ebb5e224960b05039d57ea502cb3370746eb98beda5fa44e9712b4aee52653c237a + languageName: node + linkType: hard + +"@types/react@npm:^19.2.2": + version: 19.2.2 + resolution: "@types/react@npm:19.2.2" + dependencies: + csstype: "npm:^3.0.2" + checksum: 10/d6adf8fd4bb23a7e04da5700d96b15dc0f59653727a9c6e940c151d7232fa1dbbab98417d5ac830dcfb6cba3f206efbd4cd83647e6f9a688d7363a90e607f6bf + languageName: node + linkType: hard + "@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" @@ -3987,7 +4328,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.0": +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.1.1": version: 8.3.4 resolution: "acorn-walk@npm:8.3.4" dependencies: @@ -4005,7 +4346,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.11.0": +"acorn@npm:^8.0.4, acorn@npm:^8.11.0, acorn@npm:^8.4.1": version: 8.15.0 resolution: "acorn@npm:8.15.0" bin: @@ -4158,6 +4499,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10/969b491082f20cad166649fa4d2073ea9e974a4e5ac36247ca23d2e5a8b3cb12d60e9ff70a8acfe26d76566c71fd351ee5e6a9a6595157eb36f92b1fd64e1599 + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -4914,6 +5262,26 @@ __metadata: languageName: node linkType: hard +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10/a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-env@npm:^10.1.0": + version: 10.1.0 + resolution: "cross-env@npm:10.1.0" + dependencies: + "@epic-web/invariant": "npm:^1.0.0" + cross-spawn: "npm:^7.0.6" + bin: + cross-env: dist/bin/cross-env.js + cross-env-shell: dist/bin/cross-env-shell.js + checksum: 10/0e5d8bdefbbcd000460b69755e0eeb22953510abac8375e4f8b638ff7c45406141acfd57b8a4c1d1cf0b5ea42f33451b302062fb9b34408753b4d465e901b845 + languageName: node + linkType: hard + "cross-env@npm:^7.0.3": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -4946,6 +5314,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10/0d52657d7ae36eb130999dffff1168ec348687b48dd38e2ff59992ed916c88d328cf1d07ff4a4a10bc78de5e1c23f04b306d569e42f7a2293915c081e4dfee86 + languageName: node + linkType: hard + "css-loader@npm:^6.5.1": version: 6.11.0 resolution: "css-loader@npm:6.11.0" @@ -4999,6 +5378,13 @@ __metadata: languageName: node linkType: hard +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10/f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade + languageName: node + linkType: hard + "data-view-buffer@npm:^1.0.1": version: 1.0.1 resolution: "data-view-buffer@npm:1.0.1" @@ -5173,6 +5559,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10/ec09ec2101934ca5966355a229d77afcad5911c92e2a77413efda5455636c4cf2ce84057e2d7715227a2eeeda04255b849bd3ae3a4dd22eb22e86e76456df069 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -7760,6 +8153,13 @@ __metadata: languageName: node linkType: hard +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10/b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + "make-fetch-happen@npm:^13.0.0": version: 13.0.1 resolution: "make-fetch-happen@npm:13.0.1" @@ -8680,6 +9080,13 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.7": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96 + languageName: node + linkType: hard + "pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -8946,6 +9353,31 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^19.2.0": + version: 19.2.0 + resolution: "react-dom@npm:19.2.0" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.0 + checksum: 10/3dbba071b9b1e7a19eae55f05c100f6b44f88c0aee72397d719ae338248ca66ed5028e6964c1c14870cc3e1abcecc91b22baba6dc2072f819dea81a9fd72f2fd + languageName: node + linkType: hard + +"react-refresh@npm:^0.18.0": + version: 0.18.0 + resolution: "react-refresh@npm:0.18.0" + checksum: 10/504c331c19776bf8320c23bad7f80b3a28de03301ed7523b0dd21d3f02bf2b53bbdd5aa52469b187bc90f358614b2ba303c088a0765c95f4f0a68c43a7d67b1d + languageName: node + linkType: hard + +"react@npm:^19.2.0": + version: 19.2.0 + resolution: "react@npm:19.2.0" + checksum: 10/e13bcdb8e994c3cfa922743cb75ca8deb60531bf02f584d2d8dab940a8132ce8a2e6ef16f8ed7f372b4072e7a7eeff589b2812dabbedfa73e6e46201dac8a9d0 + languageName: node + linkType: hard + "readable-stream@npm:^2.0.1": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -9370,6 +9802,13 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10/eab3c3a8373195173e59c147224fc30dabe6dd453f248f5e610e8458512a5a2ee3a06465dc400ebfe6d35c9f5b7f3bb6b2e41c88c86fd177c25a73e7286a1e06 + languageName: node + linkType: hard + "schema-utils@npm:2.7.0": version: 2.7.0 resolution: "schema-utils@npm:2.7.0" @@ -10271,6 +10710,44 @@ __metadata: languageName: node linkType: hard +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" @@ -10410,6 +10887,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/c089d9d3da2729fd4ac517f9b0e0485914c4b3c26f80dc0cffcb5de1719a17951e92425d55db59515c1a7ddab65808466debb864d0d56dcf43f27007d0709594 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A>=4.5.2#optional!builtin": version: 5.4.5 resolution: "typescript@patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c" @@ -10420,6 +10907,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/696e1b017bc2635f4e0c94eb4435357701008e2f272f553d06e35b494b8ddc60aa221145e286c28ace0c89ee32827a28c2040e3a69bdc108b1a5dc8fb40b72e3 + languageName: node + linkType: hard + "typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": version: 1.2.0 resolution: "typewise-core@npm:1.2.0" @@ -10590,6 +11087,13 @@ __metadata: languageName: node linkType: hard +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10/88d3423a52b6aaf1836be779cab12f7016d47ad8430dffba6edf766695e6d90ad4adaa3d8eeb512cc05924f3e246c4a4ca51e089dccf4402caa536b5e5be8961 + languageName: node + linkType: hard + "vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -11111,6 +11615,13 @@ __metadata: languageName: node linkType: hard +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10/2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0"